Commit 0eb52769 authored by zhanglw's avatar zhanglw

代码迁移备份

parent 8c7e75cb
Pipeline #333 failed with stages
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
**/*.log
tests/**/coverage/
tests/e2e/reports
selenium-debug.log
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.local
package-lock.json
yarn.lock
vv
\ No newline at end of file
# donkey-mou
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}
{
"name": "donkey-mou",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build"
},
"dependencies": {
"@riophae/vue-treeselect": "^0.4.0",
"axios": "^0.21.1",
"core-js": "^3.12.0",
"echarts": "^5.1.2",
"element-ui": "^2.9.2",
"ezuikit-js": "0.0.7",
"hls.js": "^1.0.12",
"jquery": "^3.6.0",
"js-cookie": "3.0.0",
"jsencrypt": "^3.0.0-rc.1",
"json-server": "^0.16.3",
"maptalks": "^1.0.0-rc.17",
"mars3d": "^3.1.3",
"moment": "^2.29.1",
"qs": "^6.10.1",
"recorder-core": "*",
"simple-keyboard": "^3.4.100",
"underscore": "^1.13.1",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"vuex": "^3.4.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"node-sass": "^4.12.0",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
"vue-template-compiler": "^2.6.11"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
{
"map3d": {
"scene": {
"center": {"lat":37.4890,"lng":122.04700,"alt":1000,"heading":360,"pitch":-90},
"scene3DOnly": false,
"shadows": false,
"removeDblClick": true,
"sceneMode": 2,
"showSun": false,
"showMoon": false,
"showSkyBox": false,
"showSkyAtmosphere": false,
"fog": false,
"fxaa": false,
"globe": {
"depthTestAgainstTerrain": false,
"baseColor": "#546a53",
"showGroundAtmosphere": true,
"enableLighting": false
},
"cameraController": {
"zoomFactor": 3.0,
"minimumZoomDistance": 5,
"maximumZoomDistance": 50000000,
"enableRotate": true,
"enableTranslate": true,
"enableTilt": true,
"enableZoom": true,
"enableCollisionDetection": true,
"minimumCollisionTerrainHeight": 15000
}
},
"control": {
"homeButton": true,
"baseLayerPicker": true,
"sceneModePicker": false,
"vrButton": false,
"fullscreenButton": true,
"navigationHelpButton": true,
"animation": false,
"timeline": false,
"infoBox": false,
"geocoder": false,
"geocoderConfig": {
"key": [
"ae29a37307840c7ae4a785ac905927e0"
]
},
"selectionIndicator": false,
"defaultContextMenu": true,
"mouseDownView": true,
"compass": {
"bottom": "240px",
"right": "2px"
},
"distanceLegend": {
"left": "100px",
"bottom": "0px"
},
"locationBar": {
"fps": true,
"template": "<div>经度:{lng}</div> <div>纬度:{lat}</div><div>海拔:{alt}米</div> <div>层级:{level}</div><div>方向:{heading}度</div> <div>俯仰角:{pitch}度</div><div>视高:{cameraHeight}米</div>"
}
},
"terrain": {
"url": "//data.mars3d.cn/terrain",
"show": false
},
"basemaps": [
{
"id": 10,
"name": "地图底图",
"type": "group"
},
{
"id": 2021,
"pid": 10,
"name": "天地图影像",
"icon": "http://mars3d.cn/example/img/basemaps/tdt_img.png",
"type": "tdt",
"layer": "img_d",
"key": [
"9ae78c51a0a28f06444d541148496e36"
]
},
{
"pid": 10,
"name": "天地图电子",
"icon": "http://mars3d.cn/example/img/basemaps/tdt_vec.png",
"type": "group",
"layers": [
{
"name": "底图",
"type": "tdt",
"layer": "vec_d",
"key": [
"9ae78c51a0a28f06444d541148496e36"
]
},
{
"name": "注记",
"type": "tdt",
"layer": "vec_z",
"key": [
"9ae78c51a0a28f06444d541148496e36"
]
}
]
},
{
"pid": 10,
"name": "高德影像",
"type": "group",
"icon": "http://mars3d.cn/example/img/basemaps/gaode_img.png",
"layers": [
{
"name": "底图",
"type": "gaode",
"layer": "img_d"
},
{
"name": "注记",
"type": "gaode",
"layer": "img_z"
}
],
"show": true
},
{
"pid": 10,
"name": "高德电子",
"type": "gaode",
"icon": "http://mars3d.cn/example/img/basemaps/gaode_vec.png",
"layer": "vec"
},
{
"pid": 10,
"name": "百度影像",
"type": "group",
"icon": "http://mars3d.cn/example/img/basemaps/bd-img.png",
"layers": [
{
"name": "底图",
"type": "baidu",
"layer": "img_d"
},
{
"name": "注记",
"type": "baidu",
"layer": "img_z"
}
]
},
{
"pid": 10,
"name": "百度电子",
"icon": "http://mars3d.cn/example/img/basemaps/bd-vec.png",
"type": "baidu",
"layer": "vec"
},
{
"pid": 10,
"name": "腾讯影像",
"icon": "http://mars3d.cn/example/img/basemaps/gaode_img.png",
"type": "group",
"layers": [
{
"name": "底图",
"type": "tencent",
"layer": "img_d"
},
{
"name": "注记",
"type": "tencent",
"layer": "img_z"
}
],
"show": false
},
{
"pid": 10,
"name": "腾讯电子",
"icon": "http://mars3d.cn/example/img/basemaps/gaode_vec.png",
"type": "tencent",
"layer": "vec"
},
{
"pid": 10,
"name": "ArcGIS影像",
"icon": "http://mars3d.cn/example/img/basemaps/esriWorldImagery.png",
"type": "xyz",
"url": "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",
"enablePickFeatures": false
},
{
"pid": 10,
"name": "微软影像",
"icon": "http://mars3d.cn/example/img/basemaps/bingAerial.png",
"type": "bing",
"key": "AuKhM0WRkjhX8E4y1OM0TukYycaw_4Vh3eSfXONDf7OARls-WEB3K_Rfx89bWxof",
"layer": "Aerial"
},
{
"pid": 10,
"name": "OSM地图",
"type": "xyz",
"icon": "http://mars3d.cn/example/img/basemaps/osm.png",
"url": "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
"subdomains": "abc"
},
{
"id": 2017,
"pid": 10,
"name": "蓝色底图",
"icon": "http://mars3d.cn/example/img/basemaps/bd-c-midnight.png",
"type": "xyz",
"url": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}",
"chinaCRS": "GCJ02",
"enablePickFeatures": false
},
{
"pid": 10,
"name": "黑色底图",
"icon": "http://mars3d.cn/example/img/basemaps/bd-c-dark.png",
"type": "tencent",
"layer": "custom",
"style": "4"
},
{
"pid": 10,
"name": "灰色底图",
"icon": "http://mars3d.cn/example/img/basemaps/bd-c-grayscale.png",
"type": "mapbox",
"username": "marsgis",
"styleId": "cki0a92b123qo1aluk0e5v7sb",
"scaleFactor": true
},
{
"pid": 10,
"name": "离线地图 (供参考)",
"type": "xyz",
"icon": "http://mars3d.cn/example/img/basemaps/mapboxSatellite.png",
"url": "//data.mars3d.cn/tile/googleImg/{z}/{x}/{y}.jpg",
"minimumLevel": 1,
"maximumLevel": 18,
"minimumTerrainLevel": 1,
"maximumTerrainLevel": 18,
"rectangle": {
"xmin": -180,
"xmax": 180,
"ymin": -85,
"ymax": 85
}
},
{
"pid": 10,
"name": "单张图片 (本地离线)",
"icon": "http://mars3d.cn/example/img/basemaps/offline.png",
"type": "image",
"url": "//data.mars3d.cn/file/img/world/world.jpg"
}
],
"layers": [
{
"id": 20,
"name": "辅助图层",
"type": "group"
},
{
"pid": 20,
"name": "行政区划界线",
"type": "xyz",
"url": "https://t{s}.tianditu.gov.cn/DataServer?T=ibo_w&x={x}&y={y}&l={z}&tk=9ae78c51a0a28f06444d541148496e36",
"subdomains": "01234567",
"maximumLevel": 10,
"show": false
},
{
"pid": 20,
"name": "天地图注记",
"type": "tdt",
"layer": "img_z",
"key": [
"9ae78c51a0a28f06444d541148496e36"
],
"show": false
},
{
"id": 30,
"name": "实时路况",
"type": "group"
},
{
"pid": 30,
"name": "高德实时路况",
"type": "gaode",
"layer": "time",
"minimumTerrainLevel": 4,
"minimumLevel": 4,
"proxy": "//server.mars3d.cn/proxy/"
},
{
"pid": 30,
"name": "百度实时路况",
"type": "baidu",
"layer": "time"
},
{
"pid": 10,
"name": "天地图电子",
"icon": "http://mars3d.cn/example/img/basemaps/tdt_vec.png",
"type": "group",
"layers": [
{
"name": "底图",
"type": "tdt",
"layer": "vec_d",
"key": [
"9ae78c51a0a28f06444d541148496e36"
]
},
{
"name": "注记",
"type": "tdt",
"layer": "vec_z",
"key": [
"9ae78c51a0a28f06444d541148496e36"
]
}
],
"show": false
},
{
"pid": 40,
"name": "单张图片 (本地离线)",
"icon": "http://mars3d.cn/example/img/basemaps/offline.png",
"type": "image",
"url": "/dianziweilan/dianziweilan.jpg",
"rectangle": {
"xmin": 115.34449339,
"xmax": 115.383424,
"ymin": 39.269255,
"ymax": 39.2829251
}
}
]
}
}
\ No newline at end of file
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="author" content="火星科技 http://mars3d.cn ">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" >
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<script src="https://cdn.bootcss.com/eruda/1.5.8/eruda.min.js"></script>
<script>
//eruda.init();
</script>
<!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
<title>卡车调度系统终端平台</title>
<script>
window.basePathUrl = '<%= BASE_URL %>' //标识config、widgets所在的目录
window.onload = function() {
document.addEventListener('touchstart', function(event) {
if (event.touches.length > 1) {
event.preventDefault()
}
})
document.addEventListener('gesturestart', function(event) {
event.preventDefault()
})
}
</script>
<!-- 方式2:使用直接引入的Cesium ,需要拷贝对应目录到public下 -->
<!-- <script type="text/javascript" >
window.CESIUM_BASE_URL ="<%= BASE_URL %>lib/Cesium/"
</script>
<link rel="stylesheet" href="<%= BASE_URL %>lib/Cesium/Widgets/widgets.css">
<script type="text/javascript" src="<%= BASE_URL %>lib/Cesium/Cesium.js"></script> -->
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
<template>
<div id="app">
<router-view/>
</div>
</template>
<script>
export default {
mounted(){
var height= document.documentElement.clientHeight; //获取当前可视区域的高度存到hrt变量
window.onload = function(){ //在页面整体加载完毕时
document.getElementById('app').style.height= height + 'px'//把获取到的高度赋值给根div
}
}
}
</script>
<style lang="scss">
html,
body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
width: 100%;
height: 100%;
}
</style>
@font-face {
font-family: "iconfont"; /* Project id 2782333 */
src: url('iconfont.woff2?t=1630478178623') format('woff2'),
url('iconfont.woff?t=1630478178623') format('woff'),
url('iconfont.ttf?t=1630478178623') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-ren-jianshao:before {
content: "\e705";
}
.icon-xiajiantou:before {
content: "\e60a";
}
.icon-dian:before {
content: "\e601";
}
.icon-bianpo:before {
content: "\e794";
}
.icon-leaf:before {
content: "\e642";
}
.icon-suoxiao:before {
content: "\e616";
}
.icon-70BasicIcons-all-48:before {
content: "\e64a";
}
.icon-dingwei:before {
content: "\e600";
}
.icon-wenjianjia:before {
content: "\e66f";
}
.icon-zhuye:before {
content: "\e61d";
}
.icon-diannao:before {
content: "\e649";
}
.icon-che:before {
content: "\e609";
}
.icon-kuaizhuanggengduo:before {
content: "\e66c";
}
.icon-shezhi:before {
content: "\e696";
}
.icon-a-ziyuan50:before {
content: "\e6f2";
}
.el-table th.el-table__cell{
overflow: hidden;
user-select: none;
background-color: #ecf5ff;
}
!function(c){var l,a,t,e,h,i='<svg><symbol id="icon-ren-jianshao" viewBox="0 0 1024 1024"><path d="M731.453 612.522c-27.877 14.516-52.222 34.88-71.41 59.466C616.142 647.778 565.68 634 512 634c-169.551 0-307 137.449-307 307 0 24.3-19.7 44-44 44s-44-19.7-44-44c0-162.692 98.359-302.412 238.856-362.938C279.408 527.394 229 440.584 229 342c0-156.297 126.703-283 283-283s283 126.703 283 283c0 98.584-50.408 185.394-126.856 236.062a394.134 394.134 0 0 1 63.31 34.46zM512 537c107.696 0 195-87.304 195-195s-87.304-195-195-195-195 87.304-195 195 87.304 195 195 195z m179.225 312.8c-24.3 0-44-19.699-44-44 0-24.3 19.7-44 44-44H963c24.3 0 44 19.7 44 44 0 24.301-19.7 44-44 44H691.225z" ></path></symbol><symbol id="icon-xiajiantou" viewBox="0 0 1024 1024"><path d="M573.056 752l308.8-404.608A76.8 76.8 0 0 0 820.736 224H203.232a76.8 76.8 0 0 0-61.056 123.392L450.976 752a76.8 76.8 0 0 0 122.08 0z" ></path></symbol><symbol id="icon-dian" viewBox="0 0 1024 1024"><path d="M512 754.976a242.976 242.976 0 1 0 0-485.952 242.976 242.976 0 0 0 0 485.952z" ></path></symbol><symbol id="icon-bianpo" viewBox="0 0 1024 1024"><path d="M464.213333 382.293333zM488.106667 501.76L139.946667 853.333333h95.573333l300.373333-303.786666zM610.986667 624.64L378.88 853.333333h95.573333l184.32-180.906666zM621.226667 853.333333H716.8l61.44-61.44-47.786667-47.786666z" ></path><path d="M887.466667 505.173333c58.026667-17.066667 102.4-75.093333 102.4-146.773333C989.866667 273.066667 928.426667 204.8 853.333333 204.8s-136.533333 68.266667-136.533333 153.6c0 71.68 44.373333 129.706667 102.4 146.773333v81.92L491.52 307.2H331.093333l-68.266666-170.666667H34.133333v716.8h68.266667v-109.226666l300.373333-300.373334H307.2l-204.8 204.8v-143.36l150.186667-150.186666-34.133334-64.853334L102.4 406.186667V204.8h112.64l68.266667 170.666667h180.906666L921.6 768V853.333333h68.266667v-119.466666L887.466667 648.533333v-143.36z m-102.4-146.773333c0-47.786667 30.72-85.333333 68.266666-85.333333s68.266667 37.546667 68.266667 85.333333-30.72 85.333333-68.266667 85.333333-68.266667-37.546667-68.266666-85.333333z" ></path></symbol><symbol id="icon-leaf" viewBox="0 0 1024 1024"><path d="M448.53 883.5c-2.96 0-5.87-0.03-8.72-0.1-105.67-2.31-184.34-44.31-219.6-79.58-24.47-24.47-61.76-104.88-68.04-207.06-5.38-87.5 11.23-214.83 120.9-324.5C470.17 75.15 914.31 64.4 933.13 64.04c7.12-0.41 14.08 2.65 19.13 7.71a26.352 26.352 0 0 1 7.72 19.14c-0.36 18.81-11.1 462.95-208.23 660.06C643.14 859.57 528.43 883.5 448.53 883.5z m457.5-765.52c-100 5.73-440.55 36.39-595.7 191.54C128.85 491 228.66 737.74 257.46 766.55c30.61 30.6 99.21 62.32 183.49 64.16 69.98 1.33 174.06-17.55 273.54-117.02 155.15-155.15 185.81-495.7 191.54-595.71z" fill="#333333" ></path><path d="M90.37 960c-6.74 0-13.49-2.57-18.63-7.72-10.29-10.29-10.29-26.98 0-37.26l612.65-612.65c10.29-10.29 26.97-10.29 37.26 0s10.29 26.98 0 37.26L109 952.28c-5.14 5.15-11.89 7.72-18.63 7.72z" fill="#333333" ></path><path d="M527.83 525.5c-14.55 0-26.35-11.8-26.35-26.35V300.21c0-14.55 11.8-26.35 26.35-26.35s26.35 11.8 26.35 26.35v198.94c0.01 14.55-11.79 26.35-26.35 26.35zM565.45 671H379.37c-14.55 0-26.35-11.8-26.35-26.35s11.8-26.35 26.35-26.35h186.07c14.55 0 26.35 11.8 26.35 26.35C591.8 659.2 580 671 565.45 671z" fill="#333333" ></path></symbol><symbol id="icon-suoxiao" viewBox="0 0 1024 1024"><path d="M923.378813 305.414945l-141.483338-0.514723L940.653245 147.093103c17.34504-17.545608 17.34504-45.962821 0-63.456241-17.450441-17.493419-45.684482-17.493419-63.045895 0L717.313597 243.092527 718.395232 98.782817c0.418532-18.11252-13.872962-33.870412-31.898501-33.44267l-22.806425 0c-18.008142 0.470721-32.927947 11.236925-33.29429 29.350468l-0.942465 250.378467c0 0.322341 1.169639 0.558725 1.169639 0.889253l-1.744737 16.420995c-0.140193 9.029654 1.989307 17.161868 7.818059 22.946618 5.740748 5.879917 13.837146 9.405207 22.806425 9.179057l16.280802-0.331551c0.366344 0 0.610914-0.140193 0.942465-0.192382l250.700809 1.413186c18.025539-0.418532 32.875758-15.381315 33.346479-33.529651l0-23.006993C958.050474 317.507354 941.35114 304.996412 923.378813 305.414945L923.378813 305.414945zM959.07992 687.11225l-0.052189-22.998807c-0.418532-18.148335-15.233959-33.102932-33.154098-33.538861l-249.393024 1.360997c-0.36532 0-0.610914-0.140193-0.942465-0.140193l-16.210193-0.36532c-8.951883-0.279363-16.996093 3.298116-22.720468 9.125845-5.792936 5.827729-7.90504 13.960966-7.730055 23.034623l1.744737 16.419971c0 0.331551-1.169639 0.576121-1.169639 0.890276l0.942465 248.449535c0.366344 18.11252 15.181771 28.879748 33.154098 29.315676l24.185842 0.034792c17.921161 0.435928 32.125675-15.373129 31.688723-33.486672l-1.029446-141.396357 159.64907 158.479431c17.257036 17.48421 45.3867 17.48421 62.696947 0 17.310248-17.502629 17.310248-45.910633 0-63.448054L781.284561 719.621665l140.540873-0.523933C939.711803 719.568453 956.357925 708.470697 959.07992 687.11225L959.07992 687.11225zM385.61094 640.590704c-5.740748-5.827729-13.837146-9.405207-22.807449-9.108448l-16.33299 0.366344c-0.278339 0-0.557702 0.140193-0.87288 0.140193l-247.367901-1.414209c-17.97335 0.436952-32.893154 15.390525-33.311687 33.538861l-0.052189 22.998807c2.721994 21.358447 19.438725 32.422434 37.412075 32.089859l139.494031 0.505513L81.722768 878.884948c-17.415648 17.554818-17.415648 45.962821 0 63.448054 17.379832 17.502629 45.560662 17.502629 62.958914 0l160.311149-159.403476-1.082658 140.540873c-0.435928 18.11252 13.872962 33.869389 31.846312 33.450856l22.859637 0c18.008142-0.471744 32.910551-11.203156 33.29429-29.351492l0.942465-246.670006c0-0.315178-1.169639-0.558725-1.169639-0.890276l1.780553-16.419971C393.549749 654.568043 391.456065 646.436852 385.61094 640.590704L385.61094 640.590704zM392.817062 345.070106l-0.941442-250.378467c-0.348947-18.113543-15.199167-28.92375-33.120328-29.394471l-24.184819 0c-17.903765-0.38374-32.107255 15.373129-31.688723 33.44267l1.081635 143.315056L144.367527 83.636862c-17.362436-17.493419-45.438888-17.493419-62.749136 0-17.310248 17.493419-17.310248 45.909609 0 63.456241l158.042479 157.807119-139.232065 0.514723c-17.86795-0.418532-34.480302 12.092409-37.202297 33.443693l0.034792 23.006993c0.435928 18.147312 15.251356 33.110095 33.172517 33.529651l249.374604-1.413186c0.348947 0.052189 0.576121 0.192382 0.907673 0.192382l16.228613 0.37453c8.933463 0.23536 17.030885-3.288906 22.719444-9.169847 5.792936-5.836939 7.887644-13.96813 7.712659-23.050995l-1.779529-16.410762C391.596258 345.584829 392.817062 345.392448 392.817062 345.070106L392.817062 345.070106zM392.817062 345.070106" ></path></symbol><symbol id="icon-70BasicIcons-all-48" viewBox="0 0 1062 1024"><path d="M96.603774 396.075472v-241.509434L376.754717 434.716981c9.660377 9.660377 21.735849 14.490566 33.811321 14.490566s24.150943-4.830189 33.81132-14.490566c19.320755-19.320755 19.320755-48.301887 0-67.622641L185.962264 106.264151H362.264151c26.566038 0 48.301887-21.735849 48.301887-48.301887s-21.735849-48.301887-48.301887-48.301887H89.358491c-19.320755-14.490566-45.886792-12.075472-62.792453 4.830189 0 0-2.415094 2.415094-2.415095 4.830189-14.490566 7.245283-24.150943 21.735849-24.150943 38.641509 0 4.830189 0 7.245283 2.415094 12.075472-2.415094 4.830189-2.415094 9.660377-2.415094 12.075472v313.962264c0 26.566038 21.735849 48.301887 48.301887 48.301886s48.301887-21.735849 48.301887-48.301886zM654.490566 434.716981L941.886792 149.735849v224.603774c0 26.566038 21.735849 48.301887 48.301887 48.301886s48.301887-21.735849 48.301887-48.301886v-313.962265c0-21.735849-12.075472-38.641509-31.396226-45.886792-16.90566-16.90566-43.471698-16.90566-62.792453-2.415094H676.226415c-26.566038 0-48.301887 21.735849-48.301887 48.301886s21.735849 48.301887 48.301887 48.301887h171.471698L586.867925 367.09434c-19.320755 19.320755-19.320755 48.301887 0 67.622641 9.660377 9.660377 21.735849 14.490566 33.81132 14.490566s26.566038-4.830189 33.811321-14.490566zM408.150943 574.792453L120.754717 862.188679v-224.603773c0-26.566038-21.735849-48.301887-48.301887-48.301887s-48.301887 21.735849-48.301887 48.301887v313.962264c0 4.830189 0 7.245283 2.415095 12.075472-2.415094 4.830189-2.415094 9.660377-2.415095 12.075471 0 26.566038 21.735849 48.301887 48.301887 48.301887h313.962264c26.566038 0 48.301887-21.735849 48.301887-48.301887s-21.735849-48.301887-48.301887-48.301887H190.792453l284.981132-284.981132c19.320755-19.320755 19.320755-48.301887 0-67.622641-19.320755-16.90566-50.716981-16.90566-67.622642 0zM1014.339623 613.433962c-26.566038 0-48.301887 21.735849-48.301887 48.301887v195.622642L683.471698 574.792453c-19.320755-19.320755-48.301887-19.320755-67.622641 0s-19.320755 48.301887 0 67.622641l284.981132 284.981132H700.377358c-26.566038 0-48.301887 21.735849-48.301886 48.301887s21.735849 48.301887 48.301886 48.301887h313.962265c26.566038 0 48.301887-21.735849 48.301886-48.301887v-313.962264c0-26.566038-21.735849-48.301887-48.301886-48.301887z" fill="#50BC93" ></path></symbol><symbol id="icon-dingwei" viewBox="0 0 1024 1024"><path d="M930.909091 418.909091c0-232.727273-186.181818-418.909091-418.909091-418.909091S93.090909 186.181818 93.090909 418.909091c0 172.218182 228.072727 428.218182 335.127273 539.927273H302.545455V1024h418.90909v-65.163636h-130.327272C702.836364 847.127273 930.909091 591.127273 930.909091 418.909091zM167.563636 418.909091c0-190.836364 153.6-344.436364 344.436364-344.436364 190.836364 0 344.436364 153.6 344.436364 344.436364 0 148.945455-228.072727 386.327273-344.436364 512-116.363636-125.672727-344.436364-363.054545-344.436364-512z" fill="#707070" ></path><path d="M516.654545 200.145455c-102.4 0-186.181818 83.781818-186.181818 186.181818s83.781818 186.181818 186.181818 186.181818 186.181818-83.781818 186.181819-186.181818-83.781818-186.181818-186.181819-186.181818z m0 297.890909c-60.509091 0-111.709091-51.2-111.70909-111.709091s51.2-111.709091 111.70909-111.709091c60.509091 0 111.709091 51.2 111.709091 111.709091s-51.2 111.709091-111.709091 111.709091z" fill="#707070" ></path></symbol><symbol id="icon-wenjianjia" viewBox="0 0 1026 1024"><path d="M669.866667 266.666667L554.666667 85.333333H87.466667v134.4h-85.333334V0h599.466667l138.666667 221.866667z" ></path><path d="M1026.133333 1024H2.133333V213.333333h1024v810.666667z m-938.666666-85.333333h853.333333V298.666667h-853.333333v640z" ></path></symbol><symbol id="icon-zhuye" viewBox="0 0 1024 1024"><path d="M840.192497 1024h-178.309309a64.604822 64.604822 0 0 1-64.604823-64.604822V646.06179H419.615104v311.395243a64.604822 64.604822 0 0 1-64.604822 64.604822H181.22331a64.604822 64.604822 0 0 1-64.604822-64.604822V525.250772H76.563498a58.14434 58.14434 0 0 1-58.790388-38.762893A64.604822 64.604822 0 0 1 31.340122 416.068622L470.652914 18.102917a64.604822 64.604822 0 0 1 89.800703 0l432.852309 396.673609a64.604822 64.604822 0 0 1-45.869424 109.828198h-44.577327v436.728598a64.604822 64.604822 0 0 1-62.666678 62.666678zM422.199297 585.979305h179.601406a64.604822 64.604822 0 0 1 64.604822 64.604822v313.333388h175.725117V465.168287h109.182149L515.876289 64.618389 76.563498 462.584094h107.890053v501.333421h178.955358v-310.749195a64.604822 64.604822 0 0 1 58.790388-67.189015z" ></path></symbol><symbol id="icon-diannao" viewBox="0 0 1024 1024"><path d="M468.22912 724.24448a43.76576 43.76576 0 0 0 43.77088 43.77088 43.76064 43.76064 0 0 0 43.76576-43.77088 43.77088 43.77088 0 0 0-87.53664 0zM91.79648 132.10112v491.56096h27.3152V159.41632h785.78688v464.24576h27.3152V132.10112H91.79648zM512 123.34592c4.83328 0 8.76032-3.92192 8.76032-8.7552s-3.92704-8.7552-8.76032-8.7552a8.7552 8.7552 0 0 0 0 17.5104z" ></path><path d="M932.20352 57.6H91.79648c-38.6816 0-70.03648 31.35488-70.03648 70.03648v631.6288c0 38.67648 31.35488 70.03136 70.03648 70.03136h307.13344c-21.29408 63.72864-60.32896 122.56256-132.04992 122.56256a17.5104 17.5104 0 1 0-0.02048 35.02592h490.26048a17.5104 17.5104 0 0 0 17.52064-17.50528 17.5104 17.5104 0 0 0-17.50016-17.52064h-0.02048c-71.72096 0-110.75584-58.8288-132.04992-122.56256h307.13344c38.67648 0 70.03648-31.35488 70.03648-70.03136V127.63648c0-38.6816-31.36-70.03648-70.03648-70.03648zM56.33536 127.63648a35.49184 35.49184 0 0 1 35.45088-35.45088h840.40704c19.54304 0 35.44576 15.90272 35.44576 35.45088v491.99616H56.33536V127.63648z m576.40448 797.312l20.59776 22.23104H375.77216l15.488-17.11104c22.65088-32.82944 34.33472-55.53152 48.15872-93.6448l2.2784-7.12192h140.59008l2.2784 7.1168c13.42464 41.83552 26.10688 64.14848 48.17408 88.52992z m334.91968-165.67296a35.4816 35.4816 0 0 1-35.44576 35.44576H91.79648a35.4816 35.4816 0 0 1-35.45088-35.44576v-105.48736h911.31392v105.48736z" ></path></symbol><symbol id="icon-che" viewBox="0 0 1024 1024"><path d="M810.356364 121.018182H220.755782a54.272 54.272 0 0 0-51.479273 37.161891L29.360873 578.56a27.927273 27.927273 0 0 0-1.4336 8.8064V861.649455a54.290618 54.290618 0 0 0 54.272 54.272h126.678109a44.2368 44.2368 0 0 0 44.255418-44.255419v-15.341381a51.311709 51.311709 0 0 1 51.255855-51.255855H727.226182a50.7904 50.7904 0 0 1 50.660073 47.662545l0.09309 3.090619a53.843782 53.843782 0 0 0 53.787928 53.787927h117.1456a54.290618 54.290618 0 0 0 54.290618-54.272V587.3664a27.927273 27.927273 0 0 0-1.4336-8.8064L861.854255 158.180073A54.383709 54.383709 0 0 0 810.356364 121.018182z m-1.172946 55.835927l138.146909 415.036509v261.864727h-113.533672l0.037236 2.066619a106.644945 106.644945 0 0 0-106.607709-106.607709H304.407273l-4.096 0.074472a107.184873 107.184873 0 0 0-103.0144 107.035928v3.723636H83.781818V591.890618l138.128291-415.036509h587.273309z" fill="#10298D" ></path><path d="M979.874909 318.687418a27.927273 27.927273 0 0 1 2.681018 55.724218l-2.681018 0.130328H60.453236a27.927273 27.927273 0 0 1-2.699636-55.724219l2.699636-0.130327H979.874909zM285.714618 562.343564a27.927273 27.927273 0 0 1 2.681018 55.724218l-2.681018 0.130327H55.854545a27.927273 27.927273 0 0 1-2.681018-55.724218L55.854545 562.343564h229.860073z m349.370182 0a27.927273 27.927273 0 0 1 2.699636 55.724218l-2.699636 0.130327H405.224727a27.927273 27.927273 0 0 1-2.681018-55.724218l2.681018-0.130327h229.860073z m340.191418 0a27.927273 27.927273 0 0 1 2.681018 55.724218l-2.681018 0.130327H745.416145a27.927273 27.927273 0 0 1-2.681018-55.724218l2.681018-0.130327h229.860073z" fill="#10298D" ></path></symbol><symbol id="icon-kuaizhuanggengduo" viewBox="0 0 1024 1024"><path d="M375.837 533.904c44.464 0 80.51 36.05 80.51 80.519V867.48c0 44.47-36.046 80.519-80.51 80.519H120.51C76.045 948 40 911.95 40 867.481V614.423c0-44.47 36.045-80.519 80.509-80.519h255.328z m487.654 0c44.464 0 80.509 36.05 80.509 80.519V867.48c0 44.47-36.045 80.519-80.509 80.519H608.163c-44.464 0-80.51-36.05-80.51-80.519V614.423c0-44.47 36.046-80.519 80.51-80.519H863.49z m-487.654 59.814H120.51c-11.23 0-20.37 8.942-20.694 20.094l-0.008 0.61v253.06c0 11.23 8.94 20.372 20.092 20.695l0.61 0.01h255.328c11.23 0 20.37-8.943 20.694-20.095l0.008-0.61v-253.06c0-11.23-8.94-20.372-20.091-20.695l-0.61-0.009z m487.654 0H608.163c-11.23 0-20.37 8.942-20.694 20.094l-0.008 0.61v253.06c0 11.23 8.94 20.372 20.091 20.695l0.61 0.01h255.33c11.228 0 20.37-8.943 20.693-20.095l0.008-0.61v-253.06c0-11.23-8.94-20.372-20.092-20.695l-0.61-0.009zM375.837 83c44.464 0 80.51 36.05 80.51 80.519v253.058c0 44.47-36.046 80.519-80.51 80.519H120.51c-44.464 0-80.509-36.05-80.509-80.519V163.52C40 119.049 76.045 83 120.509 83h255.328z m361.14 1.15c113.065 0 204.723 91.669 204.723 204.748 0 113.078-91.658 204.747-204.723 204.747-113.065 0-204.723-91.669-204.723-204.747 0-113.08 91.658-204.748 204.723-204.748z m-361.14 58.664H120.51c-11.23 0-20.37 8.942-20.694 20.094l-0.008 0.61v253.06c0 11.23 8.94 20.372 20.092 20.695l0.61 0.009h255.328c11.23 0 20.37-8.942 20.694-20.094l0.008-0.61v-253.06c0-11.23-8.94-20.372-20.091-20.695l-0.61-0.01z m361.14 1.15c-80.035 0-144.916 64.889-144.916 144.934 0 80.044 64.881 144.933 144.916 144.933s144.916-64.889 144.916-144.933c0-80.045-64.881-144.934-144.916-144.934z" fill="#333333" ></path></symbol><symbol id="icon-shezhi" viewBox="0 0 1024 1024"><path d="M416.4 958h191.2V849.7c0-12.7 6.4-25.5 19.1-31.9 31.9-12.7 63.7-31.9 89.2-51 12.7-6.4 25.5-6.4 38.2 0l95.6 57.3 95.6-165.7-95.6-57.3C837 588.5 830.6 575.7 837 563c0-19.1 6.4-31.9 6.4-51s0-31.9-6.4-51c0-12.7 6.4-25.5 12.7-31.9l95.6-57.3-95.6-165.7-95.6 57.3c-12.7 6.4-25.5 6.4-38.2 0-25.5-19.1-57.3-38.2-89.2-51-12.7-12.7-19.1-25.5-19.1-38.2V66H416.4v108.3c0 12.7-6.4 25.5-19.1 31.9-31.9 12.7-63.7 31.9-89.2 51-12.7 6.4-25.5 6.4-38.2 0l-95.6-51-95.6 165.6 95.6 57.3c12.7 6.4 19.1 19.1 12.7 31.9 0 19.1-6.4 31.9-6.4 51s0 31.9 6.4 51c6.4 12.7 0 25.5-12.7 31.9l-95.6 57.3 95.6 165.7 95.6-57.3c12.7-6.4 25.5-6.4 38.2 0 25.5 19.1 57.3 38.2 89.2 51 12.7 6.4 19.1 19.1 19.1 31.9V958z m223 63.7H384.6c-19.1 0-31.9-12.7-31.9-31.9v-121c-25.5-12.7-51-25.5-70.1-38.2l-101.9 63.7c-12.7 6.4-31.9 6.4-44.6-12.7L8.6 658.6c-12.7-19.1-6.4-38.2 12.7-44.6l101.9-63.7v-76.5L21.4 410.1c-19.1-6.4-25.5-25.5-12.7-44.6l127.4-223c6.4-12.7 25.5-19.1 44.6-6.4l101.9 63.7c19.1-12.7 44.6-31.9 70.1-38.2V34.1c0-19.1 12.7-31.9 31.9-31.9h254.9c19.1 0 31.9 12.7 31.9 31.9v121.1c25.5 12.7 51 25.5 70.1 38.2l101.9-63.7c12.7-6.4 31.9-6.4 44.6 12.7l127.4 223c12.7 19.1 6.4 38.2-12.7 44.6l-101.9 63.7v76.5l101.9 63.7c12.7 6.4 19.1 25.5 12.7 44.6L888 881.5c-6.4 12.7-25.5 19.1-44.6 12.7l-101.9-63.7c-19.1 12.7-44.6 31.9-70.1 38.2v121.1c-0.1 19.2-12.8 31.9-32 31.9zM512 703.2c-108.3 0-191.2-82.8-191.2-191.2S403.7 320.8 512 320.8 703.2 403.7 703.2 512 620.3 703.2 512 703.2z m0-318.6c-70.1 0-127.4 57.3-127.4 127.4S441.9 639.4 512 639.4 639.4 582.1 639.4 512 582.1 384.6 512 384.6z" ></path></symbol><symbol id="icon-a-ziyuan50" viewBox="0 0 1024 1024"><path d="M486.978802 59.892803v900.83499H188.390173V321.145129l32.226481-98.389503 50.894633-55.984095 66.163022-52.584334 95.010099-45.805169 54.294394-8.489225z" fill="#D1D3D4" ></path><path d="M869.238205 1024H154.697927a40.715706 40.715706 0 0 1-40.715706-40.715706v-585.28827a397.996024 397.996024 0 0 1 795.97169 0v585.28827a40.715706 40.715706 0 0 1-40.715706 40.715706z m-673.824572-81.431412H828.542857v-544.572564a316.564612 316.564612 0 0 0-633.108867 0z" fill="#231F20" ></path><path d="M980.208861 1024H43.747629a40.715706 40.715706 0 0 1 0-81.431412h936.461232a40.715706 40.715706 0 0 1 0 81.431412z" fill="#231F20" ></path><path d="M511.978245 1024a40.715706 40.715706 0 0 1-40.715706-40.715706V40.756421a40.715706 40.715706 0 0 1 81.431412 0v942.527873a40.715706 40.715706 0 0 1-40.715706 40.715706z" fill="#231F20" ></path><path d="M624.394309 530.932803v71.842863" fill="#FFFFFF" ></path><path d="M624.394309 643.491372a40.715706 40.715706 0 0 1-40.715706-40.715706v-71.842863a40.715706 40.715706 0 0 1 81.431411 0v71.863221a40.715706 40.715706 0 0 1-40.715705 40.715706z" fill="#231F20" ></path></symbol></svg>',o=(o=document.getElementsByTagName("script"))[o.length-1].getAttribute("data-injectcss"),n=function(c,l){l.parentNode.insertBefore(c,l)};if(o&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(c){console&&console.log(c)}}function s(){h||(h=!0,t())}function d(){try{e.documentElement.doScroll("left")}catch(c){return void setTimeout(d,50)}s()}l=function(){var c,l;(l=document.createElement("div")).innerHTML=i,i=null,(c=l.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",l=c,(c=document.body).firstChild?n(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(a=function(){document.removeEventListener("DOMContentLoaded",a,!1),l()},document.addEventListener("DOMContentLoaded",a,!1)):document.attachEvent&&(t=l,e=c.document,h=!1,d(),e.onreadystatechange=function(){"complete"==e.readyState&&(e.onreadystatechange=null,s())})}(window);
\ No newline at end of file
{
"id": "2782333",
"name": "鑫海2",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "9974423",
"name": "人-减少",
"font_class": "ren-jianshao",
"unicode": "e705",
"unicode_decimal": 59141
},
{
"icon_id": "13474459",
"name": "下箭头",
"font_class": "xiajiantou",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "14918649",
"name": "dian",
"font_class": "dian",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "15196692",
"name": "边坡",
"font_class": "bianpo",
"unicode": "e794",
"unicode_decimal": 59284
},
{
"icon_id": "18012926",
"name": "叶子",
"font_class": "leaf",
"unicode": "e642",
"unicode_decimal": 58946
},
{
"icon_id": "579386",
"name": "缩小",
"font_class": "suoxiao",
"unicode": "e616",
"unicode_decimal": 58902
},
{
"icon_id": "18924792",
"name": "放大",
"font_class": "70BasicIcons-all-48",
"unicode": "e64a",
"unicode_decimal": 58954
},
{
"icon_id": "1901667",
"name": "定位",
"font_class": "dingwei",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "5729042",
"name": "文件夹",
"font_class": "wenjianjia",
"unicode": "e66f",
"unicode_decimal": 58991
},
{
"icon_id": "6429564",
"name": "主页",
"font_class": "zhuye",
"unicode": "e61d",
"unicode_decimal": 58909
},
{
"icon_id": "9748109",
"name": "电脑",
"font_class": "diannao",
"unicode": "e649",
"unicode_decimal": 58953
},
{
"icon_id": "13581222",
"name": "车",
"font_class": "che",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "16384707",
"name": "块状更多",
"font_class": "kuaizhuanggengduo",
"unicode": "e66c",
"unicode_decimal": 58988
},
{
"icon_id": "18379488",
"name": "设 置",
"font_class": "shezhi",
"unicode": "e696",
"unicode_decimal": 59030
},
{
"icon_id": "22861713",
"name": "门",
"font_class": "a-ziyuan50",
"unicode": "e6f2",
"unicode_decimal": 59122
}
]
}
This image diff could not be displayed because it is too large. You can view the blob instead.
export const login = '/auth/login'; //登录
export const code = '/auth/code';
export const menus = '/api/menus';
export const getMenusTree = '/api/menus/lazy';
export const users = '/api/users';
export const addUser = '/api/User/addUser';
export const updateUser = '/api/User/updateUser';
export const delUser = '/api/User/delUser';
export const editMenu = '/api/roles/menu';
export const childMenu = '/api/menus/child';
export const creatOrder = '/api/Order/changeOdoStatusByCarNumber'; //点击智能派单生成Order表
export const screenMapSetUpQuery = '/Weilan/list'; //获取区域围栏范围信息
export const manualSchedulingQuery = '/api/Manmade'; //获取人工调度信息
export const vehicleInformationQuery = '/api/CarPeop'; //获取车辆信息
export const safetySubmitCheck = '/api/newChange/isSubmitAnjian'; //安全报告提交检查
export const vehicleInformationUpdate = '/api/CarPeop'; //修改车辆信息
export const apiCarClassQuery = '/api/CarClass'; //获取车辆类型
export const vehicleRealTimeQuery = '/api/CarReal'; //获取车辆信息实时数据(不用)
export const vehicleRealTimeQuery2 = '/api/CarPeop/realtime'; //获取车辆信息实时数据(不用)
export const apiManmadesRealQuery = '/api/Manmades/Real'; //获取车辆信息实时数据(使用)
export const personalCenterInforQuery = '/api/Drivers'; //获取个人信息
export const failureDeclarationAdd = '/api/Hitch'; //故障申报提交
export const achievementStatisticsQuery = '/api/DispatchReal'; //获取绩效统计——司机考核(不用)
export const apiManmadesJXQuery = '/api/Manmades/JX'; //获取绩效统计——司机考核(使用)
export const intelligentDispatchQuery = '/api/Manmades'; //获取绩效统计——智能派单
export const chanRealQuery = '/api/Manmades/ChanReal'; //获取绩效统计——智能派单
export const updatePass = '/api/users/updatePass'; //修改个人信息密码
export const carFleetQuery = '/api/CarRoad'; //获取语音申请车队
export const carsInforQuery = '/api/CarBreak'; //获取语音申请车辆
export const faultInforQuery = '/api/BreakClass'; //获取车辆故障类型
export const carRealTimeLocationQuery1 = '/gps/all'; //获取车辆实时位置
export const carRealTimeLocationQuery2 = '/gps'; //获取一个车辆位置
export const gpsPhoneGpsQuery = '/gps/phoneGps'; //获取一个车辆位置
export const faultDayAdd = '/api/Fault'; //添加故障日报
export const faultMonthAdd = '/api/FaultMonth'; //添加故障月报
export const faultYearAdd = '/api/FaultYear'; //添加故障年报
export const waitingtrucksQuery = '/api/Dispatch/waitingtrucks'; //获取待装车卡车列表
export const manmadeStatusQuery = '/api/Manmade/status'; //获取调度车辆次数为一天或者长期的数据
export const dingDanBiaoCaoZuo = '/api/Order'; //订单表操作
export const getZhuangCheDingDanQuery = '/api/Order/ZC'; //获取装车订单
export const getXieCheDingDanQuery = '/api/Order/XC'; //获取卸车订单
export const getalarmRealQuery = '/api/alarm/real'; //获取车辆设备实时报警
export const dispatchFinishQuery = '/api/Dispatch/finish'; //获取智能调度是否完成
export const apiCpointQuery = '/api/Cpoint'; //获取关键控制点坐标
export const apiPathmapNavigationQuery = '/api/Pathmap/navigation'; //获取关键控制点坐标
export const apiManmadesRealCarQuery = '/api/Manmades/RealCar'; //点击车辆小弹框
export const apiManmadesChanJxQuery = '/api/Manmades/ChanJx'; //铲车绩效上面
export const apiManmadesChanCheRealQuery = '/api/Manmades/ChanCheReal'; //铲车车辆信息实时数据
export const apiEquipmentQuery = '/api/Equipment'; //获取设备表
export const ajReportModel = '/api/anjian/getAnjianByFormId'; //获取安检项目模板
export const ajReportSubmit = '/api/anjian'; //提交安检报告
export const posGetAllOnlineCarPosition = '/api/carPosition/getAllOnlineCarPosition'; //获取车辆列表和坐标
export const posAreaInformation = '/api/areaInformation'; //获取装卸区信息
export const posAreaInformationPoint = '/api/areaInformation/point'; //获取装卸点信息
export const changeJinJiReadStatus = '/api/Notice/changeJinJiReadStatus'; //终端确认紧急通知
export const crossingFence = '/api/crossingFence'; //终端围栏出入消息回传
export const tRealTimeOrder = '/api/tRealTimeOrder'; //获取当前车辆的订单
export const arriveCaiDian = '/api/tRealTimeOrder/arriveCaiDian'; //判断车辆到达采点后,提供订单id,使进入待装车状态
export const getAllLoadableKC = '/api/tRealTimeOrder/getAllLoadableKC'; //铲车查询附近五十米内是否有状态为2(到达采点,等待装车)的卡车
export const chooseKCZC = '/api/tRealTimeOrder/chooseKCZC'; //铲车给指定卡车进行装车
import axios from 'axios'
import { config as appConfig } from '../config.js'
import { Message } from 'element-ui'
import bus from "@/axios/bus.js";
// axios 配置
axios.defaults.baseURL = appConfig.BASE_URL;
axios.defaults.timeout = 500000;
axios.defaults.headers = {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
}
// http request 请求拦截器,有token值则配置上token值
axios.interceptors.request.use(
config => {
var token = localStorage.getItem(appConfig.TOKEN_KEY);
if (localStorage.getItem(appConfig.USER_KEY)) {
let ticket = JSON.parse(localStorage.getItem(appConfig.USER_KEY)).ticket;
config.headers.ticket = ticket == null ? '' : ticket;
}
config.headers.Authorization = token == null ? '' : token;
return config;
},
err => {
return Promise.reject(err);
}
);
// http response 服务器响应拦截器,这里拦截401错误,并重新跳入登页重新获取token
axios.interceptors.response.use(
response => {
return response;
},
error => {
if (error.response) {
console.log(error.response.status)
switch (error.response.status) {
case 403:
Message({
message: "登录凭证失效,请重新登录",
type: 'warning'
});
window.location.href = '#/login';
error.message = "登录凭证失效,请重新登录";
bus.$emit("todoDetailWebsocket");
break
case 401:
Message({
//message: '未授权,请重新登录',
message: '网络异常,请重新登录',
type: 'warning'
});
//error.message = '未授权,请重新登录';
error.message = '网络异常,请重新登录';
break
// localStorage.removeItem(appConfig.TOKEN_KEY)
// localStorage.removeItem(appConfig.USER_KEY)
// router.replace({
// path: '/login',
// // query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面
// })
case 400:
error.message = '网络异常'
case 404:
error.message = '网络异常'
break
case 405:
error.message = '网络异常'
break
case 408:
error.message = '网络异常'
break
case 500:
Message({
message: '内部服务器错误,请联系管理员',
type: 'warning'
});
break
case 501:
error.message = '网络未实现'
break
case 502:
error.message = '网络错误'
break
case 503:
error.message = '服务不可用'
break
case 504:
error.message = '网络超时'
break
case 505:
error.message = 'http版本不支持该请求'
break
default:
error.message = `连接错误${error.response.status}`
// router.replace({
// path: '/',
// query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面
// })
}
// console.log(error.response);
} else {
Message({
message: "网络异常",
type: 'warning'
});
}
return Promise.reject(error)
}
);
export default axios;
import Vue from 'vue';
// 使用 Event Bus
const bus = new Vue();
export default bus;
\ No newline at end of file
//不在此定义的url,isMock默认为true
export default [
{
key: 'login',
isMock: false
}
];
'use strict'
import { app, protocol, BrowserWindow } from 'electron'
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
const isDevelopment = process.env.NODE_ENV !== 'production'
// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
{ scheme: 'app', privileges: { secure: true, standard: true } }
])
async function createWindow() {
// Create the browser window.
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
// Required for Spectron testing
enableRemoteModule: !!process.env.IS_TEST,
// Use pluginOptions.nodeIntegration, leave this alone
// See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION
}
})
if (process.env.WEBPACK_DEV_SERVER_URL) {
// Load the url of the dev server if in development mode
await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
if (!process.env.IS_TEST) win.webContents.openDevTools()
} else {
createProtocol('app')
// Load the index.html when not in development
win.loadURL('app://./index.html')
}
}
// Quit when all windows are closed.
app.on('window-all-closed', () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', async () => {
if (isDevelopment && !process.env.IS_TEST) {
// Install Vue Devtools
try {
await installExtension(VUEJS_DEVTOOLS)
} catch (e) {
console.error('Vue Devtools failed to install:', e.toString())
}
}
createWindow()
})
// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
if (process.platform === 'win32') {
process.on('message', (data) => {
if (data === 'graceful-exit') {
app.quit()
}
})
} else {
process.on('SIGTERM', () => {
app.quit()
})
}
}
import axios from '../axios/axiosConfig';
import { config as appConfig } from '../config.js';
import * as api from '../axios/api.js';
import qs from 'qs';
import whiteList from '../axios/whiteList';
//import { reject, resolve } from 'core-js/fn/promise';
if (!appConfig.BASE_URL) {
appConfig.BASE_URL = appConfig.REAL_URL;
} else if (!appConfig.REAL_URL) {
appConfig.REAL_URL = appConfig.BASE_URL;
}
//获取url
function getUrl(url) {
let urlPre = url.split('?')[0];
let flag = false;
$.each(api, (key, val) => {
if (urlPre == val) {
$.each(whiteList, (_, wl) => {
if (wl.key == key && wl.isMock) {
flag = true;
return false;
}
});
}
});
if (!flag) {
url = appConfig.REAL_URL + url;
}
// console.log(url);
return url;
}
/**
* 封装get方法
* @param url
* @param data
* @returns {Promise}
*/
export function httpGet(url, params = {}) {
url = getUrl(url);
// log(url);
return new Promise((resolve, reject) => {
//这几个几url始终使用mokc数据
if (url.indexOf('alarm/bigScreen/alertComponent') > -1) {
resolve(alertComponen());
} else if (url.indexOf('alarm/bigScreen/securityComponent') > -1) {
resolve(securityComponent());
} else {
axios
.get(url, {
params: params
})
.then(response => {
resolve(response.data);
})
.catch(err => {
reject(err);
});
}
});
}
/**
* 封装post请求
* @param url
* @param data
* @returns {Promise}
*/
export function httpPost(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
// console.log(url);
axios.post(url, qs.stringify(data)).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
/**
* 封装patch请求
* @param url
* @param data
* @returns {Promise}
*/
export function patch(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios.patch(url, data).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
/**
* 封装put请求
* @param url
* @param data
* @returns {Promise}
*/
export function put(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios.put(url, qs.stringify(data)).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
/**
* 封装put请求 参数放在body
* @param url
* @param data
* @returns {Promise}
*/
export function putForJson(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios({
method: 'put',
url: url,
data: data,
headers: { 'Content-Type': 'application/json;charset=UTF-8' }
}).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
/**
* 封装del请求
* @param url
* @param data
* @returns {Promise}
*/
export function httpDel(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios.delete(url, { params: data }).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
export function httpDelForJson(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios({
method: 'delete',
url: url,
data: data,
headers: { 'Content-Type': 'application/json;charset=UTF-8' }
}).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
export function httpPostForJson(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios({
method: 'post',
url: url,
data: data,
headers: { 'Content-Type': 'application/json;charset=UTF-8'}
}).then(
response => {
resolve(response.data);
},
error => {
resolve(error.response.data);
}
);
});
}
export function httpGetFile(url, params = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios({
method: 'get',
url: url,
params: params,
responseType: 'blob'
}).then(
response => {
resolve(response.data);
},
error => {
if (error.response) {
console.log(error.response.status)
switch (error.response.status) {
case 403:
Message({
message: "登录凭证失效,请重新登录",
type: 'warning'
});
window.location.href = '#/login';
error.message = "登录凭证失效,请重新登录";
bus.$emit("todoDetailWebsocket");
break
case 401:
Message({
// message: '未授权,请重新登录',
message: '网络异常,请重新登录',
type: 'warning'
});
// error.message = '未授权,请重新登录';
error.message = '网络异常,请重新登录';
break
// localStorage.removeItem(appConfig.TOKEN_KEY)
// localStorage.removeItem(appConfig.USER_KEY)
// router.replace({
// path: '/login',
// // query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面
// })
case 400:
error.message = '网络异常'
case 404:
error.message = '网络异常'
break
case 405:
error.message = '网络异常'
break
case 408:
error.message = '网络异常'
break
case 500:
Message({
message: '内部服务器错误,请联系管理员',
type: 'warning'
});
break
case 501:
error.message = '网络未实现'
break
case 502:
error.message = '网络错误'
break
case 503:
error.message = '服务不可用'
break
case 504:
error.message = '网络超时'
break
case 505:
error.message = 'http版本不支持该请求'
break
default:
error.message = `连接错误${error.response.status}`
}
} else {
Message({
message: "网络异常",
type: 'warning'
});
}
return Promise.reject(error)
}
);
});
}
export function httpGetExport(url, params = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios
.get(url, {
params: params,
responseType: 'arraybuffer'
})
.then(response => {
resolve(response.data);
})
.catch(err => {
reject(err);
});
});
}
export function httpPostExport(url, params = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios
.post(url, {
params: qs.stringify(params),
responseType: 'arraybuffer'
})
.then(response => {
resolve(response.data);
})
.catch(err => {
reject(err);
});
});
}
export function apiDownLoad(url,data) {
url = getUrl(url);
return new Promise((resolve,reject) => {
axios
.get(url,{
params:data,
responseType:'blob'
}).then( res => {
resolve(res.data)
}).catch( err => {
resolve(err)
})
})
}
export function fileDownload(data, fileName) {
let blob = new Blob([data], {
type: 'application/octet-stream;charset=utf-8'
});
let filename = fileName || 'filename';
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(blob, filename);
} else {
var blobURL = window.URL.createObjectURL(blob);
var tempLink = document.createElement('a');
tempLink.style.display = 'none';
tempLink.href = blobURL;
tempLink.setAttribute('download', filename);
if (typeof tempLink.download === 'undefined') {
tempLink.setAttribute('target', '_blank');
}
document.body.appendChild(tempLink);
tempLink.click();
document.body.removeChild(tempLink);
window.URL.revokeObjectURL(blobURL);
}
}
export function httpUpload(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios({
method: 'post',
url: url,
data: data,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
// // 下载方法
// export function fileDownload (data, fileName) {
// let blob = new Blob([data], {
// type: "application/octet-stream"
// });
// let filename = fileName || "filename";
// if (typeof window.navigator.msSaveBlob !== "undefined") {
// window.navigator.msSaveBlob(blob, filename);
// } else {
// var blobURL = window.URL.createObjectURL(blob);
// var tempLink = document.createElement("a");
// tempLink.style.display = "none";
// tempLink.href = blobURL;
// tempLink.setAttribute("download", filename);
// if (typeof tempLink.download === "undefined") {
// tempLink.setAttribute("target", "_blank");
// }
// document.body.appendChild(tempLink);
// tempLink.click();
// document.body.removeChild(tempLink);
// window.URL.revokeObjectURL(blobURL);
// }
// }
<template>
<div>
<canvas ref="mycanvas" :width="cWidth" :height="cHeight"></canvas>
</div>
</template>
<script>
export default {
name: 'ElectricQuantity',
mycanvas: null,
ctx: null,
myInterval: null,
props: {
proQuantity: {
type: Number,
default: 50
},
proIsCharge: {
type: Boolean,
default: false
}
},
data () {
return {
cWidth: 66,
cHeight: 28,
jd: 0
}
},
created () {
},
watch: {
// 监听是否变化电量 ,如果是 做一个充电动画
proIsCharge (newVal, oldVal) {
console.log('======proIsCharge============', newVal)
let _this = this
clearInterval(_this.myInterval)
this.jd = 0
if (_this.proIsCharge) {
_this.myInterval = setInterval(function () {
_this.drawCharge()
}, 300)
}
},
proQuantity (newVal, oldVal) {
this.drawPath(this.proQuantity)
}
},
mounted () {
this.mycanvas = this.$refs.mycanvas
this.ctx = this.mycanvas.getContext('2d')
this.drawBg()
this.drawPath(this.proQuantity)
},
methods: {
// 画一个背景
drawBg () {
this.ctx.strokeStyle = 'rgba(255,255,255,1)'
this.ctx.lineWidth = 2
this.ctx.strokeRect(0, 0, 60, 28)
this.ctx.fillStyle = 'rgba(0,0,0,0.2)'
this.ctx.fillRect(0, 0, 60, 28)
this.ctx.fillStyle = 'rgba(255,255,255,1)'
this.ctx.fillRect(61, 7, 6, 14)
},
// 根据电量画出一个块
drawPath (quantity) {
if (this.proIsCharge) {
this.ctx.fillStyle = 'rgba(0,255,0,1)'
} else if (quantity < 20) {
this.ctx.fillStyle = 'red'
} else {
this.ctx.fillStyle = 'rgba(0,255,0,1)'
}
this.ctx.fillRect(1, 1, (60 - 2) * quantity / 100, 26)
},
drawCharge () {
this.ctx.clearRect(0, 0, this.cWidth, this.cHeight)
this.drawBg()
this.jd = this.jd + 10
if (this.jd > 100) {
this.jd = 0
}
this.drawPath(this.jd)
}
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div style="background: white">
<el-container>
<el-header style="font-size: 20px; font-weight: bold"
>卡车调度系统终端平台监控视频</el-header
>
<el-container>
<el-aside width="230px" style="height: 86vh">
<el-tree
:data="videoData"
:props="defaultProps"
@node-click="handleNodeClick"
accordion
>
<div slot-scope="{ node }">
<span>
<i class="el-icon-video-camera-solid"> {{ node.label }}</i>
</span>
</div>
</el-tree>
</el-aside>
<el-main id="elMain">
<div v-if="isChildren1" class="iframeList">
<div v-for="(item,index) in itemList" :key="index" class="videoChildren">
<video :ref="item.ref" width="330" height="200" muted autoplay class="twelveVideo"></video>
</div>
</div>
<div v-if="btnChildren" class="btn1">
<el-button
:disabled="up"
@click="upPage"
style="background-color: #7bbfea; color: white"
>上一页</el-button
><el-button
:disabled="down"
@click="downPage"
style="background-color: #7bbfea; color: white"
>下一页</el-button
>
</div>
<div v-if="isChildren2">
<iframe :src="url" class="iframeSingle"></iframe>
</div>
<div v-show="noPtz">
<video id="noPtzVideo" width="1378" muted autoplay></video>
</div>
<div v-show="isChildren3" class="dahuaViews"></div>
</el-main>
</el-container>
</el-container>
</div>
</template>
<script>
import Hls from "hls.js"
import EZUIKit from "ezuikit-js";
import { httpGet, httpPost, httpPostForJson } from "@/common/httpBean.js";
import {
mainCameraDetail,
cameraDetailToken,
cameraDetailDahuatoken,
mainCamera,
startCamera,
stopCamera,
cameraDetailYuntai,
} from "@/axios/api.js";
var noPtzhls = null;
export default {
data() {
return {
videoData: [],
defaultProps: {
children: "children",
label: "label",
},
itemList: [],
itemListNext: [],
itemListMiddleman: [],
isChildren1: true,
isChildren2: false,
isChildren3: false,
btnChildren: false,
isIP: "",
// url: "http://127.0.0.1:5500/webs/cn/demo.html",
// url1: "http://127.0.0.1:5500/webs/cn/demo1.html",
url:"http://192.168.9.2:85/cn/demo.html?ip=",
url1:"http://192.168.9.2:85/cn/demo",
dahuaData: [],
up: true,
down: false,
accessToken:"",
noPtz:false,
};
},
mounted() {
this.getCode();
this.getDaHua();
this.getAccessToken();
},
methods: {
getAccessToken() {
httpGet(cameraDetailToken).then(res => {
this.accessToken = res.data.accessToken;
});
},
getCode() {
//分区数据
httpGet(mainCamera, { size: 999 }).then((res) => {
//console.log(res);
let data1 = [];
res.content.forEach((item) => {
item.label = item.name;
data1.push(item);
});
//this.videoData = data1;
if (res != "") {
//总摄像头数据
httpGet(mainCameraDetail, { size: 999 }).then((res) => {
let fenqu1 = [];
let fenqu2 = [];
let fenqu3 = [];
let fenquName = [];
res.content.forEach((item,index) => {
item.ref = "video" + index;
item.hls = null;
item.label = item.cameraName;
fenquName.push(item);
});
fenquName.forEach(function (item) {
if (item.cameraId == 1) {
fenqu1.push(item);
} else if (item.cameraId == 2) {
fenqu2.push(item);
} else {
fenqu3.push(item);
}
});
let videoData1 = data1;
videoData1.forEach((item) => {
if (item.id == 1) {
item.children = fenqu1;
} else if (item.id == 2) {
item.children = fenqu2;
} else {
item.children = fenqu3;
}
});
this.videoData = videoData1;
console.log(this.videoData);
});
}
});
},
handleNodeClick(data) {
console.log(data);
let that = this;
if (data.children) {
if (data.children[0].brand == 1) {
let temporaryData1 = [];
let temporaryData2 = [];
if (data.children.length > 12) {
for (let i = 0; i < 12; i++) {
temporaryData1.push(data.children[i]);
}
for (let j = 12; j < data.children.length; j++) {
temporaryData2.push(data.children[j]);
}
this.itemList = temporaryData1;
this.itemListNext = temporaryData2;
this.btnChildren = true;
this.$nextTick(()=>{
this.itemList.forEach(function(item,index){
item.hls = new Hls();
item.hls.loadSource(item.url)
item.hls.attachMedia(that.$refs[item.ref][0]);
item.hls.on(Hls.Events.MANIFEST_PARSED,function() {
that.$refs[item.ref][0].play();
});
})
})
if(noPtzhls != null){
noPtzhls.destroy();
}
} else {
this.btnChildren = false;
this.itemList = data.children;
this.$nextTick(()=>{
this.itemList.forEach(function(item,index){
item.hls = new Hls();
item.hls.loadSource(item.url)
item.hls.attachMedia(that.$refs[item.ref][0]);
item.hls.on(Hls.Events.MANIFEST_PARSED,function() {
that.$refs[item.ref][0].play();
});
})
})
if(noPtzhls != null){
noPtzhls.destroy();
}
}
this.isChildren1 = true;
this.isChildren2 = false;
this.isChildren3 = false;
this.up = true;
this.down = false;
this.noPtz = false;
//改变视频大小
this.$nextTick(()=>{
this.winSize();
})
} else if (data.children[0].brand == 2) {
this.isChildren1 = false;
this.isChildren2 = false;
this.isChildren3 = true;
this.btnChildren = false;
this.noPtz = false;
if(noPtzhls != null){
noPtzhls.destroy();
}
let dahuaViews = document.querySelector(".dahuaViews");
dahuaViews.innerHTML = `<div><div id="dahuaVideo0"></div></div>
<div><div id="dahuaVideo1"></div></div>
<div><div id="dahuaVideo2"></div></div>
<div><div id="dahuaVideo3"></div></div>`;
var player = this.$cyberplayerJs(`dahuaVideo0`).setup({
width: 340, // 宽度,也可以支持百分比(不过父元素宽度要有)
height: 210, // 高度,也可以支持百分比
title: "", // 标题
isLive: true, // 必须设置,表明是直播视频
file: that.dahuaData[0].url, //您的视频源的地址(目前是乐橙示例播放地址)
image: "", // 预览图
autostart: true, // 是否自动播放
stretching: "uniform", // 拉伸设置
repeat: false, // 是否重复播放
volume: 0, // 音量,注:仅当用户同意、网站由用户激活或媒体无声时允许自动播放
controls: false, // 是否显示控制栏
hls: {
reconnecttime: 5, // hls直播重连间隔秒数
},
ak: "39f82ac87fc3462ea4dcc78734450f57", // 百度智能云平台注册(https://cloud.baidu.com)即可获得accessKey
});
var player = this.$cyberplayerJs(`dahuaVideo1`).setup({
width: 340, // 宽度,也可以支持百分比(不过父元素宽度要有)
height: 210, // 高度,也可以支持百分比
title: "", // 标题
isLive: true, // 必须设置,表明是直播视频
file: that.dahuaData[1].url, //您的视频源的地址(目前是乐橙示例播放地址)
image: "", // 预览图
autostart: true, // 是否自动播放
stretching: "uniform", // 拉伸设置
repeat: false, // 是否重复播放
volume: 0, // 音量,注:仅当用户同意、网站由用户激活或媒体无声时允许自动播放
controls: false, // 是否显示控制栏
hls: {
reconnecttime: 5, // hls直播重连间隔秒数
},
ak: "39f82ac87fc3462ea4dcc78734450f57", // 百度智能云平台注册(https://cloud.baidu.com)即可获得accessKey
});
var player = this.$cyberplayerJs(`dahuaVideo2`).setup({
width: 340, // 宽度,也可以支持百分比(不过父元素宽度要有)
height: 210, // 高度,也可以支持百分比
title: "", // 标题
isLive: true, // 必须设置,表明是直播视频
file: that.dahuaData[2].url, //您的视频源的地址(目前是乐橙示例播放地址)
image: "", // 预览图
autostart: true, // 是否自动播放
stretching: "uniform", // 拉伸设置
repeat: false, // 是否重复播放
volume: 0, // 音量,注:仅当用户同意、网站由用户激活或媒体无声时允许自动播放
controls: false, // 是否显示控制栏
hls: {
reconnecttime: 5, // hls直播重连间隔秒数
},
ak: "39f82ac87fc3462ea4dcc78734450f57", // 百度智能云平台注册(https://cloud.baidu.com)即可获得accessKey
});
var player = this.$cyberplayerJs(`dahuaVideo3`).setup({
width: 340, // 宽度,也可以支持百分比(不过父元素宽度要有)
height: 210, // 高度,也可以支持百分比
title: "", // 标题
isLive: true, // 必须设置,表明是直播视频
file: that.dahuaData[3].url, //您的视频源的地址(目前是乐橙示例播放地址)
image: "", // 预览图
autostart: true, // 是否自动播放
stretching: "uniform", // 拉伸设置
repeat: false, // 是否重复播放
volume: 0, // 音量,注:仅当用户同意、网站由用户激活或媒体无声时允许自动播放
controls: false, // 是否显示控制栏
hls: {
reconnecttime: 5, // hls直播重连间隔秒数
},
ak: "39f82ac87fc3462ea4dcc78734450f57", // 百度智能云平台注册(https://cloud.baidu.com)即可获得accessKey
});
}
} else {
this.btnChildren = false;
if (data.brand == 1) {
httpGet(cameraDetailYuntai, {ip:data.cameraIp}).then((res) => {
if(!res){
let noPtzVideo = document.getElementById('noPtzVideo');
noPtzhls = new Hls();
noPtzhls.loadSource(data.url);
noPtzhls.attachMedia(noPtzVideo);
noPtzhls.on(Hls.Events.MANIFEST_PARSED,function() {
noPtzVideo.play();
});
this.isChildren1 = false;
this.isChildren2 = false;
this.isChildren3 = false;
this.btnChildren = false;
this.noPtz = true;
}else{
this.url = "";
let originalUrl = "http://192.168.9.2:85/cn/demo.html?ip=";
// let originalUrl = "http://127.0.0.1:5500/webs/cn/demo.html?ip=";
this.isChildren1 = false;
this.isChildren2 = true;
this.isChildren3 = false;
this.isIP = data.cameraIp;
this.url = originalUrl + data.cameraIp;
this.btnChildren = false;
this.noPtz = false;
if(noPtzhls != null){
noPtzhls.destroy();
}
}
})
} else if (data.brand == 2) {
this.isChildren1 = false;
this.isChildren2 = false;
this.isChildren3 = true;
this.btnChildren = false;
this.noPtz = false;
if(noPtzhls != null){
noPtzhls.destroy();
}
let dahuaViews = document.querySelector(".dahuaViews");
dahuaViews.innerHTML = '<div id="dahuaVideoAlone"></div>';
var player = this.$cyberplayerJs(`dahuaVideoAlone`).setup({
width: 1390, // 宽度,也可以支持百分比(不过父元素宽度要有)
height: 760, // 高度,也可以支持百分比
title: "", // 标题
isLive: true, // 必须设置,表明是直播视频
file: data.url, //您的视频源的地址(目前是乐橙示例播放地址)
image: "", // 预览图
autostart: true, // 是否自动播放
stretching: "uniform", // 拉伸设置
repeat: false, // 是否重复播放
volume: 0, // 音量,注:仅当用户同意、网站由用户激活或媒体无声时允许自动播放
controls: false, // 是否显示控制栏
hls: {
reconnecttime: 5, // hls直播重连间隔秒数
},
ak: "39f82ac87fc3462ea4dcc78734450f57", // 百度智能云平台注册(https://cloud.baidu.com)即可获得accessKey
});
}
}
},
getDaHua() {
httpGet(mainCameraDetail, { page: 0, size: 100 }).then((res) => {
let that = this;
let dahua = [];
res.content.forEach(function (item) {
if (item.brand == 2) {
dahua.push(item);
}
});
this.dahuaData = dahua;
});
},
upPage() {
let that = this;
this.up = true;
this.down = false;
this.itemList = this.itemListMiddleman;
this.$nextTick(()=>{
this.itemList.forEach(function(item,index){
item.hls = new Hls();
item.hls.loadSource(item.url)
item.hls.attachMedia(that.$refs[item.ref][0]);
item.hls.on(Hls.Events.MANIFEST_PARSED,function() {
that.$refs[item.ref][0].play();
});
})
})
//改变视频大小
this.$nextTick(()=>{
this.winSize();
})
},
downPage() {
let that = this;
this.itemListMiddleman = this.itemList;
this.itemList = [];
this.up = false;
this.down = true;
this.itemList = this.itemListNext;
this.$nextTick(()=>{
this.itemList.forEach(function(item,index){
item.hls = new Hls();
item.hls.loadSource(item.url)
item.hls.attachMedia(that.$refs[item.ref][0]);
item.hls.on(Hls.Events.MANIFEST_PARSED,function() {
that.$refs[item.ref][0].play();
});
})
})
//改变视频大小
this.$nextTick(()=>{
this.winSize();
})
},
//监控el-main大小
winSize(){
let elMain = document.getElementById('elMain');
let elMainWight = parseInt(getComputedStyle(elMain).width) ;
if(elMainWight > 1650){
let twelveVideo = document.getElementsByClassName('twelveVideo');
for(let i = 0;i < twelveVideo.length;i++){
twelveVideo[i].width = 450;
twelveVideo[i].height = 320;
}
}
}
},
// 销毁
destroyed() {
this.itemList.forEach(function(item,index){
item.hls.destroy();
})
if(noPtzhls != null){
noPtzhls.destroy();
}
}
};
</script>
<style>
.mianBodysSon{
width: 100%;
display:flex;
flex-wrap:wrap;
justify-content: center;
}
.btn1 {
position: absolute;
top: 92%;
left: 57%;
}
.dahuaViews {
display: flex;
flex-wrap: wrap;
margin-left: 5px;
}
.dahuaViews>div{
margin-left: 1px;
border: 1px greenyellow solid;
}
.videoChildren {
scrollbar-width: none;
}
.el-header,
.el-footer {
background-color: #7bbfea;
color: white;
text-align: center;
letter-spacing: 10px;
font-size: 25px !important;
line-height: 60px;
}
.el-aside::-webkit-scrollbar {
display: none;
}
.el-aside {
scrollbar-width: none;
}
.el-aside {
background-color: #fffef9;
color: #333;
text-align: center;
}
.el-main {
background-color: white;
color: #333;
text-align: center;
height: 86vh;
overflow:hidden;
}
.el-tree-node__content {
height: 55px;
background-color: #e9eef3;
width: 228px;
}
.el-tree-node {
background-color: #e9eef3;
border: 1px solid #d3d7d4;
}
.el-tree-node__content:hover {
background-color: white;
}
.iframeList {
display: flex;
flex-wrap: wrap;
align-content: center;
padding-left: 25px;
box-sizing: border-box;
}
.iframeList>div{
border: 1px greenyellow solid;
}
.iframeItem {
height: 220px;
width: 340px;
background: #fff;
margin-bottom: 0px;
}
.iframeItem::-webkit-scrollbar {
display: none;
}
.iframeItem {
scrollbar-width: none;
}
@-moz-document url-prefix() {
.iframeItem {
border: 1px solid palegreen;
}
}
.iframeSingle {
width: 1378px;
height: 763px;
}
</style>
(function() {
var Nr = 10;
// convert two-dimensional indicies to one-dim array indices
var I00 = 0;
var I01 = 1;
var I02 = 2;
var I03 = 3;
var I10 = 4;
var I11 = 5;
var I12 = 6;
var I13 = 7;
var I20 = 8;
var I21 = 9;
var I22 = 10;
var I23 = 11;
var I30 = 12;
var I31 = 13;
var I32 = 14;
var I33 = 15;
// S-Box substitution table
var S_enc = new Array(
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16);
// inverse S-Box for decryptions
var S_dec = new Array(
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,
0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,
0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,
0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,
0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d);
function cvt_hex8 (val) {
var vh = (val>>>4)&0x0f;
return vh.toString(16) + (val&0x0f).toString(16);
}
function cvt_byte (str) {
// get the first hex digit
var val1 = str.charCodeAt(0);
// do some error checking
if (val1 >= 48 && val1 <= 57) {
// have a valid digit 0-9
val1 -= 48;
} else if (val1 >= 65 && val1 <= 70) {
// have a valid digit A-F
val1 -= 55;
} else if (val1 >= 97 && val1 <= 102) {
// have a valid digit A-F
val1 -= 87;
} else {
// not 0-9 or A-F, complain
console.log( str.charAt(1)+" is not a valid hex digit" );
return -1;
}
// get the second hex digit
var val2 = str.charCodeAt(1);
// do some error checking
if ( val2 >= 48 && val2 <= 57 ) {
// have a valid digit 0-9
val2 -= 48;
} else if ( val2 >= 65 && val2 <= 70 ) {
// have a valid digit A-F
val2 -= 55;
} else if ( val2 >= 97 && val2 <= 102 ) {
// have a valid digit A-F
val2 -= 87;
} else {
// not 0-9 or A-F, complain
console.log( str.charAt(2)+" is not a valid hex digit" );
return -1;
}
// all is ok, return the value
return val1*16 + val2;
}
// conversion function for non-constant subscripts
// assume subscript range 0..3
function I(x,y) {
return (x*4) + y;
}
// remove spaces from input
function remove_spaces(instr) {
var i;
var outstr = "";
for(i=0; i<instr.length; i++) {
if ( instr.charAt(i) != " " )
// not a space, include it
outstr += instr.charAt(i);
}
return outstr;
}
// get the message to encrypt/decrypt or the key
// return as a 16-byte array
function get_value(str, isASCII) {
var dbyte = new Array(16);
var i;
var val; // one hex digit
if (isASCII) {
// check length of data
if (str.length > 16) {
console.log("is too long, using the first 16 ASCII characters" );
}
// have ASCII data
// 16 characters?
if (str.length >= 16) {
// 16 or more characters
for(i=0; i<16; i++) {
dbyte[i] = str.charCodeAt(i);
}
} else {
// less than 16 characters - fill with NULLs
for(i=0; i<str.length; i++) {
dbyte[i] = str.charCodeAt(i);
}
for( i=str.length; i<16; i++) {
dbyte[i] = 0;
}
}
} else {
// have hex data - remove any spaces they used, then convert
//str = remove_spaces(str);
// check length of data
if ( str.length != 32 ) {
//console.log("\tget_value:\tstr = " + str + "\tisASCII = " + isASCII); //isASCII = false
console.log("length wrong: Is " + str.length + " hex digits, but must be 128 bits (32 hex digits)");
dbyte[0] = -1;
return dbyte;
}
for( i=0; i<16; i++ ) {
// isolate and convert this substring
dbyte[i] = cvt_byte( str.substr(i*2,2) );
if( dbyte[i] < 0 ) {
// have an error
dbyte[0] = -1;
return dbyte;
}
}
}
// return successful conversion
return dbyte;
}
//do the AES GF(2**8) multiplication
// do this by the shift-and-"add" approach
function aes_mul(a, b) {
var res = 0;
while(a > 0) {
if((a&1) != 0)
res = res ^ b; // "add" to the result
a >>>= 1; // shift a to get next higher-order bit
b <<= 1; // shift multiplier also
}
// now reduce it modulo x**8 + x**4 + x**3 + x + 1
var hbit = 0x10000; // bit to test if we need to take action
var modulus = 0x11b00; // modulus - XOR by this to change value
while(hbit >= 0x100) {
if ((res & hbit) != 0) {
res ^= modulus; // XOR with the modulus
}
// prepare for the next loop
hbit >>= 1;
modulus >>= 1;
}
return res;
}
// apply the S-box substitution to the key expansion
function SubWord(word_ary) {
var i;
for(i=0; i<16; i++) {
word_ary[i] = S_enc[word_ary[i]];
}
return word_ary;
}
// rotate the bytes in a word
function RotWord(word_ary) {
return new Array(word_ary[1], word_ary[2], word_ary[3], word_ary[0]);
}
// calculate the first item Rcon[i] = { x^(i-1), 0, 0, 0 }
// note we only return the first item
function Rcon(exp) {
var val = 2;
var result = 1;
// remember to calculate x^(exp-1)
exp--;
// process the exponent using normal shift and multiply
while ( exp > 0 )
{
if ( (exp & 1) != 0 )
result = aes_mul( result, val );
// square the value
val = aes_mul( val, val );
// move to the next bit
exp >>= 1;
}
return result;
}
// round key generation
// return a byte array with the expanded key information
function key_expand( key )
{
var temp = new Array(4);
var i, j;
var w = new Array(4*(Nr+1));
// copy initial key stuff
for( i=0; i<16; i++ )
{
w[i] = key[i];
}
// generate rest of key schedule using 32-bit words
i = 4;
while ( i < 4*(Nr+1)) // blocksize * ( rounds + 1 )
{
// copy word W[i-1] to temp
for( j=0; j<4; j++ )
temp[j] = w[(i-1)*4+j];
if ( i % 4 == 0)
{
// temp = SubWord(RotWord(temp)) ^ Rcon[i/4];
temp = RotWord( temp );
temp = SubWord( temp );
temp[0] ^= Rcon( i>>>2 );
}
// word = word ^ temp
for( j=0; j<4; j++ )
w[i*4+j] = w[(i-4)*4+j] ^ temp[j];
i++;
}
return w;
}
// do S-Box substitution
function SubBytes(state, Sbox)
{
var i;
for( i=0; i<16; i++ )
state[i] = Sbox[ state[i] ];
return state;
}
// shift each row as appropriate
function ShiftRows(state)
{
var t0, t1, t2, t3;
// top row (row 0) isn't shifted
// next row (row 1) rotated left 1 place
t0 = state[I10];
t1 = state[I11];
t2 = state[I12];
t3 = state[I13];
state[I10] = t1;
state[I11] = t2;
state[I12] = t3;
state[I13] = t0;
// next row (row 2) rotated left 2 places
t0 = state[I20];
t1 = state[I21];
t2 = state[I22];
t3 = state[I23];
state[I20] = t2;
state[I21] = t3;
state[I22] = t0;
state[I23] = t1;
// bottom row (row 3) rotated left 3 places
t0 = state[I30];
t1 = state[I31];
t2 = state[I32];
t3 = state[I33];
state[I30] = t3;
state[I31] = t0;
state[I32] = t1;
state[I33] = t2;
return state;
}
// inverset shift each row as appropriate
function InvShiftRows(state)
{
var t0, t1, t2, t3;
// top row (row 0) isn't shifted
// next row (row 1) rotated left 1 place
t0 = state[I10];
t1 = state[I11];
t2 = state[I12];
t3 = state[I13];
state[I10] = t3;
state[I11] = t0;
state[I12] = t1;
state[I13] = t2;
// next row (row 2) rotated left 2 places
t0 = state[I20];
t1 = state[I21];
t2 = state[I22];
t3 = state[I23];
state[I20] = t2;
state[I21] = t3;
state[I22] = t0;
state[I23] = t1;
// bottom row (row 3) rotated left 3 places
t0 = state[I30];
t1 = state[I31];
t2 = state[I32];
t3 = state[I33];
state[I30] = t1;
state[I31] = t2;
state[I32] = t3;
state[I33] = t0;
return state;
}
// process column info
function MixColumns(state)
{
var col;
var c0, c1, c2, c3;
for( col=0; col<4; col++ )
{
c0 = state[I(0,col)];
c1 = state[I(1,col)];
c2 = state[I(2,col)];
c3 = state[I(3,col)];
// do mixing, and put back into array
state[I(0,col)] = aes_mul(2,c0) ^ aes_mul(3,c1) ^ c2 ^ c3;
state[I(1,col)] = c0 ^ aes_mul(2,c1) ^ aes_mul(3,c2) ^ c3;
state[I(2,col)] = c0 ^ c1 ^ aes_mul(2,c2) ^ aes_mul(3,c3);
state[I(3,col)] = aes_mul(3,c0) ^ c1 ^ c2 ^ aes_mul(2,c3);
}
return state;
}
// inverse process column info
function InvMixColumns(state)
{
var col;
var c0, c1, c2, c3;
for( col=0; col<4; col++ )
{
c0 = state[I(0,col)];
c1 = state[I(1,col)];
c2 = state[I(2,col)];
c3 = state[I(3,col)];
// do inverse mixing, and put back into array
state[I(0,col)] = aes_mul(0x0e,c0) ^ aes_mul(0x0b,c1)
^ aes_mul(0x0d,c2) ^ aes_mul(0x09,c3);
state[I(1,col)] = aes_mul(0x09,c0) ^ aes_mul(0x0e,c1)
^ aes_mul(0x0b,c2) ^ aes_mul(0x0d,c3);
state[I(2,col)] = aes_mul(0x0d,c0) ^ aes_mul(0x09,c1)
^ aes_mul(0x0e,c2) ^ aes_mul(0x0b,c3);
state[I(3,col)] = aes_mul(0x0b,c0) ^ aes_mul(0x0d,c1)
^ aes_mul(0x09,c2) ^ aes_mul(0x0e,c3);
}
return state;
}
// insert subkey information
function AddRoundKey( state, w, base )
{
var col;
for( col=0; col<4; col++ )
{
state[I(0,col)] ^= w[base+col*4];
state[I(1,col)] ^= w[base+col*4+1];
state[I(2,col)] ^= w[base+col*4+2];
state[I(3,col)] ^= w[base+col*4+3];
}
return state;
}
// return a transposed array
function transpose( msg )
{
var row, col;
var state = new Array( 16 );
for( row=0; row<4; row++ )
for( col=0; col<4; col++ )
state[I(row,col)] = msg[I(col,row)];
return state;
}
// final AES state
var AES_output = new Array(16);
// format AES output
// -- uses the global array DES_output
function format_AES_output(bASCII)
{
var i;
var bits;
var str="";
// what type of data do we have to work with?
if (bASCII)
{
// convert each set of bits back to ASCII
for( i=0; i<16; i++ )
str += String.fromCharCode( AES_output[i] );
}
else
{
// output hexdecimal data (insert spaces)
str = cvt_hex8( AES_output[0] );
for( i=1; i<16; i++ )
{
str += "" + cvt_hex8( AES_output[i] );
}
}
return str;
}
// do encrytion
function aes_encrypt(str, key, bASCII)
{
//console.log(" aes_encrypt:\tstr = " + str + "\tkey = " + key + "\t bASCII = " + bASCII);
var w = new Array( 4*(Nr+1) ); // subkey information
var state = new Array( 16 ); // working state
var round;
//accumulated_output_info = "";
// get the message from the user
// also check if it is ASCII or hex
var msg = get_value(str, bASCII);
// problems??
if ( msg[0] < 0 )
{
return;
}
// get the key from the user
var key = get_value(key, false);
// problems??
if ( key[0] < 0 )
{
return;
}
// expand the key
w = key_expand( key );
// initial state = message in columns (transposed from what we input)
state = transpose( msg );
// display the round key - Transpose due to the way it is stored/used
state = AddRoundKey(state, w, 0);
for( round=1; round<Nr; round++ )
{
state = SubBytes(state, S_enc);
state = ShiftRows(state);
state = MixColumns(state);
// display the round key - Transpose due to the way it is stored/used
// note here the spec uses 32-bit words, we are using bytes, so an extra *4
state = AddRoundKey(state, w, round*4*4);
}
SubBytes(state, S_enc);
ShiftRows(state);
AddRoundKey(state, w, Nr*4*4);
// process output
AES_output = transpose( state );
var szOutput = format_AES_output(!bASCII);
return szOutput;
}
// do decryption
function aes_decrypt(str, key, bASCII)
{
//console.log(" aes_decrypt:\tstr = " + str + "\tkey = " + key + "\tbASCII = " + bASCII);
var w = new Array( 4*(Nr+1) ); // subkey information
var state = new Array( 16 ); // working state
var round;
//accumulated_output_info = "";
// get the message from the user
// also check if it is ASCII or hex
var msg = get_value(str, bASCII);
// problems??
if ( msg[0] < 0 )
{
return;
}
// get the key from the user
var key = get_value(key, false);
// problems??
if ( key[0] < 0 )
{
return;
}
// expand the key
w = key_expand( key );
// initial state = message
state = transpose( msg );
// display the round key - Transpose due to the way it is stored/used
state = AddRoundKey(state, w, Nr*4*4);
for( round=Nr-1; round>=1; round-- )
{
state = InvShiftRows(state);
state = SubBytes(state, S_dec);
// display the round key - Transpose due to the way it is stored/used
// note here the spec uses 32-bit words, we are using bytes, so an extra *4
state = AddRoundKey(state, w, round*4*4);
state = InvMixColumns(state);
}
InvShiftRows(state);
SubBytes(state, S_dec);
AddRoundKey(state, w, 0);
// process output
AES_output = transpose( state );
var szOutput = format_AES_output(!bASCII);
return szOutput;
}
window.aes_encrypt = aes_encrypt;
window.aes_decrypt = aes_decrypt;
window.console = window.console || {
log: function() {}
};
}());
\ No newline at end of file
var dbits,canary=244837814094590,j_lm=(canary&16777215)==15715070;function BigInteger(a,b,c){a!=null&&("number"==typeof a?this.fromNumber(a,b,c):b==null&&"string"!=typeof a?this.fromString(a,256):this.fromString(a,b))}function nbi(){return new BigInteger(null)}function am1(a,b,c,d,e,g){for(;--g>=0;){var h=b*this[a++]+c[d]+e,e=Math.floor(h/67108864);c[d++]=h&67108863}return e}
function am2(a,b,c,d,e,g){var h=b&32767;for(b>>=15;--g>=0;){var f=this[a]&32767,o=this[a++]>>15,p=b*f+o*h,f=h*f+((p&32767)<<15)+c[d]+(e&1073741823),e=(f>>>30)+(p>>>15)+b*o+(e>>>30);c[d++]=f&1073741823}return e}function am3(a,b,c,d,e,g){var h=b&16383;for(b>>=14;--g>=0;){var f=this[a]&16383,o=this[a++]>>14,p=b*f+o*h,f=h*f+((p&16383)<<14)+c[d]+e,e=(f>>28)+(p>>14)+b*o;c[d++]=f&268435455}return e}
j_lm&&navigator.appName=="Microsoft Internet Explorer"?(BigInteger.prototype.am=am2,dbits=30):j_lm&&navigator.appName!="Netscape"?(BigInteger.prototype.am=am1,dbits=26):(BigInteger.prototype.am=am3,dbits=28);BigInteger.prototype.DB=dbits;BigInteger.prototype.DM=(1<<dbits)-1;BigInteger.prototype.DV=1<<dbits;var BI_FP=52;BigInteger.prototype.FV=Math.pow(2,BI_FP);BigInteger.prototype.F1=BI_FP-dbits;BigInteger.prototype.F2=2*dbits-BI_FP;var BI_RM="0123456789abcdefghijklmnopqrstuvwxyz",BI_RC=[],rr,vv;
rr="0".charCodeAt(0);for(vv=0;vv<=9;++vv)BI_RC[rr++]=vv;rr="a".charCodeAt(0);for(vv=10;vv<36;++vv)BI_RC[rr++]=vv;rr="A".charCodeAt(0);for(vv=10;vv<36;++vv)BI_RC[rr++]=vv;function int2char(a){return BI_RM.charAt(a)}function intAt(a,b){var c=BI_RC[a.charCodeAt(b)];return c==null?-1:c}function bnpCopyTo(a){for(var b=this.t-1;b>=0;--b)a[b]=this[b];a.t=this.t;a.s=this.s}function bnpFromInt(a){this.t=1;this.s=a<0?-1:0;a>0?this[0]=a:a<-1?this[0]=a+DV:this.t=0}
function nbv(a){var b=nbi();b.fromInt(a);return b}
function bnpFromString(a,b){var c;if(b==16)c=4;else if(b==8)c=3;else if(b==256)c=8;else if(b==2)c=1;else if(b==32)c=5;else if(b==4)c=2;else{this.fromRadix(a,b);return}this.s=this.t=0;for(var d=a.length,e=!1,g=0;--d>=0;){var h=c==8?a[d]&255:intAt(a,d);h<0?a.charAt(d)=="-"&&(e=!0):(e=!1,g==0?this[this.t++]=h:g+c>this.DB?(this[this.t-1]|=(h&(1<<this.DB-g)-1)<<g,this[this.t++]=h>>this.DB-g):this[this.t-1]|=h<<g,g+=c,g>=this.DB&&(g-=this.DB))}if(c==8&&(a[0]&128)!=0)this.s=-1,g>0&&(this[this.t-1]|=(1<<
this.DB-g)-1<<g);this.clamp();e&&BigInteger.ZERO.subTo(this,this)}function bnpClamp(){for(var a=this.s&this.DM;this.t>0&&this[this.t-1]==a;)--this.t}
function bnToString(a){if(this.s<0)return"-"+this.negate().toString(a);if(a==16)a=4;else if(a==8)a=3;else if(a==2)a=1;else if(a==32)a=5;else if(a==64)a=6;else if(a==4)a=2;else return this.toRadix(a);var b=(1<<a)-1,c,d=!1,e="",g=this.t,h=this.DB-g*this.DB%a;if(g-- >0){if(h<this.DB&&(c=this[g]>>h)>0)d=!0,e=int2char(c);for(;g>=0;)h<a?(c=(this[g]&(1<<h)-1)<<a-h,c|=this[--g]>>(h+=this.DB-a)):(c=this[g]>>(h-=a)&b,h<=0&&(h+=this.DB,--g)),c>0&&(d=!0),d&&(e+=int2char(c))}return d?e:"0"}
function bnNegate(){var a=nbi();BigInteger.ZERO.subTo(this,a);return a}function bnAbs(){return this.s<0?this.negate():this}function bnCompareTo(a){var b=this.s-a.s;if(b!=0)return b;var c=this.t,b=c-a.t;if(b!=0)return b;for(;--c>=0;)if((b=this[c]-a[c])!=0)return b;return 0}function nbits(a){var b=1,c;if((c=a>>>16)!=0)a=c,b+=16;if((c=a>>8)!=0)a=c,b+=8;if((c=a>>4)!=0)a=c,b+=4;if((c=a>>2)!=0)a=c,b+=2;a>>1!=0&&(b+=1);return b}
function bnBitLength(){return this.t<=0?0:this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)}function bnpDLShiftTo(a,b){var c;for(c=this.t-1;c>=0;--c)b[c+a]=this[c];for(c=a-1;c>=0;--c)b[c]=0;b.t=this.t+a;b.s=this.s}function bnpDRShiftTo(a,b){for(var c=a;c<this.t;++c)b[c-a]=this[c];b.t=Math.max(this.t-a,0);b.s=this.s}
function bnpLShiftTo(a,b){var c=a%this.DB,d=this.DB-c,e=(1<<d)-1,g=Math.floor(a/this.DB),h=this.s<<c&this.DM,f;for(f=this.t-1;f>=0;--f)b[f+g+1]=this[f]>>d|h,h=(this[f]&e)<<c;for(f=g-1;f>=0;--f)b[f]=0;b[g]=h;b.t=this.t+g+1;b.s=this.s;b.clamp()}
function bnpRShiftTo(a,b){b.s=this.s;var c=Math.floor(a/this.DB);if(c>=this.t)b.t=0;else{var d=a%this.DB,e=this.DB-d,g=(1<<d)-1;b[0]=this[c]>>d;for(var h=c+1;h<this.t;++h)b[h-c-1]|=(this[h]&g)<<e,b[h-c]=this[h]>>d;d>0&&(b[this.t-c-1]|=(this.s&g)<<e);b.t=this.t-c;b.clamp()}}
function bnpSubTo(a,b){for(var c=0,d=0,e=Math.min(a.t,this.t);c<e;)d+=this[c]-a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t<this.t){for(d-=a.s;c<this.t;)d+=this[c],b[c++]=d&this.DM,d>>=this.DB;d+=this.s}else{for(d+=this.s;c<a.t;)d-=a[c],b[c++]=d&this.DM,d>>=this.DB;d-=a.s}b.s=d<0?-1:0;d<-1?b[c++]=this.DV+d:d>0&&(b[c++]=d);b.t=c;b.clamp()}
function bnpMultiplyTo(a,b){var c=this.abs(),d=a.abs(),e=c.t;for(b.t=e+d.t;--e>=0;)b[e]=0;for(e=0;e<d.t;++e)b[e+c.t]=c.am(0,d[e],b,e,0,c.t);b.s=0;b.clamp();this.s!=a.s&&BigInteger.ZERO.subTo(b,b)}function bnpSquareTo(a){for(var b=this.abs(),c=a.t=2*b.t;--c>=0;)a[c]=0;for(c=0;c<b.t-1;++c){var d=b.am(c,b[c],a,2*c,0,1);if((a[c+b.t]+=b.am(c+1,2*b[c],a,2*c+1,d,b.t-c-1))>=b.DV)a[c+b.t]-=b.DV,a[c+b.t+1]=1}a.t>0&&(a[a.t-1]+=b.am(c,b[c],a,2*c,0,1));a.s=0;a.clamp()}
function bnpDivRemTo(a,b,c){var d=a.abs();if(!(d.t<=0)){var e=this.abs();if(e.t<d.t)b!=null&&b.fromInt(0),c!=null&&this.copyTo(c);else{c==null&&(c=nbi());var g=nbi(),h=this.s,a=a.s,f=this.DB-nbits(d[d.t-1]);f>0?(d.lShiftTo(f,g),e.lShiftTo(f,c)):(d.copyTo(g),e.copyTo(c));d=g.t;e=g[d-1];if(e!=0){var o=e*(1<<this.F1)+(d>1?g[d-2]>>this.F2:0),p=this.FV/o,o=(1<<this.F1)/o,q=1<<this.F2,n=c.t,k=n-d,j=b==null?nbi():b;g.dlShiftTo(k,j);c.compareTo(j)>=0&&(c[c.t++]=1,c.subTo(j,c));BigInteger.ONE.dlShiftTo(d,
j);for(j.subTo(g,g);g.t<d;)g[g.t++]=0;for(;--k>=0;){var l=c[--n]==e?this.DM:Math.floor(c[n]*p+(c[n-1]+q)*o);if((c[n]+=g.am(0,l,c,k,0,d))<l){g.dlShiftTo(k,j);for(c.subTo(j,c);c[n]<--l;)c.subTo(j,c)}}b!=null&&(c.drShiftTo(d,b),h!=a&&BigInteger.ZERO.subTo(b,b));c.t=d;c.clamp();f>0&&c.rShiftTo(f,c);h<0&&BigInteger.ZERO.subTo(c,c)}}}}function bnMod(a){var b=nbi();this.abs().divRemTo(a,null,b);this.s<0&&b.compareTo(BigInteger.ZERO)>0&&a.subTo(b,b);return b}function Classic(a){this.m=a}
function cConvert(a){return a.s<0||a.compareTo(this.m)>=0?a.mod(this.m):a}function cRevert(a){return a}function cReduce(a){a.divRemTo(this.m,null,a)}function cMulTo(a,b,c){a.multiplyTo(b,c);this.reduce(c)}function cSqrTo(a,b){a.squareTo(b);this.reduce(b)}Classic.prototype.convert=cConvert;Classic.prototype.revert=cRevert;Classic.prototype.reduce=cReduce;Classic.prototype.mulTo=cMulTo;Classic.prototype.sqrTo=cSqrTo;
function bnpInvDigit(){if(this.t<1)return 0;var a=this[0];if((a&1)==0)return 0;var b=a&3,b=b*(2-(a&15)*b)&15,b=b*(2-(a&255)*b)&255,b=b*(2-((a&65535)*b&65535))&65535,b=b*(2-a*b%this.DV)%this.DV;return b>0?this.DV-b:-b}function Montgomery(a){this.m=a;this.mp=a.invDigit();this.mpl=this.mp&32767;this.mph=this.mp>>15;this.um=(1<<a.DB-15)-1;this.mt2=2*a.t}
function montConvert(a){var b=nbi();a.abs().dlShiftTo(this.m.t,b);b.divRemTo(this.m,null,b);a.s<0&&b.compareTo(BigInteger.ZERO)>0&&this.m.subTo(b,b);return b}function montRevert(a){var b=nbi();a.copyTo(b);this.reduce(b);return b}
function montReduce(a){for(;a.t<=this.mt2;)a[a.t++]=0;for(var b=0;b<this.m.t;++b){var c=a[b]&32767,d=c*this.mpl+((c*this.mph+(a[b]>>15)*this.mpl&this.um)<<15)&a.DM,c=b+this.m.t;for(a[c]+=this.m.am(0,d,a,b,0,this.m.t);a[c]>=a.DV;)a[c]-=a.DV,a[++c]++}a.clamp();a.drShiftTo(this.m.t,a);a.compareTo(this.m)>=0&&a.subTo(this.m,a)}function montSqrTo(a,b){a.squareTo(b);this.reduce(b)}function montMulTo(a,b,c){a.multiplyTo(b,c);this.reduce(c)}Montgomery.prototype.convert=montConvert;
Montgomery.prototype.revert=montRevert;Montgomery.prototype.reduce=montReduce;Montgomery.prototype.mulTo=montMulTo;Montgomery.prototype.sqrTo=montSqrTo;function bnpIsEven(){return(this.t>0?this[0]&1:this.s)==0}function bnpExp(a,b){if(a>4294967295||a<1)return BigInteger.ONE;var c=nbi(),d=nbi(),e=b.convert(this),g=nbits(a)-1;for(e.copyTo(c);--g>=0;)if(b.sqrTo(c,d),(a&1<<g)>0)b.mulTo(d,e,c);else var h=c,c=d,d=h;return b.revert(c)}
function bnModPowInt(a,b){var c;c=a<256||b.isEven()?new Classic(b):new Montgomery(b);return this.exp(a,c)}BigInteger.prototype.copyTo=bnpCopyTo;BigInteger.prototype.fromInt=bnpFromInt;BigInteger.prototype.fromString=bnpFromString;BigInteger.prototype.clamp=bnpClamp;BigInteger.prototype.dlShiftTo=bnpDLShiftTo;BigInteger.prototype.drShiftTo=bnpDRShiftTo;BigInteger.prototype.lShiftTo=bnpLShiftTo;BigInteger.prototype.rShiftTo=bnpRShiftTo;BigInteger.prototype.subTo=bnpSubTo;
BigInteger.prototype.multiplyTo=bnpMultiplyTo;BigInteger.prototype.squareTo=bnpSquareTo;BigInteger.prototype.divRemTo=bnpDivRemTo;BigInteger.prototype.invDigit=bnpInvDigit;BigInteger.prototype.isEven=bnpIsEven;BigInteger.prototype.exp=bnpExp;BigInteger.prototype.toString=bnToString;BigInteger.prototype.negate=bnNegate;BigInteger.prototype.abs=bnAbs;BigInteger.prototype.compareTo=bnCompareTo;BigInteger.prototype.bitLength=bnBitLength;BigInteger.prototype.mod=bnMod;BigInteger.prototype.modPowInt=bnModPowInt;
BigInteger.ZERO=nbv(0);BigInteger.ONE=nbv(1);function bnClone(){var a=nbi();this.copyTo(a);return a}function bnIntValue(){if(this.s<0)if(this.t==1)return this[0]-this.DV;else{if(this.t==0)return-1}else if(this.t==1)return this[0];else if(this.t==0)return 0;return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]}function bnByteValue(){return this.t==0?this.s:this[0]<<24>>24}function bnShortValue(){return this.t==0?this.s:this[0]<<16>>16}
function bnpChunkSize(a){return Math.floor(Math.LN2*this.DB/Math.log(a))}function bnSigNum(){return this.s<0?-1:this.t<=0||this.t==1&&this[0]<=0?0:1}function bnpToRadix(a){a==null&&(a=10);if(this.signum()==0||a<2||a>36)return"0";var b=this.chunkSize(a),b=Math.pow(a,b),c=nbv(b),d=nbi(),e=nbi(),g="";for(this.divRemTo(c,d,e);d.signum()>0;)g=(b+e.intValue()).toString(a).substr(1)+g,d.divRemTo(c,d,e);return e.intValue().toString(a)+g}
function bnpFromRadix(a,b){this.fromInt(0);b==null&&(b=10);for(var c=this.chunkSize(b),d=Math.pow(b,c),e=!1,g=0,h=0,f=0;f<a.length;++f){var o=intAt(a,f);o<0?a.charAt(f)=="-"&&this.signum()==0&&(e=!0):(h=b*h+o,++g>=c&&(this.dMultiply(d),this.dAddOffset(h,0),h=g=0))}g>0&&(this.dMultiply(Math.pow(b,g)),this.dAddOffset(h,0));e&&BigInteger.ZERO.subTo(this,this)}
function bnpFromNumber(a,b,c){if("number"==typeof b)if(a<2)this.fromInt(1);else{this.fromNumber(a,c);this.testBit(a-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);for(this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(b);)this.dAddOffset(2,0),this.bitLength()>a&&this.subTo(BigInteger.ONE.shiftLeft(a-1),this)}else{var c=[],d=a&7;c.length=(a>>3)+1;b.nextBytes(c);d>0?c[0]&=(1<<d)-1:c[0]=0;this.fromString(c,256)}}
function bnToByteArray(){var a=this.t,b=[];b[0]=this.s;var c=this.DB-a*this.DB%8,d,e=0;if(a-- >0){if(c<this.DB&&(d=this[a]>>c)!=(this.s&this.DM)>>c)b[e++]=d|this.s<<this.DB-c;for(;a>=0;)if(c<8?(d=(this[a]&(1<<c)-1)<<8-c,d|=this[--a]>>(c+=this.DB-8)):(d=this[a]>>(c-=8)&255,c<=0&&(c+=this.DB,--a)),(d&128)!=0&&(d|=-256),e==0&&(this.s&128)!=(d&128)&&++e,e>0||d!=this.s)b[e++]=d}return b}function bnEquals(a){return this.compareTo(a)==0}function bnMin(a){return this.compareTo(a)<0?this:a}
function bnMax(a){return this.compareTo(a)>0?this:a}function bnpBitwiseTo(a,b,c){var d,e,g=Math.min(a.t,this.t);for(d=0;d<g;++d)c[d]=b(this[d],a[d]);if(a.t<this.t){e=a.s&this.DM;for(d=g;d<this.t;++d)c[d]=b(this[d],e);c.t=this.t}else{e=this.s&this.DM;for(d=g;d<a.t;++d)c[d]=b(e,a[d]);c.t=a.t}c.s=b(this.s,a.s);c.clamp()}function op_and(a,b){return a&b}function bnAnd(a){var b=nbi();this.bitwiseTo(a,op_and,b);return b}function op_or(a,b){return a|b}
function bnOr(a){var b=nbi();this.bitwiseTo(a,op_or,b);return b}function op_xor(a,b){return a^b}function bnXor(a){var b=nbi();this.bitwiseTo(a,op_xor,b);return b}function op_andnot(a,b){return a&~b}function bnAndNot(a){var b=nbi();this.bitwiseTo(a,op_andnot,b);return b}function bnNot(){for(var a=nbi(),b=0;b<this.t;++b)a[b]=this.DM&~this[b];a.t=this.t;a.s=~this.s;return a}function bnShiftLeft(a){var b=nbi();a<0?this.rShiftTo(-a,b):this.lShiftTo(a,b);return b}
function bnShiftRight(a){var b=nbi();a<0?this.lShiftTo(-a,b):this.rShiftTo(a,b);return b}function lbit(a){if(a==0)return-1;var b=0;(a&65535)==0&&(a>>=16,b+=16);(a&255)==0&&(a>>=8,b+=8);(a&15)==0&&(a>>=4,b+=4);(a&3)==0&&(a>>=2,b+=2);(a&1)==0&&++b;return b}function bnGetLowestSetBit(){for(var a=0;a<this.t;++a)if(this[a]!=0)return a*this.DB+lbit(this[a]);return this.s<0?this.t*this.DB:-1}function cbit(a){for(var b=0;a!=0;)a&=a-1,++b;return b}
function bnBitCount(){for(var a=0,b=this.s&this.DM,c=0;c<this.t;++c)a+=cbit(this[c]^b);return a}function bnTestBit(a){var b=Math.floor(a/this.DB);return b>=this.t?this.s!=0:(this[b]&1<<a%this.DB)!=0}function bnpChangeBit(a,b){var c=BigInteger.ONE.shiftLeft(a);this.bitwiseTo(c,b,c);return c}function bnSetBit(a){return this.changeBit(a,op_or)}function bnClearBit(a){return this.changeBit(a,op_andnot)}function bnFlipBit(a){return this.changeBit(a,op_xor)}
function bnpAddTo(a,b){for(var c=0,d=0,e=Math.min(a.t,this.t);c<e;)d+=this[c]+a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t<this.t){for(d+=a.s;c<this.t;)d+=this[c],b[c++]=d&this.DM,d>>=this.DB;d+=this.s}else{for(d+=this.s;c<a.t;)d+=a[c],b[c++]=d&this.DM,d>>=this.DB;d+=a.s}b.s=d<0?-1:0;d>0?b[c++]=d:d<-1&&(b[c++]=this.DV+d);b.t=c;b.clamp()}function bnAdd(a){var b=nbi();this.addTo(a,b);return b}function bnSubtract(a){var b=nbi();this.subTo(a,b);return b}
function bnMultiply(a){var b=nbi();this.multiplyTo(a,b);return b}function bnSquare(){var a=nbi();this.squareTo(a);return a}function bnDivide(a){var b=nbi();this.divRemTo(a,b,null);return b}function bnRemainder(a){var b=nbi();this.divRemTo(a,null,b);return b}function bnDivideAndRemainder(a){var b=nbi(),c=nbi();this.divRemTo(a,b,c);return[b,c]}function bnpDMultiply(a){this[this.t]=this.am(0,a-1,this,0,0,this.t);++this.t;this.clamp()}
function bnpDAddOffset(a,b){if(a!=0){for(;this.t<=b;)this[this.t++]=0;for(this[b]+=a;this[b]>=this.DV;)this[b]-=this.DV,++b>=this.t&&(this[this.t++]=0),++this[b]}}function NullExp(){}function nNop(a){return a}function nMulTo(a,b,c){a.multiplyTo(b,c)}function nSqrTo(a,b){a.squareTo(b)}NullExp.prototype.convert=nNop;NullExp.prototype.revert=nNop;NullExp.prototype.mulTo=nMulTo;NullExp.prototype.sqrTo=nSqrTo;function bnPow(a){return this.exp(a,new NullExp)}
function bnpMultiplyLowerTo(a,b,c){var d=Math.min(this.t+a.t,b);c.s=0;for(c.t=d;d>0;)c[--d]=0;var e;for(e=c.t-this.t;d<e;++d)c[d+this.t]=this.am(0,a[d],c,d,0,this.t);for(e=Math.min(a.t,b);d<e;++d)this.am(0,a[d],c,d,0,b-d);c.clamp()}function bnpMultiplyUpperTo(a,b,c){--b;var d=c.t=this.t+a.t-b;for(c.s=0;--d>=0;)c[d]=0;for(d=Math.max(b-this.t,0);d<a.t;++d)c[this.t+d-b]=this.am(b-d,a[d],c,0,0,this.t+d-b);c.clamp();c.drShiftTo(1,c)}
function Barrett(a){this.r2=nbi();this.q3=nbi();BigInteger.ONE.dlShiftTo(2*a.t,this.r2);this.mu=this.r2.divide(a);this.m=a}function barrettConvert(a){if(a.s<0||a.t>2*this.m.t)return a.mod(this.m);else if(a.compareTo(this.m)<0)return a;else{var b=nbi();a.copyTo(b);this.reduce(b);return b}}function barrettRevert(a){return a}
function barrettReduce(a){a.drShiftTo(this.m.t-1,this.r2);if(a.t>this.m.t+1)a.t=this.m.t+1,a.clamp();this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);for(this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);a.compareTo(this.r2)<0;)a.dAddOffset(1,this.m.t+1);for(a.subTo(this.r2,a);a.compareTo(this.m)>=0;)a.subTo(this.m,a)}function barrettSqrTo(a,b){a.squareTo(b);this.reduce(b)}function barrettMulTo(a,b,c){a.multiplyTo(b,c);this.reduce(c)}Barrett.prototype.convert=barrettConvert;
Barrett.prototype.revert=barrettRevert;Barrett.prototype.reduce=barrettReduce;Barrett.prototype.mulTo=barrettMulTo;Barrett.prototype.sqrTo=barrettSqrTo;
function bnModPow(a,b){var c=a.bitLength(),d,e=nbv(1),g;if(c<=0)return e;else d=c<18?1:c<48?3:c<144?4:c<768?5:6;g=c<8?new Classic(b):b.isEven()?new Barrett(b):new Montgomery(b);var h=[],f=3,o=d-1,p=(1<<d)-1;h[1]=g.convert(this);if(d>1){c=nbi();for(g.sqrTo(h[1],c);f<=p;)h[f]=nbi(),g.mulTo(c,h[f-2],h[f]),f+=2}for(var q=a.t-1,n,k=!0,j=nbi(),c=nbits(a[q])-1;q>=0;){c>=o?n=a[q]>>c-o&p:(n=(a[q]&(1<<c+1)-1)<<o-c,q>0&&(n|=a[q-1]>>this.DB+c-o));for(f=d;(n&1)==0;)n>>=1,--f;if((c-=f)<0)c+=this.DB,--q;if(k)h[n].copyTo(e),
k=!1;else{for(;f>1;)g.sqrTo(e,j),g.sqrTo(j,e),f-=2;f>0?g.sqrTo(e,j):(f=e,e=j,j=f);g.mulTo(j,h[n],e)}for(;q>=0&&(a[q]&1<<c)==0;)g.sqrTo(e,j),f=e,e=j,j=f,--c<0&&(c=this.DB-1,--q)}return g.revert(e)}
function bnGCD(a){var b=this.s<0?this.negate():this.clone(),a=a.s<0?a.negate():a.clone();if(b.compareTo(a)<0)var c=b,b=a,a=c;var c=b.getLowestSetBit(),d=a.getLowestSetBit();if(d<0)return b;c<d&&(d=c);d>0&&(b.rShiftTo(d,b),a.rShiftTo(d,a));for(;b.signum()>0;)(c=b.getLowestSetBit())>0&&b.rShiftTo(c,b),(c=a.getLowestSetBit())>0&&a.rShiftTo(c,a),b.compareTo(a)>=0?(b.subTo(a,b),b.rShiftTo(1,b)):(a.subTo(b,a),a.rShiftTo(1,a));d>0&&a.lShiftTo(d,a);return a}
function bnpModInt(a){if(a<=0)return 0;var b=this.DV%a,c=this.s<0?a-1:0;if(this.t>0)if(b==0)c=this[0]%a;else for(var d=this.t-1;d>=0;--d)c=(b*c+this[d])%a;return c}
function bnModInverse(a){var b=a.isEven();if(this.isEven()&&b||a.signum()==0)return BigInteger.ZERO;for(var c=a.clone(),d=this.clone(),e=nbv(1),g=nbv(0),h=nbv(0),f=nbv(1);c.signum()!=0;){for(;c.isEven();){c.rShiftTo(1,c);if(b){if(!e.isEven()||!g.isEven())e.addTo(this,e),g.subTo(a,g);e.rShiftTo(1,e)}else g.isEven()||g.subTo(a,g);g.rShiftTo(1,g)}for(;d.isEven();){d.rShiftTo(1,d);if(b){if(!h.isEven()||!f.isEven())h.addTo(this,h),f.subTo(a,f);h.rShiftTo(1,h)}else f.isEven()||f.subTo(a,f);f.rShiftTo(1,
f)}c.compareTo(d)>=0?(c.subTo(d,c),b&&e.subTo(h,e),g.subTo(f,g)):(d.subTo(c,d),b&&h.subTo(e,h),f.subTo(g,f))}if(d.compareTo(BigInteger.ONE)!=0)return BigInteger.ZERO;if(f.compareTo(a)>=0)return f.subtract(a);if(f.signum()<0)f.addTo(a,f);else return f;return f.signum()<0?f.add(a):f}
var lowprimes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,
733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],lplim=67108864/lowprimes[lowprimes.length-1];
function bnIsProbablePrime(a){var b,c=this.abs();if(c.t==1&&c[0]<=lowprimes[lowprimes.length-1]){for(b=0;b<lowprimes.length;++b)if(c[0]==lowprimes[b])return!0;return!1}if(c.isEven())return!1;for(b=1;b<lowprimes.length;){for(var d=lowprimes[b],e=b+1;e<lowprimes.length&&d<lplim;)d*=lowprimes[e++];for(d=c.modInt(d);b<e;)if(d%lowprimes[b++]==0)return!1}return c.millerRabin(a)}
function bnpMillerRabin(a){var b=this.subtract(BigInteger.ONE),c=b.getLowestSetBit();if(c<=0)return!1;var d=b.shiftRight(c),a=a+1>>1;if(a>lowprimes.length)a=lowprimes.length;for(var e=nbi(),g=0;g<a;++g){e.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);var h=e.modPow(d,this);if(h.compareTo(BigInteger.ONE)!=0&&h.compareTo(b)!=0){for(var f=1;f++<c&&h.compareTo(b)!=0;)if(h=h.modPowInt(2,this),h.compareTo(BigInteger.ONE)==0)return!1;if(h.compareTo(b)!=0)return!1}}return!0}
BigInteger.prototype.chunkSize=bnpChunkSize;BigInteger.prototype.toRadix=bnpToRadix;BigInteger.prototype.fromRadix=bnpFromRadix;BigInteger.prototype.fromNumber=bnpFromNumber;BigInteger.prototype.bitwiseTo=bnpBitwiseTo;BigInteger.prototype.changeBit=bnpChangeBit;BigInteger.prototype.addTo=bnpAddTo;BigInteger.prototype.dMultiply=bnpDMultiply;BigInteger.prototype.dAddOffset=bnpDAddOffset;BigInteger.prototype.multiplyLowerTo=bnpMultiplyLowerTo;BigInteger.prototype.multiplyUpperTo=bnpMultiplyUpperTo;
BigInteger.prototype.modInt=bnpModInt;BigInteger.prototype.millerRabin=bnpMillerRabin;BigInteger.prototype.clone=bnClone;BigInteger.prototype.intValue=bnIntValue;BigInteger.prototype.byteValue=bnByteValue;BigInteger.prototype.shortValue=bnShortValue;BigInteger.prototype.signum=bnSigNum;BigInteger.prototype.toByteArray=bnToByteArray;BigInteger.prototype.equals=bnEquals;BigInteger.prototype.min=bnMin;BigInteger.prototype.max=bnMax;BigInteger.prototype.and=bnAnd;BigInteger.prototype.or=bnOr;
BigInteger.prototype.xor=bnXor;BigInteger.prototype.andNot=bnAndNot;BigInteger.prototype.not=bnNot;BigInteger.prototype.shiftLeft=bnShiftLeft;BigInteger.prototype.shiftRight=bnShiftRight;BigInteger.prototype.getLowestSetBit=bnGetLowestSetBit;BigInteger.prototype.bitCount=bnBitCount;BigInteger.prototype.testBit=bnTestBit;BigInteger.prototype.setBit=bnSetBit;BigInteger.prototype.clearBit=bnClearBit;BigInteger.prototype.flipBit=bnFlipBit;BigInteger.prototype.add=bnAdd;BigInteger.prototype.subtract=bnSubtract;
BigInteger.prototype.multiply=bnMultiply;BigInteger.prototype.divide=bnDivide;BigInteger.prototype.remainder=bnRemainder;BigInteger.prototype.divideAndRemainder=bnDivideAndRemainder;BigInteger.prototype.modPow=bnModPow;BigInteger.prototype.modInverse=bnModInverse;BigInteger.prototype.pow=bnPow;BigInteger.prototype.gcd=bnGCD;BigInteger.prototype.isProbablePrime=bnIsProbablePrime;BigInteger.prototype.square=bnSquare;
(function(a,b,c,d,e,g,h){function f(a){var b,d,e=this,g=a.length,f=0,h=e.i=e.j=e.m=0;e.S=[];e.c=[];for(g||(a=[g++]);f<c;)e.S[f]=f++;for(f=0;f<c;f++)b=e.S[f],h=h+b+a[f%g]&c-1,d=e.S[h],e.S[f]=d,e.S[h]=b;e.g=function(a){var b=e.S,d=e.i+1&c-1,g=b[d],f=e.j+g&c-1,h=b[f];b[d]=h;b[f]=g;for(var k=b[g+h&c-1];--a;)d=d+1&c-1,g=b[d],f=f+g&c-1,h=b[f],b[d]=h,b[f]=g,k=k*c+b[g+h&c-1];e.i=d;e.j=f;return k};e.g(c)}function o(a,b,c,d,e){c=[];e=typeof a;if(b&&e=="object")for(d in a)if(d.indexOf("S")<5)try{c.push(o(a[d],
b-1))}catch(g){}return c.length?c:a+(e!="string"?"\x00":"")}function p(a,b,d,e){a+="";for(e=d=0;e<a.length;e++){var g=b,f=e&c-1,h=(d^=b[e&c-1]*19)+a.charCodeAt(e);g[f]=h&c-1}a="";for(e in b)a+=String.fromCharCode(b[e]);return a}b.seedrandom=function(q,n){var k=[],j,q=p(o(n?[q,a]:arguments.length?q:[(new Date).getTime(),a,window],3),k);j=new f(k);p(j.S,a);b.random=function(){for(var a=j.g(d),b=h,f=0;a<e;)a=(a+f)*c,b*=c,f=j.g(1);for(;a>=g;)a/=2,b/=2,f>>>=1;return(a+f)/b};return q};h=b.pow(c,d);e=b.pow(2,
e);g=e*2;p(b.random(),a)})([],Math,256,6,52);function SeededRandom(){}function SRnextBytes(a){var b;for(b=0;b<a.length;b++)a[b]=Math.floor(Math.random()*256)}SeededRandom.prototype.nextBytes=SRnextBytes;function Arcfour(){this.j=this.i=0;this.S=[]}function ARC4init(a){var b,c,d;for(b=0;b<256;++b)this.S[b]=b;for(b=c=0;b<256;++b)c=c+this.S[b]+a[b%a.length]&255,d=this.S[b],this.S[b]=this.S[c],this.S[c]=d;this.j=this.i=0}
function ARC4next(){var a;this.i=this.i+1&255;this.j=this.j+this.S[this.i]&255;a=this.S[this.i];this.S[this.i]=this.S[this.j];this.S[this.j]=a;return this.S[a+this.S[this.i]&255]}Arcfour.prototype.init=ARC4init;Arcfour.prototype.next=ARC4next;function prng_newstate(){return new Arcfour}var rng_psize=256,rng_state,rng_pool,rng_pptr;
function rng_seed_int(a){rng_pool[rng_pptr++]^=a&255;rng_pool[rng_pptr++]^=a>>8&255;rng_pool[rng_pptr++]^=a>>16&255;rng_pool[rng_pptr++]^=a>>24&255;rng_pptr>=rng_psize&&(rng_pptr-=rng_psize)}function rng_seed_time(){rng_seed_int((new Date).getTime())}
if(rng_pool==null){rng_pool=[];rng_pptr=0;var t;if(navigator.appName=="Netscape"&&navigator.appVersion<"5"&&window.crypto){var z=window.crypto.random(32);for(t=0;t<z.length;++t)rng_pool[rng_pptr++]=z.charCodeAt(t)&255}for(;rng_pptr<rng_psize;)t=Math.floor(65536*Math.random()),rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=t&255;rng_pptr=0;rng_seed_time()}
function rng_get_byte(){if(rng_state==null){rng_seed_time();rng_state=prng_newstate();rng_state.init(rng_pool);for(rng_pptr=0;rng_pptr<rng_pool.length;++rng_pptr)rng_pool[rng_pptr]=0;rng_pptr=0}return rng_state.next()}function rng_get_bytes(a){var b;for(b=0;b<a.length;++b)a[b]=rng_get_byte()}function SecureRandom(){}SecureRandom.prototype.nextBytes=rng_get_bytes;
function SHA256(a){function b(a,b){var c=(a&65535)+(b&65535);return(a>>16)+(b>>16)+(c>>16)<<16|c&65535}function c(a,b){return a>>>b|a<<32-b}a=function(a){for(var a=a.replace(/\r\n/g,"\n"),b="",c=0;c<a.length;c++){var h=a.charCodeAt(c);h<128?b+=String.fromCharCode(h):(h>127&&h<2048?b+=String.fromCharCode(h>>6|192):(b+=String.fromCharCode(h>>12|224),b+=String.fromCharCode(h>>6&63|128)),b+=String.fromCharCode(h&63|128))}return b}(a);return function(a){for(var b="",c=0;c<a.length*4;c++)b+="0123456789abcdef".charAt(a[c>>
2]>>(3-c%4)*8+4&15)+"0123456789abcdef".charAt(a[c>>2]>>(3-c%4)*8&15);return b}(function(a,e){var g=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,
2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],f=Array(64),o,p,q,n,k,j,l,m,s,r,u,w;a[e>>5]|=128<<24-e%32;a[(e+64>>9<<4)+15]=e;for(s=0;s<a.length;s+=16){o=h[0];p=h[1];q=h[2];n=h[3];
k=h[4];j=h[5];l=h[6];m=h[7];for(r=0;r<64;r++)f[r]=r<16?a[r+s]:b(b(b(c(f[r-2],17)^c(f[r-2],19)^f[r-2]>>>10,f[r-7]),c(f[r-15],7)^c(f[r-15],18)^f[r-15]>>>3),f[r-16]),u=b(b(b(b(m,c(k,6)^c(k,11)^c(k,25)),k&j^~k&l),g[r]),f[r]),w=b(c(o,2)^c(o,13)^c(o,22),o&p^o&q^p&q),m=l,l=j,j=k,k=b(n,u),n=q,q=p,p=o,o=b(u,w);h[0]=b(o,h[0]);h[1]=b(p,h[1]);h[2]=b(q,h[2]);h[3]=b(n,h[3]);h[4]=b(k,h[4]);h[5]=b(j,h[5]);h[6]=b(l,h[6]);h[7]=b(m,h[7])}return h}(function(a){for(var b=[],c=0;c<a.length*8;c+=8)b[c>>5]|=(a.charCodeAt(c/
8)&255)<<24-c%32;return b}(a),a.length*8))}var sha256={hex:function(a){return SHA256(a)}};
function SHA1(a){function b(a,b){return a<<b|a>>>32-b}function c(a){var b="",c,d;for(c=7;c>=0;c--)d=a>>>c*4&15,b+=d.toString(16);return b}var d,e,g=Array(80),h=1732584193,f=4023233417,o=2562383102,p=271733878,q=3285377520,n,k,j,l,m,a=function(a){for(var a=a.replace(/\r\n/g,"\n"),b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);d<128?b+=String.fromCharCode(d):(d>127&&d<2048?b+=String.fromCharCode(d>>6|192):(b+=String.fromCharCode(d>>12|224),b+=String.fromCharCode(d>>6&63|128)),b+=String.fromCharCode(d&
63|128))}return b}(a);n=a.length;var s=[];for(d=0;d<n-3;d+=4)e=a.charCodeAt(d)<<24|a.charCodeAt(d+1)<<16|a.charCodeAt(d+2)<<8|a.charCodeAt(d+3),s.push(e);switch(n%4){case 0:d=2147483648;break;case 1:d=a.charCodeAt(n-1)<<24|8388608;break;case 2:d=a.charCodeAt(n-2)<<24|a.charCodeAt(n-1)<<16|32768;break;case 3:d=a.charCodeAt(n-3)<<24|a.charCodeAt(n-2)<<16|a.charCodeAt(n-1)<<8|128}for(s.push(d);s.length%16!=14;)s.push(0);s.push(n>>>29);s.push(n<<3&4294967295);for(a=0;a<s.length;a+=16){for(d=0;d<16;d++)g[d]=
s[a+d];for(d=16;d<=79;d++)g[d]=b(g[d-3]^g[d-8]^g[d-14]^g[d-16],1);e=h;n=f;k=o;j=p;l=q;for(d=0;d<=19;d++)m=b(e,5)+(n&k|~n&j)+l+g[d]+1518500249&4294967295,l=j,j=k,k=b(n,30),n=e,e=m;for(d=20;d<=39;d++)m=b(e,5)+(n^k^j)+l+g[d]+1859775393&4294967295,l=j,j=k,k=b(n,30),n=e,e=m;for(d=40;d<=59;d++)m=b(e,5)+(n&k|n&j|k&j)+l+g[d]+2400959708&4294967295,l=j,j=k,k=b(n,30),n=e,e=m;for(d=60;d<=79;d++)m=b(e,5)+(n^k^j)+l+g[d]+3395469782&4294967295,l=j,j=k,k=b(n,30),n=e,e=m;h=h+e&4294967295;f=f+n&4294967295;o=o+k&4294967295;
p=p+j&4294967295;q=q+l&4294967295}m=c(h)+c(f)+c(o)+c(p)+c(q);return m.toLowerCase()}
var sha1={hex:function(a){return SHA1(a)}},MD5=function(a){function b(a,b){var c,d,e,f,g;e=a&2147483648;f=b&2147483648;c=a&1073741824;d=b&1073741824;g=(a&1073741823)+(b&1073741823);return c&d?g^2147483648^e^f:c|d?g&1073741824?g^3221225472^e^f:g^1073741824^e^f:g^e^f}function c(a,c,d,e,f,g,h){a=b(a,b(b(c&d|~c&e,f),h));return b(a<<g|a>>>32-g,c)}function d(a,c,d,e,f,g,h){a=b(a,b(b(c&e|d&~e,f),h));return b(a<<g|a>>>32-g,c)}function e(a,c,d,e,f,g,h){a=b(a,b(b(c^d^e,f),h));return b(a<<g|a>>>32-g,c)}function g(a,
c,d,e,f,g,h){a=b(a,b(b(d^(c|~e),f),h));return b(a<<g|a>>>32-g,c)}function h(a){var b="",c="",d;for(d=0;d<=3;d++)c=a>>>d*8&255,c="0"+c.toString(16),b+=c.substr(c.length-2,2);return b}var f=[],o,p,q,n,k,j,l,m,a=function(a){for(var a=a.replace(/\r\n/g,"\n"),b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);d<128?b+=String.fromCharCode(d):(d>127&&d<2048?b+=String.fromCharCode(d>>6|192):(b+=String.fromCharCode(d>>12|224),b+=String.fromCharCode(d>>6&63|128)),b+=String.fromCharCode(d&63|128))}return b}(a),
f=function(a){var b,c=a.length;b=c+8;for(var d=((b-b%64)/64+1)*16,e=Array(d-1),f=0,g=0;g<c;)b=(g-g%4)/4,f=g%4*8,e[b]|=a.charCodeAt(g)<<f,g++;e[(g-g%4)/4]|=128<<g%4*8;e[d-2]=c<<3;e[d-1]=c>>>29;return e}(a);k=1732584193;j=4023233417;l=2562383102;m=271733878;for(a=0;a<f.length;a+=16)o=k,p=j,q=l,n=m,k=c(k,j,l,m,f[a+0],7,3614090360),m=c(m,k,j,l,f[a+1],12,3905402710),l=c(l,m,k,j,f[a+2],17,606105819),j=c(j,l,m,k,f[a+3],22,3250441966),k=c(k,j,l,m,f[a+4],7,4118548399),m=c(m,k,j,l,f[a+5],12,1200080426),l=c(l,
m,k,j,f[a+6],17,2821735955),j=c(j,l,m,k,f[a+7],22,4249261313),k=c(k,j,l,m,f[a+8],7,1770035416),m=c(m,k,j,l,f[a+9],12,2336552879),l=c(l,m,k,j,f[a+10],17,4294925233),j=c(j,l,m,k,f[a+11],22,2304563134),k=c(k,j,l,m,f[a+12],7,1804603682),m=c(m,k,j,l,f[a+13],12,4254626195),l=c(l,m,k,j,f[a+14],17,2792965006),j=c(j,l,m,k,f[a+15],22,1236535329),k=d(k,j,l,m,f[a+1],5,4129170786),m=d(m,k,j,l,f[a+6],9,3225465664),l=d(l,m,k,j,f[a+11],14,643717713),j=d(j,l,m,k,f[a+0],20,3921069994),k=d(k,j,l,m,f[a+5],5,3593408605),
m=d(m,k,j,l,f[a+10],9,38016083),l=d(l,m,k,j,f[a+15],14,3634488961),j=d(j,l,m,k,f[a+4],20,3889429448),k=d(k,j,l,m,f[a+9],5,568446438),m=d(m,k,j,l,f[a+14],9,3275163606),l=d(l,m,k,j,f[a+3],14,4107603335),j=d(j,l,m,k,f[a+8],20,1163531501),k=d(k,j,l,m,f[a+13],5,2850285829),m=d(m,k,j,l,f[a+2],9,4243563512),l=d(l,m,k,j,f[a+7],14,1735328473),j=d(j,l,m,k,f[a+12],20,2368359562),k=e(k,j,l,m,f[a+5],4,4294588738),m=e(m,k,j,l,f[a+8],11,2272392833),l=e(l,m,k,j,f[a+11],16,1839030562),j=e(j,l,m,k,f[a+14],23,4259657740),
k=e(k,j,l,m,f[a+1],4,2763975236),m=e(m,k,j,l,f[a+4],11,1272893353),l=e(l,m,k,j,f[a+7],16,4139469664),j=e(j,l,m,k,f[a+10],23,3200236656),k=e(k,j,l,m,f[a+13],4,681279174),m=e(m,k,j,l,f[a+0],11,3936430074),l=e(l,m,k,j,f[a+3],16,3572445317),j=e(j,l,m,k,f[a+6],23,76029189),k=e(k,j,l,m,f[a+9],4,3654602809),m=e(m,k,j,l,f[a+12],11,3873151461),l=e(l,m,k,j,f[a+15],16,530742520),j=e(j,l,m,k,f[a+2],23,3299628645),k=g(k,j,l,m,f[a+0],6,4096336452),m=g(m,k,j,l,f[a+7],10,1126891415),l=g(l,m,k,j,f[a+14],15,2878612391),
j=g(j,l,m,k,f[a+5],21,4237533241),k=g(k,j,l,m,f[a+12],6,1700485571),m=g(m,k,j,l,f[a+3],10,2399980690),l=g(l,m,k,j,f[a+10],15,4293915773),j=g(j,l,m,k,f[a+1],21,2240044497),k=g(k,j,l,m,f[a+8],6,1873313359),m=g(m,k,j,l,f[a+15],10,4264355552),l=g(l,m,k,j,f[a+6],15,2734768916),j=g(j,l,m,k,f[a+13],21,1309151649),k=g(k,j,l,m,f[a+4],6,4149444226),m=g(m,k,j,l,f[a+11],10,3174756917),l=g(l,m,k,j,f[a+2],15,718787259),j=g(j,l,m,k,f[a+9],21,3951481745),k=b(k,o),j=b(j,p),l=b(l,q),m=b(m,n);return(h(k)+h(j)+h(l)+
h(m)).toLowerCase()};function parseBigInt(a,b){return new BigInteger(a,b)}function linebrk(a,b){for(var c="",d=0;d+b<a.length;)c+=a.substring(d,d+b)+"\n",d+=b;return c+a.substring(d,a.length)}function byte2Hex(a){return a<16?"0"+a.toString(16):a.toString(16)}
function pkcs1pad2(a,b){if(b<a.length+11)throw"Message too long for RSA (n="+b+", l="+a.length+")";for(var c=[],d=a.length-1;d>=0&&b>0;){var e=a.charCodeAt(d--);e<128?c[--b]=e:e>127&&e<2048?(c[--b]=e&63|128,c[--b]=e>>6|192):(c[--b]=e&63|128,c[--b]=e>>6&63|128,c[--b]=e>>12|224)}c[--b]=0;d=new SecureRandom;for(e=[];b>2;){for(e[0]=0;e[0]==0;)d.nextBytes(e);c[--b]=e[0]}c[--b]=2;c[--b]=0;return new BigInteger(c)}
function RSAKey(){this.n=null;this.e=0;this.coeff=this.dmq1=this.dmp1=this.q=this.p=this.d=null}function RSASetPublic(a,b){a!=null&&b!=null&&a.length>0&&b.length>0?(this.n=parseBigInt(a,16),this.e=parseInt(b,16)):alert("Invalid RSA public key")}function RSADoPublic(a){return a.modPowInt(this.e,this.n)}function RSAEncrypt(a){a=pkcs1pad2(a,this.n.bitLength()+7>>3);if(a==null)return null;a=this.doPublic(a);if(a==null)return null;a=a.toString(16);return(a.length&1)==0?a:"0"+a}
RSAKey.prototype.doPublic=RSADoPublic;RSAKey.prototype.setPublic=RSASetPublic;RSAKey.prototype.encrypt=RSAEncrypt;function pkcs1unpad2(a,b){for(var c=a.toByteArray(),d=0;d<c.length&&c[d]==0;)++d;if(c.length-d!=b-1||c[d]!=2)return null;for(++d;c[d]!=0;)if(++d>=c.length)return null;for(var e="";++d<c.length;){var g=c[d]&255;g<128?e+=String.fromCharCode(g):g>191&&g<224?(e+=String.fromCharCode((g&31)<<6|c[d+1]&63),++d):(e+=String.fromCharCode((g&15)<<12|(c[d+1]&63)<<6|c[d+2]&63),d+=2)}return e}
function RSASetPrivate(a,b,c){a!=null&&b!=null&&a.length>0&&b.length>0?(this.n=parseBigInt(a,16),this.e=parseInt(b,16),this.d=parseBigInt(c,16)):alert("Invalid RSA private key")}
function RSASetPrivateEx(a,b,c,d,e,g,h,f){a!=null&&b!=null&&a.length>0&&b.length>0?(this.n=parseBigInt(a,16),this.e=parseInt(b,16),this.d=parseBigInt(c,16),this.p=parseBigInt(d,16),this.q=parseBigInt(e,16),this.dmp1=parseBigInt(g,16),this.dmq1=parseBigInt(h,16),this.coeff=parseBigInt(f,16)):alert("Invalid RSA private key")}
function RSAGenerate(a,b){var c=new SeededRandom,d=a>>1;this.e=parseInt(b,16);for(var e=new BigInteger(b,16);;){for(;;)if(this.p=new BigInteger(a-d,1,c),this.p.subtract(BigInteger.ONE).gcd(e).compareTo(BigInteger.ONE)==0&&this.p.isProbablePrime(10))break;for(;;)if(this.q=new BigInteger(d,1,c),this.q.subtract(BigInteger.ONE).gcd(e).compareTo(BigInteger.ONE)==0&&this.q.isProbablePrime(10))break;if(this.p.compareTo(this.q)<=0){var g=this.p;this.p=this.q;this.q=g}var g=this.p.subtract(BigInteger.ONE),
h=this.q.subtract(BigInteger.ONE),f=g.multiply(h);if(f.gcd(e).compareTo(BigInteger.ONE)==0){this.n=this.p.multiply(this.q);this.d=e.modInverse(f);this.dmp1=this.d.mod(g);this.dmq1=this.d.mod(h);this.coeff=this.q.modInverse(this.p);break}}}
function RSADoPrivate(a){if(this.p==null||this.q==null)return a.modPow(this.d,this.n);for(var b=a.mod(this.p).modPow(this.dmp1,this.p),a=a.mod(this.q).modPow(this.dmq1,this.q);b.compareTo(a)<0;)b=b.add(this.p);return b.subtract(a).multiply(this.coeff).mod(this.p).multiply(this.q).add(a)}function RSADecrypt(a){a=this.doPrivate(parseBigInt(a,16));return a==null?null:pkcs1unpad2(a,this.n.bitLength()+7>>3)}RSAKey.prototype.doPrivate=RSADoPrivate;RSAKey.prototype.setPrivate=RSASetPrivate;
RSAKey.prototype.setPrivateEx=RSASetPrivateEx;RSAKey.prototype.generate=RSAGenerate;RSAKey.prototype.decrypt=RSADecrypt;var _RSASIGN_DIHEAD=[];_RSASIGN_DIHEAD.sha1="3021300906052b0e03021a05000414";_RSASIGN_DIHEAD.sha256="3031300d060960864801650304020105000420";var _RSASIGN_HASHHEXFUNC=[];_RSASIGN_HASHHEXFUNC.sha1=sha1.hex;_RSASIGN_HASHHEXFUNC.sha256=sha256.hex;
function _rsasign_getHexPaddedDigestInfoForString(a,b,c){b/=4;for(var a=(0,_RSASIGN_HASHHEXFUNC[c])(a),c="00"+_RSASIGN_DIHEAD[c]+a,a="",b=b-4-c.length,d=0;d<b;d+=2)a+="ff";return sPaddedMessageHex="0001"+a+c}function _rsasign_signString(a,b){var c=_rsasign_getHexPaddedDigestInfoForString(a,this.n.bitLength(),b);return this.doPrivate(parseBigInt(c,16)).toString(16)}
function _rsasign_signStringWithSHA1(a){a=_rsasign_getHexPaddedDigestInfoForString(a,this.n.bitLength(),"sha1");return this.doPrivate(parseBigInt(a,16)).toString(16)}function _rsasign_signStringWithSHA256(a){a=_rsasign_getHexPaddedDigestInfoForString(a,this.n.bitLength(),"sha256");return this.doPrivate(parseBigInt(a,16)).toString(16)}function _rsasign_getDecryptSignatureBI(a,b,c){var d=new RSAKey;d.setPublic(b,c);return d.doPublic(a)}
function _rsasign_getHexDigestInfoFromSig(a,b,c){return _rsasign_getDecryptSignatureBI(a,b,c).toString(16).replace(/^1f+00/,"")}function _rsasign_getAlgNameAndHashFromHexDisgestInfo(a){for(var b in _RSASIGN_DIHEAD){var c=_RSASIGN_DIHEAD[b],d=c.length;if(a.substring(0,d)==c)return[b,a.substring(d)]}return[]}
function _rsasign_verifySignatureWithArgs(a,b,c,d){b=_rsasign_getHexDigestInfoFromSig(b,c,d);c=_rsasign_getAlgNameAndHashFromHexDisgestInfo(b);if(c.length==0)return!1;b=c[1];a=(0,_RSASIGN_HASHHEXFUNC[c[0]])(a);return b==a}function _rsasign_verifyHexSignatureForMessage(a,b){var c=parseBigInt(a,16);return _rsasign_verifySignatureWithArgs(b,c,this.n.toString(16),this.e.toString(16))}
function _rsasign_verifyString(a,b){var b=b.replace(/[ \n]+/g,""),c=this.doPublic(parseBigInt(b,16)).toString(16).replace(/^1f+00/,""),d=_rsasign_getAlgNameAndHashFromHexDisgestInfo(c);if(d.length==0)return!1;c=d[1];d=(0,_RSASIGN_HASHHEXFUNC[d[0]])(a);return c==d}RSAKey.prototype.signString=_rsasign_signString;RSAKey.prototype.signStringWithSHA1=_rsasign_signStringWithSHA1;RSAKey.prototype.signStringWithSHA256=_rsasign_signStringWithSHA256;RSAKey.prototype.verifyString=_rsasign_verifyString;
RSAKey.prototype.verifyHexSignatureForMessage=_rsasign_verifyHexSignatureForMessage;
var aes=function(){var a={Sbox:[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,
95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],ShiftRowTab:[0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11]};a.Init=
function(){a.Sbox_Inv=Array(256);for(var b=0;b<256;b++)a.Sbox_Inv[a.Sbox[b]]=b;a.ShiftRowTab_Inv=Array(16);for(b=0;b<16;b++)a.ShiftRowTab_Inv[a.ShiftRowTab[b]]=b;a.xtime=Array(256);for(b=0;b<128;b++)a.xtime[b]=b<<1,a.xtime[128+b]=b<<1^27};a.Done=function(){delete a.Sbox_Inv;delete a.ShiftRowTab_Inv;delete a.xtime};a.ExpandKey=function(b){var c=b.length,d,e=1;switch(c){case 16:d=176;break;case 24:d=208;break;case 32:d=240;break;default:alert("my.ExpandKey: Only key lengths of 16, 24 or 32 bytes allowed!")}for(var g=
c;g<d;g+=4){var h=b.slice(g-4,g);if(g%c==0){if(h=[a.Sbox[h[1]]^e,a.Sbox[h[2]],a.Sbox[h[3]],a.Sbox[h[0]]],(e<<=1)>=256)e^=283}else c>24&&g%c==16&&(h=[a.Sbox[h[0]],a.Sbox[h[1]],a.Sbox[h[2]],a.Sbox[h[3]]]);for(var f=0;f<4;f++)b[g+f]=b[g+f-c]^h[f]}};a.Encrypt=function(b,c){var d=c.length;a.AddRoundKey(b,c.slice(0,16));for(var e=16;e<d-16;e+=16)a.SubBytes(b,a.Sbox),a.ShiftRows(b,a.ShiftRowTab),a.MixColumns(b),a.AddRoundKey(b,c.slice(e,e+16));a.SubBytes(b,a.Sbox);a.ShiftRows(b,a.ShiftRowTab);a.AddRoundKey(b,
c.slice(e,d))};a.Decrypt=function(b,c){var d=c.length;a.AddRoundKey(b,c.slice(d-16,d));a.ShiftRows(b,a.ShiftRowTab_Inv);a.SubBytes(b,a.Sbox_Inv);for(d-=32;d>=16;d-=16)a.AddRoundKey(b,c.slice(d,d+16)),a.MixColumns_Inv(b),a.ShiftRows(b,a.ShiftRowTab_Inv),a.SubBytes(b,a.Sbox_Inv);a.AddRoundKey(b,c.slice(0,16))};a.SubBytes=function(a,c){for(var d=0;d<16;d++)a[d]=c[a[d]]};a.AddRoundKey=function(a,c){for(var d=0;d<16;d++)a[d]^=c[d]};a.ShiftRows=function(a,c){for(var d=[].concat(a),e=0;e<16;e++)a[e]=d[c[e]]};
a.MixColumns=function(b){for(var c=0;c<16;c+=4){var d=b[c+0],e=b[c+1],g=b[c+2],h=b[c+3],f=d^e^g^h;b[c+0]^=f^a.xtime[d^e];b[c+1]^=f^a.xtime[e^g];b[c+2]^=f^a.xtime[g^h];b[c+3]^=f^a.xtime[h^d]}};a.MixColumns_Inv=function(b){for(var c=0;c<16;c+=4){var d=b[c+0],e=b[c+1],g=b[c+2],h=b[c+3],f=d^e^g^h,o=a.xtime[f],p=a.xtime[a.xtime[o^d^g]]^f;f^=a.xtime[a.xtime[o^e^h]];b[c+0]^=p^a.xtime[d^e];b[c+1]^=f^a.xtime[e^g];b[c+2]^=p^a.xtime[g^h];b[c+3]^=f^a.xtime[h^d]}};return a}(),cryptico=function(){var a={};aes.Init();
a.b256to64=function(a){var c,d,e,g="",h=0,f=0,o=a.length;for(e=0;e<o;e++)d=a.charCodeAt(e),f==0?(g+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d>>2&63),c=(d&3)<<4):f==1?(g+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(c|d>>4&15),c=(d&15)<<2):f==2&&(g+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(c|d>>6&3),h+=1,g+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d&63)),h+=1,f+=1,f==3&&
(f=0);f>0&&(g+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(c),g+="=");f==1&&(g+="=");return g};a.b64to256=function(a){var c,d,e="",g=0,h=0,f=a.length;for(d=0;d<f;d++)c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(d)),c>=0&&(g&&(e+=String.fromCharCode(h|c>>6-g&255)),g=g+2&7,h=c<<g&255);return e};a.b16to64=function(a){var c,d,e="";a.length%2==1&&(a="0"+a);for(c=0;c+3<=a.length;c+=3)d=parseInt(a.substring(c,c+3),16),e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d>>
6)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d&63);c+1==a.length?(d=parseInt(a.substring(c,c+1),16),e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d<<2)):c+2==a.length&&(d=parseInt(a.substring(c,c+2),16),e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d>>2)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt((d&3)<<4));for(;(e.length&3)>0;)e+="=";return e};a.b64to16=function(a){var c="",
d,e=0,g;for(d=0;d<a.length;++d){if(a.charAt(d)=="=")break;v="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(d));v<0||(e==0?(c+=int2char(v>>2),g=v&3,e=1):e==1?(c+=int2char(g<<2|v>>4),g=v&15,e=2):e==2?(c+=int2char(g),c+=int2char(v>>2),g=v&3,e=3):(c+=int2char(g<<2|v>>4),c+=int2char(v&15),e=0))}e==1&&(c+=int2char(g<<2));return c};a.string2bytes=function(a){for(var c=[],d=0;d<a.length;d++)c.push(a.charCodeAt(d));return c};a.bytes2string=function(a){for(var c="",d=0;d<
a.length;d++)c+=String.fromCharCode(a[d]);return c};a.blockXOR=function(a,c){for(var d=Array(16),e=0;e<16;e++)d[e]=a[e]^c[e];return d};a.blockIV=function(){var a=new SecureRandom,c=Array(16);a.nextBytes(c);return c};a.pad16=function(a){var c=a.slice(0),d=(16-a.length%16)%16;for(i=a.length;i<a.length+d;i++)c.push(0);return c};a.depad=function(a){for(a=a.slice(0);a[a.length-1]==0;)a=a.slice(0,a.length-1);return a};a.encryptAESCBC=function(b,c){var d=c.slice(0);aes.ExpandKey(d);for(var e=a.string2bytes(b),
e=a.pad16(e),g=a.blockIV(),h=0;h<e.length/16;h++){var f=e.slice(h*16,h*16+16),o=g.slice(h*16,h*16+16),f=a.blockXOR(o,f);aes.Encrypt(f,d);g=g.concat(f)}d=a.bytes2string(g);return a.b256to64(d)};a.decryptAESCBC=function(b,c){var d=c.slice(0);aes.ExpandKey(d);for(var b=a.b64to256(b),e=a.string2bytes(b),g=[],h=1;h<e.length/16;h++){var f=e.slice(h*16,h*16+16),o=e.slice((h-1)*16,(h-1)*16+16);aes.Decrypt(f,d);f=a.blockXOR(o,f);g=g.concat(f)}g=a.depad(g);return a.bytes2string(g)};a.wrap60=function(a){for(var c=
"",d=0;d<a.length;d++)d%60==0&&d!=0&&(c+="\n"),c+=a[d];return c};a.generateAESKey=function(){var a=Array(16);(new SecureRandom).nextBytes(a);return a};a.generateRSAKey=function(a,c){Math.seedrandom(sha256.hex(a));var d=new RSAKey;d.generate(c,"10001");return d};a.publicKeyString=function(b){return pubkey=b.n.toString(16)};a.publicKeyID=function(a){return MD5(a)};a.publicKeyFromString=function(b){var b=b.split("|")[0],c=new RSAKey;c.setPublic(b,"10001");return c};a.encrypt=function(b,
c,d){var e="";try{var h=a.publicKeyFromString(c);e+=h.encrypt(b)+"?"}catch(f){return{status:"Invalid public key"}};return{status:"success",cipher:e}};a.decrypt=function(b,c){var d=b.split("?"),e=c.decrypt(d[0]);return{status:"success",plaintext:e,signature:"unsigned"}};return a}();
\ No newline at end of file
/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
var CryptoJS=CryptoJS||function(u,p){var d={},l=d.lib={},s=function(){},t=l.Base={extend:function(a){s.prototype=this;var c=new s;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},
r=l.WordArray=t.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=p?c:4*a.length},toString:function(a){return(a||v).stringify(this)},concat:function(a){var c=this.words,e=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)for(var k=0;k<a;k++)c[j+k>>>2]|=(e[k>>>2]>>>24-8*(k%4)&255)<<24-8*((j+k)%4);else if(65535<e.length)for(k=0;k<a;k+=4)c[j+k>>>2]=e[k>>>2];else c.push.apply(c,e);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<
32-8*(c%4);a.length=u.ceil(c/4)},clone:function(){var a=t.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],e=0;e<a;e+=4)c.push(4294967296*u.random()|0);return new r.init(c,a)}}),w=d.enc={},v=w.Hex={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j<a;j++){var k=c[j>>>2]>>>24-8*(j%4)&255;e.push((k>>>4).toString(16));e.push((k&15).toString(16))}return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j<c;j+=2)e[j>>>3]|=parseInt(a.substr(j,
2),16)<<24-4*(j%8);return new r.init(e,c/2)}},b=w.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j<a;j++)e.push(String.fromCharCode(c[j>>>2]>>>24-8*(j%4)&255));return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j<c;j++)e[j>>>2]|=(a.charCodeAt(j)&255)<<24-8*(j%4);return new r.init(e,c)}},x=w.Utf8={stringify:function(a){try{return decodeURIComponent(escape(b.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return b.parse(unescape(encodeURIComponent(a)))}},
q=l.BufferedBlockAlgorithm=t.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=x.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,e=c.words,j=c.sigBytes,k=this.blockSize,b=j/(4*k),b=a?u.ceil(b):u.max((b|0)-this._minBufferSize,0);a=b*k;j=u.min(4*a,j);if(a){for(var q=0;q<a;q+=k)this._doProcessBlock(e,q);q=e.splice(0,a);c.sigBytes-=j}return new r.init(q,j)},clone:function(){var a=t.clone.call(this);
a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:t.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,e){return(new a.init(e)).finalize(b)}},_createHmacHelper:function(a){return function(b,e){return(new n.HMAC.init(a,
e)).finalize(b)}}});var n=d.algo={};return d}(Math);
(function(){var u=CryptoJS,p=u.lib.WordArray;u.enc.Base64={stringify:function(d){var l=d.words,p=d.sigBytes,t=this._map;d.clamp();d=[];for(var r=0;r<p;r+=3)for(var w=(l[r>>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v<p;v++)d.push(t.charAt(w>>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join("")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<
l;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<<j|b>>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<<j|b>>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<<j|b>>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<<j|b>>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},
_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),
f=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,
m,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,
E,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/
4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);
(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length<q;){n&&s.update(n);var n=s.update(d).finalize(r);s.reset();for(var a=1;a<p;a++)n=s.finalize(n),s.reset();b.concat(n)}b.sigBytes=4*q;return b}});u.EvpKDF=function(d,l,p){return s.create(p).compute(d,
l)}})();
CryptoJS.lib.Cipher||function(u){var p=CryptoJS,d=p.lib,l=d.Base,s=d.WordArray,t=d.BufferedBlockAlgorithm,r=p.enc.Base64,w=p.algo.EvpKDF,v=d.Cipher=t.extend({cfg:l.extend(),createEncryptor:function(e,a){return this.create(this._ENC_XFORM_MODE,e,a)},createDecryptor:function(e,a){return this.create(this._DEC_XFORM_MODE,e,a)},init:function(e,a,b){this.cfg=this.cfg.extend(b);this._xformMode=e;this._key=a;this.reset()},reset:function(){t.reset.call(this);this._doReset()},process:function(e){this._append(e);return this._process()},
finalize:function(e){e&&this._append(e);return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(b,k,d){return("string"==typeof k?c:a).encrypt(e,b,k,d)},decrypt:function(b,k,d){return("string"==typeof k?c:a).decrypt(e,b,k,d)}}}});d.StreamCipher=v.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var b=p.mode={},x=function(e,a,b){var c=this._iv;c?this._iv=u:c=this._prevBlock;for(var d=0;d<b;d++)e[a+d]^=
c[d]},q=(d.BlockCipherMode=l.extend({createEncryptor:function(e,a){return this.Encryptor.create(e,a)},createDecryptor:function(e,a){return this.Decryptor.create(e,a)},init:function(e,a){this._cipher=e;this._iv=a}})).extend();q.Encryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize;x.call(this,e,a,c);b.encryptBlock(e,a);this._prevBlock=e.slice(a,a+c)}});q.Decryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize,d=e.slice(a,a+c);b.decryptBlock(e,a);x.call(this,
e,a,c);this._prevBlock=d}});b=b.CBC=q;q=(p.pad={}).Pkcs7={pad:function(a,b){for(var c=4*b,c=c-a.sigBytes%c,d=c<<24|c<<16|c<<8|c,l=[],n=0;n<c;n+=4)l.push(d);c=s.create(l,c);a.concat(c)},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-1>>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,
this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,
1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},
decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,
b.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();
(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,
16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j<a;j++)if(j<d)e[j]=c[j];else{var k=e[j-1];j%d?6<d&&4==j%d&&(k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;d<a;d++)j=a-d,k=d%4?e[j]:e[j-4],c[d]=4>d||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>
8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r<m;r++)var q=d[g>>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=
d[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/*! jQuery v1.7.1 jquery.com | jquery.org/license */
(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,t2=/(trident.*rv:)([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||t2.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];if(b.length>0&& b[1].indexOf("trident")>-1){b[1]="msie"}return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
<template>
<div style="wight: 100%; height: 100vh; position: absolute">
<div
:id="`mars3d-container${mapKey}`"
:class="[
'mars3d-container',
customClass,
{ 'mars3d-container-compare-rh': compare },
]"
></div>
</div>
</template>
<script>
import Vue from "vue";
import { httpGet, httpPostForJson } from "@/common/httpBean.js";
import {
screenMapSetUpQuery,
carRealTimeLocationQuery2,
vehicleInformationQuery,
apiCarClassQuery,
apiCpointQuery,
} from "@/axios/api.js";
// 使用免费开源版本
import "mars3d/dist/mars3d.css";
import * as mars3d from "mars3d";
import * as Cesium from "mars3d-cesium/Build/Cesium/Cesium";
import {
initGraphicManager,
initLayerManager,
bindLayerContextMenu,
bindLayerPopup,
} from "./js/graphicManager";
import ddd from "../../assets/images/truckTuPian/qiche1.png";
import zhuangchetubiao from "../../assets/images/truckTuPian/zhuangchedian1.png";
import xiechetubiao from "../../assets/images/truckTuPian/xiechedian1.png";
import kongzhidiantubiao from "../../assets/images/truckTuPian/kongzhidian1.png";
import luzhangtubiao from "../../assets/images/truckTuPian/luzhang.png";
// 为了方便使用,绑定到原型链,在其他vue文件,直接 this.mars3d 来使用
Vue.prototype.mars3d = mars3d;
Vue.prototype.Cesium = mars3d.Cesium;
var map;
//画导航线
var graphicLayerZ;
var graphicZ;
//路障展示图层
var graphicLayerR;
export default {
name: "mars3dViewer",
created() {},
data() {
return {
zuobianData: [],
toJavaCoordinates: [],
weilanName: [],
areaColorData: [],
allCarInforData: [],
defaultjd: 140.71212,
defaultwd: 52.158,
realjd: 140.71212,
realwd: 52.158,
carnumber: "",
//装车点卸车点数据
mapControlPointData: [],
};
},
props: {
// 初始化配置参数
url: String,
// 地图唯一性标识
mapKey: {
type: String,
default: "",
},
// 自定义参数
options: Object,
// 是否分屏显示
compare: {
type: Boolean,
default: false,
},
// 是否插入到body元素上
appendToBody: {
type: Boolean,
default: false,
},
// 自定义css类名
customClass: {
type: String,
default: "",
},
},
destroy() {
this[`map${this.mapKey}`].destroy();
delete this[`map${this.mapKey}`];
},
methods: {
//获取车辆设备名和车牌号
getCarInforFn(carnumber) {
this.carnumber = carnumber;
//获取车辆类型
httpGet(apiCarClassQuery, { size: 9999 }).then((res) => {
if (res.code == 200) {
let arr11 = [];
//获取车辆信息
httpGet(vehicleInformationQuery, { size: 9999 }).then((res1) => {
if (res.code == 200) {
res1.data.content.forEach((item1, index1) => {
let obj1 = { ...item1 };
res.data.content.forEach((item, index) => {
if (item1.carclass == item.name) {
obj1.pic = item.card;
arr11.push(obj1);
return;
}
});
});
this.allCarInforData = arr11;
//获取所有关键控制点信息
httpGet(apiCpointQuery, { size: 9999 }).then((res2) => {
if (res2.code == 200) {
let arr2 = [];
res2.data.content.forEach((item2, index2) => {
if (item2.type != "控制点") {
arr2.push(item2);
}
});
this.mapControlPointData = arr2;
this.getCoordinate();
}
});
}
});
}
});
},
//后台获取数据
getCoordinate() {
let that = this;
httpGet(screenMapSetUpQuery, { size: 9999 }).then((res) => {
if (true) {
//console.log(res);
let data1 = [];
for (let key in res) {
that.weilanName.push(key);
that.areaColorData.push(res[key][0].color);
let arrays = [];
res[key].forEach(function (item) {
var arr = [];
arr[0] = item.lon;
arr[1] = item.lat;
arr[2] = "500";
arrays.push(arr);
});
data1.push(arrays);
}
that.zuobianData = data1;
//console.log("zuobianData",that.zuobianData);
//console.log("weilanName",that.weilanName);
if (this.appendToBody) {
document.body.appendChild(this.$el);
}
if (this.mapKey) {
this.initMars3d(this.options);
} else {
mars3d.Resource.fetchJson({ url: this.url }).then((data) => {
this.initMars3d(data.map3d); // 构建地图
});
}
}
});
},
//创建地图
initMars3d(options) {
let that = this;
if (this[`map${this.mapKey}`]) return;
const mapOptions = {
...options,
...this.options,
control: {
defaultContextMenu: false, //右键菜单
},
};
// 创建三维地球场景
map = new mars3d.Map(`mars3d-container${this.mapKey}`, mapOptions);
this[`map${this.mapKey}`] = map;
//围栏回显
that.zuobianData.forEach(function (item, index) {
var graphicLayer = new mars3d.layer.GraphicLayer();
map.addLayer(graphicLayer);
initLayerManager(graphicLayer, that.weilanName[index]);
that.addGraphic_01(
graphicLayer,
item,
that.weilanName[index],
that.areaColorData[index]
);
});
//实时位置1
that.allCarInforData.forEach((item, index) => {
var graphicLayer4 = new mars3d.layer.GraphicLayer();
map.addLayer(graphicLayer4);
that.bindLayerPopup(graphicLayer4, item.number);
that.addDemoGraphics(
graphicLayer4,
item.number,
item.equipmentName,
item.carclass,
item.pic,
item.status
);
});
//装车点卸车点位置
that.mapControlPointData.forEach(function (item, index) {
var graphicLayer = new mars3d.layer.GraphicLayer();
map.addLayer(graphicLayer);
that.addDemoGraphic4(graphicLayer, item);
});
// 抛出事件
this.$emit("onload", map);
},
//围栏回显
addGraphic_01(graphicLayer, positions, weilanName, color) {
let graphic = new mars3d.graphic.PolygonEntity({
positions: positions,
style: {
color: color,
opacity: 0.5,
outline: true,
outlineWidth: 3,
outlineColor: "#ffffff",
label: {
text: weilanName,
font_size: 18,
color: "#ffffff",
distanceDisplayCondition: true,
distanceDisplayCondition_far: 500000,
distanceDisplayCondition_near: 0,
},
},
allowDrillPick: true,
});
graphicLayer.addGraphic(graphic); //还可以另外一种写法: graphic.addTo(graphicLayer)
},
//实时位置1
addDemoGraphics(
graphicLayer4,
number,
equipmentName,
carclass,
pic,
status
) {
let that = this;
//模型配置
const graphic = new mars3d.graphic.BillboardEntity({
style: {
image: pic ? "http://8.143.203.103:9092/avatar/" + pic : ddd,
// image: pic ? 'http://120.224.103.84:9092/avatar/' + pic : ddd,
width: 35,
height: 35,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
scaleByDistance: new Cesium.NearFarScalar(10000, 1.0, 500000, 0.1),
highlight: {
type: mars3d.EventType.click,
silhouette: true,
silhouetteColor: "#ff0000",
silhouetteSize: 4,
},
label: {
text: status == "1" ? "\n" + number : number,
font_size: 18,
color:
status == "1"
? "#ff0000"
: number == that.carnumber
? "green"
: "blue",
outline: true,
outlineColor: "#000000",
pixelOffsetY: -50,
distanceDisplayCondition: true,
distanceDisplayCondition_far: 50000,
distanceDisplayCondition_near: 0,
},
},
});
//载入图层
graphicLayer4.addGraphic(graphic);
//初始位置
graphicLayer4.eachGraphic((graphic) => {
graphic.addDynamicPosition(
Cesium.Cartesian3.fromDegrees(that.defaultjd, that.defaultwd, 1000)
);
});
//三秒后位置
graphicLayer4.eachGraphic((graphic) => {
graphic.addDynamicPosition(
Cesium.Cartesian3.fromDegrees(that.defaultjd, that.defaultwd, 1000),
3
);
});
//定时更新动态位置
setInterval(() => {
httpGet(carRealTimeLocationQuery2, { name: equipmentName }).then(
(res) => {
if (res.data) {
graphicLayer4.eachGraphic((graphic) => {
graphic.addDynamicPosition(
Cesium.Cartesian3.fromDegrees(
res.data.location.x,
res.data.location.y,
1000
),
2
);
});
} else {
graphicLayer4.eachGraphic((graphic) => {
graphic.addDynamicPosition(
Cesium.Cartesian3.fromDegrees(
that.defaultjd,
that.defaultwd,
1000
),
2
);
});
}
}
);
}, 4000);
},
//装车箭头线 graphicLayer.removeGraphic(graphic);
addArrowGraphic3(boo, points) {
graphicLayerZ = new mars3d.layer.GraphicLayer();
map.addLayer(graphicLayerZ);
if (boo) {
graphicLayerZ.removeGraphic(graphicZ);
graphicZ = new mars3d.graphic.PolylineEntity({
positions: points,
style: {
width: 6,
materialType: mars3d.MaterialType.PolylineOutline,
color: Cesium.Color.ORANGE,
outlineWidth: 2,
outlineColor: Cesium.Color.BLACK,
},
});
graphicLayerZ.addGraphic(graphicZ);
} else {
graphicLayerZ.removeGraphic(graphicZ);
}
},
//装车点卸车点位置
addDemoGraphic4(graphicLayer, item) {
const graphic = new mars3d.graphic.BillboardEntity({
name: item.name,
position: [item.lon, item.lat, 1000],
style: {
image:
item.type == "装车点"
? zhuangchetubiao
: item.type == "卸车点"
? xiechetubiao
: kongzhidiantubiao,
scale: 0.15,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
clampToGround: true,
label: {
text: item.name,
pixelOffsetY: -40,
color: "blue",
distanceDisplayCondition: true,
distanceDisplayCondition_far: 30000,
distanceDisplayCondition_near: 0,
},
},
});
graphicLayer.addGraphic(graphic);
},
//路障展示
roadblockShowFn(arr) {
map.removeLayer(graphicLayerR);
graphicLayerR = new mars3d.layer.GraphicLayer();
map.addLayer(graphicLayerR);
arr.forEach((item, index) => {
const graphic = new mars3d.graphic.BillboardEntity({
name: item.carcode + index,
position: [item.lon, item.lat, 1000],
style: {
image: luzhangtubiao,
scale: 1,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
clampToGround: true,
label: {
text: "路障",
pixelOffsetY: -40,
color: "yellow",
distanceDisplayCondition: true,
distanceDisplayCondition_far: 30000,
distanceDisplayCondition_near: 0,
},
},
});
graphicLayerR.addGraphic(graphic);
});
},
//视角跟随车辆
changeView1(lat, lng) {
if (map) {
map.setCameraView({ lat: lat, lng: lng });
}
},
// 在图层绑定Popup弹窗
bindLayerPopup(graphicLayer, number) {
let that = this;
graphicLayer.bindPopup(function (event) {
that.$parent.smallWinFn(number);
});
},
},
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style >
.cesium-viewer-toolbar {
display: none !important;
}
.mars3d-compass {
display: none !important;
}
.mars3d-locationbar {
display: none !important;
}
.mars3d-distance-legend {
display: none !important;
}
.mars3d-container {
height: 100%;
width: 100vw;
overflow: hidden;
}
/* 重写Cesium的css */
/**cesium按钮背景色*/
.cesium-button {
background-color: #3f4854;
color: #e6e6e6;
fill: #e6e6e6;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
line-height: 32px;
}
.cesium-viewer-geocoderContainer .cesium-geocoder-input {
background-color: rgba(63, 72, 84, 0.7);
}
.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus {
background-color: rgba(63, 72, 84, 0.9);
}
.cesium-viewer-geocoderContainer .search-results {
background-color: #3f4854;
}
.cesium-geocoder-searchButton {
background-color: #3f4854;
}
.cesium-infoBox-title {
background-color: #3f4854;
}
.cesium-infoBox {
background: rgba(63, 72, 84, 0.9);
}
.cesium-toolbar-button img {
height: 100%;
}
.cesium-performanceDisplay-defaultContainer {
top: auto;
bottom: 35px;
right: 50px;
}
.cesium-performanceDisplay-ms,
.cesium-performanceDisplay-fps {
color: #fff;
}
/**cesium工具栏位置*/
.cesium-viewer-toolbar {
top: auto;
left: auto;
right: 12px;
bottom: 35px;
}
.cesium-viewer-toolbar > .cesium-toolbar-button,
.cesium-navigationHelpButton-wrapper,
.cesium-viewer-geocoderContainer {
margin-bottom: 5px;
float: right;
clear: both;
text-align: center;
}
.cesium-baseLayerPicker-dropDown {
bottom: 0;
right: 40px;
max-height: 700px;
margin-bottom: 5px;
}
.cesium-navigation-help {
top: auto;
bottom: 0;
right: 40px;
transform-origin: right bottom;
}
.cesium-sceneModePicker-wrapper {
width: auto;
}
.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-dropDown-icon {
float: left;
margin: 0 3px;
}
.cesium-viewer-geocoderContainer .search-results {
left: 0;
right: 40px;
width: auto;
position: absolute;
z-index: 999;
}
.cesium-infoBox-title {
background-color: #3f4854;
}
.cesium-infoBox {
top: 50px;
background: rgba(63, 72, 84, 0.9);
}
/**左下工具栏菜单*/
.toolbar-dropdown-menu-div {
background: rgba(43, 44, 47, 0.8);
border: 1px solid #2b2c2f;
z-index: 999;
position: absolute;
right: 60px;
bottom: 40px;
display: none;
}
.toolbar-dropdown-menu {
min-width: 110px;
padding: 0;
}
.toolbar-dropdown-menu > li {
padding: 0 3px;
margin: 2px 0;
}
.toolbar-dropdown-menu > li > a {
color: #edffff;
display: block;
padding: 4px 10px;
clear: both;
font-weight: normal;
line-height: 1.6;
white-space: nowrap;
text-decoration: none;
}
.toolbar-dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
color: #fff;
background-color: #444d59;
}
.toolbar-dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
color: #fff;
background-color: #444d59;
}
.toolbar-dropdown-menu i {
padding-right: 5px;
}
.infoview {
position: absolute;
top: 100px;
left: 500px;
width: 50vw;
z-index: 1000;
}
</style>
//entity示例中的图层通用js
//在图层级处理一些事物
import { httpDelForJson} from "@/common/httpBean.js"
import {delWeilan} from "@/axios/api.js"
import 'mars3d/dist/mars3d.css'
import * as mars3d from 'mars3d'
import $ from 'jquery'
export function initLayerManager(graphicLayer,index) {
let rowName = index;
//在layer上绑定监听事件
graphicLayer.on(mars3d.EventType.click, function (event) {
//console.log("监听layer,单击了矢量对象", event);
// var mpt = mars3d.LatLngPoint.fromCartesian(event.cartesian);
// console.log(mpt.toString(), "位置信息");
// coordinates.push(mpt.toString().split(','));
// console.log(coordinates);
});
// graphicLayer.on(mars3d.EventType.mouseOver, function(event) {
// console.log('监听layer,鼠标移入了矢量对象', event)
// })
// graphicLayer.on(mars3d.EventType.mouseOut, function(event) {
// console.log('监听layer,鼠标移出了矢量对象', event)
// })
//可在图层上绑定popup,对所有加到这个图层的矢量数据都生效
bindLayerPopup(graphicLayer);
$("#chkPopup").change(function () {
let val = $(this).is(":checked");
if (val) {
bindLayerPopup(graphicLayer);
} else {
graphicLayer.unbindPopup();
}
});
//可在图层上绑定tooltip,对所有加到这个图层的矢量数据都生效
$("#chkTooltip").change(function () {
let val = $(this).is(":checked");
if (val) {
graphicLayer.bindTooltip("我是layer上绑定的Tooltip");
} else {
graphicLayer.unbindTooltip();
}
});
//可在图层绑定右键菜单,对所有加到这个图层的矢量数据都生效
bindLayerContextMenu(graphicLayer,rowName);
$("#chkContextMenu").change(function () {
let val = $(this).is(":checked");
if (val) {
bindLayerContextMenu(graphicLayer,rowName);
} else {
graphicLayer.unbindContextMenu(true);
}
});
$("#chkHasEdit").change(function () {
let val = $(this).is(":checked");
graphicLayer.hasEdit = val; //启用编辑
});
$("#chkShow").change(function () {
let val = $(this).is(":checked");
graphicLayer.show = val; //显示隐藏
});
$("#btnClear").click(function () {
graphicLayer.clear();
});
$("#btnExpFile").click(function () {
// window.layer.msg('该功能在开发完善中……')
// return
if (graphicLayer.length === 0) {
window.layer.msg("当前没有标注任何数据,无需保存!");
return;
}
let geojson = graphicLayer.toGeoJSON();
haoutil.file.downloadFile("我的标注.json", JSON.stringify(geojson));
});
$("#btnImpFile").click(function () {
$("#input_draw_file").click();
});
function clearSelectFile() {
if (!window.addEventListener) {
document.getElementById("input_draw_file").outerHTML += ""; //IE
} else {
document.getElementById("input_draw_file").value = ""; //FF
}
}
$("#input_draw_file").change(function (e) {
let file = this.files[0];
let fileName = file.name;
let fileType = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length).toLowerCase();
if (fileType == "json" || fileType == "geojson") {
let reader = new FileReader();
reader.readAsText(file, "UTF-8");
reader.onloadend = function (e) {
let json = this.result;
graphicLayer.loadGeoJSON(json, {
flyTo: true,
});
clearSelectFile();
};
} else if (fileType == "kml") {
let reader = new FileReader();
reader.readAsText(file, "UTF-8");
reader.onloadend = function (e) {
let strkml = this.result;
kgUtil.toGeoJSON(strkml).then((geojoson) => {
console.log("kml2geojson", geojoson);
graphicLayer.loadGeoJSON(geojoson, {
flyTo: true,
// symbol: function (attr, style, featue) {
// let geoType = featue.geometry?.type
// if (geoType == 'Point') {
// return {
// image: 'img/marker/di3.png',
// verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
// scale: 0.4,
// label: {
// text: attr.name,
// font_size: 18,
// color: '#ffffff',
// outline: true,
// outlineColor: '#000000',
// pixelOffsetY: -50,
// scaleByDistance: true,
// scaleByDistance_far: 990000,
// scaleByDistance_farValue: 0.3,
// scaleByDistance_near: 10000,
// scaleByDistance_nearValue: 1,
// },
// }
// }
// return style
// },
});
clearSelectFile();
});
clearSelectFile();
};
} else if (fileType == "kmz") {
//加载input文件控件的二进制流
kgUtil.toGeoJSON(file).then((geojoson) => {
console.log("kmz2geojson", geojoson);
graphicLayer.loadGeoJSON(geojoson, {
flyTo: true,
});
clearSelectFile();
});
} else {
window.layer.msg("暂不支持 " + fileType + " 文件类型的数据!");
clearSelectFile();
}
});
}
export function bindLayerPopup(graphicLayer) {
graphicLayer.bindPopup(function (event) {
let attr = event.graphic?.attr || {};
//attr.text = "围栏";
// attr["视频"] = `<video src='http://data.mars3d.cn/file/video/lukou.mp4' controls autoplay style="width: 300px;" ></video>`;
return mars3d.Util.getTemplateHtml({ title: "围栏区域", template: "all", attr: attr });
});
}
export function bindLayerContextMenu(graphicLayer,index) {
let rowNameId = index;
graphicLayer.bindContextMenu([
// {
// text: "开始编辑对象",
// iconCls: "fa fa-edit",
// show: function (e) {
// let graphic = e.graphic;
// if (!graphic || !graphic.startEditing) {
// return false;
// }
// return !graphic.isEditing;
// },
// callback: function (e) {
// let graphic = e.graphic;
// if (!graphic) {
// return false;
// }
// if (graphic) {
// graphicLayer.startEditing(graphic);
// }
// },
// },
// {
// text: "停止编辑对象",
// iconCls: "fa fa-edit",
// show: function (e) {
// let graphic = e.graphic;
// if (!graphic) {
// return false;
// }
// return graphic.isEditing;
// },
// callback: function (e) {
// let graphic = e.graphic;
// if (!graphic) {
// return false;
// }
// if (graphic) {
// graphicLayer.stopEditing(graphic);
// }
// },
// },
// {
// text: "删除对象",
// iconCls: "fa fa-trash-o",
// show: (event) => {
// let graphic = event.graphic;
// if (!graphic || graphic.isDestroy) {
// return false;
// } else {
// return true;
// }
// },
// callback: function (e) {
// console.log(e);
// let graphic = e.graphic;
// if (!graphic) {
// return;
// }
// //console.log(rowNameId);
// httpDelForJson(delWeilan,[rowNameId]).then( res => {
// alert("删除成功")
// })
// graphicLayer.removeGraphic(graphic);
// },
// },
// {
// text: "计算长度",
// iconCls: "fa fa-medium",
// show: function (e) {
// let graphic = e.graphic;
// if (!graphic) {
// return false;
// }
// return (
// graphic.type === "polyline" ||
// graphic.type === "polylineP" ||
// graphic.type === "curve" ||
// graphic.type === "curveP" ||
// graphic.type === "polylineVolume" ||
// graphic.type === "polylineVolumeP" ||
// graphic.type === "corridor" ||
// graphic.type === "corridorP" ||
// graphic.type === "wall" ||
// graphic.type === "wallP"
// );
// },
// callback: function (e) {
// let graphic = e.graphic;
// let strDis = mars3d.MeasureUtil.formatDistance(graphic.distance);
// alert("该对象的长度为:" + strDis);
// },
// },
// {
// text: "计算周长",
// iconCls: "fa fa-medium",
// show: function (e) {
// let graphic = e.graphic;
// if (!graphic) {
// return false;
// }
// return (
// graphic.type === "circle" ||
// graphic.type === "circleP" ||
// graphic.type === "rectangle" ||
// graphic.type === "rectangleP" ||
// graphic.type === "polygon" ||
// graphic.type === "polygonP"
// );
// },
// callback: function (e) {
// let graphic = e.graphic;
// let strDis = mars3d.MeasureUtil.formatDistance(graphic.distance);
// alert("该对象的周长为:" + strDis);
// },
// },
// {
// text: "计算面积",
// iconCls: "fa fa-reorder",
// show: function (e) {
// let graphic = e.graphic;
// if (!graphic) {
// return false;
// }
// return (
// graphic.type === "circle" ||
// graphic.type === "circleP" ||
// graphic.type === "rectangle" ||
// graphic.type === "rectangleP" ||
// graphic.type === "polygon" ||
// graphic.type === "polygonP" ||
// graphic.type === "scrollWall" ||
// graphic.type === "water"
// );
// },
// callback: function (e) {
// let graphic = e.graphic;
// let strArea = mars3d.MeasureUtil.formatArea(graphic.area);
// alert("该对象的面积为:" + strArea);
// },
// },
]);
}
//也可以在单个Graphic上做个性化管理及绑定操作
export function initGraphicManager(graphic,item) {
//3.在graphic上绑定监听事件
// graphic.on(mars3d.EventType.click, function(event) {
// console.log('监听graphic,单击了矢量对象', event)
// })
// graphic.on(mars3d.EventType.mouseOver, function(event) {
// console.log('监听graphic,鼠标移入了矢量对象', event)
// })
// graphic.on(mars3d.EventType.mouseOut, function(event) {
// console.log('监听graphic,鼠标移出了矢量对象', event)
// })
//绑定Tooltip
// graphic.bindTooltip('我是graphic上绑定的Tooltip') //.openTooltip()
//绑定Popup
graphic.bindPopup(item);
//绑定右键菜单
graphic.bindContextMenu([
// {
// text: "删除对象[graphic绑定的]",
// iconCls: "fa fa-trash-o",
// callback: function (e) {
// let graphic = e.graphic;
// if (graphic) {
// graphic.remove();
// }
// },
// },
]);
//测试 颜色闪烁
if (graphic.startFlicker) {
graphic.startFlicker({
time: 20, //闪烁时长(秒)
maxAlpha: 0.5,
color: Cesium.Color.YELLOW,
onEnd: function () {
//结束后回调
},
});
}
}
//取区域内的随机图标
export function randomPoint() {
var jd = haoutil.math.random(116.1 * 1000, 116.6 * 1000) / 1000;
var wd = haoutil.math.random(30.8 * 1000, 31.1 * 1000) / 1000;
var height = haoutil.math.random(1000, 9000);
return new mars3d.LatLngPoint(jd, wd, height);
}
\ No newline at end of file
<template>
<div class="keyboardViews">
<ul class="keyboard">
<li v-for="(key,index) in keyList" :key="index" track-by="$index" :class="{delete: key === 'Delete', tab: key === 'Tab', capslock: key === 'Caps', enter: key === 'Enter', shift: key === 'Shift', space: key === 'Space', shifted: (key === 'Shift') && hasShifted, capsed: (key === 'Caps') && hasCapsed }" v-text="key" @click="clickKey(key)"></li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
keyList: [],
normalKeyList: [],
shiftedKeyList: [],
capsedKeyList: [],
hasShifted: false,
hasCapsed: false,
keyvalue:'',
closeText:'',
}
},
created(){
this.ready();
},
methods: {
clickKey(key) {
switch(key) {
case "Delete":
this.closeText = '';
let kbt = this.keyvalue;
this.keyvalue = kbt.length ? kbt.substring(0, kbt.length - 1) : kbt;
break;
case "Tab":
this.closeText = '';
this.keyvalue += " ";
break;
case "Enter":
this.closeText = 'Enter';
this.keyvalue += " ";
break;
case "Space":
this.closeText = '';
this.keyvalue += " ";
break;
case "Caps":
this.closeText = '';
this.hasCapsed = !this.hasCapsed;
this.keyList = this.hasCapsed ? this.capsedKeyList : this.normalKeyList;
break;
case "Shift":
this.closeText = '';
this.hasShifted = !this.hasShifted;
this.keyList = this.hasShifted ? this.shiftedKeyList : this.normalKeyList;
break;
default:
this.closeText = '';
this.keyvalue += key;
break;
}
console.log(this.keyvalue)
this.$emit("updatekey",this.keyvalue,this.closeText)
this.$nextTick(()=>{
if(this.closeText == 'Enter'){
this.keyvalue = '';
}
})
},
ready() {
let normalKeyList = ['`', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 'Delete',
'Tab', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\\',
'Caps', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', "'", 'Enter',
'Shift', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 'Shift',
'Space'],
shiftedKeyList = ['~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', 'Delete',
'Tab', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '|',
'Caps', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', 'Enter',
'Shift', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?', 'Shift',
'Space'],
capsedKeyList = ['`', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 'Delete',
'Tab', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '[', ']', '\\',
'Caps', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', "'", 'Enter',
'Shift', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', '.', '/', 'Shift',
'Space'];
this.keyList = this.normalKeyList = normalKeyList;
this.shiftedKeyList = shiftedKeyList;
this.capsedKeyList = capsedKeyList;
}
},
}
</script>
<style lang="scss" scoped>
.keyboardViews{
height: 100vh;
width: 100vw;
background-color: rgba(0,0,0,0.2);
}
.keyboard {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 830px;
margin: 0;
padding: 0;
list-style: none;
user-select: none;
li {
float: left;
margin: 0 5px 5px 0;
width: 50px;
height: 50px;
line-height: 50px;
text-align: center;
background: #fff;
border: 1px solid #e5e5e5;
border-radius: 5px;
&:hover {
position: relative;
border-color: gray;
cursor: pointer;
}
&:active {
top: 1px;
left: 1px;
}
}
.tab, .delete {
width: 70px;
}
.capslock {
width: 85px;
}
.enter {
width: 90px;
}
.shift {
width: 116px;
}
.space {
clear: left;
width: 810px;
}
.shifted {
position: relative;
top: 1px;
left: 1px;
border-color: #e5e5e5;
cursor: pointer;
}
.capsed {
position: relative;
top: 1px;
left: 1px;
border-color: #e5e5e5;
cursor: pointer;
}
}
</style>
\ No newline at end of file
// 项目配置相关
const config = {
//ganxu
BASE_URL: 'http://192.168.3.23:9092',
REAL_URL: 'http://192.168.3.23:9092',
ws: '8.143.203.103:9092',
//服务器
// BASE_URL: 'http://8.143.203.103:9092',
// REAL_URL: 'http://8.143.203.103:9092',
// BASE_URL: 'http://39.164.225.220:5000',
// REAL_URL: 'http://39.164.225.220:5000',
// ws: '39.164.225.220:5000',
TOKEN_KEY: 'token',
USER_KEY: 'userInfo',
URL_KEY: 'urlInfo'
};
exports.config = config;
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import '../plugins/jquery-2.1.1.min.js';
import $ from 'jquery'
import './assets/icon/iconfont.css'
import ImouPlayer from "./components/ezuikit/js/imouplayer.js";
import cyberplayer from "./components/ezuikit/js/cyberplayer.js";
Vue.prototype.$ = $;
window.jQuery = $;
window.$ = $;
Vue.use(ElementUI);
Vue.config.productionTip = false
Vue.prototype.$ImouPlayerJs = ImouPlayer;
Vue.prototype.$cyberplayerJs = cyberplayer;
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
import Vue from 'vue'
import VueRouter from 'vue-router'
import Login from '../views/Login.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/login',
name: 'Login',
component: Login,
},
{
path: '/MLargeScreen/index',
name: 'MLargeScreen/index',
component: () => import('../views/MLargeScreen/index.vue'),
},
//路由重定向
{
name: 'default',
path: '*',
redirect: '/login'
},
]
const router = new VueRouter({
//mode: "history",
base: process.env.BASE_URL,
routes
})
//全局守卫
router.beforeEach((to, from, next) => {
//判断路由是否需要守卫
//meta数据
if (to.meta.auth) {
//是否登录
if (window.isLogin) {
next();
} else {
next('/login?redirect=' + to.fullPath);
}
} else {
next();
}
})
export default router
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
//矿区监控模块数据
const mineMonitoring = {
state:{
user:"管理员",
},
mutations:{
changeUser(state, userName){
state.user = userName;
}
},
getters:{
},
actions:{
}
}
//生产自动化系统模块
const automation = {
state:{
},
mutations:{
},
getters:{
},
actions:{
}
}
//默认vuex
export default new Vuex.Store({
state: {
projectName:"卡车调度系统终端平台",
platformName:"卡车调度系统终端平台",
},
mutations: {
},
actions: {
},
modules: {
a:mineMonitoring,
b:automation,
}
})
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
// 密钥对生成 http://web.chacuo.net/netrsakeypair
const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD\n' +
'2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgkCAwEAAQ=='
const privateKey = 'MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8\n' +
'mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9p\n' +
'B6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue\n' +
'/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZ\n' +
'UBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6\n' +
'vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha\n' +
'4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3\n' +
'tTbklZkD2A=='
// 加密
export function encrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPublicKey(publicKey) // 设置公钥
return encryptor.encrypt(txt) // 对需要加密的数据进行加密
}
// 解密
export function decrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPrivateKey(privateKey)
return encryptor.decrypt(txt)
}
<template>
<div class="backGround" v-loading="loading">
<div class="projectName">卡车调度系统终端平台</div>
<div class="loginBody">
<div class="loginTitle">登录窗口</div>
<!-- <div class="loginText">欢迎登录终端</div> -->
<div class="loginInoputs">
<el-form ref="loginForm" :model="loginForm">
<el-form-item class="userInpBody">
<div class="userIcon">
<img src="../assets/imgs/yonghuming.png" />
</div>
<el-input
v-model="loginForm.username"
id="userInp"
placeholder="输入用户名"
@focus="showkey('username')"
></el-input>
</el-form-item>
<el-form-item class="passWordInpBody">
<div class="passWordIcon">
<img src="../assets/imgs/mima.png" />
</div>
<el-input
type="password"
v-model="loginForm.password"
id="passWordInp"
placeholder="输入密码"
@focus="showkey('password')"
></el-input>
</el-form-item>
</el-form>
<button class="loginBtn" @click="loginBeforeFn">安全登录</button>
</div>
</div>
<!-- <keyboard v-on:updatekey="GetKeyVal" class="keyboardStyle" v-show="keyboardShow"></keyboard> -->
</div>
</template>
<script>
import { httpGet, httpPostForJson, putForJson } from "@/common/httpBean.js";
import {
login,
code,
apiEquipmentQuery,
vehicleInformationQuery,
personalCenterInforQuery,
} from "@/axios/api.js";
import { encrypt } from "@/utils/rsaEncrypt.js";
import Cookies from "js-cookie";
import { config as appConfig } from "../config.js";
// import Keyboard from '../components/simpleKeyboard/index.vue'
export default {
name: "login",
data() {
return {
loginForm: {
username: "testkc",
password: "123456",
uuid: "",
},
loading: false,
keyboardShow: false,
keyboardShowType: "",
//设备OAID testkc test999
//testcc deviceOAID: "test888",
deviceOAID: "test999",
// deviceOAID: "140945db5f9b8e04",
//判断设备是否与车绑定
bindingStatus: false,
//绑定的车牌号
bindingCar: "",
};
},
created() {
// 获取验证码
//this.getCode();
// 获取用户名密码等Cookie
this.getCookie();
},
mounted() {
//两种方法相互冲突,每次只需要一种,并且获取的id不一样
//app获取设备号方法
// this.appGetDeviceId();
//5+app获取OAID方法
if (window.plus) {
this.plusReady();
} else {
document.addEventListener("plusready", this.plusReady, false);
}
},
components: {
// Keyboard
},
methods: {
//app获取设备号方法
appGetDeviceId() {
// let that = this;
// let appDeviceId1 = window.Device.getDeviceId();
// // let appDeviceId1 = window.Device.getDeviceId();
// console.log("app设备号", window.Device);
// if (appDeviceId1) {
// that.deviceOAID = appDeviceId1;
// //查询设备表是否存在该设备编号
// httpGet(apiEquipmentQuery, { name: that.deviceOAID }).then(
// (resSheiBei) => {
// if (resSheiBei.code == 200 && resSheiBei.data.totalElements != 0) {
// //查询车辆表中设备是否与车辆绑定
// httpGet(vehicleInformationQuery, {
// equipmentName: that.deviceOAID,
// }).then((resCar) => {
// if (resCar.code == 200 && resCar.data.totalElements != 0) {
// that.bindingStatus = true;
// } else {
// that.bindingStatus = false;
// }
// });
// } else {
// httpPostForJson(apiEquipmentQuery, {
// name: that.deviceOAID,
// status: "正常",
// }).then((res) => {
// that.bindingStatus = false;
// });
// }
// }
// );
// }
},
//5+app获取OAID方法
plusReady() {
// let that = this;
// plus.device.getOAID({
// success: function (e) {
// console.log("oaid", e.oaid);
// that.deviceOAID = e.oaid;
// //查询设备表是否存在该设备编号
// httpGet(apiEquipmentQuery, { name: that.deviceOAID }).then(
// (resSheiBei) => {
// if (
// resSheiBei.code == 200 &&
// resSheiBei.data.totalElements != 0
// ) {
// //查询车辆表中设备是否与车辆绑定
// httpGet(vehicleInformationQuery, {
// equipmentName: that.deviceOAID,
// }).then((resCar) => {
// if (resCar.code == 200 && resCar.data.totalElements != 0) {
// that.bindingStatus = true;
// } else {
// that.bindingStatus = false;
// }
// });
// } else {
// httpPostForJson(apiEquipmentQuery, {
// name: that.deviceOAID,
// status: "正常",
// }).then((res) => {
// that.bindingStatus = false;
// });
// }
// }
// );
// },
// fail: function (e) {
// console.log("getDeviceInfo failed: " + JSON.stringify(e));
// that.bindingStatus = false;
// },
// });
},
getCode() {
httpGet(code).then((res) => {
this.loginForm.uuid = res.uuid;
});
},
getCookie() {
const username = Cookies.get("username");
let password = Cookies.get("password");
// 保存cookie里面的加密后的密码
this.cookiePass = password === undefined ? "" : password;
password = password === undefined ? this.loginForm.password : password;
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password: password,
};
},
//登录前操作判断
loginBeforeFn() {
if (!this.deviceOAID) {
this.$message({
message: "获取设备信息失败,请退出系统并且开启权限后重试!",
type: "warning",
});
return;
}
httpGet(apiEquipmentQuery, { name: this.deviceOAID }).then(
(resSheiBei) => {
if (resSheiBei.code == 200 && resSheiBei.data.totalElements != 0) {
//查询车辆表中设备是否与车辆绑定
httpGet(vehicleInformationQuery, {
equipmentName: this.deviceOAID,
}).then((resCar) => {
if (resCar.code == 200 && resCar.data.totalElements != 0) {
this.bindingCar = resCar.data.content[0].number;
this.bindingStatus = true;
this.LoginInitiation();
} else {
this.$message({
showClose: true,
message:
"请在后台系统中将该设备与车辆绑定后再进行登录!设备号:" +
this.deviceOAID,
type: "warning",
duration: 0,
});
this.bindingStatus = false;
}
});
} else {
httpPostForJson(apiEquipmentQuery, {
name: this.deviceOAID,
status: "正常",
}).then((res) => {
this.$message({
showClose: true,
message:
"请在后台系统中将该设备与车辆绑定后再进行登录!设备号:" +
this.deviceOAID,
type: "warning",
duration: 0,
});
this.bindingStatus = false;
});
}
}
);
},
//进行登录
LoginInitiation() {
this.loading = true;
if (this.loginForm.userName == "" || this.loginForm.password == "") {
this.$message({
message: "请输入正确的用户名或密码!",
type: "error",
});
} else {
this.$refs.loginForm.validate((valid) => {
const user = {
username: this.loginForm.username,
password: this.loginForm.password,
uuid: this.loginForm.uuid,
};
if (user.password !== this.cookiePass) {
user.password = encrypt(user.password);
}
if (valid) {
httpPostForJson(login, user).then((res) => {
let that = this;
if (res.status === 400) {
that.$message.warning("用户名和密码错误,请重新输入");
} else {
localStorage.setItem(appConfig.TOKEN_KEY, res.token);
localStorage.setItem(
appConfig.USER_KEY,
JSON.stringify(res.user)
);
if (user.rememberMe) {
Cookies.set("username", user.username, {
expires: Config.passCookieExpires,
});
Cookies.set("password", user.password, {
expires: Config.passCookieExpires,
});
} else {
Cookies.remove("username");
Cookies.remove("password");
}
//修改人员表中绑定的车辆personalCenterInforQuery
httpGet(personalCenterInforQuery, {
userName: user.username,
}).then((respersonal) => {
if (
respersonal.code == 200 &&
respersonal.data.totalElements != 0
) {
let lastpersonalData = respersonal.data.content[0];
lastpersonalData.car = that.bindingCar;
putForJson(personalCenterInforQuery, lastpersonalData).then(
(res) => {
that.$router.push({
path: "/MLargeScreen/index?" + user.username,
});
}
);
}
});
}
});
} else {
this.$message({
message: "用户名密码错误 ",
type: "error",
});
return false;
}
});
}
this.loading = false;
},
//开启键盘
showkey(text) {
// this.keyboardShowType = text;
// this.keyboardShow = true;
// if(this.keyboardShowType == 'username'){
// this.loginForm.username = '';
// }else{
// this.loginForm.password = '';
// }
},
//关闭键盘
closekey() {
this.keyboardShow = false;
},
GetKeyVal(val, close) {
if (close == "Enter") {
this.keyboardShow = false;
} else {
if (this.keyboardShowType == "username") {
this.loginForm.username = val;
} else {
this.loginForm.password = val;
}
}
},
},
};
</script>
<style>
@media screen and (max-width: 901px) {
.backGround {
padding-top: 2vh;
box-sizing: border-box;
height: 100vh;
width: 100vw;
background-image: url("../assets/imgs/bg.png");
}
.projectName {
text-align: center;
font-size: 40px;
font-weight: 600;
background-image: -webkit-linear-gradient(
bottom,
rgb(36, 162, 254),
rgb(255, 255, 255)
);
background-clip: text;
-webkit-text-fill-color: transparent;
letter-spacing: 3px;
}
.loginBody {
position: relative;
padding-top: 9vh;
box-sizing: border-box;
margin: 0 auto;
width: 70%;
height: 90%;
background-image: url("../assets/imgs/kuang.png");
background-size: 100% 110%;
margin-top: -5vh;
}
.loginTitle {
margin-left: 4vw;
text-align: center;
font-size: 19px;
color: rgb(47, 213, 255);
letter-spacing: 6px;
}
.loginText {
margin-top: 20px;
margin-left: 50px;
text-align: center;
font-size: 30px;
color: rgb(151, 227, 244);
letter-spacing: 6px;
margin-bottom: 10px;
}
.loginInoputs {
margin-top: 10vh;
position: absolute;
right: 6vw;
}
.userInpBody {
padding: 2px;
border: 1px solid rgb(18, 70, 113);
margin-bottom: 20px;
}
.el-form-item__content {
display: flex;
width: 25vw;
height: 10vh;
}
.userIcon {
padding: 1vh 2vh 0vh 2vh;
box-sizing: border-box;
width: 10vh;
height: 10vh;
background-color: rgb(18, 70, 113);
}
.userIcon > img {
width: 5vh;
height: 5vh;
}
#userInp {
height: 100%;
width: 100%;
background: none;
outline: none;
border: none;
font-size: 20px;
color: rgb(47, 213, 255);
}
/* .el-input input::-webkit-input-placeholder {
color:rgb(47,213,255);
} */
.passWordInpBody {
display: flex;
padding: 2px;
border: 1px solid rgb(18, 70, 113);
margin-bottom: 50px;
}
.passWordIcon {
padding: 1vh 2vh 0vh 2vh;
box-sizing: border-box;
width: 10vh;
height: 10vh;
background-color: rgb(18, 70, 113);
}
.passWordIcon > img {
width: 5vh;
height: 5vh;
}
#passWordInp {
height: 100%;
width: 100%;
background: none;
outline: none;
border: none;
font-size: 20px;
color: rgb(47, 213, 255);
}
.loginBtn {
width: 100%;
height: 10vh;
font-size: 17px;
background-color: rgb(24, 180, 255);
border: 0px;
color: white;
letter-spacing: 10px;
cursor: pointer;
}
}
@media screen and (min-width: 901px) {
.backGround {
padding-top: 50px;
box-sizing: border-box;
height: 100vh;
width: 100vw;
background-image: url("../assets/imgs/bg.png");
}
.projectName {
text-align: center;
font-size: 70px;
font-weight: 600;
background-image: -webkit-linear-gradient(
bottom,
rgb(36, 162, 254),
rgb(255, 255, 255)
);
background-clip: text;
-webkit-text-fill-color: transparent;
letter-spacing: 3px;
}
.loginBody {
position: relative;
padding-top: 9vh;
box-sizing: border-box;
margin: 0 auto;
width: 75%;
height: 90%;
background-image: url("../assets/imgs/kuang.png");
background-size: 100% 100%;
}
.loginTitle {
margin-left: 50px;
text-align: center;
font-size: 25px;
color: rgb(47, 213, 255);
letter-spacing: 6px;
}
.loginText {
margin-top: 20px;
margin-left: 50px;
text-align: center;
font-size: 30px;
color: rgb(151, 227, 244);
letter-spacing: 6px;
margin-bottom: 10px;
}
.loginInoputs {
margin-top: 15vh;
position: absolute;
right: 13vh;
}
.userInpBody {
padding: 2px;
border: 1px solid rgb(18, 70, 113);
margin-bottom: 20px;
}
.el-form-item__content {
display: flex;
}
.userIcon {
padding: 11px;
box-sizing: border-box;
width: 50px;
height: 50px;
background-color: rgb(18, 70, 113);
}
#userInp {
height: 100%;
width: 100%;
background: none;
outline: none;
border: none;
font-size: 20px;
color: rgb(47, 213, 255);
letter-spacing: 2px;
}
/* .el-input input::-webkit-input-placeholder {
color:rgb(47,213,255);
} */
.passWordInpBody {
display: flex;
padding: 2px;
border: 1px solid rgb(18, 70, 113);
margin-bottom: 50px;
}
.passWordIcon {
padding: 11px;
box-sizing: border-box;
width: 50px;
height: 50px;
background-color: rgb(18, 70, 113);
}
#passWordInp {
height: 100%;
width: 80%;
background: none;
outline: none;
border: none;
font-size: 20px;
color: rgb(47, 213, 255);
letter-spacing: 2px;
}
.loginBtn {
width: 100%;
height: 60px;
font-size: 26px;
background-color: rgb(24, 180, 255);
border: 0px;
color: white;
letter-spacing: 10px;
cursor: pointer;
}
}
* {
margin: 0;
padding: 0;
}
.keyboardStyle {
position: absolute;
top: 0;
left: 0;
z-index: 100;
}
</style>
\ No newline at end of file
<template>
<div class="backGround" v-loading="loading">
<div class="projectName">卡车调度系统终端平台</div>
<div class="loginBody">
<div class="loginTitle">登录窗口</div>
<!-- <div class="loginText">欢迎登录终端</div> -->
<div class="loginInoputs">
<el-form ref="loginForm" :model="loginForm">
<el-form-item class="userInpBody">
<div class="userIcon">
<img src="../assets/imgs/yonghuming.png" />
</div>
<el-input
v-model="loginForm.username"
id="userInp"
placeholder="输入用户名"
@focus="showkey('username')"
></el-input>
</el-form-item>
<el-form-item class="passWordInpBody">
<div class="passWordIcon">
<img src="../assets/imgs/mima.png" />
</div>
<el-input
type="password"
v-model="loginForm.password"
id="passWordInp"
placeholder="输入密码"
@focus="showkey('password')"
></el-input>
</el-form-item>
</el-form>
<button class="loginBtn" @click="loginBeforeFn">安全登录</button>
</div>
</div>
<!-- <keyboard v-on:updatekey="GetKeyVal" class="keyboardStyle" v-show="keyboardShow"></keyboard> -->
</div>
</template>
<script>
import { httpGet, httpPostForJson, putForJson } from "@/common/httpBean.js";
import {
login,
code,
apiEquipmentQuery,
vehicleInformationQuery,
personalCenterInforQuery,
} from "@/axios/api.js";
import { encrypt } from "@/utils/rsaEncrypt.js";
import Cookies from "js-cookie";
import { config as appConfig } from "../config.js";
// import Keyboard from '../components/simpleKeyboard/index.vue'
export default {
name: "login",
data() {
return {
loginForm: {
username: "",
password: "",
uuid: "",
},
loading: false,
keyboardShow: false,
keyboardShowType: "",
//设备OAID testkc test999
//testcc deviceOAID: "test888",
deviceOAID: "",
//判断设备是否与车绑定
bindingStatus: false,
//绑定的车牌号
bindingCar: "",
};
},
created() {
// 获取验证码
//this.getCode();
// 获取用户名密码等Cookie
this.getCookie();
},
mounted() {
console.log(window, 1111111);
//两种方法相互冲突,每次只需要一种,并且获取的id不一样
//app获取设备号方法
this.appGetDeviceId();
//5+app获取OAID方法
// if (window.plus) {
// this.plusReady();
// } else {
// document.addEventListener("plusready", this.plusReady, false);
// }
},
components: {
// Keyboard
},
methods: {
//app获取设备号方法
appGetDeviceId() {
let that = this;
let appDeviceId1 = window.Device.getDeviceId();
// let appDeviceId1 = window.Device.getDeviceId();
if (appDeviceId1) {
that.deviceOAID = appDeviceId1;
//查询设备表是否存在该设备编号
httpGet(apiEquipmentQuery, { name: that.deviceOAID }).then(
(resSheiBei) => {
if (resSheiBei.code == 200 && resSheiBei.data.totalElements != 0) {
//查询车辆表中设备是否与车辆绑定
httpGet(vehicleInformationQuery, {
equipmentName: that.deviceOAID,
}).then((resCar) => {
if (resCar.code == 200 && resCar.data.totalElements != 0) {
that.bindingStatus = true;
} else {
that.bindingStatus = false;
}
});
} else {
httpPostForJson(apiEquipmentQuery, {
name: that.deviceOAID,
status: "正常",
}).then((res) => {
that.bindingStatus = false;
});
}
}
);
}
},
//5+app获取OAID方法
plusReady() {
let that = this;
console.log("设备身份码:" + plus.device.imei);
console.log("用户识别码:" + plus.device.imsi);
console.log("设备型号信息:" + plus.device.model);
console.log("设备厂商信息:" + plus.device.vendor);
console.log("设备唯一标识号:" + plus.device.uuid);
// plus.device.getOAID({
// success: function (e) {
// console.log("oaid", e.oaid);
// that.deviceOAID = e.oaid;
// //查询设备表是否存在该设备编号
// httpGet(apiEquipmentQuery, { name: that.deviceOAID }).then(
// (resSheiBei) => {
// if (
// resSheiBei.code == 200 &&
// resSheiBei.data.totalElements != 0
// ) {
// //查询车辆表中设备是否与车辆绑定
// httpGet(vehicleInformationQuery, {
// equipmentName: that.deviceOAID,
// }).then((resCar) => {
// if (resCar.code == 200 && resCar.data.totalElements != 0) {
// that.bindingStatus = true;
// } else {
// that.bindingStatus = false;
// }
// });
// } else {
// httpPostForJson(apiEquipmentQuery, {
// name: that.deviceOAID,
// status: "正常",
// }).then((res) => {
// that.bindingStatus = false;
// });
// }
// }
// );
// },
// fail: function (e) {
// console.log("getDeviceInfo failed: " + JSON.stringify(e));
// that.bindingStatus = false;
// },
// });
//无法获取oaid的设备尝试获取uuid或imei
plus.device.getInfo({
success:function(e){
console.log('getDeviceInfo success: '+JSON.stringify(e));
that.deviceOAID = e.uuid;
//查询设备表是否存在该设备编号
httpGet(apiEquipmentQuery, { name: that.deviceOAID }).then(
(resSheiBei) => {
if (
resSheiBei.code == 200 &&
resSheiBei.data.totalElements != 0
) {
//查询车辆表中设备是否与车辆绑定
httpGet(vehicleInformationQuery, {
equipmentName: that.deviceOAID,
}).then((resCar) => {
if (resCar.code == 200 && resCar.data.totalElements != 0) {
that.bindingStatus = true;
} else {
that.bindingStatus = false;
}
});
} else {
httpPostForJson(apiEquipmentQuery, {
name: that.deviceOAID,
status: "正常",
}).then((res) => {
that.bindingStatus = false;
});
}
}
);
},
fail:function(e){
console.log('getDeviceInfo failed: '+JSON.stringify(e));
that.bindingStatus = false;
}
});
},
getCode() {
httpGet(code).then((res) => {
this.loginForm.uuid = res.uuid;
});
},
getCookie() {
const username = Cookies.get("username");
let password = Cookies.get("password");
// 保存cookie里面的加密后的密码
this.cookiePass = password === undefined ? "" : password;
password = password === undefined ? this.loginForm.password : password;
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password: password,
};
},
//登录前操作判断
loginBeforeFn() {
if (!this.deviceOAID) {
this.$message({
message: "获取设备信息失败,请退出系统并且开启权限后重试!",
type: "warning",
});
return;
}
httpGet(apiEquipmentQuery, { name: this.deviceOAID }).then(
(resSheiBei) => {
if (resSheiBei.code == 200 && resSheiBei.data.totalElements != 0) {
//查询车辆表中设备是否与车辆绑定
httpGet(vehicleInformationQuery, {
equipmentName: this.deviceOAID,
}).then((resCar) => {
if (resCar.code == 200 && resCar.data.totalElements != 0) {
this.bindingCar = resCar.data.content[0].number;
this.bindingStatus = true;
this.LoginInitiation();
} else {
this.$message({
showClose: true,
message:
"请在后台系统中将该设备与车辆绑定后再进行登录!设备号:" +
this.deviceOAID,
type: "warning",
duration: 0,
});
this.bindingStatus = false;
}
});
} else {
httpPostForJson(apiEquipmentQuery, {
name: this.deviceOAID,
status: "正常",
}).then((res) => {
this.$message({
showClose: true,
message:
"请在后台系统中将该设备与车辆绑定后再进行登录!设备号:" +
this.deviceOAID,
type: "warning",
duration: 0,
});
this.bindingStatus = false;
});
}
}
);
},
//进行登录
LoginInitiation() {
this.loading = true;
if (this.loginForm.userName == "" || this.loginForm.password == "") {
this.$message({
message: "请输入正确的用户名或密码!",
type: "error",
});
} else {
this.$refs.loginForm.validate((valid) => {
const user = {
username: this.loginForm.username,
password: this.loginForm.password,
uuid: this.loginForm.uuid,
};
if (user.password !== this.cookiePass) {
user.password = encrypt(user.password);
}
if (valid) {
httpPostForJson(login, user).then((res) => {
let that = this;
if (res.status === 400) {
that.$message.warning("用户名和密码错误,请重新输入");
} else {
localStorage.setItem(appConfig.TOKEN_KEY, res.token);
localStorage.setItem(
appConfig.USER_KEY,
JSON.stringify(res.user)
);
if (user.rememberMe) {
Cookies.set("username", user.username, {
expires: Config.passCookieExpires,
});
Cookies.set("password", user.password, {
expires: Config.passCookieExpires,
});
} else {
Cookies.remove("username");
Cookies.remove("password");
}
//修改人员表中绑定的车辆personalCenterInforQuery
httpGet(personalCenterInforQuery, {
userName: user.username,
}).then((respersonal) => {
if (
respersonal.code == 200 &&
respersonal.data.totalElements != 0
) {
let lastpersonalData = respersonal.data.content[0];
lastpersonalData.car = that.bindingCar;
putForJson(personalCenterInforQuery, lastpersonalData).then(
(res) => {
that.$router.push({
path: "/MLargeScreen/index?" + user.username,
});
}
);
}
});
}
});
} else {
this.$message({
message: "用户名密码错误 ",
type: "error",
});
return false;
}
});
}
this.loading = false;
},
//开启键盘
showkey(text) {
// this.keyboardShowType = text;
// this.keyboardShow = true;
// if(this.keyboardShowType == 'username'){
// this.loginForm.username = '';
// }else{
// this.loginForm.password = '';
// }
},
//关闭键盘
closekey() {
this.keyboardShow = false;
},
GetKeyVal(val, close) {
if (close == "Enter") {
this.keyboardShow = false;
} else {
if (this.keyboardShowType == "username") {
this.loginForm.username = val;
} else {
this.loginForm.password = val;
}
}
},
},
};
</script>
<style>
@media screen and (max-width: 901px) {
.backGround {
padding-top: 2vh;
box-sizing: border-box;
height: 100vh;
width: 100vw;
background-image: url("../assets/imgs/bg.png");
}
.projectName {
text-align: center;
font-size: 40px;
font-weight: 600;
background-image: -webkit-linear-gradient(
bottom,
rgb(36, 162, 254),
rgb(255, 255, 255)
);
background-clip: text;
-webkit-text-fill-color: transparent;
letter-spacing: 3px;
}
.loginBody {
position: relative;
padding-top: 9vh;
box-sizing: border-box;
margin: 0 auto;
width: 70%;
height: 90%;
background-image: url("../assets/imgs/kuang.png");
background-size: 100% 110%;
margin-top: -5vh;
}
.loginTitle {
margin-left: 4vw;
text-align: center;
font-size: 19px;
color: rgb(47, 213, 255);
letter-spacing: 6px;
}
.loginText {
margin-top: 20px;
margin-left: 50px;
text-align: center;
font-size: 30px;
color: rgb(151, 227, 244);
letter-spacing: 6px;
margin-bottom: 10px;
}
.loginInoputs {
margin-top: 10vh;
position: absolute;
right: 6vw;
}
.userInpBody {
padding: 2px;
border: 1px solid rgb(18, 70, 113);
margin-bottom: 20px;
}
.el-form-item__content {
display: flex;
width: 25vw;
height: 10vh;
}
.userIcon {
padding: 1vh 2vh 0vh 2vh;
box-sizing: border-box;
width: 10vh;
height: 10vh;
background-color: rgb(18, 70, 113);
}
.userIcon > img {
width: 5vh;
height: 5vh;
}
#userInp {
height: 100%;
width: 100%;
background: none;
outline: none;
border: none;
font-size: 20px;
color: rgb(47, 213, 255);
}
/* .el-input input::-webkit-input-placeholder {
color:rgb(47,213,255);
} */
.passWordInpBody {
display: flex;
padding: 2px;
border: 1px solid rgb(18, 70, 113);
margin-bottom: 50px;
}
.passWordIcon {
padding: 1vh 2vh 0vh 2vh;
box-sizing: border-box;
width: 10vh;
height: 10vh;
background-color: rgb(18, 70, 113);
}
.passWordIcon > img {
width: 5vh;
height: 5vh;
}
#passWordInp {
height: 100%;
width: 100%;
background: none;
outline: none;
border: none;
font-size: 20px;
color: rgb(47, 213, 255);
}
.loginBtn {
width: 100%;
height: 10vh;
font-size: 17px;
background-color: rgb(24, 180, 255);
border: 0px;
color: white;
letter-spacing: 10px;
cursor: pointer;
}
}
@media screen and (min-width: 901px) {
.backGround {
padding-top: 50px;
box-sizing: border-box;
height: 100vh;
width: 100vw;
background-image: url("../assets/imgs/bg.png");
}
.projectName {
text-align: center;
font-size: 70px;
font-weight: 600;
background-image: -webkit-linear-gradient(
bottom,
rgb(36, 162, 254),
rgb(255, 255, 255)
);
background-clip: text;
-webkit-text-fill-color: transparent;
letter-spacing: 3px;
}
.loginBody {
position: relative;
padding-top: 9vh;
box-sizing: border-box;
margin: 0 auto;
width: 75%;
height: 90%;
background-image: url("../assets/imgs/kuang.png");
background-size: 100% 100%;
}
.loginTitle {
margin-left: 50px;
text-align: center;
font-size: 25px;
color: rgb(47, 213, 255);
letter-spacing: 6px;
}
.loginText {
margin-top: 20px;
margin-left: 50px;
text-align: center;
font-size: 30px;
color: rgb(151, 227, 244);
letter-spacing: 6px;
margin-bottom: 10px;
}
.loginInoputs {
margin-top: 15vh;
position: absolute;
right: 13vh;
}
.userInpBody {
padding: 2px;
border: 1px solid rgb(18, 70, 113);
margin-bottom: 20px;
}
.el-form-item__content {
display: flex;
}
.userIcon {
padding: 11px;
box-sizing: border-box;
width: 50px;
height: 50px;
background-color: rgb(18, 70, 113);
}
#userInp {
height: 100%;
width: 100%;
background: none;
outline: none;
border: none;
font-size: 20px;
color: rgb(47, 213, 255);
letter-spacing: 2px;
}
/* .el-input input::-webkit-input-placeholder {
color:rgb(47,213,255);
} */
.passWordInpBody {
display: flex;
padding: 2px;
border: 1px solid rgb(18, 70, 113);
margin-bottom: 50px;
}
.passWordIcon {
padding: 11px;
box-sizing: border-box;
width: 50px;
height: 50px;
background-color: rgb(18, 70, 113);
}
#passWordInp {
height: 100%;
width: 80%;
background: none;
outline: none;
border: none;
font-size: 20px;
color: rgb(47, 213, 255);
letter-spacing: 2px;
}
.loginBtn {
width: 100%;
height: 60px;
font-size: 26px;
background-color: rgb(24, 180, 255);
border: 0px;
color: white;
letter-spacing: 10px;
cursor: pointer;
}
}
* {
margin: 0;
padding: 0;
}
.keyboardStyle {
position: absolute;
top: 0;
left: 0;
z-index: 100;
}
</style>
\ No newline at end of file
<template>
<div class="carInMainViews" v-if="showDecide">
<div class="carInSmallTitle">车辆信息</div>
<img src="../../../../assets/images/truckTuPian/close.png" class="carInClose" @click="carInCloseFn()">
<div class="carInContent">
<div>
<div>
<img src="../../../../assets/images/truckTuPian/fuxiaobiaotititle.png">
<span class="carInContent_left_title">车辆信息</span>
</div>
<div class="carInFrom_content">
<div>车辆牌号:</div>
<div class="carInFrom_input">{{vehicleInformationData.number}}</div>
</div>
<div class="carInFrom_content">
<div>车辆年限:</div>
<div class="carInFrom_input">{{vehicleInformationData.year ? vehicleInformationData.year + '' : ''}}</div>
</div>
<div class="carInFrom_content">
<div>保养时间:</div>
<div class="carInFrom_input">{{vehicleInformationData.time ? currentTime(vehicleInformationData.time) : ''}}</div>
</div>
<div class="carInFrom_content">
<div>超速预警值:</div>
<div class="carInFrom_input">{{vehicleInformationData.alarm ? vehicleInformationData.alarm : ''}}</div>
</div>
<div class="carInFrom_content">
<div>终端设备号:</div>
<div class="carInFrom_input">{{vehicleInformationData.equipmentName ? vehicleInformationData.equipmentName : ''}}</div>
</div>
<div class="carInFrom_content">
<div>运重:</div>
<div class="carInFrom_input">{{vehicleInformationData.weight ? vehicleInformationData.weight : ''}}</div>
</div>
</div>
<div>
<div>
<img src="../../../../assets/images/truckTuPian/fuxiaobiaotititle.png">
<span class="carInContent_left_title">车辆实时数据</span>
</div>
<div class="carInFrom_content">
<div>运行状态:</div>
<div class="carInFrom_input">{{realTimeData.status == 0 ? '空运' : realTimeData.status == 1 ? '重运' : realTimeData.status == 2 ? '待装' : '停运'}}</div>
</div>
<div class="carInFrom_content">
<div>运行时长:</div>
<div class="carInFrom_input">{{realTimeData.runTime ? realTimeData.runTime + '小时' : ''}}</div>
</div>
<div class="carInFrom_content">
<div>开始时间:</div>
<div class="carInFrom_input">{{realTimeData.startTime ? realTimeData.startTime : ''}}</div>
</div>
<div class="carInFrom_content">
<div>运输效率:</div>
<div class="carInFrom_input">{{realTimeData.effic ? realTimeData.effic + 'km/h' : ''}}</div>
</div>
<div class="carInFrom_content">
<div>当日里程:</div>
<div class="carInFrom_input">{{realTimeData.mil ? realTimeData.mil + 'km' : ''}}</div>
</div>
<div class="carInFrom_content">
<div>车次:</div>
<div class="carInFrom_input">{{realTimeData.carNum ? realTimeData.carNum + '' : ''}}</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { httpGet, httpPostForJson, putForJson, httpDelForJson} from "@/common/httpBean.js"
import {vehicleInformationQuery,apiManmadesRealQuery,apiManmadesChanCheRealQuery} from "@/axios/api.js"
export default {
data() {
return {
showDecide:false,
vehicleInformationData:{},
realTimeData:{
status:'',
runTime:'',
startTime:'',
effic:'',
mil:'',
carnum:'',
},
}
},
methods: {
loadData(value,carclass) {
let byValue = value;
this.showDecide = true;
httpGet(vehicleInformationQuery,{number:byValue}).then((res) => {
if(res.code == 200){
if(res.data.totalElements == 0){
return
}else{
this.vehicleInformationData = res.data.content[0];
}
}
});
if(carclass == '铲车'){
httpGet(apiManmadesChanCheRealQuery,{number:byValue}).then((res) => {
if(res.code == 200 && res.data.length != 0){
this.realTimeData = res.data[0];
}
});
}else{
httpGet(apiManmadesRealQuery,{number:byValue}).then((res) => {
if(res.length != 0){
this.realTimeData = res[0];
}
});
}
},
carInCloseFn(){
this.showDecide = false;
this.$parent.selectFunction = 0;
},
currentTime(time){
var date = new Date(time);
var year = date.getFullYear(); //年 ,从 Date 对象以四位数字返回年份
var month = date.getMonth() + 1; //月 ,从 Date 对象返回月份 (0 ~ 11) ,date.getMonth()比实际月份少 1 个月
var day = date.getDate(); //日 ,从 Date 对象返回一个月中的某一天 (1 ~ 31)
var hours = date.getHours(); //小时 ,返回 Date 对象的小时 (0 ~ 23)
var minutes = date.getMinutes(); //分钟 ,返回 Date 对象的分钟 (0 ~ 59)
var seconds = date.getSeconds(); //秒 ,返回 Date 对象的秒数 (0 ~ 59)
//修改月份格式
if (month >= 1 && month <= 9) {
month = "0" + month;
}
//修改日期格式
if (day >= 0 && day <= 9) {
day = "0" + day;
}
//修改小时格式
if (hours >= 0 && hours <= 9) {
hours = "0" + hours;
}
//修改分钟格式
if (minutes >= 0 && minutes <= 9) {
minutes = "0" + minutes;
}
//修改秒格式
if (seconds >= 0 && seconds <= 9) {
seconds = "0" + seconds;
}
//获取当前系统时间 格式(yyyy-mm-dd hh:mm:ss)
let currentFormatDate = year + "-" + month + "-" + day;
//console.log(currentFormatDate);
return currentFormatDate;
}
}
}
</script>
<style scope>
@media screen and (max-width:901px){
.carInMainViews{
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
height: 75vh;
width: 70vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/cheliangxinxikuang.png');
background-size:100% 100%;
transform: translate(-50%,-50%);
padding: 12px 30px 0px;
box-sizing: border-box;
}
.carInSmallTitle{
color: white;
font-size: 12px;
text-align: center;
line-height: 6vh;
width: 11vw;
height: 6vh;
background:no-repeat center center url('~@/assets/images/truckTuPian/xiaobiaotikuang.png');
background-size:100% 100%;
}
.carInClose{
position: absolute;
top: 4vh;
right: 1vw;
cursor: pointer;
}
.carInContent{
margin-top: 1vh;
width: 100%;
display: flex;
justify-content: space-between;
}
.carInContent>div{
width: 47%;
height: 100%;
}
.carInContent_left_title{
font-size: 16px;
font-weight: 600;
background-image:-webkit-linear-gradient(bottom, #59C8FF, #FAFEFF);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
}
.carInFrom_content{
margin-top: 3.5vh;
color: rgb(23,249,250);
font-size: 13px;
font-weight: 500;
display: flex;
justify-content: space-between;
}
.carInFrom_content>div{
height: 5vh;
line-height: 4.5vh;
}
.carInFrom_input{
width: 18.5vw;
border: 2px solid rgb(23,249,250);
border-radius: 5px;
padding:0px 10px;
box-sizing: border-box;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
}
}
@media screen and (min-width:901px){
.carInMainViews{
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
height: 75vh;
width: 70vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/cheliangxinxikuang.png');
background-size:100% 100%;
transform: translate(-50%,-50%);
padding: 12px 30px 0px;
box-sizing: border-box;
}
.carInSmallTitle{
color: white;
font-size: 18px;
text-align: center;
line-height: 4.5vh;
width: 9vw;
height: 4.5vh;
background:no-repeat center center url('~@/assets/images/truckTuPian/xiaobiaotikuang.png');
background-size:100% 100%;
}
.carInClose{
position: absolute;
top: 4vh;
right: 1vw;
cursor: pointer;
}
.carInContent{
margin-top: 20px;
height: 50vh;
width: 100%;
display: flex;
justify-content: space-between;
}
.carInContent>div{
width: 47%;
height: 100%;
}
.carInContent_left_title{
font-size: 20px;
font-weight: 600;
background-image:-webkit-linear-gradient(bottom, #59C8FF, #FAFEFF);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
}
.carInFrom_content{
margin-top: 15px;
color: rgb(23,249,250);
font-size: 18px;
font-weight: 500;
letter-spacing: 1px;
display: flex;
justify-content: space-between;
}
.carInFrom_content>div{
height: 5vh;
line-height: 4.5vh;
}
.carInFrom_input{
width: 19vw;
border: 2px solid rgb(23,249,250);
border-radius: 5px;
padding:0px 10px;
box-sizing: border-box;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
}
}
</style>
\ No newline at end of file
<template>
<div class="failureDeMainViews" v-if="showDecide">
<div class="failureDeSmallTitle">车辆故障申报</div>
<img src="../../../../assets/images/truckTuPian/close.png" class="failureDeClose" @click="failureDeCloseFn()">
<div class="failureDeContent">
<div class="failureDeContentFromViews">
<div>
<img class="tu1" src="../../../../assets/images/truckTuPian/fuxiaobiaotititle.png">
<span class="failureDeContent_left_title">选择要申报的车辆:</span>
<div style="display: flex;justify-content: space-evenly;margin-top:1vh;">
<el-radio v-model="from.car" label="当前车辆故障" border>当前车辆故障</el-radio>
<el-radio v-model="from.car" label="其他车辆故障" border>其他车辆故障</el-radio>
</div>
</div>
<div>
<span>车辆号码:</span>
<el-select v-model="from.carcode" placeholder="请选择车辆号码" style="width:18vw;" :disabled="from.car == '当前车辆故障'">
<el-option v-for="(obj,index) in carInforData" :label="obj.number" :value="obj.number" :key="index"></el-option>
</el-select>
</div>
<div>
<span>司机名称:</span>
<el-select v-model="from.name" placeholder="请选择司机名称" style="width:18vw;" :disabled="from.car == '当前车辆故障'">
<el-option v-for="(obj,index) in peopleInforData" :label="obj.name" :value="obj.name" :key="index"></el-option>
</el-select>
</div>
<div style="display:flex;">
<span>车辆位置:</span>
<div class="getweizhitu1" @click="getLocationFn()">
<img src="../../../../assets/images/truckTuPian/dingwei1.png">
<span>{{getLocationText}}</span>
</div>
<span style="margin-left:1vw;" v-if="zuobiaoShow">坐标:{{parseFloat(from.lat).toFixed(2)}},{{parseFloat(from.lon).toFixed(2)}}</span>
</div>
<div>
<span>故障类型:</span>
<el-select v-model="from.fault" placeholder="请选择故障类型" style="width:18vw;">
<el-option v-for="(obj,index) in faultInforData" :label="obj.breakclass" :value="obj.breakclass" :key="index"></el-option>
</el-select>
</div>
<div>
<div class="failure_textarea1">故障问题描述:</div>
<el-input
type="textarea"
:rows="4"
placeholder="请输入内容"
v-model="from.problem"
class="failure_textarea2">
</el-input>
</div>
</div>
</div>
<div class="submitDeStyle">
<el-button type="primary" style="width:14vw" round @click="submitDeFn()">故障申报</el-button>
</div>
</div>
</template>
<script>
import { httpGet, httpPostForJson, putForJson, httpDelForJson} from "@/common/httpBean.js"
import {carsInforQuery,
failureDeclarationAdd,
vehicleInformationQuery,
vehicleInformationUpdate,
personalCenterInforQuery,
faultInforQuery,
carRealTimeLocationQuery2,
faultDayAdd,
faultMonthAdd,
faultYearAdd
} from "@/axios/api.js"
export default {
data() {
return {
showDecide:false,
from:{car:'',carcode:'',name:'',fault:'',problem:'',lat:'',lon:''},
getLocationText:'点击获取车辆位置',
carnumber:'',
personName:'',
carInforData:[],
peopleInforData:[],
faultInforData:[],
zuobiaoShow:false,
}
},
methods: {
loadData(carnumber,personName) {
this.showDecide = true;
this.carnumber = carnumber;
this.personName = personName;
this.from = {car:'',carcode:'',name:'',fault:'',problem:'',lat:'',lon:''};
this.getLocationText = '点击获取车辆位置';
httpGet(vehicleInformationQuery,{size:9999}).then((res) => {
if(res.code == 200){
this.carInforData = res.data.content;
}
});
httpGet(personalCenterInforQuery,{size:9999}).then((res) => {
if(res.code == 200){
this.peopleInforData = res.data.content;
}
});
httpGet(faultInforQuery,{size:9999}).then((res) => {
if(res.code == 200){
this.faultInforData = res.data.content;
}
});
},
failureDeCloseFn(){
this.showDecide = false;
this.zuobiaoShow = false;
this.from = {car:'',carcode:'',name:'',fault:'',problem:'',lat:'',lon:''};
this.getLocationText = '点击获取车辆位置';
this.$parent.selectFunction = 0;
},
//获取车辆位置
getLocationFn(){
let that = this;
if(this.from.carcode == ''){
this.$notify({
title: '请输入车辆号码!',
type: 'error',
duration: 2500
})
}else{
httpGet(vehicleInformationQuery,{number:this.from.carcode}).then((res) => {
if(res.code == 200){
if(res.data.content[0].equipmentName == '' || !res.data.content[0].equipmentName){
this.$notify({
title: '暂无车辆位置!',
type: 'error',
duration: 2500
})
}else{
httpGet(carRealTimeLocationQuery2,{name:res.data.content[0].equipmentName}).then((res1) => {
if(res1.data){
that.from.lat = res1.data.location.y;
that.from.lon = res1.data.location.x;
that.zuobiaoShow = true;
this.$notify({
title: '获取成功!',
type: 'success',
duration: 2500
})
}else{
this.$notify({
title: '暂无车辆位置!',
type: 'error',
duration: 2500
})
that.from.lat = 0;
that.from.lon = 0;
}
});
}
}
});
}
},
//提交申报
submitDeFn(){
if(this.from.carcode == ''){
this.$notify({
title: '请输入车辆号码!',
type: 'error',
duration: 2500
})
}else{
httpPostForJson(faultDayAdd,this.from).then((res) => {});
httpPostForJson(faultMonthAdd,this.from).then((res) => {});
httpPostForJson(faultYearAdd,this.from).then((res) => {});
let breakData1 = {};
breakData1.number = this.from.carcode;
breakData1.driver = this.from.name;
breakData1.carbreak = this.from.fault;
breakData1.status = 1;
breakData1.breakRemarks = this.from.problem;
httpPostForJson(carsInforQuery,breakData1).then((res) => {});
httpPostForJson(failureDeclarationAdd,this.from).then((res) => {
if(res.code == 200){
this.$notify({
title: '故障申报成功!',
type: 'success',
duration: 2500
});
this.from = {car:'',carcode:'',name:'',fault:'',problem:'',lat:'',lon:''};
this.getLocationText = '点击获取车辆位置';
this.zuobiaoShow = false;
}else{
this.$notify({
title: res.head.message,
type: 'error',
duration: 2500
})
this.from = {car:'',carcode:'',name:'',fault:'',problem:'',lat:'',lon:''};
this.getLocationText = '点击获取车辆位置';
this.zuobiaoShow = false;
}
});
//修改车辆状态
httpGet(vehicleInformationQuery,{number:this.from.carcode}).then((res) => {
if(res.code == 200){
putForJson(vehicleInformationUpdate,{id:res.data.content[0].id,status:1}).then((res) => {
this.$nextTick(()=>{
window.location.reload();
})
});
}
});
}
},
},
watch:{
'from.car':function(){
if(this.from.car == '当前车辆故障'){
this.from.carcode = this.carnumber;
this.from.name = this.personName;
this.getLocationFn();
}else{
this.from.carcode = '';
this.from.name = '';
this.from.lat = '';
this.from.lon = '';
this.zuobiaoShow = false;
}
},
},
}
</script>
<style scope>
@media screen and (max-width:901px){
.failure_textarea1{
color: rgb(24,228,240);
font-size: 13px;
margin-bottom:1vh;
}
.failure_textarea2{
font-size: 13px;
width:30vw;
}
.failure_textarea2 .el-textarea__inner{
max-height: 20vh !important;
}
.getweizhitu1{
cursor: pointer;
}
.getweizhitu1>img{
height: 2.5vh;
}
.getweizhitu1>span{
color: rgb(24,228,240);
font-size:12px;
text-decoration:underline;
}
.el-select-dropdown__item{
font-size: 20px;
height: 45px;
line-height: 45px;
}
.failureDeMainViews{
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
height: 90vh;
width: 44vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/guzhangshenbankuang1.png');
background-size:100% 100%;
transform: translate(-50%,-48%);
padding: 2vh 2vw 0px;
box-sizing: border-box;
}
.failureDeSmallTitle{
color: white;
font-size: 12px;
text-align: center;
line-height: 7vh;
width: 14vw;
height: 7vh;
background:no-repeat center center url('~@/assets/images/truckTuPian/xiaobiaotikuang.png');
background-size:100% 100%;
}
.failureDeClose{
position: absolute;
top: 4vh;
right: 1vw;
cursor: pointer;
}
.failureDeContent{
width: 100%;
display: flex;
justify-content: center;
}
.failureDeContent_left_title{
font-size: 13px !important;
font-weight: 500;
color: rgb(24,228,240);
}
.failureDeContentFromViews .tu1{
width: 3vw;
}
/* 未选中样式 */
.is-bordered .el-radio__label{
font-size: 13px !important;
color: wheat;
}
.is-bordered {
border: wheat 2px solid;
height: 38px;
line-height: 20px;
}
.is-bordered .el-radio__inner{
height: 18px;
width: 18px;
}
.failureDeContentFromViews .el-radio.is-bordered{
height: 7vh;
width: 49%;
padding: 0.5vh 1vw 0px;
}
/* 选中样式 */
.el-radio__input.is-checked+.el-radio__label{
color: #1890ff;
}
.el-radio.is-bordered.is-checked{
border-color: #1890ff;
}
.el-radio__input.is-checked .el-radio__inner{
border-color: #1890ff;
background: #1890ff;
}
.el-radio{
margin: 0;
}
.el-radio.is-bordered{
padding: 8px 20px 0px 10px;
}
.failureDeContentFromViews{
margin-top: 1vh;
}
.failureDeContentFromViews>div{
margin-bottom: 1vh;
}
.failureDeContentFromViews>div>span{
color: rgb(24,228,240);
font-size: 13px;
}
.el-input--small .el-input__inner{
font-size: 18px;
}
.submitDeStyle{
position: absolute;
bottom: 2vh;
left: 50%;
transform: translateX(-50%);
}
.submitDeStyle button{
width:11vw;
height:7vh;
font-size:13px;
letter-spacing:1px;
text-align: center;
line-height: 0;
padding: 0 !important;
}
.failureDeContentFromViews .el-input--suffix .el-input__inner{
height: 6.5vh;
font-size: 13px;
}
.failureDeContentFromViews .el-select__caret.el-input__icon.el-icon-arrow-up{
line-height: 0px !important;
}
}
@media screen and (min-width:901px){
.failure_textarea1{
color: rgb(24,228,240);
font-size: 20px;
margin-bottom:10px;
}
.failure_textarea2{
font-size: 18px;
width:30vw;
}
.getweizhitu1{
cursor: pointer;
}
.getweizhitu1>img{
height: 20px;
}
.getweizhitu1>span{
color: rgb(24,228,240);
font-size:18px;
margin-top:-10px;
text-decoration:underline;
}
.el-select-dropdown__item{
font-size: 20px;
height: 45px;
line-height: 45px;
}
.failureDeMainViews{
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
height: 90vh;
width: 44vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/guzhangshenbankuang1.png');
background-size:100% 100%;
transform: translate(-50%,-48%);
padding: 12px 30px 0px;
box-sizing: border-box;
}
.failureDeSmallTitle{
color: white;
font-size: 17px;
text-align: center;
line-height: 4.5vh;
width: 11vw;
height: 4.5vh;
background:no-repeat center center url('~@/assets/images/truckTuPian/xiaobiaotikuang.png');
background-size:100% 100%;
}
.failureDeClose{
position: absolute;
top: 4vh;
right: 1vw;
cursor: pointer;
}
.failureDeContent{
width: 100%;
display: flex;
justify-content: center;
}
.failureDeContent_left_title{
font-size: 20px;
font-weight: 500;
color: rgb(24,228,240);
}
/* 未选中样式 */
.is-bordered .el-radio__label{
font-size: 17px;
color: wheat;
}
.is-bordered {
border: wheat 2px solid;
height: 38px;
line-height: 20px;
}
.is-bordered .el-radio__inner{
height: 18px;
width: 18px;
}
/* 选中样式 */
.el-radio__input.is-checked+.el-radio__label{
color: #1890ff;
}
.el-radio.is-bordered.is-checked{
border-color: #1890ff;
}
.el-radio__input.is-checked .el-radio__inner{
border-color: #1890ff;
background: #1890ff;
}
.el-radio{
margin: 0;
}
.el-radio.is-bordered{
padding: 8px 20px 0px 10px;
}
.failureDeContentFromViews{
margin-top: 10px;
}
.failureDeContentFromViews>div{
margin-bottom: 25px ;
}
.failureDeContentFromViews>div>span{
color: rgb(24,228,240);
font-size: 20px;
}
.el-input--small .el-input__inner{
font-size: 18px;
}
.submitDeStyle{
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
}
.submitDeStyle button{
width:10vw;
height:6.5vh;
font-size:18px;
letter-spacing:2px;
}
}
</style>
\ No newline at end of file
<template>
<div class="achievementMainViews" v-if="showDecide">
<div class="achievementSmallTitle">绩效统计</div>
<img src="../../../../assets/images/truckTuPian/close.png" class="achievementClose" @click="achievementCloseFn()">
<div class="achievementContent">
<!-- <div style="display: flex;margin-top:10px;">
<el-radio v-model="from.selectModel" label="司机日派单" border>司机日派单</el-radio>
<el-radio v-model="from.selectModel" label="司机产量报表" border>司机产量报表</el-radio>
</div> -->
<div class="achievementContent_inputs">
<el-date-picker v-model="startTime" type="date" placeholder="选择开始日期" style="width:22vw;"></el-date-picker>
<div class="achievementContent_inputs_HengXian">——</div>
<el-date-picker v-model="endTime" type="date" placeholder="选择结束日期" style="width:22vw;"></el-date-picker>
<el-button type="primary" round class="achievementContent_inputs_btn" @click="toSearch()">查询</el-button>
</div>
<div class="sijikaoheTitle">
<img src="../../../../assets/images/truckTuPian/fuxiaobiaotititle.png">
<span>司机考核:</span>
</div>
<div class="checkViews">
<div class="checkFrom_content">
<div>开始工作时间:</div>
<div class="checkFrom_input">{{checkFromData.startTime ? checkFromData.startTime : ''}}</div>
</div>
<div class="checkFrom_content">
<div>{{carclass != '铲车' ? '今日车数:' : '今日装车数:'}}</div>
<div class="checkFrom_input">{{checkFromData.carNum ? checkFromData.carNum + '' : ''}}</div>
</div>
<div class="checkFrom_content">
<div>今日工作时间:</div>
<div class="checkFrom_input">{{checkFromData.time ? checkFromData.time + '小时' : ''}}</div>
</div>
<div class="checkFrom_content">
<div>今日产量:</div>
<div class="checkFrom_input">{{checkFromData.yield ? checkFromData.yield + '' : ''}}</div>
</div>
<div class="checkFrom_content">
<div>接单次数:</div>
<div class="checkFrom_input">{{checkFromData.number ? checkFromData.number + '' : ''}}</div>
</div>
<div class="checkFrom_content">
<div>已完成单数:</div>
<div class="checkFrom_input">{{checkFromData.finish ? checkFromData.finish + '' : ''}}</div>
</div>
<div class="checkFrom_content" v-if="carclass != '铲车'">
<div>今日里程数:</div>
<div class="checkFrom_input">{{checkFromData.odo ? checkFromData.odo + 'km' : ''}}</div>
</div>
<div class="checkFrom_content">
<div>今日停车时长:</div>
<div class="checkFrom_input">{{checkFromData.stop ? checkFromData.stop + '小时' : ''}}</div>
</div>
<div class="checkFrom_content">
<div>车辆故障次数:</div>
<div class="checkFrom_input">{{checkFromData.alarm ? checkFromData.alarm + '' : ''}}</div>
</div>
<div class="checkFrom_content">
<div>主要工作区域:</div>
<div class="checkFrom_input">{{checkFromData.adr ? checkFromData.adr : ''}}</div>
</div>
</div>
<div class="sijikaoheTitle">
<img src="../../../../assets/images/truckTuPian/fuxiaobiaotititle.png">
<span>智能派单:</span>
</div>
<!-- 卡车列表 -->
<div class="co-table" v-if="carclass != '铲车'">
<div class="rolling">
<div class="table-box">
<dl>
<dt>
<div>单号</div>
<!-- <div>起点经度</div>-->
<!-- <div>起点纬度</div>-->
<div>目的地</div>
<div>里程(km)</div>
<div>开始时间</div>
<div>完成时间</div>
</dt>
<dd v-for="(item,index) in intelligentDispatchData" :key="index">
<div>{{item.odd}}</div>
<!-- <div>{{item.x ? parseFloat(item.x).toFixed(2) : ''}}</div>-->
<!-- <div>{{item.y ? parseFloat(item.y).toFixed(2) : ''}}</div>-->
<div>{{item.destination}}</div>
<div>{{parseFloat(item.mil).toFixed(2)}}</div>
<div>{{item.endTime}}</div>
<div>{{item.createTime}}</div>
</dd>
</dl>
</div>
</div>
</div>
<!-- 铲车列表 -->
<div class="co-table" v-if="carclass == '铲车'">
<div class="rolling">
<div class="table-box">
<dl>
<dt>
<div>单号</div>
<div>卡车车牌号</div>
<div>装车时间</div>
</dt>
<dd v-for="(item,index) in chanRealQueryData" :key="index">
<div>{{item.odd}}</div>
<div>{{item.carNo}}</div>
<div>{{item.createTime}}</div>
</dd>
</dl>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { httpGet, httpPostForJson, putForJson, httpDelForJson} from "@/common/httpBean.js"
import {intelligentDispatchQuery,apiManmadesJXQuery,chanRealQuery,apiManmadesChanJxQuery} from "@/axios/api.js"
export default {
data() {
return {
carclass:'',
showDecide:false,
from:{selectModel:'司机日派单'},
personalName:'',
startTime:'',
endTime:'',
checkFromData:{},
intelligentDispatchData:[],
chanRealQueryData:[],
carNumber:'',
}
},
methods: {
loadData(value,chepaihao,carclass) {
this.showDecide = true;
this.personalName = value;
this.carNumber = chepaihao;
this.carclass = carclass;
this.startTime = '';
this.endTime = '';
this.getintelligentDisData();
},
//获取智能派单
getintelligentDisData(){
if(this.carclass == ''){
return
}else if(this.carclass == "铲车"){
let query2 = {};
query2.size = 50;
query2.page = 0;
query2.sort = 'createTime,desc';
query2.startTime = this.currentTime(this.startTime);
query2.endTime = this.currentTime(this.endTime);
query2.car = this.carNumber;
query2.flag = 0;
//下面
httpGet(chanRealQuery,query2).then((res) => {
if(res.code === 200){
this.chanRealQueryData = res.data;
};
});
//上面
httpGet(apiManmadesChanJxQuery,{channame:this.personalName}).then((res) => {
if(res.code == 200 && res.data.length != 0){
this.checkFromData = res.data[0];
}
});
}else{
let query1 = {};
query1.size = 50;
query1.page = 0;
query1.sort = 'createTime,desc';
query1.startTime = this.currentTime(this.startTime);
query1.endTime = this.currentTime(this.endTime);
query1.carNo = this.carNumber;
query1.flag = 0;
//下面
httpGet(intelligentDispatchQuery,query1).then((res) => {
if(res.code === 200){
this.intelligentDispatchData = res.data;
};
});
//上面
httpGet(apiManmadesJXQuery,{kaname:this.personalName}).then((res) => {
if(res.code == 200 && res.data.length != 0){
this.checkFromData = res.data[0];
}
});
}
},
//查询
toSearch(){
this.getintelligentDisData();
},
achievementCloseFn(){
this.showDecide = false;
this.from = {selectModel:'司机日派单'};
this.startTime = '';
this.endTime = '';
this.$parent.selectFunction = 0;
},
//转换时间
currentTime(time){
if(time == '' || time == null){
return '';
}
var date = new Date(time);
var year = date.getFullYear(); //年 ,从 Date 对象以四位数字返回年份
var month = date.getMonth() + 1; //月 ,从 Date 对象返回月份 (0 ~ 11) ,date.getMonth()比实际月份少 1 个月
var day = date.getDate(); //日 ,从 Date 对象返回一个月中的某一天 (1 ~ 31)
var hours = date.getHours(); //小时 ,返回 Date 对象的小时 (0 ~ 23)
var minutes = date.getMinutes(); //分钟 ,返回 Date 对象的分钟 (0 ~ 59)
var seconds = date.getSeconds(); //秒 ,返回 Date 对象的秒数 (0 ~ 59)
//修改月份格式
if (month >= 1 && month <= 9) {
month = "0" + month;
}
//修改日期格式
if (day >= 0 && day <= 9) {
day = "0" + day;
}
let currentFormatDate = year + "-" + month + "-" + day;
return currentFormatDate;
}
}
}
</script>
<style scope>
@media screen and (max-width:901px){
.sijikaoheTitle{
margin-top:0.5vh;
}
.sijikaoheTitle>img{
width: 3vw;
}
.sijikaoheTitle>span{
font-size: 14px;
color: rgb(24,228,240);
font-weight: 600;
}
.achievementContent_inputs{
display: flex;
justify-content: space-between;
margin-top:1vh;
}
.achievementContent_inputs_btn{
width:8vw;
font-size:13px;
}
.achievementContent_inputs_HengXian{
color: rgb(24,228,240);
line-height:6vh;
font-weight:600;
}
.achievementMainViews{
z-index: 2;
position: absolute;
top: 50%;
left: 50%;
height: 85vh;
width: 75vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/jixiaotongjikuang1.png');
background-size:100% 100%;
transform: translate(-50%,-50%);
padding: 12px 30px 0px;
box-sizing: border-box;
}
.achievementSmallTitle{
color: white;
font-size: 12px;
text-align: center;
line-height: 6vh;
width: 11vw;
height: 6vh;
background:no-repeat center center url('~@/assets/images/truckTuPian/xiaobiaotikuang.png');
background-size:100% 100%;
}
.achievementClose{
position: absolute;
top: 4vh;
right: 1vw;
cursor: pointer;
}
.achievementContent{
width: 100%;
}
.achievementContent .el-input__inner{
height: 7vh;
line-height: 7vh;
font-size: 13px;
}
.achievementContent .el-input__icon{
line-height: 0px;
}
.achievementContent .el-button.is-round{
height: 7vh;
padding: 0;
}
/* 未选中样式 */
.is-bordered .el-radio__label{
font-size: 20px;
color: wheat;
}
.is-bordered {
border: wheat 2px solid;
height: 40px;
width: 200px;
line-height: 22px;
}
.is-bordered .el-radio__inner{
height: 18px;
width: 18px;
}
/* 选中样式 */
.el-radio__input.is-checked+.el-radio__label{
color: rgb(24,228,240);
}
.el-radio.is-bordered.is-checked{
border-color: rgb(24,228,240);
}
.el-radio__input.is-checked .el-radio__inner{
border-color: rgb(24,228,240);
background: rgb(24,228,240);
}
.el-radio{
margin: 0;
}
.el-input--small .el-input__inner {
height:40px;
}
.checkViews{
display: flex;
justify-content: space-between;
margin-top:0.5vh;
flex-wrap: wrap;
}
.checkFrom_content{
width: 47%;
height: 4vh;
line-height: 4vh;
margin-bottom: 1vh;
color: rgb(23,249,250);
font-size: 12px;
font-weight: 500;
display: flex;
justify-content: space-between;
}
.checkFrom_input{
height: 100%;
width: 18vw;
border: 1px solid rgb(23,249,250);
border-radius: 5px;
padding:0px 10px;
box-sizing: border-box;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
}
.co-table{
text-align: center;
}
.table-box{
margin-top: 0px;
}
dl{
display:table;
width:100%;
}
dt{
margin-top: 20px;
display:table-row;
background-color: #274088;
}
dt>div{
display:table-cell;
padding: 1px;
font-size: 12px;
font-weight: 500;
color: rgb(24,228,240);
}
dd{
display:table-row;
}
dd>div{
display:table-cell;
padding: 1px 0px;
font-size: 12px;
color: rgb(24,228,240);
}
.rolling{
height: 25vh;
overflow-y:auto;
}
.rolling::-webkit-scrollbar {
/*滚动条整体样式*/
width : 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.rolling::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius : 10px;
background-color: #274088;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
}
.rolling::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2);
background : #ededed;
border-radius: 10px;
}
}
@media screen and (min-width:901px){
.sijikaoheTitle{
margin-top:0.5vh;
}
.sijikaoheTitle>img{
width: 2vw;
}
.sijikaoheTitle>span{
font-size: 22px;
color: rgb(24,228,240);
font-weight: 600;
}
.achievementContent_inputs{
display: flex;
justify-content: space-between;
margin-top:10px;
}
.achievementContent_inputs_btn{
width:7vw;
font-size:18px;
}
.achievementContent_inputs_HengXian{
color: rgb(24,228,240);
line-height:40px;
font-weight:600;
}
.achievementMainViews{
z-index: 2;
position: absolute;
top: 50%;
left: 50%;
height: 85vh;
width: 65vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/jixiaotongjikuang1.png');
background-size:100% 100%;
transform: translate(-50%,-50%);
padding: 12px 30px 0px;
box-sizing: border-box;
}
.achievementSmallTitle{
color: white;
font-size: 18px;
text-align: center;
line-height: 4.5vh;
width: 9vw;
height: 4.5vh;
background:no-repeat center center url('~@/assets/images/truckTuPian/xiaobiaotikuang.png');
background-size:100% 100%;
}
.achievementClose{
position: absolute;
top: 4vh;
right: 1vw;
cursor: pointer;
}
.achievementContent{
width: 100%;
}
/* 未选中样式 */
.is-bordered .el-radio__label{
font-size: 20px;
color: wheat;
}
.is-bordered {
border: wheat 2px solid;
height: 40px;
width: 200px;
line-height: 22px;
}
.is-bordered .el-radio__inner{
height: 18px;
width: 18px;
}
/* 选中样式 */
.el-radio__input.is-checked+.el-radio__label{
color: rgb(24,228,240);
}
.el-radio.is-bordered.is-checked{
border-color: rgb(24,228,240);
}
.el-radio__input.is-checked .el-radio__inner{
border-color: rgb(24,228,240);
background: rgb(24,228,240);
}
.el-radio{
margin: 0;
}
.el-input--small .el-input__inner {
height:40px;
}
.checkViews{
display: flex;
justify-content: space-between;
margin-top:7px;
flex-wrap: wrap;
}
.checkFrom_content{
width: 48%;
height: 4vh;
line-height: 4vh;
margin-bottom: 15px;
color: rgb(23,249,250);
font-size: 17px;
font-weight: 500;
letter-spacing: 1px;
display: flex;
justify-content: space-between;
}
.checkFrom_input{
width: 15vw;
border: 2px solid rgb(23,249,250);
border-radius: 5px;
padding:0px 10px;
box-sizing: border-box;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
}
.co-table{
text-align: center;
}
.table-box{
margin-top: 0px;
}
dl{
display:table;
width:100%;
}
dt{
margin-top: 20px;
display:table-row;
background-color: #274088;
}
dt>div{
display:table-cell;
padding:4px 3px;
font-size: 18px;
font-weight: 500;
color: rgb(24,228,240);
}
dd{
display:table-row;
}
dd>div{
display:table-cell;
padding:4px 3px;
font-size: 18px;
color: rgb(24,228,240);
}
.rolling{
height: 28vh;
overflow-y:auto;
}
.rolling::-webkit-scrollbar {
/*滚动条整体样式*/
width : 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.rolling::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius : 10px;
background-color: #274088;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
}
.rolling::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2);
background : #ededed;
border-radius: 10px;
}
}
</style>
\ No newline at end of file
<template>
<div class="personalCenMainViews" v-if="showDecide">
<!-- 个人信息 -->
<div v-if="personalInViewShow">
<div class="personalCenSmallTitle">个人信息</div>
<div class="personalCenClose">
<span @click="changePassword()" class="changePasswordStyle">修改密码</span>
<img src="../../../../assets/images/truckTuPian/close.png" @click="personalCenCloseFn()" style="cursor: pointer;">
</div>
<div class="personalCenContent">
<div>
<div>
<img src="../../../../assets/images/truckTuPian/fuxiaobiaotititle.png">
<span class="personalCenContent_left_title">详细信息</span>
</div>
<div class="personalCenFrom_content">
<div>头像:</div>
<img :src="Avatar" class="user-avatar touxiang1">
</div>
<div class="personalCenFrom_content">
<div>驾龄:</div>
<div class="personalCenFrom_input">{{personalInformationData.age ? personalInformationData.age + '' : ''}}</div>
</div>
<div class="personalCenFrom_content">
<div>车次:</div>
<div class="personalCenFrom_input">{{personalInformationData.jiedan ? personalInformationData.jiedan : ''}}</div>
</div>
<div class="personalCenFrom_content">
<div>开始时间:</div>
<div class="personalCenFrom_input">{{personalInformationData.createTime ? personalInformationData.createTime : ''}}</div>
</div>
<div class="personalCenFrom_content">
<div>工作时长:</div>
<div class="personalCenFrom_input">{{personalInformationData.time ? personalInformationData.time : ''}}</div>
</div>
<div class="personalCenFrom_content">
<div>疲劳驾驶:</div>
<div class="personalCenFrom_input">{{personalInformationData.status ? (personalInformationData.status == 0 ? '疲劳驾驶中' : '未疲劳驾驶') : ''}}</div>
</div>
</div>
<div>
<div class="personalCenFrom_contentTop"></div>
<div class="personalCenFrom_content">
<div>姓名:</div>
<div class="personalCenFrom_input">{{personalInformationData.name ? personalInformationData.name : ''}}</div>
</div>
<div class="personalCenFrom_content">
<div>部门:</div>
<div class="personalCenFrom_input">{{personalInformationData.depart ? personalInformationData.depart : ''}}</div>
</div>
<div class="personalCenFrom_content">
<div>岗位:</div>
<div class="personalCenFrom_input">{{personalInformationData.post ? personalInformationData.post : ''}}</div>
</div>
<div class="personalCenFrom_content">
<div>用户名:</div>
<div class="personalCenFrom_input">{{personalInformationData.userName ? personalInformationData.userName : ''}}</div>
</div>
<div class="personalCenFrom_content">
<div>手机号:</div>
<div class="personalCenFrom_input">{{personalInformationData.phone ? personalInformationData.phone : ''}}</div>
</div>
<div class="personalCenFrom_content">
<div>公司名称:</div>
<div class="personalCenFrom_input">{{personalInformationData.company ? personalInformationData.company : ''}}</div>
</div>
<div class="personalCenFrom_content">
<div>现有住址:</div>
<div class="personalCenFrom_input">{{personalInformationData.adr ? personalInformationData.adr : ''}}</div>
</div>
</div>
</div>
<div class="logOutbtn">
<el-button type="primary" round class="logOutbtnStyle" @click="openLogOut()">退出登录</el-button>
</div>
</div>
<!-- 修改密码 -->
<div v-if="changePassWordViewShow">
<div class="changePassWordSmallTitle" @click="returnpersonalCen()"><span class="el-icon-arrow-left" style="font-weight:600;"></span> 返回个人中心</div>
<div class="changePassWordSmallContent">
<div class="changePassWordFrom_content">
<div>原始密码:</div>
<el-input v-model="form.oldPass" placeholder="请输入密码" class="mimaInput1" show-password></el-input>
</div>
<div class="changePassWordFrom_content">
<div>新密码:</div>
<el-input v-model="form.newPass" placeholder="请输入密码" class="mimaInput1" show-password></el-input>
</div>
<div class="changePassWordFrom_content">
<div>确认密码:</div>
<el-input v-model="form.confirmPass" placeholder="请输入密码" class="mimaInput1" show-password></el-input>
</div>
</div>
<div class="confirmNewPass">
<el-button type="primary" round class="confirmNewPassStyle" @click="doSubmit()">确认</el-button>
</div>
</div>
</div>
</template>
<script>
import Avatar from '@/assets/images/avatar.png'
import { encrypt } from "@/utils/rsaEncrypt.js";
import { httpGet, httpPostForJson, putForJson, httpDelForJson} from "@/common/httpBean.js"
import {updatePass,personalCenterInforQuery,vehicleInformationQuery,vehicleInformationUpdate,dingDanBiaoCaoZuo} from "@/axios/api.js"
export default {
data() {
return {
carnumber:'',
form: { oldPass: '', newPass: '', confirmPass: '' },
Avatar: Avatar,
showDecide:false,
personalInViewShow:false,
changePassWordViewShow:false,
personalInformationData:{},
byValue:'',
}
},
methods: {
loadData(value,carnumber) {
this.byValue = value;
this.carnumber = carnumber;
this.showDecide = true;
this.personalInViewShow = true;
this.changePassWordViewShow = false;
httpGet(personalCenterInforQuery,{name:this.byValue}).then((res) => {
if(res.code == 200){
this.personalInformationData = res.data.content[0];
}
});
},
//关闭个人信息
personalCenCloseFn(){
this.showDecide = false;
this.personalInViewShow = false;
this.changePassWordViewShow = false;
this.resetForm();
this.$parent.selectFunction = 0;
},
//退出系统
openLogOut() {
this.$confirm('确定注销并退出系统吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
httpGet(vehicleInformationQuery,{number:this.carnumber}).then((res1) => {
if(res1.code == 200){
if(res1.data.totalElements == 0){
return
}else{
//修改车辆状态为离线
putForJson(vehicleInformationUpdate,{id:res1.data.content[0].id,odo:0,oddStatus:1,workStatus:0,weightStatus:0}).then((res2) => {
//人员信息表中与车辆解绑
putForJson(personalCenterInforQuery,{id:this.personalInformationData.id,car:''}).then((res3) => {
//删除调度单子
// httpGet(dingDanBiaoCaoZuo,{carNo:this.carnumber}).then((res3Del) => {
// if(res3Del.code == 200 && res3Del.data.content.length != 0){
// httpDelForJson(dingDanBiaoCaoZuo,[res3Del.data.content[0].id,this.carnumber,res3Del.data.content[0].odd]).then((res3DelSon) => {
// this.logout();
// });
// }else{
// this.logout();
// }
// })
})
});
}
}
});
})
},
logout() {
this.$router.push({path: "/login"});
window.sessionStorage.clear();
window.localStorage.clear(); //清除所有key
window.isLogin = false;
// 退出后禁止返回上一页
history.pushState(null, null, document.URL);
window.addEventListener("popstate", function (e) {
history.pushState(null, null, document.URL);
},false
);
window.location.reload();
},
//修改密码
changePassword(){
this.personalInViewShow = false;
this.changePassWordViewShow = true;
this.resetForm();
},
//返回个人中心
returnpersonalCen(){
this.personalInViewShow = true;
this.changePassWordViewShow = false;
this.resetForm();
},
//提交修改密码
doSubmit() {
if(this.form.oldPass == ''){
this.$notify({
title: '原密码不得为空!',
type: 'warning',
duration: 2500
})
return;
}
if(this.form.newPass == ''){
this.$notify({
title: '新密码不得为空!',
type: 'warning',
duration: 2500
})
return;
}
if(this.form.confirmPass == ''){
this.$notify({
title: '确认密码不得为空!',
type: 'warning',
duration: 2500
})
return;
}
if(this.form.oldPass == this.form.newPass){
this.$notify({
title: '新密码不得与旧密码相同!',
type: 'warning',
duration: 2500
})
return;
}
if(this.form.confirmPass != this.form.newPass){
this.$notify({
title: '确认密码输入错误!',
type: 'warning',
duration: 2500
})
return;
}
let that = this;
httpPostForJson(updatePass,{newPass: encrypt(this.form.newPass),oldPass: encrypt(this.form.oldPass)}).then(result => {
this.$notify({
title: '密码修改成功,即将跳转到登录页面。',
type: 'success',
duration: 1500
})
httpGet(vehicleInformationQuery,{number:this.carnumber}).then((res1) => {
if(res1.code == 200){
if(res1.data.totalElements == 0){
return
}else{
//修改车辆状态为离线
putForJson(vehicleInformationUpdate,{id:res1.data.content[0].id,odo:0,oddStatus:1,workStatus:0,weightStatus:0}).then((res2) => {});
//人员信息表中与车辆解绑
putForJson(personalCenterInforQuery,{id:this.personalInformationData.id,car:''}).then((res3) => {})
//删除调度单子
httpGet(dingDanBiaoCaoZuo,{carNo:this.carnumber}).then((res3Del) => {
if(res3Del.code == 200 && res3Del.data.content.length != 0){
httpDelForJson(dingDanBiaoCaoZuo,[res3Del.data.content[0].id,this.carnumber,res3Del.data.content[0].odd]).then((res3DelSon) => {});
}
})
}
}
});
setTimeout(() => {
this.$router.push({ path:'/login'})
window.sessionStorage.clear();
window.localStorage.clear(); //清除所有key
window.isLogin = false;
// 退出后禁止返回上一页
history.pushState(null, null, document.URL);
window.addEventListener("popstate", function (e) {
history.pushState(null, null, document.URL);
},false
);
window.location.reload();
}, 1500)
}).catch(err => {
that.$showWarning("网络异常");
});
},
//清空表单
resetForm() {
this.form = { oldPass: '', newPass: '', confirmPass: '' }
},
}
}
</script>
<style scope>
@media screen and (max-width:901px){
.personalCenFrom_contentTop{
height: 7.5vh;
}
.changePasswordStyle{
font-size:20px;
}
.touxiang1{
width: 50px;
height: 50px;
margin-right:6vw;
}
.logOutbtnStyle{
width:11vw;
height:6vh;
font-size:14px;
letter-spacing:2px;
}
.mimaInput1{
width:30vw;
}
.confirmNewPassStyle{
width:11vw;
height:7vh;
font-size:16px;
letter-spacing:2px;
}
.personalCenMainViews{
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
height: 80vh;
width: 70vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/genrezhongxinkuang1.png');
background-size:100% 100%;
transform: translate(-50%,-50%);
padding: 12px 30px 0px;
box-sizing: border-box;
}
/* 个人信息 */
.personalCenSmallTitle{
color: white;
font-size: 12px;
text-align: center;
line-height: 6vh;
width: 11vw;
height: 6vh;
background:no-repeat center center url('~@/assets/images/truckTuPian/xiaobiaotikuang.png');
background-size:100% 100%;
}
.personalCenClose{
position: absolute;
top: 4vh;
right: 1vw;
}
.personalCenClose>span{
margin-right: 2vw;
color: white;
font-size: 16px;
cursor: pointer;
}
.personalCenContent{
margin-top: 1vh;
width: 100%;
display: flex;
justify-content: space-between;
}
.personalCenContent>div{
width: 47%;
}
.personalCenContent_left_title{
font-size: 16px;
color: rgb(23,249,250);
}
.personalCenFrom_content{
margin-top: 1.5vh;
color: rgb(23,249,250);
font-size: 14px;
font-weight: 500;
display: flex;
justify-content: space-between;
}
.personalCenFrom_content>div{
height: 5vh;
line-height: 5vh;
}
.personalCenFrom_input{
width: 19vw;
border: 2px solid rgb(23,249,250);
border-radius: 5px;
padding:0px 10px;
box-sizing: border-box;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
}
.logOutbtn{
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
}
.logOutbtn .el-button.is-round{
padding: 0px;
}
/* 修改密码 */
.changePassWordSmallTitle{
color: rgb(23,249,250);
font-size: 15px;
line-height: 4.5vh;
width: 15vw;
height: 4.5vh;
cursor: pointer;
}
.changePassWordFrom_content{
width: 65%;
margin: 5vh auto 0;
color: rgb(23,249,250);
font-size: 18px;
font-weight: 500;
letter-spacing: 1px;
display: flex;
justify-content: space-between;
line-height: 9.5vh;
}
.changePassWordFrom_content>div{
font-size: 15px;
}
.changePassWordSmallContent{
margin-top:5vh;
}
.confirmNewPass{
position: absolute;
bottom: 5vh;
left: 50%;
transform: translateX(-50%);
}
.confirmNewPass .el-button.is-round{
padding: 0px;
}
}
@media screen and (min-width:901px){
.personalCenFrom_contentTop{
height: 2.5vh;
}
.changePasswordStyle{
font-size:20px;
}
.touxiang1{
width: 80px;
height: 80px;
margin-right:6vw;
}
.logOutbtnStyle{
width:11vw;
height:6vh;
font-size:18px;
letter-spacing:2px;
}
.mimaInput1{
width:300px;
}
.confirmNewPassStyle{
width:11vw;
height:6vh;
font-size:22px;
letter-spacing:2px;
}
.personalCenMainViews{
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
height: 80vh;
width: 70vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/genrezhongxinkuang1.png');
background-size:100% 100%;
transform: translate(-50%,-50%);
padding: 12px 30px 0px;
box-sizing: border-box;
}
/* 个人信息 */
.personalCenSmallTitle{
color: white;
font-size: 18px;
text-align: center;
line-height: 5vh;
width: 11vw;
height: 5vh;
background:no-repeat center center url('~@/assets/images/truckTuPian/xiaobiaotikuang.png');
background-size:100% 100%;
}
.personalCenClose{
position: absolute;
top: 4vh;
right: 1vw;
}
.personalCenClose>span{
margin-right: 20px;
color: white;
font-size: 18px;
cursor: pointer;
}
.personalCenContent{
margin-top: 20px;
width: 100%;
display: flex;
justify-content: space-between;
}
.personalCenContent>div{
width: 47%;
}
.personalCenContent_left_title{
font-size: 20px;
color: rgb(23,249,250);
}
.personalCenFrom_content{
margin-top: 15px;
color: rgb(23,249,250);
font-size: 18px;
font-weight: 500;
letter-spacing: 1px;
display: flex;
justify-content: space-between;
}
.personalCenFrom_content>div{
height: 5vh;
line-height: 5vh;
}
.personalCenFrom_input{
width: 19vw;
border: 2px solid rgb(23,249,250);
border-radius: 5px;
padding:0px 10px;
box-sizing: border-box;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
}
.logOutbtn{
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
}
/* 修改密码 */
.changePassWordSmallTitle{
color: rgb(23,249,250);
font-size: 22px;
line-height: 4.5vh;
width: 15vw;
height: 4.5vh;
cursor: pointer;
}
.changePassWordFrom_content{
width: 55%;
margin: 25px auto 0;
color: rgb(23,249,250);
font-size: 22px;
font-weight: 500;
letter-spacing: 1px;
display: flex;
justify-content: space-between;
}
.changePassWordFrom_content>div{
font-size: 22px;
}
.changePassWordSmallContent{
margin-top:100px;
}
.confirmNewPass{
position: absolute;
bottom: 50px;
left: 50%;
transform: translateX(-50%);
}
}
</style>
\ No newline at end of file
<template>
<div class="securityReMainViews" v-if="showDecide">
<div class="securityReSmallTitle">安全检查表</div>
<img src="../../../../assets/images/truckTuPian/close.png" class="securityReClose" @click="viewClose()">
<div class="securityReContent">
<div class="securityReContentFromViews" style="width:80%">
<div>
<img class="tu1" src="../../../../assets/images/truckTuPian/fuxiaobiaotititle.png">
<span class="securityReContent_left_title"> 安检项目:</span>
</div>
<div v-show="submitReportFormId" style="display:block;overflow:auto;width:100%;height:60vh;">
<div v-for="(item,index) in fromList" :key="index">
<div class="srCheckFrom_content">
<div style="width:30vw">{{item.anjianClass}}</div>
<div class="srCheckFrom_input" style="width:16vw">{{item.anjianData ? item.anjianData : ''}}</div>
</div>
</div>
</div>
<div v-show="!submitReportFormId" style="display:block;overflow:auto;width:100%;height:60vh;">
<div v-for="(item,index) in fromList" :key="index">
<div v-if="item.projectClass==1">
<div class="failure_textarea">{{item.anjianClass}}</div>
<div class="srCheckFrom_input">
<el-radio v-model="item.anjianData" label="是" style="color:wheat;margin:0 10px;"></el-radio>
<el-radio v-model="item.anjianData" label="否" style="color:wheat;margin:0 10px;"></el-radio>
</div>
</div>
<div v-if="item.projectClass==2">
<div class="failure_textarea">{{item.anjianClass}}</div>
<el-input v-model="item.anjianData" size="mini" placeholder="请输入值" clearable></el-input>
</div>
<div v-if="item.projectClass==3">
<div class="failure_textarea">{{item.anjianClass}}</div>
<el-input v-model="item.anjianData" type="textarea" :rows="3" placeholder="请输入文本">
</el-input>
</div>
</div>
</div>
</div>
</div>
<div class="submitDeStyle">
<el-button type="primary" v-show="!submitReportFormId" round @click="submitReport()">提交</el-button>
</div>
</div>
</template>
<script>
import { httpGet, httpPostForJson, putForJson, httpDelForJson} from "@/common/httpBean.js"
import {
ajReportModel, ajReportSubmit
} from "@/axios/api.js"
export default {
data() {
return {
showDecide:false,
from:{car:'',carcode:'',name:'',fault:'',problem:'',lat:'',lon:''},
getLocationText:'点击获取车辆位置',
carnumber:'',
personName:'',
submitReportFormId: false,
fromList:[]
}
},
methods: {
loadData(carnumber,personName, submitReportFormId) {
this.showDecide = true;
this.carnumber = carnumber;
this.personName = personName;
this.submitReportFormId = submitReportFormId;
if(submitReportFormId){
httpGet(ajReportModel, {formId:submitReportFormId}).then((res) => {
if(res.code == 200){
this.fromList = res.data.records;
}else{
this.$notify({
title: res.head.message,
type: 'error',
duration: 2500
})
}
});
}else{
httpGet(ajReportModel, {}).then((res) => {
if(res.code == 200){
this.$notify({
title: '请进行安全检查!',
type: 'success',
duration: 2500
});
this.fromList = res.data.records;
}else{
this.$notify({
title: res.head.message,
type: 'error',
duration: 2500
})
}
});
}
},
viewClose(){
this.showDecide = false;
this.$parent.selectFunction = 0;
},
//提交申报
submitReport(){
httpPostForJson(ajReportSubmit, {
records:this.fromList,
username:this.personName,
carNo:this.carnumber,
}).then((res) => {
if(res.code == 200){
this.$notify({
title: '报告已提交!',
type: 'success',
duration: 2500
});
this.showDecide = false;
this.$parent.safetySubmitCheckFn();
}else{
this.$notify({
title: res.head.message,
type: 'error',
duration: 2500
})
}
});
},
},
}
</script>
<style scope>
@media screen and (max-width:901px){
.srCheckFrom_content{
height: 4vh;
line-height: 4vh;
margin-bottom: 1vh;
color: rgb(23,249,250);
font-size: 12px;
font-weight: 500;
display: flex;
justify-content: space-between;
}
.srCheckFrom_input{
height: 100%;
width: 100%;
text-align: center;
border: 1px solid rgb(23,249,250);
border-radius: 5px;
padding:0 10px;
box-sizing: border-box;
white-space: nowrap;
text-overflow: ellipsis;
word-break: break-all;
}
.failure_textarea{
width: 100%;
color:gainsboro;
font-size: 12px;
margin-bottom:1vh;
}
.failure_textarea2{
font-size: 13px;
width:30vw;
}
.failure_textarea2 .el-textarea__inner{
max-height: 20vh !important;
}
.getweizhitu1{
cursor: pointer;
}
.getweizhitu1>img{
height: 2.5vh;
}
.getweizhitu1>span{
color: rgb(24,228,240);
font-size:12px;
text-decoration:underline;
}
.el-select-dropdown__item{
font-size: 20px;
height: 45px;
line-height: 45px;
}
.securityReMainViews{
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
height: 90vh;
width: 40vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/guzhangshenbankuang1.png');
background-size:100% 100%;
transform: translate(-50%,-48%);
padding: 2vh 2vw 0px;
box-sizing: border-box;
}
.securityReSmallTitle{
color: white;
font-size: 12px;
text-align: center;
line-height: 7vh;
width: 14vw;
height: 7vh;
background:no-repeat center center url('~@/assets/images/truckTuPian/xiaobiaotikuang.png');
background-size:100% 100%;
}
.securityReClose{
position: absolute;
top: 4vh;
right: 1vw;
cursor: pointer;
}
.securityReContent{
width: 100%;
display: flex;
justify-content: center;
}
.securityReContent_left_title{
font-size: 13px !important;
font-weight: 500;
color: rgb(24,228,240);
}
.securityReContentFromViews .tu1{
width: 3vw;
}
/* 未选中样式 */
.is-bordered .el-radio__label{
font-size: 13px !important;
color: wheat;
}
.is-bordered {
border: wheat 2px solid;
height: 38px;
line-height: 20px;
}
.is-bordered .el-radio__inner{
height: 18px;
width: 18px;
}
.securityReContentFromViews .el-radio.is-bordered{
height: 7vh;
width: 49%;
padding: 0.5vh 1vw 0px;
}
/* 选中样式 */
.el-radio__input.is-checked+.el-radio__label{
color: #1890ff;
}
.el-radio.is-bordered.is-checked{
border-color: #1890ff;
}
.el-radio__input.is-checked .el-radio__inner{
border-color: #1890ff;
background: #1890ff;
}
.el-radio{
margin: 0;
}
.el-radio.is-bordered{
padding: 8px 20px 0px 10px;
}
.securityReContentFromViews{
margin-top: 1vh;
}
.securityReContentFromViews>div{
margin-bottom: 1vh;
}
.securityReContentFromViews>div>span{
color: rgb(24,228,240);
font-size: 13px;
}
.el-input--small .el-input__inner{
font-size: 18px;
}
.submitDeStyle{
position: absolute;
bottom: 2vh;
left: 50%;
transform: translateX(-50%);
}
.submitDeStyle button{
width:11vw;
height:7vh;
font-size:13px;
letter-spacing:1px;
text-align: center;
line-height: 0;
padding: 0 !important;
}
.securityReContentFromViews .el-input--suffix .el-input__inner{
height: 6.5vh;
font-size: 13px;
}
.securityReContentFromViews .el-select__caret.el-input__icon.el-icon-arrow-up{
line-height: 0px !important;
}
}
@media screen and (min-width:901px){
.srCheckFrom_content{
height: 3vh;
line-height: 3vh;
margin-bottom: 1vh;
color: rgb(23,249,250);
font-size: 12px;
font-weight: 500;
display: flex;
justify-content: space-between;
}
.srCheckFrom_input{
height: 100%;
width: 100%;
text-align: center;
border: 1px solid rgb(23,249,250);
border-radius: 5px;
padding:0 10px;
box-sizing: border-box;
white-space: nowrap;
text-overflow: ellipsis;
word-break: break-all;
}
.failure_textarea{
width: 100%;
color:gainsboro;
font-size: 16px;
margin-bottom:1vh;
}
.failure_textarea2{
font-size: 18px;
width:30vw;
}
.getweizhitu1{
cursor: pointer;
}
.getweizhitu1>img{
height: 20px;
}
.getweizhitu1>span{
color: rgb(24,228,240);
font-size:18px;
margin-top:-10px;
text-decoration:underline;
}
.el-select-dropdown__item{
font-size: 20px;
height: 45px;
line-height: 45px;
}
.securityReMainViews{
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
height: 90vh;
width: 40vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/guzhangshenbankuang1.png');
background-size:100% 100%;
transform: translate(-50%,-48%);
padding: 12px 30px 0px;
box-sizing: border-box;
}
.securityReSmallTitle{
color: white;
font-size: 17px;
text-align: center;
line-height: 4.5vh;
width: 11vw;
height: 4.5vh;
background:no-repeat center center url('~@/assets/images/truckTuPian/xiaobiaotikuang.png');
background-size:100% 100%;
}
.securityReClose{
position: absolute;
top: 4vh;
right: 1vw;
cursor: pointer;
}
.securityReContent{
width: 100%;
display: flex;
justify-content: center;
}
.securityReContent_left_title{
font-size: 20px;
font-weight: 500;
color: rgb(24,228,240);
}
/* 未选中样式 */
.is-bordered .el-radio__label{
font-size: 17px;
color: wheat;
}
.is-bordered {
border: wheat 2px solid;
height: 38px;
line-height: 20px;
}
.is-bordered .el-radio__inner{
height: 18px;
width: 18px;
}
/* 选中样式 */
.el-radio__input.is-checked+.el-radio__label{
color: #1890ff;
}
.el-radio.is-bordered.is-checked{
border-color: #1890ff;
}
.el-radio__input.is-checked .el-radio__inner{
border-color: #1890ff;
background: #1890ff;
}
.el-radio{
margin: 0;
}
.el-radio.is-bordered{
padding: 8px 20px 0px 10px;
}
.securityReContentFromViews{
margin-top: 10px;
}
.securityReContentFromViews>div{
margin-bottom: 25px ;
}
.securityReContentFromViews>div>span{
color: rgb(24,228,240);
font-size: 20px;
}
.el-input--small .el-input__inner{
font-size: 18px;
}
.submitDeStyle{
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
}
.submitDeStyle button{
width:10vw;
height:6.5vh;
font-size:18px;
letter-spacing:2px;
}
}
</style>
\ No newline at end of file
<template>
<div class="swViews" v-if="showDecide">
<div class="swViews_title">
<div>车辆信息</div>
<img src="../../../../assets/images/truckTuPian/close.png" @click="carInCloseFn()" width="20" height="20">
</div>
<div class="swViews_center">
<div>
<span>车牌号:</span><span style="color: rgb(24,228,240);">{{carnumber}}</span>
</div>
<div>
<span>司机:</span><span style="color: rgb(24,228,240);">{{carInformationData2.driver ? carInformationData2.driver : ''}}</span>
</div>
<div>
<span>车辆运行公里数:</span><span style="color: rgb(24,228,240);">{{carInformationData2.mil ? carInformationData2.mil + 'km' : ''}}</span>
</div>
<div>
<span>车辆运行时长:</span><span style="color: rgb(24,228,240);">{{carInformationData2.runTime ? carInformationData2.runTime + '小时' : ''}}</span>
</div>
<div>
<span>今日装车次数:</span><span style="color: rgb(24,228,240);">{{carInformationData2.carNum ? carInformationData2.carNum + '' : ''}}</span>
</div>
<div v-show="carclass == '卡车'">
<span>运重状态:</span><span style="color: rgb(24,228,240);">{{carInformationData2.weightStatus == 0 ? '空运' : carInformationData2.weightStatus == 1 ? '重运' : carInformationData2.weightStatus == 2 ? '待装' : '暂无状态'}}</span>
</div>
<div v-show="carclass == '卡车'">
<span>运载种类:</span><span style="color: rgb(24,228,240);">{{carInformationData2.arearesources ? carInformationData2.arearesources : ''}}</span>
</div>
<div v-show="carclass == '铲车'">
<span>电铲状态:</span><span style="color: rgb(24,228,240);">{{carInformationData2.workStatus == 0 ? '空闲' : carInformationData2.workStatus == 1 ? '忙碌' : '暂无状态'}}</span>
</div>
</div>
</div>
</template>
<script>
import { httpGet, httpPostForJson, putForJson, httpDelForJson} from "@/common/httpBean.js"
import {vehicleInformationQuery,apiManmadesRealCarQuery} from "@/axios/api.js"
export default {
data() {
return {
showDecide:false,
carInformationData2:{},
carnumber:'',
personalName:'',
carclass:'',
}
},
methods: {
loadData(carnumber) {
this.showDecide = true;
this.carnumber = carnumber;
httpGet(vehicleInformationQuery,{number:this.carnumber}).then((res1) => {
if(res1.code == 200 && res1.data.totalElements != 0){
this.carclass = res1.data.content[0].carclass;
}
});
httpGet(apiManmadesRealCarQuery,{number:this.carnumber}).then((res) => {
if(res.code == 200 && res.data.length != 0){
this.carInformationData2 = res.data[0];
}
});
},
carInCloseFn(){
this.showDecide = false;
this.$parent.selectFunction = 0;
}
}
}
</script>
<style scope>
@media screen and (max-width:901px){
.swViews{
position: absolute;
z-index: 2;
top: 10%;
left: 20%;
height: 60vh;
width: 28vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/kapian1.png');
background-size:100% 100%;
}
.swViews_title{
letter-spacing: 1px;
padding: 2vh 2vw 1vh;
box-sizing: border-box;
display: flex;
justify-content: space-between;
font-size: 14px;
font-weight: 600;
color: rgb(24,228,240);
border-bottom: 1px solid rgb(24,228,240);
}
.swViews_title>img{
height: 4vh;
width: 4vh;
}
.swViews_center{
padding: 0px 2vw;
box-sizing: border-box;
font-size: 13px;
color: white;
}
.swViews_center>div{
margin-top: 1.5vh;
}
}
@media screen and (min-width:901px){
.swViews{
position: absolute;
z-index: 2;
top: 20%;
left: 30%;
height: 60vh;
width: 40vw;
background:no-repeat center center url('~@/assets/images/truckTuPian/kapian1.png');
background-size:100% 100%;
}
.swViews_title{
letter-spacing: 1px;
padding: 12px 30px 10px;
box-sizing: border-box;
display: flex;
justify-content: space-between;
font-size: 20px;
font-weight: 600;
color: rgb(24,228,240);
border-bottom: 1px solid rgb(24,228,240);
}
.swViews_title>img{
height: 20px;
width: 20px;
}
.swViews_center{
padding: 0px 30px;
box-sizing: border-box;
font-size: 20px;
color: white;
}
.swViews_center>div{
margin-top: 10px;
}
}
</style>
\ No newline at end of file
<template>
<div class="orderViews" v-show="showDe">
<div class="orderText1">
<div class="orderText1_1">订单信息</div>
<span
class="el-icon-message-solid orderText1_img"
style="color: #00ffff; font-size: 28px"
></span>
<span style="color: #00ffff">请您前往
<span style="color: #e47e1b; font-weight: 600">{{ orderObj.status<3?orderObj.zcArea||'':orderObj.xcArea||'' }}</span>
</span>
<span style="color: #00ffff">状态:{{ orderStuText }}</span>
</div>
<div class="orderText2" @click="navigation()" v-show="orderObj.status===1 && navStu===0">
导航前往
</div>
<div class="orderText2" @click="reachCD()" v-show="orderObj.status===1 && navStu===1">
到达采点
</div>
<div class="orderText2" @click="reachCD()" v-show="orderObj.status===3">
完成装车
</div>
</div>
</template>
<script>
import {
httpGet,
httpPostForJson,
putForJson,
httpDelForJson,
} from "@/common/httpBean.js";
import {
tRealTimeOrder,
arriveCaiDian
} from "@/axios/api.js";
import newOrder from "@/assets/dingdan.mp3";
export default {
data() {
return {
showDe: false, //接派单窗口
carNumber: null,
orderObj: {},
sonTimer1: null,
navStu: 0,
orderStuText: '正在前往',
orderAudio: null
};
},
mounted() {
this.sonTimer1 = setInterval(() => {
this.queryOrder()
}, 5000);
},
methods: {
loadData(carNumber) {
this.carNumber = carNumber;
this.$nextTick(() => {
this.queryOrder()
});
},
queryOrder(){
httpGet(tRealTimeOrder,{carNumber: this.carNumber}).then((res) => {
if(res.code===200 && res.data){
if(res.data.id!==this.orderObj.id && res.data.status===1){
//有新的订单
this.$parent.kcListView = false;
this.showDe = true;
this.navStu=0;
this.orderStuText='正在前往';
this.orderObj = res.data;
this.audioPlayByUrl(newOrder);
} else {
if (res.data.id !== this.orderObj) {
this.orderObj = res.data;
}
if (res.data.status === 6) {
this.showDe = false;
this.$parent.kcListView = true;
return;
} else {
this.showDe = true;
}
if (res.data.status === 2) {
this.orderStuText = '等待装车';
//播放靠近挖机语音
return;
}
if (res.data.status === 3) {
this.orderStuText = '开始装车';
//播放根据提示进行装车
}
}
} else {
this.orderObj = {};
this.showDe = false;
}
});
},
//导航开启
navigation() {
// this.$parent.zhixinglujing(true, this.carnumber, this.carDestination);
this.navStu = 1;
},
//到达采点
reachCD() {
putForJson(arriveCaiDian,{orderNumber: this.orderObj.orderNumber}).then((res) => {
if(res.code===200){
this.navStu = 2;
this.queryOrder();
} else {
this.$notify({
title: '网络异常,请稍后再试',
type: "warning",
duration: 5000,
dangerouslyUseHTMLString: true,
});
}
});
},
//播放语音
audioPlayByUrl(url) {
if(!this.orderAudio){
this.orderAudio = document.createElement("audio");
}
this.orderAudio.currentTime = 0;
this.orderAudio.src = url;
this.orderAudio.play();
},
//关闭清除定时器
dingshiqiCloseFn() {
if (this.sonTimer1) {
clearInterval(this.sonTimer1);
}
},
},
beforeDestroy() {
this.dingshiqiCloseFn();
},
};
</script>
<style scoped>
@media screen and (max-width: 901px) {
.orderText1_img {
color: #00ffff;
font-size: 16px;
}
.orderViews {
display: flex;
z-index: 2;
position: absolute;
top: 8vh;
left: 20vw;
}
.orderText1 {
display: flex;
align-items: center;
justify-content: space-around;
width: 45vw;
height: 7vh;
border-radius: 5px;
background-color: rgba(26, 39, 83, 0.9);
border: 1px solid lightskyblue;
font-size: 13px;
}
.orderText1_1 {
background-image: -webkit-linear-gradient(bottom, #02a2f1, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-weight: 600;
}
.orderText2 {
margin-left: 1vw;
width: 10vw;
line-height: 7vh;
text-align: center;
height: 7vh;
border-radius: 5px;
background-color: rgba(26, 39, 83, 0.9);
border: 1px solid lightskyblue;
font-size: 13px;
font-weight: 600;
color: lightskyblue;
cursor: pointer;
}
}
@media screen and (min-width: 901px) {
.orderText1_img {
color: #00ffff;
font-size: 28px;
}
.orderViews {
display: flex;
z-index: 2;
position: absolute;
top: 8vh;
left: 20vw;
}
.orderText1 {
display: flex;
align-items: center;
justify-content: space-around;
width: 45vw;
height: 7vh;
border-radius: 5px;
background-color: rgba(26, 39, 83, 0.9);
border: 1px solid lightskyblue;
font-size: 20px;
}
.orderText1_1 {
background-image: -webkit-linear-gradient(bottom, #02a2f1, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-weight: 600;
}
.orderText2 {
margin-left: 20px;
width: 10vw;
line-height: 7vh;
text-align: center;
height: 7vh;
border-radius: 5px;
background-color: rgba(26, 39, 83, 0.9);
border: 1px solid lightskyblue;
font-size: 22px;
font-weight: 600;
color: lightskyblue;
cursor: pointer;
}
}
</style>
\ No newline at end of file
<template>
<div class="orderViews" v-show="showDe">
<div class="orderText1">
<div class="orderText1_1">派单信息</div>
<span
class="el-icon-message-solid orderText1_img"
style="color: #00ffff; font-size: 28px"
></span>
<span style="color: #00ffff">请车牌号 {{ carnumber }} 前往</span>
<span style="color: #e47e1b; font-weight: 600">{{ carDestination }}</span>
<span style="color: #00ffff">{{ orderClass }}</span>
</div>
<div class="orderText2" @click="startPaidanFn()" v-show="btnShow1">
接受派单
</div>
<div class="orderText2" @click="refusePaidanFn()" v-show="btnShow1">
拒绝派单
</div>
<div class="orderText2" @click="navigation()" v-show="btnShow4">
导航前往
</div>
<div class="orderText2" @click="finishPaidanFn()" v-show="btnShow2">
卸车
</div>
<div class="orderText2" @click="finishPaidanFn1()" v-show="btnShow3">
完成派单
</div>
<audio
controls
currentTime
autoplay
:src="startOrderSrcUrl"
style="display: none"
id="audio1"
></audio>
</div>
</template>
<script>
import {
httpGet,
httpPostForJson,
putForJson,
httpDelForJson,
} from "@/common/httpBean.js";
import {
manualSchedulingQuery,
manmadeStatusQuery,
vehicleInformationQuery,
vehicleInformationUpdate,
dingDanBiaoCaoZuo,
getZhuangCheDingDanQuery,
getXieCheDingDanQuery,
screenMapSetUpQuery,
carRealTimeLocationQuery2,
creatOrder,
} from "@/axios/api.js";
import newOrder from "@/assets/dingdan.mp3";
export default {
data() {
return {
showDe: false, //接派单窗口
carnumber: "",
carDestination: "",
orderClass: "",
btnShow1: false, //开始派单和拒绝派单展示
btnShow2: false, //完成派单展示
btnShow3: false, //完成派单展示
btnShow4: false, //导航显示开关
sonTimer1: null,
startOrderSrcUrl: "", //来订单语音路径
dingDanId: "", //订单id
dingdanodd: "", //订单odd
zuizhongdingdanid: "",
equipmentName: "", //车载设备编号
xiecheBtnAble: false, //卸车按钮是否能用
zhinengpaidanBoolan: false, //更改该车是否可接受智能派单
paidanFlag: 0, //暂存的派单是否是人工或者智能
zuizhongpaidanFlag: 0,
//暂存的经纬度
oldxy: {
lat: 0, //纬度
lng: 0, //经度
},
//智能调度订单自动接单属性
zhinengjiedan: 0,
//人工调度订单自动接单属性
rengongjiedan: 0,
//卸车语音计时
xiecheyuyinTimer: 0,
};
},
mounted() {
let that = this;
this.sonTimer1 = setInterval(() => {
if (this.carnumber == "") {
return;
}
//如果zhinengpaidanBoolan为true,获取人工和智能一起的调度
if (this.zhinengpaidanBoolan) {
//先查人工调度
httpGet(dingDanBiaoCaoZuo, {
sort: "createTime,desc",
size: 1,
carNo: this.carnumber,
flag: 1,
}).then((res) => {
console.log(res, "人工调度");
//如果没有就获取智能调度
if (res.data.content.length == 0) {
httpGet(dingDanBiaoCaoZuo, {
sort: "createTime,desc",
size: 1,
carNo: this.carnumber,
}).then((res_1) => {
console.log(res_1, "调度");
if (res_1.data.content.length == 0) {
this.showDe = false;
this.btnShow1 = false;
this.btnShow2 = false;
this.btnShow3 = false;
this.btnShow4 = false;
} else {
httpGet(vehicleInformationQuery, {
number: this.carnumber,
size: 1,
}).then((resSon1) => {
console.log(resSon1, "车辆信息");
if (resSon1.code == 200) {
this.showDe = true;
this.carDestination = res_1.data.content[0].destination;
this.dingDanId = res_1.data.content[0].id;
this.dingdanodd = res_1.data.content[0].odd;
this.equipmentName = resSon1.data.content[0].equipmentName;
this.paidanFlag = res_1.data.content[0].flag;
this.btnShow4 = true;
if (res_1.data.content[0].orderClass == 0) {
this.orderClass = "装车";
} else {
this.orderClass = "卸车";
this.btnShow2 = true;
}
if (
resSon1.data.content[0].workStatus == 0 &&
this.paidanFlag == 0
) {
if (res_1.data.content[0].orderClass == 0) {
this.showDe = true;
this.btnShow1 = true;
this.btnShow2 = false;
this.btnShow3 = false;
this.btnShow4 = false;
this.carDestination = res_1.data.content[0].destination;
this.dingDanId = res_1.data.content[0].id;
this.dingdanodd = res_1.data.content[0].odd;
this.equipmentName =
resSon1.data.content[0].equipmentName;
this.orderClass = "装车";
//启动语音
this.startOrderSrcUrl = newOrder;
let au = document.getElementById("audio1");
au.currentTime = 0;
au.play();
this.zhinengjiedan = this.zhinengjiedan + 1;
if (this.zhinengjiedan >= 7) {
this.btnShow1 = false;
this.startPaidanFn();
}
} else {
this.showDe = true;
this.btnShow1 = false;
this.btnShow2 = true;
this.btnShow3 = false;
this.btnShow4 = true;
this.carDestination = res_1.data.content[0].destination;
this.dingDanId = res_1.data.content[0].id;
this.dingdanodd = res_1.data.content[0].odd;
this.equipmentName =
resSon1.data.content[0].equipmentName;
this.orderClass = "卸车";
this.xiecheyuyinTimer = this.xiecheyuyinTimer + 1;
if (this.xiecheyuyinTimer <= 3) {
//启动语音
this.startOrderSrcUrl = newOrder;
let au = document.getElementById("audio1");
au.currentTime = 0;
au.play();
}
}
}
//获取车辆坐标计算距离并返回给后台
httpGet(carRealTimeLocationQuery2, {
name: resSon1.data.content[0].equipmentName,
}).then((res2) => {
if (res2.data) {
if (this.oldxy.lat == 0 || this.oldxy.lng == 0) {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
} else {
let distance1 =
this.getDistance(
this.oldxy.lat,
this.oldxy.lng,
res2.data.location.y,
res2.data.location.x
) + parseFloat(res_1.data.content[0].mil);
putForJson(dingDanBiaoCaoZuo, {
id: res_1.data.content[0].id,
mil: distance1,
}).then((res) => {
});
this.$nextTick(() => {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
});
}
}
});
}
});
}
});
} else {
//如果有人工调度
this.orderClass = "";
//有人工调度就删除智能调度单子
httpGet(dingDanBiaoCaoZuo, {
sort: "createTime,desc",
carNo: this.carnumber,
flag: 0,
}).then((resDel) => {
if (resDel.code == 200) {
resDel.data.content.forEach((itemDel, indexDel) => {
httpDelForJson(dingDanBiaoCaoZuo, [
itemDel.id,
this.carnumber,
item.odd,
]).then((resDelSon) => {
});
});
}
});
//有人工调度下面展示操作
httpGet(vehicleInformationQuery, {
number: this.carnumber,
size: 1,
}).then((resSon1) => {
if (resSon1.code == 200) {
this.showDe = true;
this.carDestination = res.data.content[0].destination;
this.dingDanId = res.data.content[0].id;
this.dingdanodd = res.data.content[0].odd;
this.equipmentName = resSon1.data.content[0].equipmentName;
this.btnShow3 = true;
this.btnShow4 = true;
if (resSon1.data.content[0].workStatus == 0) {
this.paidanFlag = res.data.content[0].flag;
this.showDe = true;
this.btnShow1 = true;
this.btnShow2 = false;
this.btnShow3 = false;
this.btnShow4 = false;
this.carDestination = res.data.content[0].destination;
this.dingDanId = res.data.content[0].id;
this.dingdanodd = res.data.content[0].odd;
this.equipmentName = resSon1.data.content[0].equipmentName;
//启动语音
this.startOrderSrcUrl = newOrder;
let au = document.getElementById("audio1");
au.currentTime = 0;
au.play();
if (this.rengongjiedan >= 7) {
this.btnShow1 = false;
this.startPaidanFn();
}
this.rengongjiedan = this.rengongjiedan + 1;
} else {
if (this.paidanFlag == 0) {
this.rengongjiedan = this.rengongjiedan + 1;
this.paidanFlag = res.data.content[0].flag;
this.showDe = true;
this.btnShow1 = true;
this.btnShow2 = false;
this.btnShow3 = false;
this.btnShow4 = false;
this.carDestination = res.data.content[0].destination;
this.dingDanId = res.data.content[0].id;
this.dingdanodd = res.data.content[0].odd;
this.equipmentName = resSon1.data.content[0].equipmentName;
//启动语音
this.startOrderSrcUrl = newOrder;
let au = document.getElementById("audio1");
au.currentTime = 0;
au.play();
} else {
if (this.zuizhongpaidanFlag == 0) {
this.paidanFlag = res.data.content[0].flag;
this.showDe = true;
this.btnShow1 = true;
this.btnShow2 = false;
this.btnShow3 = false;
this.btnShow4 = false;
this.carDestination = res.data.content[0].destination;
this.dingDanId = res.data.content[0].id;
this.dingdanodd = res.data.content[0].odd;
this.equipmentName =
resSon1.data.content[0].equipmentName;
//启动语音
this.startOrderSrcUrl = newOrder;
let au = document.getElementById("audio1");
au.currentTime = 0;
au.play();
if (this.rengongjiedan >= 7) {
this.btnShow1 = false;
this.startPaidanFn();
}
this.rengongjiedan = this.rengongjiedan + 1;
}
}
}
//获取车辆坐标计算距离并返回给后台
httpGet(carRealTimeLocationQuery2, {
name: resSon1.data.content[0].equipmentName,
}).then((res2) => {
if (res2.data) {
if (this.oldxy.lat == 0 || this.oldxy.lng == 0) {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
} else {
let distance1 =
this.getDistance(
this.oldxy.lat,
this.oldxy.lng,
res2.data.location.y,
res2.data.location.x
) + parseFloat(res.data.content[0].mil);
putForJson(dingDanBiaoCaoZuo, {
id: res.data.content[0].id,
mil: distance1,
}).then((res) => {
});
this.$nextTick(() => {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
});
}
}
});
}
});
}
});
} else {
//如果zhinengpaidanBoolan为false,获取人工的调度
this.orderClass = "";
httpGet(dingDanBiaoCaoZuo, {
sort: "createTime,desc",
size: 1,
carNo: this.carnumber,
flag: 1,
}).then((res) => {
if (res.data.content.length == 0) {
this.showDe = false;
this.btnShow1 = false;
this.btnShow2 = false;
this.btnShow3 = false;
this.btnShow4 = false;
} else {
//有人工调度就删除智能调度单子
httpGet(dingDanBiaoCaoZuo, {
sort: "createTime,desc",
carNo: this.carnumber,
flag: 0,
}).then((resDel) => {
if (resDel.code == 200) {
resDel.data.content.forEach((itemDel, indexDel) => {
httpDelForJson(dingDanBiaoCaoZuo, [
itemDel.id,
this.carnumber,
item.odd,
]).then((resDelSon) => {
});
});
}
});
//有人工调度下面展示操作
httpGet(vehicleInformationQuery, {
number: this.carnumber,
size: 1,
}).then((resSon1) => {
if (resSon1.code == 200) {
this.showDe = true;
this.carDestination = res.data.content[0].destination;
this.dingDanId = res.data.content[0].id;
this.dingdanodd = res.data.content[0].odd;
this.equipmentName = resSon1.data.content[0].equipmentName;
this.btnShow3 = true;
this.btnShow4 = true;
if (resSon1.data.content[0].workStatus == 0) {
this.paidanFlag = res.data.content[0].flag;
this.showDe = true;
this.btnShow1 = true;
this.btnShow2 = false;
this.btnShow3 = false;
this.btnShow4 = false;
this.carDestination = res.data.content[0].destination;
this.dingDanId = res.data.content[0].id;
this.dingdanodd = res.data.content[0].odd;
this.equipmentName = resSon1.data.content[0].equipmentName;
//启动语音
this.startOrderSrcUrl = newOrder;
let au = document.getElementById("audio1");
au.currentTime = 0;
au.play();
if (this.rengongjiedan >= 7) {
this.btnShow1 = false;
this.startPaidanFn();
}
this.rengongjiedan = this.rengongjiedan + 1;
} else {
if (this.paidanFlag == 0) {
this.rengongjiedan = this.rengongjiedan + 1;
this.paidanFlag = res.data.content[0].flag;
this.showDe = true;
this.btnShow1 = true;
this.btnShow2 = false;
this.btnShow3 = false;
this.btnShow4 = false;
this.carDestination = res.data.content[0].destination;
this.dingDanId = res.data.content[0].id;
this.dingdanodd = res.data.content[0].odd;
this.equipmentName = resSon1.data.content[0].equipmentName;
//启动语音
this.startOrderSrcUrl = newOrder;
let au = document.getElementById("audio1");
au.currentTime = 0;
au.play();
} else {
if (this.zuizhongpaidanFlag == 0) {
this.paidanFlag = res.data.content[0].flag;
this.showDe = true;
this.btnShow1 = true;
this.btnShow2 = false;
this.btnShow3 = false;
this.btnShow4 = false;
this.carDestination = res.data.content[0].destination;
this.dingDanId = res.data.content[0].id;
this.dingdanodd = res.data.content[0].odd;
this.equipmentName =
resSon1.data.content[0].equipmentName;
//启动语音
this.startOrderSrcUrl = newOrder;
let au = document.getElementById("audio1");
au.currentTime = 0;
au.play();
if (this.rengongjiedan >= 7) {
this.btnShow1 = false;
this.startPaidanFn();
}
this.rengongjiedan = this.rengongjiedan + 1;
}
}
}
//获取车辆坐标计算距离并返回给后台
httpGet(carRealTimeLocationQuery2, {
name: resSon1.data.content[0].equipmentName,
}).then((res2) => {
if (res2.data) {
if (this.oldxy.lat == 0 || this.oldxy.lng == 0) {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
} else {
let distance1 = this.getDistance(
this.oldxy.lat,
this.oldxy.lng,
res2.data.location.y,
res2.data.location.x
) + parseFloat(res.data.content[0].mil);
putForJson(dingDanBiaoCaoZuo, {
id: res.data.content[0].id,
mil: distance1,
}).then((res) => {});
this.$nextTick(() => {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
});
}
}
});
}
});
}
});
}
}, 5000);
},
methods: {
loadData(carnumber) {
this.carnumber = carnumber;
this.orderClass = "";
this.$nextTick(() => {
//如果zhinengpaidanBoolan为true,获取人工和智能一起的调度
if (this.zhinengpaidanBoolan) {
//先查人工调度
httpGet(dingDanBiaoCaoZuo, {
sort: "createTime,desc",
size: 1,
carNo: this.carnumber,
flag: 1,
}).then((res) => {
//如果没有就获取智能调度
if (res.data.content.length == 0) {
httpGet(dingDanBiaoCaoZuo, {
sort: "createTime,desc",
size: 1,
carNo: this.carnumber,
}).then((res_1) => {
console.log(res_1, "res_1");
if (res_1.data.content.length == 0) {
this.showDe = false;
this.btnShow1 = false;
this.btnShow2 = false;
this.btnShow3 = false;
} else {
httpGet(vehicleInformationQuery, {
number: this.carnumber,
size: 1,
}).then((resSon1) => {
if (resSon1.code == 200) {
if (resSon1.data.content[0].workStatus == 0) {
this.paidanFlag = res_1.data.content[0].flag;
if (res_1.data.content[0].orderClass == 0) {
this.showDe = true;
this.btnShow1 = true;
this.btnShow2 = false;
this.btnShow3 = false;
this.carDestination =
res_1.data.content[0].destination;
this.dingDanId = res_1.data.content[0].id;
this.dingdanodd = res_1.data.content[0].odd;
this.equipmentName =
resSon1.data.content[0].equipmentName;
this.orderClass = "装车";
} else {
this.showDe = true;
this.btnShow1 = false;
this.btnShow2 = true;
this.btnShow3 = false;
this.carDestination =
res_1.data.content[0].destination;
this.dingDanId = res_1.data.content[0].id;
this.dingdanodd = res_1.data.content[0].odd;
this.equipmentName =
resSon1.data.content[0].equipmentName;
this.orderClass = "卸车";
}
}
//获取车辆坐标计算距离并返回给后台
httpGet(carRealTimeLocationQuery2, {
name: resSon1.data.content[0].equipmentName,
}).then((res2) => {
if (res2.data) {
if (this.oldxy.lat == 0 || this.oldxy.lng == 0) {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
} else {
let distance1 =
this.getDistance(
this.oldxy.lat,
this.oldxy.lng,
res2.data.location.y,
res2.data.location.x
) + parseFloat(res_1.data.content[0].mil);
putForJson(dingDanBiaoCaoZuo, {
id: res_1.data.content[0].id,
mil: distance1,
}).then((res) => {});
this.$nextTick(() => {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
});
}
}
});
}
});
}
});
} else {
//如果有人工调度
//有人工调度就删除智能调度单子
httpGet(dingDanBiaoCaoZuo, {
sort: "createTime,desc",
carNo: this.carnumber,
flag: 0,
}).then((resDel) => {
if (resDel.code == 200) {
resDel.data.content.forEach((itemDel, indexDel) => {
httpDelForJson(dingDanBiaoCaoZuo, [
itemDel.id,
this.carnumber,
item.odd,
]).then((resDelSon) => {});
});
}
});
//有人工调度下面展示操作
httpGet(vehicleInformationQuery, {
number: this.carnumber,
size: 1,
}).then((resSon1) => {
if (resSon1.code == 200) {
if (resSon1.data.content[0].workStatus == 0) {
this.paidanFlag = res.data.content[0].flag;
this.showDe = true;
this.btnShow1 = true;
this.btnShow2 = false;
this.btnShow3 = false;
this.carDestination = res.data.content[0].destination;
this.dingDanId = res.data.content[0].id;
this.dingdanodd = res.data.content[0].odd;
this.equipmentName = resSon1.data.content[0].equipmentName;
}
//获取车辆坐标计算距离并返回给后台
httpGet(carRealTimeLocationQuery2, {
name: resSon1.data.content[0].equipmentName,
}).then((res2) => {
if (res2.data) {
if (this.oldxy.lat == 0 || this.oldxy.lng == 0) {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
} else {
let distance1 =
this.getDistance(
this.oldxy.lat,
this.oldxy.lng,
res2.data.location.y,
res2.data.location.x
) + parseFloat(res.data.content[0].mil);
putForJson(dingDanBiaoCaoZuo, {
id: res.data.content[0].id,
mil: distance1,
}).then((res) => {});
this.$nextTick(() => {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
});
}
}
});
}
});
}
});
} else {
//如果zhinengpaidanBoolan为false,获取人工的调度
httpGet(dingDanBiaoCaoZuo, {
sort: "createTime,desc",
size: 1,
carNo: this.carnumber,
flag: 1,
}).then((res) => {
if (res.data.content.length == 0) {
this.showDe = false;
this.btnShow1 = false;
this.btnShow2 = false;
this.btnShow3 = false;
} else {
//有人工调度就删除智能调度单子
httpGet(dingDanBiaoCaoZuo, {
sort: "createTime,desc",
carNo: this.carnumber,
flag: 0,
}).then((resDel) => {
if (resDel.code == 200) {
resDel.data.content.forEach((itemDel, indexDel) => {
httpDelForJson(dingDanBiaoCaoZuo, [
itemDel.id,
this.carnumber,
item.odd,
]).then((resDelSon) => {});
});
}
});
//有人工调度下面操作
httpGet(vehicleInformationQuery, {
number: this.carnumber,
size: 1,
}).then((resSon1) => {
if (resSon1.code == 200) {
if (resSon1.data.content[0].workStatus == 0) {
this.paidanFlag = res.data.content[0].flag;
this.showDe = true;
this.btnShow1 = true;
this.btnShow2 = false;
this.btnShow3 = false;
this.carDestination = res.data.content[0].destination;
this.dingDanId = res.data.content[0].id;
this.dingdanodd = res.data.content[0].odd;
this.equipmentName = resSon1.data.content[0].equipmentName;
}
//获取车辆坐标计算距离并返回给后台
httpGet(carRealTimeLocationQuery2, {
name: resSon1.data.content[0].equipmentName,
}).then((res2) => {
if (res2.data) {
if (this.oldxy.lat == 0 || this.oldxy.lng == 0) {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
} else {
let distance1 =
this.getDistance(
this.oldxy.lat,
this.oldxy.lng,
res2.data.location.y,
res2.data.location.x
) + parseFloat(res.data.content[0].mil);
putForJson(dingDanBiaoCaoZuo, {
id: res.data.content[0].id,
mil: distance1,
}).then((res) => {});
this.$nextTick(() => {
this.oldxy.lat = res2.data.location.y;
this.oldxy.lng = res2.data.location.x;
});
}
}
});
}
});
}
});
}
});
},
//关闭清除定时器
dingshiqiCloseFn() {
if (this.sonTimer1) {
//如果定时器还在运行 或者直接关闭,不用判断
clearInterval(this.sonTimer1); //关闭
}
},
//开始派单
startPaidanFn() {
this.btnShow1 = false;
this.btnShow4 = true;
this.zhinengjiedan = 0;
this.rengongjiedan = 0;
this.xiecheyuyinTimer = 0;
this.$notify({
title: "已开始派单!",
type: "success",
duration: 2500,
});
if (this.paidanFlag == 0) {
this.zuizhongpaidanFlag = 0;
httpGet(vehicleInformationQuery, { number: this.carnumber }).then(
(res) => {
if (res.code == 200) {
if (this.paidanFlag == 0) {
putForJson(vehicleInformationUpdate, {
id: res.data.content[0].id,
workStatus: 1,
weightStatus: 2,
odo: 1, //智能
status: 0,
}).then((res) => {});
} else if (this.paidanFlag == 1) {
putForJson(vehicleInformationUpdate, {
id: res.data.content[0].id,
workStatus: 1,
weightStatus: 2,
odo: 2, //人工
status: 0,
}).then((res) => {});
}
}
}
);
// httpGet(manualSchedulingQuery,{sort:'createTime,desc',size:1,carNo:this.carnumber}).then((res) => {
// if(res.code == 200){
// if(res.data.totalElements == 0){
// }else{
// putForJson(manualSchedulingQuery,{id:res.data.content[0].id,status:1}).then((res) => {});
// }
// }
// });
} else if (this.paidanFlag == 1) {
this.zuizhongpaidanFlag = 1;
this.btnShow3 = true;
httpGet(vehicleInformationQuery, { number: this.carnumber }).then(
(res) => {
if (res.code == 200) {
if (this.paidanFlag == 0) {
putForJson(vehicleInformationUpdate, {
id: res.data.content[0].id,
workStatus: 1,
weightStatus: 2,
odo: 1,
status: 0,
}).then((res) => {});
} else if (this.paidanFlag == 1) {
putForJson(vehicleInformationUpdate, {
id: res.data.content[0].id,
workStatus: 1,
weightStatus: 2,
odo: 2,
status: 0,
}).then((res) => {});
}
}
}
);
httpGet(manualSchedulingQuery, {
sort: "createTime,desc",
size: 1,
carNo: this.carnumber,
}).then((res) => {
if (res.code == 200) {
if (res.data.totalElements == 0) {
} else {
putForJson(manualSchedulingQuery, {
id: res.data.content[0].id,
status: 1,
}).then((res) => {});
}
}
});
}
},
//拒绝派单
refusePaidanFn() {
this.btnShow1 = false;
this.btnShow4 = false;
this.showDe = false;
this.paidanFlag = 0;
this.zuizhongpaidanFlag = 0;
this.zhinengjiedan = 0;
this.rengongjiedan = 0;
this.xiecheyuyinTimer = 0;
this.$notify({
title: "已拒绝派单!",
type: "success",
duration: 2500,
});
httpGet(vehicleInformationQuery, { number: this.carnumber }).then(
(res) => {
if (res.code == 200) {
putForJson(vehicleInformationUpdate, {
id: res.data.content[0].id,
oddStatus: 1,
workStatus: 0,
odo: 3,
}).then((res) => {});
}
}
);
httpGet(manualSchedulingQuery, {
sort: "createTime,desc",
size: 1,
carNo: this.carnumber,
}).then((res) => {
if (res.code == 200) {
if (res.data.totalElements == 0) {
} else {
putForJson(manualSchedulingQuery, {
id: res.data.content[0].id,
status: 0,
}).then((res) => {});
}
}
});
httpDelForJson(dingDanBiaoCaoZuo, [
this.dingDanId,
this.carnumber,
this.dingdanodd,
]).then((res) => {});
this.$nextTick(() => {
this.oldxy.lat = 0;
this.oldxy.lng = 0;
});
},
//卸车
finishPaidanFn() {
//查询指定目的地围栏以及判断该车是否在围栏里
httpGet(screenMapSetUpQuery, {
size: 9999,
name: this.carDestination,
}).then((resSon2) => {
if (resSon2) {
let weilanArr1 = [];
resSon2[this.carDestination].forEach((item, index) => {
let weilanobj1 = [];
weilanobj1.push(parseFloat(item.lon));
weilanobj1.push(parseFloat(item.lat));
weilanArr1.push(weilanobj1);
});
httpGet(carRealTimeLocationQuery2, { name: this.equipmentName }).then(
(resSon3) => {
if (resSon3.code == 200) {
let resSon3Obj1 = [];
resSon3Obj1.push(resSon3.data.location.x);
resSon3Obj1.push(resSon3.data.location.y);
this.xiecheBtnAble = this.isPointInPolygon(
resSon3Obj1,
weilanArr1
);
if (!this.xiecheBtnAble) {
this.$notify({
title: "未到卸车区域,不可卸车!",
type: "warning",
duration: 2500,
});
} else {
this.btnShow2 = false;
this.showDe = false;
this.btnShow4 = false;
this.paidanFlag = 0;
this.zuizhongpaidanFlag = 0;
this.zhinengjiedan = 0;
this.rengongjiedan = 0;
this.xiecheyuyinTimer = 0;
this.$nextTick(() => {
httpGet(vehicleInformationQuery, {
number: this.carnumber,
}).then((res) => {
if (res.code == 200) {
putForJson(vehicleInformationUpdate, {
id: res.data.content[0].id,
workStatus: 0,
weightStatus: 0,
oddStatus: 1,
odo: 3,
status: 0,
}).then((res) => {});
}
});
httpGet(manualSchedulingQuery, {
sort: "createTime,desc",
size: 1,
carNo: this.carnumber,
}).then((res) => {
if (res.code == 200) {
if (res.data.totalElements == 0) {
} else {
putForJson(manualSchedulingQuery, {
id: res.data.content[0].id,
status: 0,
}).then((res) => {});
}
}
});
httpDelForJson(dingDanBiaoCaoZuo, [
this.dingDanId,
this.carnumber,
this.dingdanodd,
]).then((res) => {
this.$parent.zhixinglujing(
false,
this.carnumber,
this.carDestination
);
});
});
this.$nextTick(() => {
this.oldxy.lat = 0;
this.oldxy.lng = 0;
this.$notify({
title: "卸车成功!",
type: "success",
duration: 2500,
});
});
}
}
}
);
}
});
},
//车辆自主完成派单
finishPaidanFn1() {
//查询指定目的地围栏以及判断该车是否在围栏里
let carDestinationText1 = this.carDestination;
let carDestinationText2 = carDestinationText1.split("/")[0];
httpGet(screenMapSetUpQuery, {
size: 9999,
name: carDestinationText2,
}).then((resSon2) => {
if (resSon2) {
let weilanArr1 = [];
resSon2[carDestinationText2].forEach((item, index) => {
let weilanobj1 = [];
weilanobj1.push(parseFloat(item.lon));
weilanobj1.push(parseFloat(item.lat));
weilanArr1.push(weilanobj1);
});
httpGet(carRealTimeLocationQuery2, { name: this.equipmentName }).then(
(resSon3) => {
if (resSon3.code == 200) {
let resSon3Obj1 = [];
resSon3Obj1.push(resSon3.data.location.x);
resSon3Obj1.push(resSon3.data.location.y);
if (!this.isPointInPolygon(resSon3Obj1, weilanArr1)) {
this.$notify({
title: "未到调度区域,不可完成派单!",
type: "warning",
duration: 2500,
});
} else {
this.btnShow3 = false;
this.btnShow4 = false;
this.showDe = false;
this.paidanFlag = 0;
this.zuizhongpaidanFlag = 0;
this.zhinengjiedan = 0;
this.rengongjiedan = 0;
this.xiecheyuyinTimer = 0;
this.$nextTick(() => {
httpGet(vehicleInformationQuery, {
number: this.carnumber,
}).then((res) => {
if (res.code == 200) {
putForJson(vehicleInformationUpdate, {
id: res.data.content[0].id,
workStatus: 0,
weightStatus: 0,
oddStatus: 1,
odo: 3,
status: 0,
}).then((res) => {});
}
});
httpGet(manualSchedulingQuery, {
sort: "createTime,desc",
size: 1,
carNo: this.carnumber,
}).then((res) => {
if (res.code == 200) {
if (res.data.totalElements == 0) {
} else {
putForJson(manualSchedulingQuery, {
id: res.data.content[0].id,
status: 0,
}).then((res) => {});
}
}
});
httpDelForJson(dingDanBiaoCaoZuo, [
this.dingDanId,
this.carnumber,
this.dingdanodd,
]).then((res) => {
this.$parent.zhixinglujing(
false,
this.carnumber,
this.carDestination
);
});
});
this.$nextTick(() => {
this.oldxy.lat = 0;
this.oldxy.lng = 0;
this.$notify({
title: "完成派单!",
type: "success",
duration: 2500,
});
});
}
}
}
);
}
});
},
//导航开启
navigation() {
this.$parent.zhixinglujing(true, this.carnumber, this.carDestination);
},
//获取当前时间
currentTime() {
var date = new Date();
var year = date.getFullYear(); //年 ,从 Date 对象以四位数字返回年份
var month = date.getMonth() + 1; //月 ,从 Date 对象返回月份 (0 ~ 11) ,date.getMonth()比实际月份少 1 个月
var day = date.getDate(); //日 ,从 Date 对象返回一个月中的某一天 (1 ~ 31)
var hours = date.getHours(); //小时 ,返回 Date 对象的小时 (0 ~ 23)
var minutes = date.getMinutes(); //分钟 ,返回 Date 对象的分钟 (0 ~ 59)
var seconds = date.getSeconds(); //秒 ,返回 Date 对象的秒数 (0 ~ 59)
//修改月份格式
if (month >= 1 && month <= 9) {
month = "0" + month;
}
//修改日期格式
if (day >= 0 && day <= 9) {
day = "0" + day;
}
//修改小时格式
if (hours >= 0 && hours <= 9) {
hours = "0" + hours;
}
//修改分钟格式
if (minutes >= 0 && minutes <= 9) {
minutes = "0" + minutes;
}
//修改秒格式
if (seconds >= 0 && seconds <= 9) {
seconds = "0" + seconds;
}
//获取当前系统时间 格式(yyyy-mm-dd hh:mm:ss)
let currentFormatDate =
year +
"-" +
month +
"-" +
day +
" " +
hours +
":" +
minutes +
":" +
seconds;
return currentFormatDate;
},
//判断卸车是车是否到达了卸区
isPointInPolygon(checkPoint, polygonPoints) {
var counter = 0;
var i;
var xinters;
var p1, p2;
var pointCount = polygonPoints.length;
p1 = polygonPoints[0];
for (i = 1; i <= pointCount; i++) {
p2 = polygonPoints[i % pointCount];
if (
checkPoint[0] > Math.min(p1[0], p2[0]) &&
checkPoint[0] <= Math.max(p1[0], p2[0])
) {
if (checkPoint[1] <= Math.max(p1[1], p2[1])) {
if (p1[0] != p2[0]) {
xinters =
((checkPoint[0] - p1[0]) * (p2[1] - p1[1])) / (p2[0] - p1[0]) +
p1[1];
if (p1[1] == p2[1] || checkPoint[1] <= xinters) {
counter++;
}
}
}
}
p1 = p2;
}
if (counter % 2 == 0) {
return false;
} else {
return true;
}
},
//根据两个经纬度计算距离
getDistance(lat1, lng1, lat2, lng2) {
var radLat1 = (lat1 * Math.PI) / 180.0;
var radLat2 = (lat2 * Math.PI) / 180.0;
var a = radLat1 - radLat2;
var b = (lng1 * Math.PI) / 180.0 - (lng2 * Math.PI) / 180.0;
var s =
2 *
Math.asin(
Math.sqrt(
Math.pow(Math.sin(a / 2), 2) +
Math.cos(radLat1) *
Math.cos(radLat2) *
Math.pow(Math.sin(b / 2), 2)
)
);
s = s * 6378.137; // EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
},
//更改该车是否可接受智能派单
zhinengpaidanFn(boolan) {
console.log(boolan, "zhinengpaidanBoolan");
this.zhinengpaidanBoolan = boolan;
//智能调度订单自动接单属性
this.zhinengjiedan = 0;
//人工调度订单自动接单属性
this.rengongjiedan = 0;
//卸车语音计时
this.xiecheyuyinTimer = 0;
},
},
beforeDestroy() {
// if(this.sonTimer1) { //如果定时器还在运行 或者直接关闭,不用判断
// clearInterval(this.sonTimer1); //关闭
// }
},
};
</script>
<style scoped>
@media screen and (max-width: 901px) {
.orderText1_img {
color: #00ffff;
font-size: 16px;
}
.orderViews {
display: flex;
z-index: 2;
position: absolute;
top: 8vh;
left: 20vw;
}
.orderText1 {
display: flex;
align-items: center;
justify-content: space-around;
width: 45vw;
height: 7vh;
border-radius: 5px;
background-color: rgba(26, 39, 83, 0.9);
border: 1px solid lightskyblue;
font-size: 13px;
}
.orderText1_1 {
background-image: -webkit-linear-gradient(bottom, #02a2f1, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-weight: 600;
}
.orderText2 {
margin-left: 1vw;
width: 10vw;
line-height: 7vh;
text-align: center;
height: 7vh;
border-radius: 5px;
background-color: rgba(26, 39, 83, 0.9);
border: 1px solid lightskyblue;
font-size: 13px;
font-weight: 600;
color: lightskyblue;
cursor: pointer;
}
}
@media screen and (min-width: 901px) {
.orderText1_img {
color: #00ffff;
font-size: 28px;
}
.orderViews {
display: flex;
z-index: 2;
position: absolute;
top: 8vh;
left: 20vw;
}
.orderText1 {
display: flex;
align-items: center;
justify-content: space-around;
width: 45vw;
height: 7vh;
border-radius: 5px;
background-color: rgba(26, 39, 83, 0.9);
border: 1px solid lightskyblue;
font-size: 20px;
}
.orderText1_1 {
background-image: -webkit-linear-gradient(bottom, #02a2f1, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-weight: 600;
}
.orderText2 {
margin-left: 20px;
width: 10vw;
line-height: 7vh;
text-align: center;
height: 7vh;
border-radius: 5px;
background-color: rgba(26, 39, 83, 0.9);
border: 1px solid lightskyblue;
font-size: 22px;
font-weight: 600;
color: lightskyblue;
cursor: pointer;
}
}
</style>
\ No newline at end of file
<template>
<div class="voiceAppMainViews" v-if="showDecide">
<div class="voiceAppSmallTitle">语音申请</div>
<img
src="../../../../assets/images/truckTuPian/close.png"
class="voiceAppClose"
@click="voiceAppCloseFn()"
/>
<div class="voiceAppContent">
<div class="voiceAppContent_1">
<div class="voiceAppContent_1_1">选择车队:</div>
<el-select
v-model="selectCarFleet"
placeholder="请选择车队"
style="width: 20vw"
@change="toSearch()"
>
<el-option
v-for="(item, index) in carFleetData"
:key="index"
:label="item.name"
:value="item.name"
style="font-size: 18px"
></el-option>
</el-select>
<!-- <el-input v-model="searchText" placeholder="请输入车牌号" style="width:19vw;"></el-input>
<el-button type="primary" round class="voiceAppContent_1_btn1" @click="toSearch()">查询</el-button> -->
</div>
<div class="voiceAppContent_2">
<div>
<div class="voiceAppContent_2_title">
<div>车牌号</div>
</div>
<div class="voiceAppContent_2_content">
<el-checkbox-group v-model="selectCarRadioArray">
<el-checkbox
v-for="(item, index) in carsInforData"
:label="item"
:key="index"
class="voiceAppContent_2_content_checkboxs"
>
<div style="width: 20vw; text-align: center">
{{ item.number == "pcBigScreen" ? "调度中心" : item.number }}
</div>
</el-checkbox>
</el-checkbox-group>
</div>
</div>
<div style="position: relative">
<div class="voiceAppContent_2_title">
<div>已选中车辆</div>
</div>
<div class="voiceAppContent_2_3_content">
<div
v-for="(item, index) in selectCarRadioArray"
:key="index"
class="voiceAppContent_2_content_selectCar"
>
<div>
车牌号:{{
item.number == "pcBigScreen" ? "调度中心" : item.number
}}
</div>
<div
class="voiceAppContent_2_content_selectCar_2"
@click="cancelSelect(index)"
>
<span>×</span>
</div>
</div>
</div>
<div style="display: flex; justify-content: space-around">
<!-- <el-button type="primary" round class="toCallStyle tonghuaBtnShow" @click="recStart()" :disabled='tonghuadisabled'>{{tonghua1}}</el-button>
<el-button type="primary" round class="toCallStyle tonghuaBtnShow" @click="recStop()">结束通话</el-button>
<el-button type="primary" round class="toCallStyle" @click="recUploadLast()" :disabled='tonghuadisabled'>上传通话</el-button> -->
<el-button
type="primary"
round
class="toCallStyle"
@touchstart.native="recStart()"
@touchend.native="recStop()"
>发起通话</el-button
>
</div>
</div>
</div>
<div style="margin-top: 1vh">
<img
style="width: 2.7vw"
src="../../../../assets/images/truckTuPian/fuxiaobiaotititle.png"
/>
<span class="voiceAppContent_left_title">当前语音通话情况:</span>
</div>
<audio id="audioTemp" controls currentTime autoplay :src="srcUrl" style="display: none"></audio>
<div class="situationStyle">
<div
v-for="(item, index) in videoContentAllArray"
:key="index"
class="situation_fa1"
>
<img :src="situationPic1" @click="selectSituation(item)" />
<div @click="selectSituation(item)">来自{{ item.fromUserId }}</div>
<!-- <span class="el-icon-microphone" @click="selectSituation(item)"></span> -->
<span
class="el-icon-delete"
@click="selectDeleteSituation(index)"
></span>
<!-- <div class="situationNumber" v-if="item.number != 0">{{item.number}}</div> -->
</div>
</div>
<!-- 语音所需内容,隐藏无需展示 -->
<div class="main" style="display: none">
<slot name="top"></slot>
<div class="mainBox">
<div class="btns">
<div>
<button @click="recOpen">打开录音,请求权限</button>
<button @click="recClose">关闭录音,释放资源</button>
</div>
<button @click="recStart">录制</button>
<button @click="recStop" style="margin-right: 80px">停止</button>
<span style="display: inline-block">
<button @click="recPause">暂停</button>
<button @click="recResume">继续</button>
</span>
<span style="display: inline-block">
<button @click="recPlayLast">播放</button>
<button @click="recUploadLast">上传</button>
</span>
</div>
</div>
<div class="mainBox">
<div
style="
height: 100px;
width: 300px;
border: 1px solid #ccc;
box-sizing: border-box;
display: inline-block;
vertical-align: bottom;
"
class="ctrlProcessWave"
></div>
<div
style="
height: 40px;
width: 300px;
display: inline-block;
background: #999;
position: relative;
vertical-align: bottom;
"
>
<div
class="ctrlProcessX"
style="height: 40px; background: #0b1; position: absolute"
:style="{ width: powerLevel + '%' }"
></div>
<div
class="ctrlProcessT"
style="padding-left: 50px; line-height: 40px; position: relative"
>
{{ duration + "/" + powerLevel }}
</div>
</div>
</div>
<div class="mainBox">
<audio ref="LogAudioPlayer" style="width: 100%"></audio>
<div class="mainLog"></div>
</div>
<div
v-if="recOpenDialogShow"
style="
z-index: 99999;
width: 100%;
height: 100%;
top: 0;
left: 0;
position: fixed;
background: rgba(0, 0, 0, 0.3);
"
></div>
<slot name="bottom"></slot>
</div>
</div>
</div>
</template>
<script>
import {
httpGet,
httpPostForJson,
putForJson,
httpDelForJson,
} from "@/common/httpBean.js";
import { carFleetQuery, vehicleInformationQuery } from "@/axios/api.js";
import situationPic1 from "../../../../assets/images/truckTuPian/tonghuazhong1.png";
import situationPic2 from "../../../../assets/images/truckTuPian/tonghuazhong2.png";
//加载必须要的core,demo简化起见采用的直接加载类库,实际使用时应当采用异步按需加载
import Recorder from "recorder-core";
// //需要使用到的音频格式编码引擎的js文件统统加载进来,这些引擎文件会比较大
import "recorder-core/src/engine/mp3";
import "recorder-core/src/engine/mp3-engine";
// //可选的扩展
import "recorder-core/src/extensions/waveview";
import { config as appConfig } from '@/config.js';
export default {
data() {
return {
srcUrl: null,
websocket: null,
heartbeatTimer: null,
userName1: "",
videoContent: null,
videoContentUserName: null,
//Rec:Recorder,
type: "mp3",
bitRate: 16,
sampleRate: 16000,
rec: 0,
duration: 0,
powerLevel: 0,
recOpenDialogShow: 0,
logs: [],
showDecide: false,
selectCarFleet: "",
searchText: "",
carFleetData: [],
carsInforData: [],
selectCarRadioArray: [],
situationPic1: situationPic1,
situationPic2: situationPic2,
tonghuadisabled: false,
tonghua1: "开始通话",
carAllNumberString: "",
videoContentAllArray: [],
resultBlob: null,
};
},
mounted() {
let that = this;
document.onkeydown = function (e) {
if (e.keyCode == 178) {
that.recStart();
}
if (e.keyCode == 179) {
that.recStop();
}
};
},
methods: {
loadData(value, tishi) {
this.showDecide = true;
this.selectCarFleet = "";
this.searchText = "";
this.selectCarRadioArray = [];
this.userName1 = value; //车牌号
this.srcUrl = null;
this.recOpen();
//车队
httpGet(carFleetQuery, { size: 9999, page: 0 }).then((res) => {
if (res.code == 200) {
this.carFleetData = res.data.content;
}
});
if (tishi) {
this.carsInforData = [{ number: "pcBigScreen" }];
this.selectCarRadioArray = [{ number: "pcBigScreen" }];
} else {
this.loadData2();
}
},
//获取车辆数据
loadData2() {
let query = {};
query.size = 9999;
query.page = 0;
query.number = this.searchText;
query.road = this.selectCarFleet;
//获取车辆信息并添加调度大屏的语音id
httpGet(vehicleInformationQuery, query).then((res) => {
if (res.code == 200) {
let obj1 = [];
res.data.content.forEach((item, index) => {
if (item.odo != 0) {
obj1.push(item);
}
});
obj1.unshift({ number: "pcBigScreen" });
this.carsInforData = obj1;
}
});
},
//页面刚进入时开启长连接
loadData3(value) {
this.userName1 = value; //车牌号
this.initWebSocket();
this.heartbeatTimer = setInterval(() => {
this.reconnect();
}, 6000);
let str1 = localStorage.getItem(this.userName1 + "voiceData");
if (!str1) {
return;
} else {
let arr2 = JSON.parse(str1);
this.videoContentAllArray = arr2;
this.$parent.audioDataFn(arr2);
}
},
//关闭语音申请组件
voiceAppCloseFn() {
this.showDecide = false;
this.selectCarFleet = "";
this.searchText = "";
this.selectCarRadioArray = [];
this.recClose();
this.$parent.selectFunction = 0;
},
//关闭心跳以及关闭长连接
xintiaoCloseFn() {
//页面销毁时关闭长连接
this.websocketclose();
//关闭心跳
if (this.heartbeatTimer) {
clearInterval(this.heartbeatTimer);
}
},
toSearch() {
this.loadData2();
},
cancelSelect(index) {
let handleArray = [...this.selectCarRadioArray];
handleArray.splice(index, 1);
this.selectCarRadioArray = handleArray;
},
//初始化weosocket
initWebSocket() {
const wsuri = "ws://"+appConfig.ws+"/webSocket" + "/" + this.userName1;
this.websocket = new WebSocket(wsuri);
this.websocket.onopen = this.websocketonopen;
this.websocket.onerror = this.websocketonerror;
this.websocket.onmessage = this.websocketonmessage;
this.websocket.onclose = this.websocketclose;
this.websocketonmessage();
},
//WebSocket连接成功
websocketonopen() {
console.log("WebSocket连接成功");
},
//WebSocket连接错误
websocketonerror(e) {
console.log("WebSocket连接发生错误");
},
//WebSocket数据接收
websocketonmessage(e) {
//console.log('websocketonmessage',e);
let that = this;
if (e == undefined) {
// let str1 = localStorage.getItem(this.userName1 + 'voiceData');
// if(!str1){
// return
// }else{
// let arr2 = JSON.parse(str1);
// that.videoContentAllArray = arr2;
// that.$parent.audioDataFn(arr2);
// }
} else {
let str1 = localStorage.getItem(this.userName1 + "voiceData");
let str2 = JSON.parse(e.data);
if (str2.fromUserId != this.userName1) {
that.$parent.tishishoudaoyuyinFn();
//5秒后自动播放
setTimeout(function () {
that.selectSituationIndex(str2, true);
}, 5000);
}
if (!str1) {
let arr1 = [];
arr1.unshift(str2);
that.videoContentAllArray = arr1;
that.$parent.audioDataFn(arr1);
localStorage.setItem(
this.userName1 + "voiceData",
JSON.stringify(arr1)
);
} else {
let arr2 = JSON.parse(str1);
arr2.unshift(str2);
let jinjitongzhi = [];
let guangbo = [];
let tonghua = [];
let qitache = [];
arr2.forEach((item2, indedx2) => {
if (item2.fromUserId == "紧急通知") {
jinjitongzhi.push(item2);
} else if (item2.fromUserId == "广播") {
guangbo.push(item2);
} else if (item2.fromUserId == "通话") {
tonghua.push(item2);
} else {
qitache.push(item2);
}
});
let lastAudioData = [
...jinjitongzhi,
...guangbo,
...tonghua,
...qitache,
];
that.videoContentAllArray = lastAudioData;
that.$parent.audioDataFn(lastAudioData);
localStorage.setItem(
this.userName1 + "voiceData",
JSON.stringify(lastAudioData)
);
}
}
},
//WebSocket数据发送
websocketsend(agentData) {
this.websocket.send(agentData);
},
//WebSocket关闭
websocketclose(e) {
console.log("connection closed (" + e + ")");
},
//WebSocket重连
reconnect() {
var This = this;
if (this.websocket.readyState === 1) {
// that.websock.readyState = 1 表示连接成功,可以立即发送信息
This.websocketonmessage();
} else if (this.websocket.readyState === 0) {
// 表示正在连接,设置300ms后发送信息
setTimeout(function () {
This.websocketonmessage();
}, 300);
} else {
// 连接未创建或者创建失败,则重新创建连接,并设置500ms后发送信息
This.initWebSocket();
setTimeout(function () {
This.websocketonmessage();
}, 500);
}
},
recOpen: function () {
var This = this;
var rec = (this.rec = Recorder({
type: This.type,
bitRate: This.bitRate,
sampleRate: This.sampleRate,
onProcess: function (buffers, powerLevel, duration, sampleRate) {
This.duration = duration;
This.powerLevel = powerLevel;
This.wave.input(buffers[buffers.length - 1], powerLevel, sampleRate);
},
}));
This.dialogInt = setTimeout(function () {
//定时8秒后打开弹窗,用于监测浏览器没有发起权限请求的情况
This.showDialog();
}, 8000);
rec.open(
function () {
This.dialogCancel();
//console.log('录音权限已打开');
This.reclog(
"已打开:" +
This.type +
" " +
This.sampleRate +
"hz " +
This.bitRate +
"kbps",
2
);
This.wave = Recorder.WaveView({ elem: ".ctrlProcessWave" });
},
function (msg, isUserNotAllow) {
This.dialogCancel();
This.reclog(
(isUserNotAllow ? "UserNotAllow," : "") + "打开失败:" + msg,
1
);
This.$notify({
title: "录音权限未打开,请手动开启!"+msg,
type: "warning",
duration: 5000,
});
}
);
This.waitDialogClickFn = function () {
This.dialogCancel();
This.reclog("打开失败:权限请求被忽略,用户主动点击的弹窗", 1);
This.$notify({
title: "录音权限未打开,请手动开启!",
type: "warning",
duration: 5000,
});
};
},
recClose: function () {
var rec = this.rec;
this.rec = null;
if (rec) {
rec.close();
this.reclog("已关闭");
} else {
this.reclog("未打开录音", 1);
}
},
recStart: function () {
if (!this.rec || !Recorder.IsOpen()) {
//this.reclog("未打开录音",1);
this.recOpen();
//return;
}
this.rec.start();
var set = this.rec.set;
this.reclog(
"录制中:" +
set.type +
" " +
set.sampleRate +
"hz " +
set.bitRate +
"kbps"
);
this.$notify({
title: "录制中!",
type: "success",
duration: 5000,
});
this.tonghua1 = "录制中";
this.tonghuadisabled = true;
},
recPause: function () {
if (this.rec && Recorder.IsOpen()) {
this.rec.pause();
} else {
this.reclog("未打开录音", 1);
}
},
recResume: function () {
if (this.rec && Recorder.IsOpen()) {
this.rec.resume();
} else {
this.reclog("未打开录音", 1);
}
},
recStop: function () {
if (!(this.rec && Recorder.IsOpen())) {
This.reclog("未打开录音", 1);
This.$notify({
title: "未打开录音!",
type: "warning",
duration: 2500,
});
return;
}
var This = this;
var rec = This.rec;
rec.stop(
function (blob, duration) {
if (duration <= 1000) {
This.$notify({
title: "按键时间太短",
type: "warning",
duration: 2500,
});
} else {
This.reclog("已录制:", "", {
blob: blob,
duration: duration,
rec: rec,
});
This.recUploadLast();
}
},
function (s) {
This.$notify({
title: "录音失败," + s,
type: "warning",
duration: 2500,
});
This.reclog("录音失败:" + s, 1);
}
);
this.tonghua1 = "开始通话";
this.tonghuadisabled = false;
this.recOpen();
},
recPlayLast: function () {
if (!this.recLogLast) {
this.reclog("请先录音,然后停止后再播放", 1);
return;
}
this.recplay(this.recLogLast.idx);
},
recUploadLast: function () {
let carNumberString = "";
this.selectCarRadioArray.forEach((item, index) => {
carNumberString = carNumberString + item.number + ";";
});
carNumberString = carNumberString + this.userName1;
this.carAllNumberString = carNumberString;
var This = this;
if (!this.recLogLast) {
this.reclog("请先录音,然后停止后再上传", 1);
This.$notify({
title: "请先录音,然后停止后再上传!",
type: "warning",
duration: 2500,
});
return;
}
var blob = this.recLogLast.res.blob;
this.blobToDataURI(blob);
/***方式一:将blob文件转成base64纯文本编码 ***/
var reader = new FileReader();
reader.onloadend = function () {
var postData = "";
// postData+="mime="+encodeURIComponent(blob.type);//告诉后端,这个录音是什么格式的,可能前后端都固定的mp3可以不用写
// postData+="&upfile_b64="+encodeURIComponent((/.+;\s*base64\s*,\s*(.+)$/i.exec(reader.result)||[])[1]) //录音文件内容,后端进行base64解码成二进制
//postData = btoa(reader.result); //录音文件内容
postData = This.resultBlob; //录音文件内容
//发送语音数据
if (This.websocket.readyState == 1) {
// that.websock.readyState = 1 表示连接成功,可以立即发送信息
This.websocketsend(
`{"toUserId":"${This.carAllNumberString}","contentText":"${postData}","fromUserId":"${This.userName1}"}`
);
This.$notify({
title: "上传成功!",
type: "success",
duration: 2500,
});
} else if (This.websocket.readyState == 0) {
// 表示正在连接,设置300ms后发送信息
setTimeout(function () {
This.websocketsend(
`{"toUserId":"${This.carAllNumberString}","contentText":"${postData}","fromUserId":"${This.userName1}"}`
);
This.$notify({
title: "上传成功!",
type: "success",
duration: 2500,
});
}, 300);
} else {
// 连接未创建或者创建失败,则重新创建连接,并设置500ms后发送信息
This.initWebSocket();
setTimeout(function () {
This.websocketsend(
`{"toUserId":"${This.carAllNumberString}","contentText":"${postData}","fromUserId":"${This.userName1}"}`
);
This.$notify({
title: "上传成功!",
type: "success",
duration: 2500,
});
}, 500);
}
};
reader.readAsDataURL(blob);
/***方式二:使用FormData用multipart/form-data表单上传文件***/
// let form = new FormData();
// form.append("upfile",blob,"recorder.mp3"); //和普通form表单并无二致,后端接收到upfile参数的文件,文件名为recorder.mp3
// console.log('form',form);
},
reclog: function (msg, color, res) {
var obj = {
idx: this.logs.length,
msg: msg,
color: color,
res: res,
playMsg: "",
down: 0,
down64Val: "",
};
if (res && res.blob) {
this.recLogLast = obj;
}
this.logs.splice(0, 0, obj);
},
recplay: function (idx) {
var This = this;
var o = this.logs[this.logs.length - idx - 1];
o.play = (o.play || 0) + 1;
var logmsg = function (msg) {
o.playMsg =
'<span style="color:green">' +
o.play +
"</span> " +
This.getTime() +
" " +
msg;
};
logmsg("");
var audio = this.$refs.LogAudioPlayer;
audio.controls = true;
if (!(audio.ended || audio.paused)) {
audio.pause();
}
audio.onerror = function (e) {
logmsg(
'<span style="color:red">播放失败[' +
audio.error.code +
"]" +
audio.error.message +
"</span>"
);
};
audio.src = (window.URL || webkitURL).createObjectURL(o.res.blob);
audio.play();
},
recdown: function (idx) {
var This = this;
var o = this.logs[this.logs.length - idx - 1];
o.down = (o.down || 0) + 1;
o = o.res;
var name =
"rec-" +
o.duration +
"ms-" +
(o.rec.set.bitRate || "-") +
"kbps-" +
(o.rec.set.sampleRate || "-") +
"hz." +
(o.rec.set.type || (/\w+$/.exec(o.blob.type) || [])[0] || "unknown");
var downA = document.createElement("A");
downA.href = (window.URL || webkitURL).createObjectURL(o.blob);
downA.download = name;
downA.click();
},
recdown64: function (idx) {
var This = this;
var o = this.logs[this.logs.length - idx - 1];
var reader = new FileReader();
reader.onloadend = function () {
o.down64Val = reader.result;
};
reader.readAsDataURL(o.res.blob);
},
getTime: function () {
var now = new Date();
var t =
("0" + now.getHours()).substr(-2) +
":" +
("0" + now.getMinutes()).substr(-2) +
":" +
("0" + now.getSeconds()).substr(-2);
return t;
},
intp: function (s, len) {
s = s == null ? "-" : s + "";
if (s.length >= len) return s;
return ("_______" + s).substr(-len);
},
showDialog: function () {
//我们可以选择性的弹一个对话框:为了防止移动端浏览器存在第三种情况:用户忽略,并且(或者国产系统UC系)浏览器没有任何回调
if (!/mobile/i.test(navigator.userAgent)) {
return; //只在移动端开启没有权限请求的检测
}
this.recOpenDialogShow = 1;
},
dialogCancel: function () {
clearTimeout(this.dialogInt);
this.recOpenDialogShow = 0;
},
waitDialogClick: function () {
this.dialogCancel();
this.waitDialogClickFn();
},
//解析base64编码到blob流
dataURItoBlob(base64Data) {
//console.log(base64Data);//data:image/png;base64,
var byteString;
if (base64Data.split(",")[0].indexOf("base64") >= 0)
byteString = atob(base64Data.split(",")[1]);
//base64 解码
else {
byteString = unescape(base64Data.split(",")[1]);
}
var mimeString = base64Data.split(",")[0].split(":")[1].split(";")[0]; //mime类型 -- image/png
// var arrayBuffer = new ArrayBuffer(byteString.length); //创建缓冲数组
// var ia = new Uint8Array(arrayBuffer);//创建视图
var ia = new Uint8Array(byteString.length); //创建视图
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
var blob = new Blob([ia], {
type: mimeString,
});
return blob;
},
//blob流转base64编码
blobToDataURI(blob) {
let that = this;
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = function () {
that.resultBlob = reader.result;
};
},
//播放语音
selectSituation(item) {
//注意base64的最后面中括号和引号是不转译的
let bstr = this.dataURItoBlob(item.contentText);
const reader1 = new FileReader();
reader1.readAsArrayBuffer(bstr);
reader1.onload = (e) => {
const bufer = e.srcElement.result;
const blob = this.addWavHeader(bufer, 16000, 16, 1);
this.srcUrl = (window.URL || webkitURL).createObjectURL(blob);
setTimeout(function() {
let au = document.getElementById("audioTemp");
au.currentTime = 0;
au.play();
}, 200);
};
},
//播放语音主页
selectSituationIndex(item, isNotice) {
let that = this;
//注意base64的最后面中括号和引号是不转译的
let bstr = this.dataURItoBlob(item.contentText);
const reader1 = new FileReader();
reader1.readAsArrayBuffer(bstr);
reader1.onload = (e) => {
const bufer = e.srcElement.result;
const blob = this.addWavHeader(bufer, 16000, 16, 1);
let srcUrlIndex = (window.URL || webkitURL).createObjectURL(blob);
if (isNotice && item.fromUserId === '紧急通知') {
that.$parent.audioNoticePlay(srcUrlIndex);
} else if (isNotice && item.fromUserId === '广播') {
that.$parent.fanhuiAudioUrl(srcUrlIndex, 2);
} else {
that.$parent.fanhuiAudioUrl(srcUrlIndex);
}
};
},
//删除某个语音
selectDeleteSituation(index) {
let str1 = localStorage.getItem(this.userName1 + "voiceData");
let arr3 = JSON.parse(str1);
arr3.splice(index, 1);
this.videoContentAllArray = arr3;
this.$parent.audioDataFn(arr3);
localStorage.setItem(this.userName1 + "voiceData", JSON.stringify(arr3));
},
addWavHeader(samples, sampleRateTmp, sampleBits, channelCount) {
const dataLength = samples.byteLength;
/* 新的buffer类,预留44bytes的heaer空间 */
const buffer = new ArrayBuffer(44 + dataLength);
/* 转为 Dataview, 利用API来填充字节 */
const view = new DataView(buffer);
let offset = 0;
/* ChunkID, 4 bytes, 资源交换文件标识符 */
this.writeString(view, offset, "RIFF");
offset += 4;
/* ChunkSize, 4 bytes, 下个地址开始到文件尾总字节数,即文件大小-8 */
view.setUint32(offset, /* 32 */ 36 + dataLength, true);
offset += 4;
/* Format, 4 bytes, WAV文件标志 */
this.writeString(view, offset, "WAVE");
offset += 4;
/* Subchunk1 ID, 4 bytes, 波形格式标志 */
this.writeString(view, offset, "fmt ");
offset += 4;
/* Subchunk1 Size, 4 bytes, 过滤字节,一般为 0x10 = 16 */
view.setUint32(offset, 16, true);
offset += 4;
/* Audio Format, 2 bytes, 格式类别 (PCM形式采样数据) */
view.setUint16(offset, 1, true);
offset += 2;
/* Num Channels, 2 bytes, 通道数 */
view.setUint16(offset, channelCount, true);
offset += 2;
/* SampleRate, 4 bytes, 采样率,每秒样本数,表示每个通道的播放速度 */
view.setUint32(offset, sampleRateTmp, true);
offset += 4;
/* ByteRate, 4 bytes, 波形数据传输率 (每秒平均字节数) 通道数×每秒数据位数×每样本数据位/8 */
view.setUint32(
offset,
sampleRateTmp * channelCount * (sampleBits / 8),
true
);
offset += 4;
/* BlockAlign, 2 bytes, 快数据调整数 采样一次占用字节数 通道数×每样本的数据位数/8 */
view.setUint16(offset, channelCount * (sampleBits / 8), true);
offset += 2;
/* BitsPerSample, 2 bytes, 每样本数据位数 */
view.setUint16(offset, sampleBits, true);
offset += 2;
/* Subchunk2 ID, 4 bytes, 数据标识符 */
this.writeString(view, offset, "data");
offset += 4;
/* Subchunk2 Size, 4 bytes, 采样数据总数,即数据总大小-44 */
view.setUint32(offset, dataLength, true);
offset += 4;
if (sampleBits === 16) {
this.floatTo16BitPCM(view, samples);
} else if (sampleBits === 8) {
this.floatTo8BitPCM(view, samples);
} else {
this.floatTo32BitPCM(view, samples);
}
return new Blob([view], { type: "audio/mp3" });
},
writeString(view, offset, string) {
for (let i = 0; i < string.length; i += 1) {
view.setUint8(offset + i, string.charCodeAt(i));
}
},
floatTo32BitPCM(output, input) {
const oinput = new Int32Array(input);
let newoffset = 44;
for (let i = 0; i < oinput.length; i += 1, newoffset += 4) {
output.setInt32(newoffset, oinput[i], true);
}
},
floatTo16BitPCM(output, input) {
const oinput = new Int16Array(input);
let newoffset = 44;
for (let i = 0; i < oinput.length; i += 1, newoffset += 2) {
output.setInt16(newoffset, oinput[i], true);
}
},
floatTo8BitPCM(output, input) {
const oinput = new Int8Array(input);
let newoffset = 44;
for (let i = 0; i < oinput.length; i += 1, newoffset += 1) {
output.setInt8(newoffset, oinput[i], true);
}
},
},
beforeDestroy() {
//页面销毁时关闭长连接
// this.websocketclose();
//关闭心跳
// if(this.heartbeatTimer) {
// clearInterval(this.heartbeatTimer);
// }
},
};
</script>
<style scope>
@media screen and (max-width: 901px) {
.situationStyle img {
height: 3.5vh;
}
.voiceAppContent_2_content_selectCar_2 {
width: 6vh;
height: 6vh;
background-color: rgb(4, 112, 171);
text-align: center;
font-size: 30px;
}
.voiceAppContent_2_content_checkboxs {
margin-top: 0.5vh;
}
.voiceAppContent_1_btn1 {
width: 6.5vw;
font-size: 12px;
height: 6.5vh;
}
.voiceAppContent_1 button {
padding: 0 !important;
}
.voiceAppContent_2 button {
padding: 0 !important;
height: 6.5vh;
}
.voiceAppContent_1_1 {
font-size: 12px;
}
#audioView {
position: absolute;
top: 200px;
left: 200px;
z-index: 5;
background-color: red;
width: 200px;
height: 50px;
}
.el-input__inner {
font-size: 18px;
}
.voiceAppMainViews {
position: absolute;
z-index: 2;
top: 52%;
left: 50%;
height: 90vh;
width: 60vw;
background: no-repeat center center
url("~@/assets/images/truckTuPian/yuyinshenqing1.png");
background-size: 100% 100%;
transform: translate(-50%, -50%);
padding: 12px 30px 0px;
box-sizing: border-box;
}
.voiceAppSmallTitle {
color: white;
font-size: 12px;
text-align: center;
line-height: 6vh;
width: 11vw;
height: 6vh;
background: no-repeat center center
url("~@/assets/images/truckTuPian/xiaobiaotikuang.png");
background-size: 100% 100%;
}
.voiceAppClose {
position: absolute;
top: 4vh;
right: 1vw;
cursor: pointer;
}
.voiceAppContent {
width: 100%;
}
.voiceAppContent > div {
margin-top: 1vh;
}
.voiceAppContent_left_title {
font-size: 13px;
color: rgb(24, 228, 240);
}
.voiceAppContent_1 {
display: flex;
justify-content: center;
}
.voiceAppContent_1 > div {
height: 6.5vh;
line-height: 6.5vh;
color: rgb(24, 228, 240);
font-size: 13px;
}
.voiceAppContent_1 .el-input--suffix .el-input__inner {
height: 6.5vh;
font-size: 12px;
}
.voiceAppContent_1 .el-select .el-input .el-select__caret {
line-height: 0px;
}
.voiceAppContent_1 .el-input__inner {
font-size: 13px;
height: 6.5vh;
}
.voiceAppContent_2 {
display: flex;
justify-content: space-between;
}
.voiceAppContent_2 > div {
width: 49%;
height: 45vh;
border: 2px solid rgb(24, 228, 240);
border-radius: 10px;
}
.voiceAppContent_2_title {
border-top-left-radius: 10px;
border-top-right-radius: 10px;
background-color: rgb(25, 41, 94);
height: 4vh;
line-height: 4vh;
color: rgb(24, 228, 240);
display: flex;
justify-content: space-around;
font-size: 12px;
}
.voiceAppContent_2_content {
height: 40vh;
width: 100%;
overflow-y: auto;
padding: 0px 10px;
box-sizing: border-box;
}
.voiceAppContent_2_content::-webkit-scrollbar {
/*滚动条整体样式*/
width: 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.voiceAppContent_2_content::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 10px;
background-color: #274088;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
}
.voiceAppContent_2_content::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
background: #ededed;
border-radius: 10px;
}
.el-checkbox__label {
vertical-align: -3px;
}
.el-checkbox__label > div {
display: inline-block;
color: rgb(24, 228, 240);
font-size: 13px;
}
.el-checkbox {
display: block;
}
.el-checkbox__inner {
width: 4.5vh;
height: 4vh;
}
.el-checkbox__input {
vertical-align: bottom;
}
.el-checkbox__input .el-checkbox__inner::after {
border: 2px solid #fff;
box-sizing: content-box;
content: "";
border-left: 0;
border-top: 0;
height: 12px;
width: 5px;
position: absolute;
top: -0.5vh;
left: 1vh;
transform: rotate(45deg) scaleY(1);
}
.voiceAppContent_2_content_selectCar {
margin-top: 0.5vh;
color: rgb(24, 228, 240);
font-size: 13px;
display: flex;
justify-content: space-between;
}
.voiceAppContent_2_content_selectCar > div {
height: 6vh;
line-height: 6vh;
}
.voiceAppContent_2_3_content {
height: 33vh;
width: 100%;
overflow-y: auto;
padding: 0px 10px;
box-sizing: border-box;
}
.voiceAppContent_2_3_content::-webkit-scrollbar {
/*滚动条整体样式*/
width: 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.voiceAppContent_2_3_content::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 10px;
background-color: #274088;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
}
.voiceAppContent_2_3_content::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
background: #ededed;
border-radius: 10px;
}
.toCallStyle {
margin-top: 0.5vh;
width: 10vw;
height: 3vh;
font-size: 12px;
/* position: absolute;
left: 50%;
transform: translateX(-50%); */
}
.situationStyle {
width: 100%;
height: 17vh;
display: flex;
flex-wrap: wrap;
overflow-y: auto;
}
.situationStyle::-webkit-scrollbar {
/*滚动条整体样式*/
width: 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.situationStyle::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 10px;
background-color: #274088;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
}
.situationStyle::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
background: #ededed;
border-radius: 10px;
}
.situation_fa1 {
color: #a6f6f9;
font-size: 12px;
width: 32%;
margin: 0px 0.3vh 1vh 0px;
height: 6vh;
border: 1px solid rgb(24, 228, 240);
border-radius: 5px;
display: flex;
align-items: center;
justify-content: space-around;
cursor: pointer;
position: relative;
}
.situation_fa1 span {
font-size: 15px;
}
.situation_fa2 {
opacity: 0.8;
color: #00ffff;
background-color: #00b6ff;
font-size: 22px;
border-radius: 10px;
margin: 0px 5px 15px;
width: 32%;
height: 6vh;
display: flex;
align-items: center;
justify-content: space-around;
cursor: pointer;
position: relative;
}
.situationNumber {
padding: 3px;
color: white;
box-sizing: border-box;
border-radius: 50%;
background-color: #007eff;
position: absolute;
right: -10px;
top: -10px;
font-size: 18px;
}
}
@media screen and (min-width: 901px) {
.tonghuaBtnShow {
display: none;
}
.situationStyle img {
height: 30px;
}
.voiceAppContent_2_content_selectCar_2 {
width: 27px;
height: 27px;
background-color: rgb(4, 112, 171);
text-align: center;
font-size: 40px;
}
.voiceAppContent_2_content_checkboxs {
margin-top: 10px;
}
.voiceAppContent_1_btn1 {
width: 6.5vw;
font-size: 18px;
height: 6vh;
text-align: center;
}
.voiceAppContent_1_1 {
font-size: 19px;
font-weight: 600;
}
#audioView {
position: absolute;
top: 200px;
left: 200px;
z-index: 5;
background-color: red;
width: 200px;
height: 50px;
}
.el-input__inner {
font-size: 18px;
}
.voiceAppMainViews {
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
height: 85vh;
width: 60vw;
background: no-repeat center center
url("~@/assets/images/truckTuPian/yuyinshenqing1.png");
background-size: 100% 100%;
transform: translate(-50%, -50%);
padding: 12px 30px 0px;
box-sizing: border-box;
}
.voiceAppSmallTitle {
color: white;
font-size: 18px;
text-align: center;
line-height: 4.5vh;
width: 9vw;
height: 4.5vh;
background: no-repeat center center
url("~@/assets/images/truckTuPian/xiaobiaotikuang.png");
background-size: 100% 100%;
}
.voiceAppClose {
position: absolute;
top: 4vh;
right: 1vw;
cursor: pointer;
}
.voiceAppContent {
width: 100%;
}
.voiceAppContent > div {
margin-top: 15px;
}
.voiceAppContent_left_title {
font-size: 21px;
color: rgb(24, 228, 240);
}
.voiceAppContent_1 {
display: flex;
justify-content: center;
}
.voiceAppContent_1 > div {
height: 40px;
line-height: 40px;
color: rgb(24, 228, 240);
font-size: 22px;
}
.voiceAppContent_2 {
display: flex;
justify-content: space-between;
}
.voiceAppContent_2 > div {
width: 49%;
height: 45vh;
border: 2px solid rgb(24, 228, 240);
border-radius: 10px;
}
.voiceAppContent_2_title {
border-radius: 10px;
background-color: rgb(25, 41, 94);
height: 4vh;
line-height: 4vh;
color: rgb(24, 228, 240);
display: flex;
justify-content: space-around;
font-size: 20px;
}
.voiceAppContent_2_content {
height: 40vh;
width: 100%;
overflow-y: auto;
padding: 0px 10px;
box-sizing: border-box;
}
.voiceAppContent_2_content::-webkit-scrollbar {
/*滚动条整体样式*/
width: 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.voiceAppContent_2_content::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 10px;
background-color: #274088;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
}
.voiceAppContent_2_content::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
background: #ededed;
border-radius: 10px;
}
.el-checkbox__label {
vertical-align: -3px;
}
.el-checkbox__label > div {
display: inline-block;
color: rgb(24, 228, 240);
font-size: 20px;
}
.el-checkbox {
display: block;
}
.el-checkbox__inner {
width: 25px;
height: 25px;
}
.el-checkbox__input .el-checkbox__inner::after {
border: 2px solid #fff;
box-sizing: content-box;
content: "";
border-left: 0;
border-top: 0;
height: 12px;
width: 5px;
position: absolute;
top: 1px;
left: 8px;
transform: rotate(45deg) scaleY(1);
}
.voiceAppContent_2_content_selectCar {
margin-top: 10px;
color: rgb(24, 228, 240);
font-size: 20px;
display: flex;
justify-content: space-between;
}
.voiceAppContent_2_content_selectCar > div {
height: 27px;
line-height: 27px;
}
.voiceAppContent_2_3_content {
height: 33vh;
width: 100%;
overflow-y: auto;
padding: 0px 10px;
box-sizing: border-box;
}
.voiceAppContent_2_3_content::-webkit-scrollbar {
/*滚动条整体样式*/
width: 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.voiceAppContent_2_3_content::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 10px;
background-color: #274088;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
}
.voiceAppContent_2_3_content::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
background: #ededed;
border-radius: 10px;
}
.toCallStyle {
margin-top: 10px;
width: 130px;
height: 40px;
font-size: 18px;
/* position: absolute;
left: 50%;
transform: translateX(-50%); */
}
.situationStyle {
width: 100%;
height: 15vh;
display: flex;
flex-wrap: wrap;
overflow-y: auto;
}
.situationStyle::-webkit-scrollbar {
/*滚动条整体样式*/
width: 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.situationStyle::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 10px;
background-color: #274088;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
}
.situationStyle::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
background: #ededed;
border-radius: 10px;
}
.situation_fa1 {
color: #a6f6f9;
font-size: 22px;
margin: 0px 5px 15px;
width: 32%;
height: 6vh;
border: 2px solid rgb(24, 228, 240);
border-radius: 10px;
display: flex;
align-items: center;
justify-content: space-around;
cursor: pointer;
position: relative;
}
.situation_fa1 span {
font-size: 30px;
}
.situation_fa2 {
opacity: 0.8;
color: #00ffff;
background-color: #00b6ff;
font-size: 22px;
border-radius: 10px;
margin: 0px 5px 15px;
width: 32%;
height: 6vh;
display: flex;
align-items: center;
justify-content: space-around;
cursor: pointer;
position: relative;
}
.situationNumber {
padding: 3px;
color: white;
box-sizing: border-box;
border-radius: 50%;
background-color: #007eff;
position: absolute;
right: -10px;
top: -10px;
font-size: 18px;
}
}
</style>
\ No newline at end of file
<template>
<div class="mianViews">
<div v-show="audioNotice" class="roadblockStyle" style="bottom:14vh;left:15vw;width: 26vw" @click="audioNoticeStop()">
<img src="../../assets/images/truckTuPian/jjtz.png" height="15"/>
<span style="padding:5px">收到<span style="color:red">紧急通知</span>,请点击确认!</span>
</div>
<div class="topViews">
<div class="topTitle">{{ systemTitle }}</div>
<div class="topcontent">
<div style="margin-right: 20px">{{ currentTime }}</div>
<ElectricQuantity
class="ElectricQuantityStyle"
:proIsCharge="IsCharge"
:proQuantity="batteryEnegy"
></ElectricQuantity>
<span>{{ batteryEnegy }}%</span>
<!-- <div style="margin-right: 20px;cursor: pointer;">
<img src="../../assets/images/truckTuPian/moon1.png" width="15">
<span>切换夜晚模式</span>
</div>
<img src="../../assets/images/truckTuPian/dianchi1.png" width="30" height="17" style="margin-right: 20px;">
<img src="../../assets/images/truckTuPian/xinhao2.png" width="25" height="20" style="margin-right: 20px;">
<img src="../../assets/images/truckTuPian/xinhao1.png" width="20" height="20"> -->
</div>
</div>
<div class="centerViews">
<div :class="selectFunction == 1 ? 'IntelligentDis1' : 'IntelligentDis2'" @click="safetyCheck()">
<div :class="selectFunction == 1 ? 'centerViewsTitle1' : 'centerViewsTitle2'">
安全检查
</div>
</div>
<div :class="selectFunction == 2 ? 'voiceAp2' : 'voiceAp1'" @click="voiceApFn()">
<div :class="selectFunction == 2 ? 'centerViewsTitle1' : 'centerViewsTitle2'">
语音申请
</div>
</div>
<div :class="leftBtnDisable && selectFunction == 3 ? 'failureDe2' : 'failureDe1'" @click="leftBtnDisable && failureDeFn()">
<div :class="selectFunction == 3 ? 'centerViewsTitle1' : 'centerViewsTitle2'">
故障申报
</div>
</div>
<div :class="leftBtnDisable && selectFunction == 4? 'performanceSt2': 'performanceSt1'" @click="leftBtnDisable && performanceStFn()">
<div :class="selectFunction == 4 ? 'centerViewsTitle1' : 'centerViewsTitle2'">
绩效统计
</div>
</div>
<div :class="leftBtnDisable && selectFunction == 5 ? 'carIn2' : 'carIn1'" @click="leftBtnDisable && carInFn()">
<div :class="selectFunction == 5 ? 'centerViewsTitle1' : 'centerViewsTitle2'">
车辆信息
</div>
</div>
<div :class="leftBtnDisable && selectFunction == 6 ? 'personalCe2' : 'personalCe1'" @click="leftBtnDisable && personalCeFn()">
<div :class="selectFunction == 6 ? 'centerViewsTitle1' : 'centerViewsTitle2'">
个人中心
</div>
</div>
</div>
<div class="roadblockStyle" @click="failureDe1Fn()">
<img src="../../assets/images/truckTuPian/luzhang.png" height="15"/>
<span> 路障申报</span>
</div>
<div class="dispatchCenterStyle" @click="voiceApFn('右下角')">
<img src="../../assets/images/truckTuPian/diaoduzhongxin.png" height="17"/>
<span> 调度中心</span>
</div>
<startOrderReceiving ref="startOrderReceivingMethod"/>
<voiceApplication ref="voiceApplicationMethod" v-show="selectFunction == 2"/>
<securityReport ref="securityReportMethod" v-show="selectFunction == 1"/>
<failureDeclaration ref="failureDeclarationMethod" v-show="selectFunction == 3"/>
<performanceStatistics ref="performanceStatisticsMethod" v-show="selectFunction == 4"/>
<carInformation ref="carInformationMethod" v-show="selectFunction == 5"/>
<personalCenter ref="personalCenterMethod" v-show="selectFunction == 6"/>
<smallWindow ref="smallWindowMethod" v-show="selectFunction == 7"/>
<!-- 语音播放 -->
<audio id="audioIndex" controls currentTime autoplay :src="indexSrcUrl" style="display:none;"></audio>
<!-- 语音提示区域 -->
<div class="audioTishiView" v-if="audioTishiViewShow">
<div class="audioTishiView_son1">
<div v-for="(item, index) in audioData" :key="index" class="indexSituation_fa1">
<img :src="indexSituationPic1" height="20" @click="indexListeningFn(item)"/>
<div style="display: inline-block" @click="indexListeningFn(item)">来自{{ item.fromUserId }}</div>
<span class="el-icon-delete" @click="indexListeningDelFn(index)"></span>
</div>
</div>
</div>
<!-- 地图区域 -->
<div id="map" class="mapcontainer" style="width:100%;height:100%">
<!-- <mars3dViewerMap-->
<!-- :url="configUrl"-->
<!-- @onload="onMapload"-->
<!-- ref="mars3dViewerMapMethod"-->
<!-- />-->
</div>
<!-- 左下角logo -->
<!-- <img src="../../assets/images/truckTuPian/maplogo1.jpg" class="mapLogo1"/>-->
<!-- 铲车待装车辆列表 -->
<div class="waitingtrucksView" v-if="kcListView && carclass == '铲车'">
<div class="waitingtrucksView_title">待装卡车列表</div>
<div class="waitingtrucksView_content">
<div v-for="(item, index) in daizhangCar" :key="index">
<div>车牌号:{{ item.number }}</div>
<button class="daizhangCarBtn1" @click="wanchengzhuangcheFn(item)">
准备装车
</button>
</div>
</div>
</div>
</div>
</template>
<script>
import {
httpGet,
httpPostForJson,
putForJson,
httpDelForJson,
} from "@/common/httpBean.js";
import {
changeJinJiReadStatus,
posAreaInformationPoint,
posAreaInformation,
posGetAllOnlineCarPosition,
safetySubmitCheck,
personalCenterInforQuery,
vehicleInformationQuery,
getAllLoadableKC,
vehicleInformationUpdate,
dingDanBiaoCaoZuo,
manualSchedulingQuery,
getalarmRealQuery,
dispatchFinishQuery,
carRealTimeLocationQuery2,
failureDeclarationAdd,
apiCpointQuery,
apiPathmapNavigationQuery,
faultDayAdd,
faultMonthAdd,
faultYearAdd,
creatOrder,
} from "@/axios/api.js";
import axios from "axios";
import startOrderReceiving from "./components/startOrderReceiving/index.vue"; //接受派单
import voiceApplication from "./components/voiceApplication/index.vue"; //语音申请
import securityReport from "./components/securityReport/index.vue"; //安检报告
import failureDeclaration from "./components/failureDeclaration/index.vue"; //故障申报
import performanceStatistics from "./components/performanceStatistics/index.vue"; //绩效统计
import carInformation from "./components/carInformation/index.vue"; //车辆信息
import personalCenter from "./components/personalCenter/index.vue"; //个人中心
import smallWindow from "./components/smallWindow/index.vue"; //小窗口车辆信息
import mars3dViewerMap from "../../components/mars3d/Map.vue"; //地图
import ElectricQuantity from "../../components/electricity/index.vue"; //电池组件
import indexSituationPic1 from "../../assets/images/truckTuPian/tonghuazhong1.png";
import yuyintishi from "@/assets/yuyintishi.mp3";
import confineIn from "@/assets/confineIn.mp3";
import confineOff from "@/assets/confineOff.mp3";
import * as mars3d from "mars3d";
import mapMarker from "@/assets/mapMarker.png";
import tufangche from "@/assets/tufangche.png";
import wajueji from "@/assets/wajueji.png";
import zhuangcheIcon from "@/assets/images/truckTuPian/zhuangchedian1.png";
import xiecheIcon from "@/assets/images/truckTuPian/xiechedian1.png";
import luzhangtubiao from "@/assets/images/truckTuPian/luzhang.png";
import 'maptalks/dist/maptalks.css';
import * as maptalks from 'maptalks';
import {crossingFence} from "../../axios/api";
import { config as appConfig } from '@/config.js';
export default {
components: {
startOrderReceiving,
voiceApplication,
securityReport,
failureDeclaration,
performanceStatistics,
carInformation,
personalCenter,
smallWindow,
mars3dViewerMap,
ElectricQuantity,
},
data() {
const basePathUrl = window.basePathUrl || "";
return {
intervalWancheng: null,
//地图图片
configUrl: basePathUrl + "config/config.json",
notifyPromise: Promise.resolve(),
systemTitle: "卡车调度系统卡车终端",
orderReceiving: false,
personalName: "",
zongTimer1: null,
zongTimer2: null,
currentTime: "",
selectFunction: 0,
carnumber: "",
equipmentName: "",
userName1: "",
carclass: "",
daizhangCar: [],
leftBtnDisable: true, //左侧选项按钮是否可用
//电量显示
IsCharge: true,
batteryEnegy: 0,
//控制点数据
controlPointData: [],
//暂存经纬度
navigatorXY: {
x: 0,
y: 0,
},
//摄像头会话号
jsession: "",
//摄像头车辆设备号
devices: "",
//禁用完成装车
interdictBtn: false,
//语音组件播放
indexSrcUrl: "",
//语音数据
audioData: [],
//语音图片
indexSituationPic1: indexSituationPic1,
//语音组件显示
audioTishiViewShow: false,
//路障申报数量
roadblockNum: 0,
//websocket对象
websocketIndex: null,
//判断是否连接天线的信号
antennaConnectorBoolean: false,
finishNum: null,
geoTrailInfo: [],
zongTimer3: null,
submitReportFormId: null,
mapDom: null,
mapCenter: [122.04700, 37.4890],
posTimer: null,
currArea: null,
optFlag: false,
audioNotice: null, //紧急通知
areaNum: 0,
areaTimer: null,
kcListView: false,
};
},
mounted() {
let that = this;
//that.initWebSocketIndex();
this.loadData();
this.setNowTimes();
this.zongTimer1 = setInterval(() => {
this.setNowTimes();
}, 1000);
this.zongTimer2 = setInterval(() => {
if (this.carnumber == "") {
return;
}
//判断车辆类型
if (this.carclass == "铲车") {
this.loadData1();
}
//获取报警记录
httpGet(vehicleInformationQuery, {number: this.carnumber}).then(
(res) => {
if (res.code == 200) {
if (res.data.totalElements == 0) {
return;
} else {
// console.log(res, "获取报警记录");
//获取该车报警记录接口
httpGet(getalarmRealQuery, {
name: res.data.content[0].equipmentName,
}).then((res1) => {
if (res1.code == 200) {
res1.data.forEach((item, index) => {
this.notifyPromise = this.notifyPromise
.then(this.$nextTick)
.then(() => {
if (this.carclass == "铲车" && item.type != 3) {
this.$notify({
title:
(item.type == 1
? "限入"
: item.type == 2
? "限出"
: item.type == 4
? "防碰撞"
: "") +
(item.areaName == undefined
? ""
: item.areaName) +
"报警",
type: "warning",
duration: 5000,
dangerouslyUseHTMLString: true,
});
this.audioBjFn(item.type, item.areaName);
} else if (this.carclass != "铲车") {
this.$notify({
title:
(item.type == 1
? "限入"
: item.type == 2
? "限出"
: item.type == 3 && this.carclass != "铲车"
? "无故停车"
: item.type == 4
? "防碰撞"
: "") +
(item.areaName == undefined
? ""
: item.areaName) +
"报警",
type: "warning",
duration: 5000,
dangerouslyUseHTMLString: true,
});
this.audioBjFn(item.type, item.areaName);
}
});
});
}
});
}
}
}
);
}, 10000);
this.$nextTick(() => {
this.initMapTalk();
});
},
methods: {
initMapTalk() {
this.mapDom = new maptalks.Map("map", {
center: this.mapCenter,
maxZoom: 20,
minZoom: 15,
zoom: 18,
pitch: 25,
// devicePixelRatio: 2,
renderer: 'canvas',
dragRotate: false,
dragPitch: false,
touchRotate: false,
touchPitch: false,
attribution: false,
baseLayer: new maptalks.TileLayer('baseTitle', {
urlTemplate: `http://t{s}.tianditu.com/DataServer?T=img_w&X={x}&Y={y}&L={z}&tk=de0dc270a51aaca3dd4e64d4f8c81ff6`,
subdomains: ['1', '2', '3', '4'],
cssFilter: 'sepia(75%) invert(90%)',
}),
layers: [
new maptalks.ImageLayer('images',
[
{
url: appConfig.BASE_URL+'/avatar/test0325.png',
extent: [122.01927668762207031, 37.46949039069553, 122.04700, 37.4890],
renderer: 'canvas',
opacity: 1,
}
]),
new maptalks.VectorLayer("regionLayer", {
enableAltitude: false,
}),
new maptalks.VectorLayer("siteLayer", {
enableAltitude: false,
}),
new maptalks.VectorLayer("roadblockLayer", {
enableAltitude: false,
}),
new maptalks.VectorLayer("markerLayer", {
enableAltitude: false,
})
]
});
this.mapDom.on('movestart', (e) => {
this.optFlag = true;
setTimeout(()=>{
this.optFlag = false;
},12000);
});
httpGet(posAreaInformationPoint).then((res) => {
if (res.code == 200 ) {
const layer = this.mapDom.getLayer('siteLayer');
res.data.forEach((item) => {
let marker = new maptalks.Marker(
[item.lon, item.lat],
{
properties: {
pointType: item.pointType,
pointName: item.pointName
},
symbol: {
'textName': '{pointName}',
'textSize': 8,
'textFaceName': 'monospace',
'textFill': '#34495e',
'textHaloFill': '#fff',
'textHaloRadius': 2,
'textWeight': 'bold',
'textDy': -28,
'markerFile': item.pointType === '装车点' ? zhuangcheIcon : xiecheIcon,
'markerWidth': 40,
'markerHeight': 40,
'markerDy': 10
},
}
);
marker.addTo(layer);
});
}
});
setTimeout(()=>{
this.getAreaInformation();
},3000);
this.getRoadblockInformation();
this.areaTimer = setInterval(() => {
this.getAreaInformation();
this.getRoadblockInformation();
}, 120000);
this.getAllOnlineCarPosition();
this.posTimer = setInterval(() => {
this.getAllOnlineCarPosition();
}, 2000);
},
getRoadblockInformation() {
httpGet(failureDeclarationAdd,{fault: "路障申报", createTime: this.currentTimeFn()}).then((res) => {
if (res.code == 200 && res.data.totalElements !== this.roadblockNum) {
if (res.data.totalElements !== this.roadblockNum) {
this.roadblockNum = res.data.totalElements;
const layer = this.mapDom.getLayer('roadblockLayer');
layer.clear();
res.data.content.forEach((item) => {
let marker = new maptalks.Marker(
[item.lon, item.lat],
{
properties: {
id: item.id,
carcode: item.carcode,
createTime: item.createTime,
fault: item.fault,
},
symbol: {
'markerFile': luzhangtubiao,
'markerWidth': 23,
'markerHeight': 23,
},
}
);
marker.addTo(layer);
});
}
}
});
},
getAreaInformation() {
httpGet(posAreaInformation,{carNumber: this.carnumber}).then((res) => {
if (res.code === 200 && res.data.length!==this.areaNum) {
this.areaNum = res.data.length||0;
const layer = this.mapDom.getLayer('regionLayer');
layer.clear();
res.data.forEach((item) => {
const polygon = new maptalks.MultiPolygon([item.zuobiao], {
properties: {
name: item.name,
areaLimitClass: item.areaLimitClass
},
symbol: {
lineWidth: 3,
lineColor: item.color,
polygonFill: item.color,
polygonOpacity: 0.25,
textName: '{name}',
textSize: 10,
textFaceName: 'monospace',
textFill: item.color,
textHaloFill: '#000',
textHaloRadius: 2,
textWeight: 'bold',
},
});
layer.addGeometry([polygon]);
});
}
});
},
getAllOnlineCarPosition() {
httpGet(posGetAllOnlineCarPosition).then((res) => {
if (res.code == 200) {
const layer = this.mapDom.getLayer('markerLayer');
res.data.forEach((item) => {
let isExist = false;
layer.filter(['==', 'carName', item.carName]).forEach( (feature)=> {
isExist = true;
if (item.lon && item.lat) {
feature.setCoordinates([item.lon, item.lat]);
if(item.equipment === this.equipmentName) {
let area = null;
const point = new maptalks.Coordinate(item.lon, item.lat);
this.mapDom.getLayer('regionLayer').getGeometries().forEach((polygon) => {
if (polygon.properties.areaLimitClass && polygon.containsPoint(point)) {
area = polygon.properties.name;
}
})
if (this.currArea !== area) {
if(area){
this.crossingFence(area,1);
}
if(this.currArea){
this.crossingFence(this.currArea,0);
}
this.currArea = area;
}
if (!this.optFlag) {
this.mapDom.setCenter(point);
}
}
} else {
feature.remove();
}
});
if (!isExist && item.lon && item.lat) {
let symbolArr = [];
if (item.equipment === this.equipmentName) {
symbolArr.push({
'markerFile': mapMarker,
'markerWidth': 54,
'markerHeight': 50,
});
symbolArr.push({
'textName': '{carName}\n(我的位置)',
'textSize': 14,
'textLineSpacing': 2,
'textFaceName': 'monospace',
'textFill': '#34495e',
'textHaloFill': '#fff',
'textHaloRadius': 2,
'textWeight': 'bold',
'textDy': 16,
'markerFile': item.carClass === '卡车' ? tufangche : wajueji,
'markerWidth': 30,
'markerHeight': 30,
'markerDy': -20
})
} else {
symbolArr.push({
'textName': '{carName}',
'textSize': 14,
'textFaceName': 'monospace',
'textFill': '#34495e',
'textHaloFill': '#fff',
'textHaloRadius': 2,
'textWeight': 'bold',
'textDy': 5,
'markerFile': item.carClass === '卡车' ? tufangche : wajueji,
'markerWidth': 30,
'markerHeight': 30,
'markerDy': 0
});
}
let marker = new maptalks.Marker(
[item.lon, item.lat],
{
properties: {
carClass: item.carClass,
carName: item.carName,
equipment: item.equipment,
fleet: item.fleet,
},
symbol: symbolArr,
}
);
marker.on('touchstart', (event) => {
this.smallWinFn(item.carName);
})
marker.addTo(layer);
}
});
}
});
},
getSerialSendIndex(str) {
window.SerialPort.send(str);
this.getSerialReceiveIndex();
},
async getSerialReceiveIndex() {
if(!window.SerialPort){
return;
}
const cont = await window.SerialPort.receive();
// this.$message({
// message: cont,
// type: "warning",
// });
if(cont){
let strArr = cont.split(',');
// let wgLat = this.dmsTransform(strArr[2]), wgLon = this.dmsTransform(strArr[4]), h = Number(strArr[9] || 0), p = Number(strArr[6]);
// let point = this.wgs_gcj_encrypts(wgLat, wgLon);
let wgLat = Number(strArr[0] || 0), wgLon = Number(strArr[1] || 0), h = Number(strArr[2] || 0), p = 1;
if(wgLat>0 && wgLon>0 && p>0){ //取有效解
this.getCarLoactionByGNSS(wgLat, wgLon, h, p);
}
}
},
crossingFence(areaName, inOut) {
this.$message({
message: inOut ? `注意:您已驶入${areaName}` : `注意:您已驶出${areaName}`,
type: "info",
});
httpPostForJson(crossingFence, {
areaName: areaName,
inOut: inOut,
driver: this.userName1,
equipmentName: this.equipmentName
}).then((res) => {
console.log('crossingFence');
});
},
//初始化weosocket
initWebSocketIndex() {
const wsuri1 = "ws://"+appConfig.ws+"/ws"; //连接地址,可加参数
this.websocketIndex = new WebSocket(wsuri1);
this.websocketIndex.onopen = this.websocketonopenIndex;
this.websocketIndex.onerror = this.websocketonerrorIndex;
this.websocketIndex.onmessage = this.websocketonmessageIndex;
this.websocketIndex.onclose = this.websocketcloseIndex;
},
//WebSocket连接成功
websocketonopenIndex() {
console.log("9095WebSocket连接成功");
this.websocketsendIndex("gpsclient");
},
//WebSocket连接错误
websocketonerrorIndex(e) {
console.log("9095WebSocket连接发生错误");
//WebSocket重连
this.initWebSocketIndex();
},
//WebSocket数据接收
websocketonmessageIndex(e) {
if (e == undefined) {
return;
} else {
//console.log("indexWebsocketMessage",e.data);
if (this.antennaConnectorBoolean) {
//this.getSerialSendIndex(e.data)
} else {
this.antennaConnectorBoolean = true;
}
}
},
//WebSocket数据发送
websocketsendIndex(agentData) {
this.websocketIndex.send(agentData);
this.websocketonmessageIndex();
},
//WebSocket关闭
websocketcloseIndex(e) {
console.log("connection closed !");
},
//WebSocket重连
reconnectIndex() {
var This = this;
if (this.websocketIndex.readyState === 1) {
// that.websock.readyState = 1 表示连接成功,可以立即发送信息
This.websocketonmessageIndex();
} else if (this.websocketIndex.readyState === 0) {
// 表示正在连接,设置300ms后发送信息
setTimeout(function () {
This.websocketonmessageIndex();
}, 300);
} else {
// 连接未创建或者创建失败,则重新创建连接,并设置500ms后发送信息
This.initWebSocketIndex();
setTimeout(function () {
This.websocketonmessageIndex();
}, 500);
}
},
loadData() {
let href1 = window.location.href;
let href2 = href1.split("?")[1];
this.userName1 = decodeURI(href2);
//获取司机人员信息
httpGet(personalCenterInforQuery, {userName: this.userName1}).then(
(res) => {
if (res.code == 200 && res.data.totalElements != 0) {
this.carnumber = res.data.content[0].car;
this.personalName = res.data.content[0].name;
//展示二维地图
// this.$refs.mars3dViewerMapMethod.getCarInforFn(this.carnumber);
//开启接受订单
this.$refs.startOrderReceivingMethod.loadData(this.carnumber);
//开启语音接收
this.$refs.voiceApplicationMethod.loadData3(this.carnumber);
//安检报告提交校验
this.safetySubmitCheckFn();
//获取车辆信息
httpGet(vehicleInformationQuery, {number: this.carnumber}).then((res1) => {
if (res1.code == 200) {
if (res1.data.totalElements == 0) {
return;
} else {
//修改车辆状态为在线
putForJson(vehicleInformationUpdate, {
id: res1.data.content[0].id,
odo: 3,
}).then((res2) => {
});
this.carclass = res1.data.content[0].carclass;
if (this.carclass == "铲车") {
this.loadData1();
this.systemTitle = "卡车调度系统铲车终端";
}
this.equipmentName = res1.data.content[0].equipmentName;
//执行获取位置
if (this.equipmentName) {
this.zongTimer3 = setInterval(() => {
// this.getCarLoaction2();
this.getSerialReceiveIndex();
}, 2000);
// this.getCarLoaction1();
}
}
}
});
} else {
this.$refs.voiceApplicationMethod.loadData3(this.carnumber);
}
}
);
//获取所有关键控制点信息
httpGet(apiCpointQuery, {size: 9999}).then((res) => {
if (res.code == 200) {
this.controlPointData = res.data.content;
}
});
},
//安检报告提交校验
safetySubmitCheckFn() {
httpGet(safetySubmitCheck, {
username: this.userName1,
}).then((res) => {
if (res.code == 200) {
this.submitReportFormId = res.data;
if(!this.submitReportFormId){
this.safetyCheck();
}
}
});
},
//获取待装卡车列表
loadData1() {
httpGet(getAllLoadableKC, {carNumber: this.carnumber}).then((res) => {
if (res.code == 200 && res.data && res.data.length) {
this.daizhangCar = res.data;
console.log(this.daizhangCar)
this.interdictBtn = false;
}
});
},
//获取当前时间以及电量
setNowTimes() {
let that = this;
//时间
let myDate = new Date();
let wk = myDate.getDay();
let yy = String(myDate.getFullYear());
let mm = String(
myDate.getMonth() + 1 < 10
? "0" + (myDate.getMonth() + 1)
: myDate.getMonth() + 1
);
let dd = String(
myDate.getDate() < 10 ? "0" + myDate.getDate() : myDate.getDate()
);
let hou = String(
myDate.getHours() < 10 ? "0" + myDate.getHours() : myDate.getHours()
);
let min = String(
myDate.getMinutes() < 10
? "0" + myDate.getMinutes()
: myDate.getMinutes()
);
let sec = String(
myDate.getSeconds() < 10
? "0" + myDate.getSeconds()
: myDate.getSeconds()
);
let weeks = [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
];
let week = weeks[wk];
this.currentTime =
yy + "-" + mm + "-" + dd + " " + hou + ":" + min + " " + week;
//电量
if(navigator.getBattery){
navigator.getBattery().then(function (battery) {
that.batteryEnegy = parseInt(battery.level * 100);
});
}
},
//获取该车位置并上传到后端
getCarLoaction1() {
let that = this;
if (navigator.geolocation) {
navigator.geolocation.watchPosition(
//locationSuccess 获取成功的话
function (position) {
let LoaObj1 = {};
let LoaObj1xy = {};
//判断该车是否在行驶状态
let drivingDistance = that.getDistanceIndex(
that.navigatorXY.y,
that.navigatorXY.x,
position.coords.latitude,
position.coords.longitude
);
if (drivingDistance <= 30 || drivingDistance >= 10000) {
that.leftBtnDisable = true;
} else {
that.leftBtnDisable = false;
}
if (drivingDistance >= 3) {
//地图视角跟随
// that.$refs.mars3dViewerMapMethod.changeView1(
// position.coords.latitude,
// position.coords.longitude
// );
}
LoaObj1xy.x = position.coords.longitude;
LoaObj1xy.y = position.coords.latitude;
that.navigatorXY.x = position.coords.longitude;
that.navigatorXY.y = position.coords.latitude;
LoaObj1.gndRate = "";
LoaObj1.location = LoaObj1xy;
LoaObj1.name = that.equipmentName;
LoaObj1.time = new Date().getTime();
let zuizhong1 = {};
zuizhong1.name = that.equipmentName;
zuizhong1.jsonObject = JSON.stringify(LoaObj1);
//上传坐标
httpPostForJson(
carRealTimeLocationQuery2,
JSON.stringify(LoaObj1)
).then((res2) => {
});
},
//locationError 获取失败的话
function (error) {
var errorType = [
"您拒绝共享位置信息",
"获取不到位置信息",
"获取位置信息超时",
];
console.log(errorType[error.code - 1]);
},
{
enableHighAccuracy: true,
maximumAge: 2000,
}
);
}
},
getCarLoaction2() {
let that = this;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function (position) {
let innerHTML='';
for (var key in position) {
innerHTML += key + '--'
}
that.$message({
message: innerHTML,
type: "warning",
});
},
function (error) {
var errorType = [
"您拒绝共享位置信息",
"获取不到位置信息",
"获取位置信息超时",
];
that.$message({
message: errorType[error.code - 1],
type: "warning",
});
},
{
enableHighAccuracy: true,
maximumAge: 3000,
}
);
}
},
getCarLoactionByGNSS(lat, lng, h, p) {
let that = this;
//上传过滤相对静止和明显漂移点
let coord = {
lng: lng,
lat: lat
};
that.geoTrailInfo.push({
coord: coord,
mkt: that.transformMercator(coord),
time: new Date().getTime()
});
if (that.geoTrailInfo.length >= 3) {
let [p1, p2, p3] = that.geoTrailInfo;
let forceUpload = new Date().getTime() - p1.time > 6000;
let d12 = Math.sqrt(Math.pow(p1.mkt.x - p2.mkt.x, 2) + Math.pow(p1.mkt.y - p2.mkt.y, 2));
let d23 = Math.sqrt(Math.pow(p3.mkt.x - p2.mkt.x, 2) + Math.pow(p3.mkt.y - p2.mkt.y, 2));
let d13 = Math.sqrt(Math.pow(p3.mkt.x - p1.mkt.x, 2) + Math.pow(p3.mkt.y - p1.mkt.y, 2));
//相对静止过滤
if (d12 < 2) {
that.geoTrailInfo = [p1, p3];
if (forceUpload) {
that.uploadCoord({
x: p3.coord.lng,
y: p3.coord.lat
});
}
return;
}
if (d23 < 2) {
that.geoTrailInfo = [p1, p2];
if (forceUpload) {
that.uploadCoord({
x: p2.coord.lng,
y: p2.coord.lat
});
}
return;
}
//轨迹过滤
if (d12 + d23 > d13 * 1.25) { //p2数据不在预计椭圆范围内不可靠,移除
that.geoTrailInfo = [p1, p3];
return;
}
that.geoTrailInfo = [p2, p3];
that.navigatorXY.x = p2.coord.lng;
that.navigatorXY.y = p2.coord.lat;
that.uploadCoord({
x: p2.coord.lng,
y: p2.coord.lat
});
}
},
//坐标上传
uploadCoord(coord) {
let that = this;
let LoaObj1 = {};
LoaObj1.gndRate = "";
LoaObj1.location = coord;
LoaObj1.name = that.equipmentName;
LoaObj1.time = new Date().getTime();
//上传坐标
httpPostForJson(carRealTimeLocationQuery2, JSON.stringify(LoaObj1)).then((res2) => {
});
},
//安全检查
safetyCheck(){
if (this.selectFunction != 1) {
this.$refs.securityReportMethod.loadData(this.carnumber, this.personalName ,this.submitReportFormId);
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
this.selectFunction = 1;
} else {
this.selectFunction = 0;
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
}
},
//接受派单
IntelligentDisFn() {
console.log(this.orderReceiving, "智能派单");
if (this.orderReceiving) {
this.orderReceiving = false;
this.$refs.startOrderReceivingMethod.zhinengpaidanFn(false);
} else {
this.orderReceiving = true;
this.$refs.startOrderReceivingMethod.zhinengpaidanFn(true);
}
},
//语音申请
voiceApFn(tishi) {
if (this.selectFunction != 2) {
this.$refs.securityReportMethod.viewClose();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
let byValue = this.carnumber;
this.$refs.voiceApplicationMethod.loadData(byValue, tishi);
this.selectFunction = 2;
} else {
this.selectFunction = 0;
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
}
},
//故障申报
failureDeFn() {
if (this.selectFunction != 3) {
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
this.$refs.failureDeclarationMethod.loadData(
this.carnumber,
this.personalName
);
this.selectFunction = 3;
} else {
this.selectFunction = 0;
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
}
},
//绩效统计
performanceStFn() {
if (this.selectFunction != 4) {
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
let byValue = this.personalName;
this.$refs.performanceStatisticsMethod.loadData(
byValue,
this.carnumber,
this.carclass
);
this.selectFunction = 4;
} else {
this.selectFunction = 0;
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
}
},
//车辆信息
carInFn() {
if (this.selectFunction != 5) {
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
let byValue = this.carnumber;
this.$refs.carInformationMethod.loadData(byValue, this.carclass);
this.selectFunction = 5;
} else {
this.selectFunction = 0;
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
}
},
//个人中心
personalCeFn() {
if (this.selectFunction != 6) {
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
let byValue = this.personalName;
this.$refs.personalCenterMethod.loadData(byValue, this.carnumber);
this.selectFunction = 6;
} else {
this.selectFunction = 0;
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
}
},
//车辆详情小窗口
smallWinFn(carNumber) {
if (this.selectFunction != 7) {
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.loadData(carNumber);
this.selectFunction = 7;
} else {
this.selectFunction = 0;
this.$refs.securityReportMethod.viewClose();
this.$refs.voiceApplicationMethod.voiceAppCloseFn();
this.$refs.failureDeclarationMethod.failureDeCloseFn();
this.$refs.performanceStatisticsMethod.achievementCloseFn();
this.$refs.carInformationMethod.carInCloseFn();
this.$refs.personalCenterMethod.personalCenCloseFn();
this.$refs.smallWindowMethod.carInCloseFn();
}
},
//完成装车
wanchengzhuangcheFn(number, id, odd) {
console.log(number, id, odd, "完成装车");
this.finishNum = number;
this.interdictBtn = true;
//改订单状态
httpGet(manualSchedulingQuery, {
sort: "createTime,desc",
size: 1,
carNo: number,
}).then((res) => {
if (res.code == 200) {
if (res.data.totalElements == 0) {
} else {
putForJson(manualSchedulingQuery, {
id: res.data.content[0].id,
status: 0,
}).then((res) => {
});
}
}
});
//查询Oredr接口,判断是智能调度还是人工调度从而进行车辆信息状态修改
httpGet(dingDanBiaoCaoZuo, {
carNo: number,
size: 1,
sort: "createTime,desc",
}).then((res) => {
if (res.code == 200) {
if (res.data.content[0].flag != 0) {
//车辆信息状态修改
httpGet(vehicleInformationQuery, {number: number}).then(
(res11) => {
if (res11.code == 200) {
putForJson(vehicleInformationUpdate, {
id: res11.data.content[0].id,
workStatus: 0,
weightStatus: 1,
oddStatus: 1,
}).then((res) => {
});
}
}
);
} else {
//车辆信息状态修改
httpGet(vehicleInformationQuery, {number: number}).then(
(res11) => {
if (res11.code == 200) {
putForJson(vehicleInformationUpdate, {
id: res11.data.content[0].id,
workStatus: 0,
weightStatus: 1,
}).then((res) => {
});
}
}
);
}
}
});
//智能调度是否完成
this.finishDispatch(number);
},
finishDispatch(number1) {
let that = this;
let number = number1 || this.finishNum;
//智能调度是否完成
httpGet(dispatchFinishQuery, {carno: number}).then((res) => {
if (res.code == 200) {
clearInterval(that.intervalWancheng);
console.log("智能调度是否完成");
//删除
httpDelForJson(dingDanBiaoCaoZuo, [id, this.carnumber, odd]).then(
(res) => {
this.loadData1();
}
);
return;
} else if (res.code == 401) {
this.$message({
message: "暂无卸区!",
type: "warning",
});
that.intervalWancheng = setTimeout(() => {
that.finishDispatch();
}, 5000);
return;
} else {
clearInterval(that.intervalWancheng);
console.log(res, "智能调度是否完成");
return;
}
});
},
//地图构造完成回调
onMapload(map) {
// 以下为演示代码
// 创建entity图层
const graphicLayer = new this.mars3d.layer.GraphicLayer();
map.addLayer(graphicLayer);
// 2.在layer上绑定监听事件
graphicLayer.on(this.mars3d.EventType.click, function (event) {
console.log("监听layer,单击了矢量对象", event);
});
graphicLayer.on(this.mars3d.EventType.mouseOver, function (event) {
console.log("监听layer,鼠标移入了矢量对象", event);
});
graphicLayer.on(this.mars3d.EventType.mouseOut, function (event) {
console.log("监听layer,鼠标移出了矢量对象", event);
});
// 可在图层上绑定popup,对所有加到这个图层的矢量数据都生效
graphicLayer.bindPopup("我是layer上绑定的Popup", {
anchor: [0, -10],
});
// 可在图层绑定右键菜单,对所有加到这个图层的矢量数据都生效
graphicLayer.bindContextMenu([
{
text: "删除对象",
iconCls: "fa fa-trash-o",
callback: function (e) {
const graphic = e.graphic;
if (graphic) {
graphicLayer.removeGraphic(graphic);
}
},
},
]);
},
//右下角的路障申报
failureDe1Fn() {
let that = this;
httpGet(vehicleInformationQuery, {number: that.carnumber}).then(
(res) => {
if (res.code == 200) {
if (
res.data.content[0].equipmentName == "" ||
!res.data.content[0].equipmentName
) {
this.$notify({
title: "暂无车辆位置,无法提交路障申报!",
type: "error",
duration: 2500,
});
} else {
httpGet(carRealTimeLocationQuery2, {
name: res.data.content[0].equipmentName,
}).then((res1) => {
if (res1.data) {
let lat = res1.data.location.y;
let lon = res1.data.location.x;
httpPostForJson(failureDeclarationAdd, {
fault: "路障申报",
lat: lat,
lon: lon,
carcode: that.carnumber,
}).then((res2) => {
if (res2.code == 200) {
this.$notify({
title: "路障申报成功!",
type: "success",
duration: 2500,
});
} else {
this.$notify({
title: res2.head.message,
type: "error",
duration: 2500,
});
}
});
httpPostForJson(faultDayAdd, {
fault: "路障申报",
lat: lat,
lon: lon,
carcode: that.carnumber,
}).then((res) => {
});
httpPostForJson(faultMonthAdd, {
fault: "路障申报",
lat: lat,
lon: lon,
carcode: that.carnumber,
}).then((res) => {
});
httpPostForJson(faultYearAdd, {
fault: "路障申报",
lat: lat,
lon: lon,
carcode: that.carnumber,
}).then((res) => {
});
} else {
this.$notify({
title: "暂无车辆位置,无法提交路障申报!",
type: "error",
duration: 2500,
});
}
});
}
}
}
);
},
//执行路径
zhixinglujing(boo, carnumber, carDestination) {
if (boo) {
httpGet(apiPathmapNavigationQuery, {
point: carDestination,
equipmentName: this.equipmentName,
}).then((res1) => {
if (res1.code == 200) {
let route1 = res1.data.split(";");
let route2 = [];
route1.forEach((item1, index1) => {
this.controlPointData.forEach((item2, index2) => {
if (item1 == item2.name) {
let obj1 = [];
obj1.push(parseFloat(item2.lon));
obj1.push(parseFloat(item2.lat));
obj1.push(500);
route2.push(obj1);
}
});
});
console.log(boo,route2,res1);
// this.$refs.mars3dViewerMapMethod.addArrowGraphic3(boo, route2);
}
});
} else {
// this.$refs.mars3dViewerMapMethod.addArrowGraphic3(boo);
}
},
//经纬度度分秒转换
dmsTransform(str){
let [a,b]=str.split('.');
let m = a.slice(-2);
let d = a.slice(0, -2);
return Number(d) + Number(m + '.' + b) / 60;
},
//wgs84->gcj02
wgs_gcj_encrypts(wgLat, wgLon) {
var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
var pi = 3.14159265358979324;
var a = 6378245.0;
var ee = 0.00669342162296594323;
var point = {};
function transformLon(x, y) {
var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;
return ret;
}
function transformLat(x, y) {
var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
return ret;
}
function outOfChina(lat, lon) {
if (lon < 72.004 || lon > 137.8347)
return true;
if (lat < 0.8293 || lat > 55.8271)
return true;
return false;
}
if (outOfChina(wgLat, wgLon)) {
point.lat = wgLat;
point.lng = wgLon;
return point;
}
var dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
var dLon = transformLon(wgLon - 105.0, wgLat - 35.0);
var radLat = wgLat / 180.0 * pi;
var magic = Math.sin(radLat);
magic = 1 - ee * magic * magic;
var sqrtMagic = Math.sqrt(magic);
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
var lat = wgLat + dLat;
var lon = wgLon + dLon;
point.lat = lat;
point.lon = lon;
return point;
},
//计算三点坐标夹角
findAngle(A, B, C) {
var AB = Math.sqrt(Math.pow(B.x - A.x, 2) + Math.pow(B.y - A.y, 2));
var BC = Math.sqrt(Math.pow(B.x - C.x, 2) + Math.pow(B.y - C.y, 2));
var AC = Math.sqrt(Math.pow(C.x - A.x, 2) + Math.pow(C.y - A.y, 2));
return Math.acos((BC * BC + AB * AB - AC * AC) / (2 * BC * AB)) * (180 / Math.PI);
},
//经纬度转墨卡托
transformMercator(poi) {
var mercator = {};
var earthRad = 6378137.0;
mercator.x = poi.lng * Math.PI / 180 * earthRad;
var a = poi.lat * Math.PI / 180;
mercator.y = earthRad / 2 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a)));
return mercator;
},
//根据两个经纬度计算距离
getDistanceIndex(lat1, lng1, lat2, lng2) {
var radLat1 = (lat1 * Math.PI) / 180.0;
var radLat2 = (lat2 * Math.PI) / 180.0;
var a = radLat1 - radLat2;
var b = (lng1 * Math.PI) / 180.0 - (lng2 * Math.PI) / 180.0;
var s =
2 *
Math.asin(
Math.sqrt(
Math.pow(Math.sin(a / 2), 2) +
Math.cos(radLat1) *
Math.cos(radLat2) *
Math.pow(Math.sin(b / 2), 2)
)
);
s = s * 6378.137; // EARTH_RADIUS;
s = (Math.round(s * 10000) / 10000) * 1000;
return s;
},
//获取语音数据
audioDataFn(arr) {
this.audioData = arr;
if (this.audioData.length == 0) {
this.audioTishiViewShow = false;
} else {
this.audioTishiViewShow = true;
}
},
//听语音
indexListeningFn(item) {
this.$refs.voiceApplicationMethod.selectSituationIndex(item);
},
//提示收到语音
tishishoudaoyuyinFn() {
this.indexSrcUrl = yuyintishi;
let au = document.getElementById("audioIndex");
au.currentTime = 0;
au.play();
},
//提示报警语音
audioBjFn(type, alarmArea) {
if(type == 1){
this.indexSrcUrl = confineIn;
let au = document.getElementById("audioIndex");
au.currentTime = 0;
au.play();
this.currArea = alarmArea;
}else if(type==2){
this.indexSrcUrl = confineOff;
let au = document.getElementById("audioIndex");
au.currentTime = 0;
au.play();
}
},
//返回语音url
fanhuiAudioUrl(url, loopAgain) {
let index = 0;
let audio = document.createElement("audio");
audio.currentTime = 0;
audio.src = url;
if (loopAgain) {
audio.addEventListener('ended', function () {
setTimeout(function () {
if (index < loopAgain) {
audio.play();
index++
}
}, 1500);
}, false);
}
audio.play();
},
//返回语音紧急通知
audioNoticePlay(url) {
this.indexSrcUrl = url;
let audio = document.getElementById("audioIndex");
audio.currentTime = 0;
const againFn = (e) => {
if (this.audioNotice) {
setTimeout(function () {
audio.play();
}, 3000);
} else {
audio.removeEventListener('ended', againFn, false);
}
}
audio.addEventListener('ended', againFn, false);
audio.play();
this.audioNotice = true;
},
audioNoticeStop() {
putForJson(changeJinJiReadStatus, {
carNumber: this.carnumber
}).then((res) => {
if(res.code===200){
if (res.data) {
this.audioNotice = false;
this.$message({
message: res.msg,
type: "success",
});
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
}else{
this.$message({
message: '网络异常请稍后再试',
type: "warning",
});
}
});
},
//删除语音
indexListeningDelFn(index) {
this.$refs.voiceApplicationMethod.selectDeleteSituation(index);
},
//获取当前时间
currentTimeFn() {
var date = new Date();
var year = date.getFullYear(); //年 ,从 Date 对象以四位数字返回年份
var month = date.getMonth() + 1; //月 ,从 Date 对象返回月份 (0 ~ 11) ,date.getMonth()比实际月份少 1 个月
var day = date.getDate(); //日 ,从 Date 对象返回一个月中的某一天 (1 ~ 31)
var hours = date.getHours(); //小时 ,返回 Date 对象的小时 (0 ~ 23)
var minutes = date.getMinutes(); //分钟 ,返回 Date 对象的分钟 (0 ~ 59)
var seconds = date.getSeconds(); //秒 ,返回 Date 对象的秒数 (0 ~ 59)
//修改月份格式
if (month >= 1 && month <= 9) {
month = "0" + month;
}
//修改日期格式
if (day >= 0 && day <= 9) {
day = "0" + day;
}
//修改小时格式
if (hours >= 0 && hours <= 9) {
hours = "0" + hours;
}
//修改分钟格式
if (minutes >= 0 && minutes <= 9) {
minutes = "0" + minutes;
}
//修改秒格式
if (seconds >= 0 && seconds <= 9) {
seconds = "0" + seconds;
}
//获取当前系统时间 格式(yyyy-mm-dd hh:mm:ss)
let currentFormatDate = year + "-" + month + "-" + day;
return currentFormatDate;
},
},
beforeDestroy() {
this.$refs.voiceApplicationMethod.xintiaoCloseFn();
this.$refs.startOrderReceivingMethod.dingshiqiCloseFn();
this.websocketcloseIndex();
if (this.zongTimer1) {
clearInterval(this.zongTimer1);
this.zongTimer1 = null;
}
if (this.zongTimer2) {
clearInterval(this.zongTimer2);
this.zongTimer2 = null;
}
},
};
</script>
<style scope>
.map-container {
width: 100%;
height: 100%;
}
@media screen and (max-width: 901px) {
.mapLogo1 {
position: absolute;
bottom: 1.5vh;
left: 1.5vw;
width: 10vw;
height: 4.6vh;
z-index: 1;
}
.indexSituation_fa1 {
flex: 0 0 auto;
color: #a6f6f9;
font-size: 12px;
width: 32%;
margin: 0px 0.3vh 1vh 0px;
height: 8vh;
border: 1px solid rgb(24, 228, 240);
border-radius: 5px;
display: flex;
justify-content: space-evenly;
align-items: center;
cursor: pointer;
position: relative;
}
.indexSituation_fa1 span {
font-size: 15px;
}
.audioTishiView {
width: 85vw;
height: 12vh;
background-color: rgba(74, 87, 123, 0.8);
position: absolute;
bottom: 0vh;
right: 0vw;
z-index: 1;
border-top-left-radius: 5px;
}
.audioTishiView_son1 {
padding-left: 0.5vw;
box-sizing: border-box;
height: 12vh;
width: 59%;
display: flex;
align-items: center;
overflow-x: scroll;
}
.daizhangCarBtn1 {
font-size: 13px;
height: 8vh;
width: 7vw;
text-align: center;
background-color: rgb(64, 158, 255);
color: white;
border: 0;
border-radius: 5px;
}
.ElectricQuantityStyle {
width: 75px;
height: 9vh;
}
.mianViews {
width: 100vw;
height: 100vh;
overflow: hidden;
}
.topViews {
position: absolute;
top: 0px;
z-index: 1;
width: 100vw;
height: 6vh;
background-color: rgb(29, 49, 81);
display: flex;
justify-content: space-between;
align-items: center;
padding: 0px 20px;
box-sizing: border-box;
}
.topTitle {
background-image: -webkit-linear-gradient(bottom, #59c8ff, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 16px;
letter-spacing: 4px;
font-weight: bold;
}
.topcontent {
display: flex;
align-items: center;
font-size: 16px;
font-weight: 600;
background-image: -webkit-linear-gradient(bottom, #59c8ff, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.centerViews {
position: absolute;
top: 0px;
left: 0px;
z-index: 2;
font-size: 12px;
font-weight: 600;
text-align: center;
}
.centerViewsTitle1 {
margin-top: 10.5vh;
background-image: -webkit-linear-gradient(bottom, #59c8ff, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.centerViewsTitle2 {
margin-top: 10.5vh;
color: gainsboro;
}
.IntelligentDis1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/zhinengpaidan1.png");
background-size: 100% 100%;
position: absolute;
top: 6.5vh;
left: 0.8vw;
cursor: pointer;
}
.IntelligentDis2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/zhinengpaidan2.png");
background-size: 100% 100%;
position: absolute;
top: 6.5vh;
left: 0.8vw;
cursor: pointer;
}
.voiceAp1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/yuyinshenping1.png");
background-size: 100% 100%;
position: absolute;
top: 22vh;
left: 0.8vw;
cursor: pointer;
}
.voiceAp2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/yuyinshenping2.png");
background-size: 100% 100%;
position: absolute;
top: 22vh;
left: 0.8vw;
cursor: pointer;
}
.failureDe1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/guzhangshenbao1.png");
background-size: 100% 100%;
position: absolute;
top: 37.5vh;
left: 0.8vw;
cursor: pointer;
}
.failureDe2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/guzhangshenbao2.png");
background-size: 100% 100%;
position: absolute;
top: 37.5vh;
left: 0.8vw;
cursor: pointer;
}
.performanceSt1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/jixiao1.png");
background-size: 100% 100%;
position: absolute;
top: 53vh;
left: 0.8vw;
cursor: pointer;
}
.performanceSt2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/jixiao2.png");
background-size: 100% 100%;
position: absolute;
top: 53vh;
left: 0.8vw;
cursor: pointer;
}
.carIn1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/cheliangxinxi1.png");
background-size: 100% 100%;
position: absolute;
top: 68.5vh;
left: 0.8vw;
cursor: pointer;
}
.carIn2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/cheliangxinxi2.png");
background-size: 100% 100%;
position: absolute;
top: 68.5vh;
left: 0.8vw;
cursor: pointer;
}
.personalCe1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/gerenzhongxin1.png");
background-size: 100% 100%;
position: absolute;
top: 84vh;
left: 0.8vw;
cursor: pointer;
}
.personalCe2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/gerenzhongxin2.png");
background-size: 100% 100%;
position: absolute;
top: 84vh;
left: 0.8vw;
cursor: pointer;
}
.roadblockStyle {
position: absolute;
z-index: 3;
right: 150px;
bottom: 2vh;
height: 8vh;
line-height: 8vh;
width: 15vw;
font-size: 15px;
text-align: center;
color: rgb(254, 210, 5);
background-color: rgb(26, 39, 83);
border-radius: 5px;
border: 1px solid lightskyblue;
opacity: 0.9;
cursor: pointer;
}
.dispatchCenterStyle {
z-index: 3;
position: absolute;
right: 10px;
bottom: 2vh;
height: 8vh;
line-height: 8vh;
width: 15vw;
font-size: 15px;
text-align: center;
color: rgb(14, 229, 226);
background-color: rgb(26, 39, 83);
border-radius: 5px;
border: 1px solid lightskyblue;
opacity: 0.9;
cursor: pointer;
}
.smallWindowStyle {
color: red;
font-size: 50px;
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.waitingtrucksView {
position: absolute;
right: 0px;
top: 8vh;
width: 25vw;
height: 80vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/juxingkaobei6_1.png");
background-size: 100% 100%;
z-index: 1;
padding: 10px 10px 0px;
box-sizing: border-box;
}
.waitingtrucksView_title {
font-size: 15px;
font-weight: 600;
text-align: center;
width: 100%;
background-image: -webkit-linear-gradient(bottom, #59c8ff, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.waitingtrucksView_content {
margin-top: 10px;
height: 67vh;
width: 100%;
overflow-y: auto;
}
.waitingtrucksView_content::-webkit-scrollbar {
/*滚动条整体样式*/
width: 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.waitingtrucksView_content::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 10px;
background-color: #274088;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
}
.waitingtrucksView_content::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
background: #ededed;
border-radius: 10px;
}
.waitingtrucksView_content > div {
color: rgb(254, 210, 5);
font-size: 14px;
margin-bottom: 15px;
display: flex;
align-items: center;
justify-content: space-between;
}
}
@media screen and (min-width: 901px) {
.mapLogo1 {
position: absolute;
bottom: 1.5vh;
left: 1.5vw;
width: 10vw;
height: 4.6vh;
z-index: 1;
}
.indexSituation_fa1 {
flex: 0 0 auto;
color: #a6f6f9;
font-size: 12px;
width: 32%;
margin: 0px 0.3vh 1vh 0px;
height: 8vh;
border: 1px solid rgb(24, 228, 240);
border-radius: 5px;
display: flex;
justify-content: space-evenly;
align-items: center;
cursor: pointer;
position: relative;
}
.indexSituation_fa1 span {
font-size: 15px;
}
.audioTishiView {
width: 85vw;
height: 12vh;
background-color: rgba(74, 87, 123, 0.8);
position: absolute;
bottom: 0vh;
right: 0vw;
z-index: 1;
border-top-left-radius: 5px;
}
.audioTishiView_son1 {
padding-left: 0.5vw;
box-sizing: border-box;
height: 12vh;
width: 59%;
display: flex;
align-items: center;
overflow-x: scroll;
}
.daizhangCarBtn1 {
font-size: 16px;
height: 6vh;
width: 7vw;
text-align: center;
background-color: rgb(64, 158, 255);
color: white;
border: 0px;
border-radius: 5px;
}
.ElectricQuantityStyle {
width: 75px;
height: 4.5vh;
}
.mapcontainer {
height: 100vh;
width: 100vw;
top: 0;
position: absolute;
overflow: hidden;
}
.mianViews {
width: 100vw;
height: 100vh;
overflow: hidden;
}
.topViews {
position: absolute;
top: 0px;
z-index: 1;
width: 100vw;
height: 6vh;
background-color: rgb(29, 49, 81);
display: flex;
justify-content: space-between;
align-items: center;
padding: 0px 20px;
box-sizing: border-box;
}
.topTitle {
background-image: -webkit-linear-gradient(bottom, #59c8ff, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 27px;
letter-spacing: 4px;
font-weight: bold;
}
.topcontent {
display: flex;
align-items: center;
font-size: 24px;
font-weight: 600;
background-image: -webkit-linear-gradient(bottom, #59c8ff, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.centerViews {
position: absolute;
top: 0px;
left: 0px;
z-index: 2;
font-size: 19px;
font-weight: 600;
text-align: center;
letter-spacing: 2px;
}
.centerViewsTitle1 {
margin-top: 10.5vh;
background-image: -webkit-linear-gradient(bottom, #59c8ff, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.centerViewsTitle2 {
margin-top: 10.5vh;
color: gainsboro;
}
.IntelligentDis1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/zhinengpaidan1.png");
background-size: 100% 100%;
position: absolute;
top: 6.5vh;
left: 0.8vw;
cursor: pointer;
}
.IntelligentDis2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/zhinengpaidan2.png");
background-size: 100% 100%;
position: absolute;
top: 6.5vh;
left: 0.8vw;
cursor: pointer;
}
.voiceAp1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/yuyinshenping1.png");
background-size: 100% 100%;
position: absolute;
top: 22vh;
left: 0.8vw;
cursor: pointer;
}
.voiceAp2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/yuyinshenping2.png");
background-size: 100% 100%;
position: absolute;
top: 22vh;
left: 0.8vw;
cursor: pointer;
}
.failureDe1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/guzhangshenbao1.png");
background-size: 100% 100%;
position: absolute;
top: 37.5vh;
left: 0.8vw;
cursor: pointer;
}
.failureDe2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/guzhangshenbao2.png");
background-size: 100% 100%;
position: absolute;
top: 37.5vh;
left: 0.8vw;
cursor: pointer;
}
.performanceSt1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/jixiao1.png");
background-size: 100% 100%;
position: absolute;
top: 53vh;
left: 0.8vw;
cursor: pointer;
}
.performanceSt2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/jixiao2.png");
background-size: 100% 100%;
position: absolute;
top: 53vh;
left: 0.8vw;
cursor: pointer;
}
.carIn1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/cheliangxinxi1.png");
background-size: 100% 100%;
position: absolute;
top: 68.5vh;
left: 0.8vw;
cursor: pointer;
}
.carIn2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/cheliangxinxi2.png");
background-size: 100% 100%;
position: absolute;
top: 68.5vh;
left: 0.8vw;
cursor: pointer;
}
.personalCe1 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/gerenzhongxin1.png");
background-size: 100% 100%;
position: absolute;
top: 84vh;
left: 0.8vw;
cursor: pointer;
}
.personalCe2 {
height: 15vh;
width: 16vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/gerenzhongxin2.png");
background-size: 100% 100%;
position: absolute;
top: 84vh;
left: 0.8vw;
cursor: pointer;
}
.roadblockStyle {
position: absolute;
z-index: 3;
right: 150px;
bottom: 2vh;
height: 5vh;
line-height: 5vh;
width: 130px;
font-size: 18px;
text-align: center;
color: rgb(254, 210, 5);
background-color: rgb(26, 39, 83);
border-radius: 5px;
border: 1px solid lightskyblue;
opacity: 0.9;
cursor: pointer;
}
.dispatchCenterStyle {
z-index: 3;
position: absolute;
right: 10px;
bottom: 2vh;
height: 5vh;
line-height: 5vh;
width: 130px;
font-size: 18px;
text-align: center;
color: rgb(14, 229, 226);
background-color: rgb(26, 39, 83);
border-radius: 5px;
border: 1px solid lightskyblue;
opacity: 0.9;
cursor: pointer;
}
.smallWindowStyle {
color: red;
font-size: 50px;
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.waitingtrucksView {
position: absolute;
right: 0px;
top: 8vh;
width: 25vw;
height: 80vh;
background: no-repeat center center url("~@/assets/images/truckTuPian/juxingkaobei6_1.png");
background-size: 100% 100%;
z-index: 1;
padding: 10px 10px 0px;
box-sizing: border-box;
}
.waitingtrucksView_title {
font-size: 26px;
font-weight: 600;
text-align: center;
width: 100%;
background-image: -webkit-linear-gradient(bottom, #59c8ff, #fafeff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.waitingtrucksView_content {
margin-top: 10px;
height: 70vh;
width: 100%;
overflow-y: auto;
}
.waitingtrucksView_content::-webkit-scrollbar {
/*滚动条整体样式*/
width: 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.waitingtrucksView_content::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 10px;
background-color: #274088;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0.2) 75%,
transparent 75%,
transparent
);
}
.waitingtrucksView_content::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
background: #ededed;
border-radius: 10px;
}
.waitingtrucksView_content > div {
color: rgb(254, 210, 5);
font-size: 19px;
margin-bottom: 15px;
display: flex;
align-items: center;
justify-content: space-between;
}
}
</style>
\ No newline at end of file
const webpack = require('webpack')
const path = require('path')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const cesiumSource = 'node_modules/mars3d-cesium/Build/Cesium/'
module.exports = {
publicPath: './', // 打包后的位置
outputDir: 'dist',//打包后的目录名称
assetsDir: './static', // 静态资源目录名称
productionSourceMap:false, //去掉打包的时候生成的map文件
lintOnSave: false, // 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码
devServer: {
// host: 'localhost',
host:'192.168.3.38',
port: 3002, // 端口号
open: true, // 配置自动启动浏览器
proxy: {
'/dianziweilan': {
// target: 'http://192.168.3.23:9092',//甘旭
target: 'http://8.143.203.103:9092'//服务器
},
'/auth': {
// target: 'http://192.168.3.23:9092',//甘旭
target: 'http://8.143.203.103:9092',
},
'/pic': {
// target: 'http://192.168.3.23/avatar',//甘旭
target: 'http://8.143.203.103/avatar/',
pathRewrite: { '^/pic': '' },
changeOrigin: true,
},
// '/dianziweilan': {
// target: 'http://120.224.103.84:9092'
// },
// '/auth': {
// target: 'http://120.224.103.84:9092',
// },
// '/pic': {
// target: 'http://120.224.103.84/avatar/',
// pathRewrite: { '^/pic': '' },
// changeOrigin: true,
// },
//获取会话号
// '/jiankong': {
// target: 'http://oa.gemho.cn:8088',
// changeOrigin: true,
// pathRewrite: {
// '^/jiankong': ''
// }
// },
},
// https: true,
},
// C:\Program Files\Common Files\Oracle\Java\javapath
configureWebpack: {
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"windows.jQuery": "jquery"
}),
new webpack.DefinePlugin({
CESIUM_BASE_URL: JSON.stringify('static')
}),
new CopyWebpackPlugin([{ from: path.join(cesiumSource, 'Workers'), to: 'static/Workers' }]),
new CopyWebpackPlugin([{ from: path.join(cesiumSource, 'Assets'), to: 'static/Assets' }]),
new CopyWebpackPlugin([{ from: path.join(cesiumSource, 'ThirdParty'), to: 'static/ThirdParty' }]),
new CopyWebpackPlugin([{ from: path.join(cesiumSource, 'Widgets'), to: 'static/Widgets' }])
],
// pluginOptions: {
// 'style-resources-loader': {
// preProcessor: 'sass',
// patterns: [
// path.resolve(__dirname, '@/assets/styles/*.scss') //你的.scss文件所在目录
// ]
// }
// },
module: {
unknownContextCritical: false,
unknownContextRegExp: /\/cesium\/cesium\/Source\/Core\/buildModuleUrl\.js/
}
},
// css的处理
css: {
// 当为true时,css文件名可省略 module 默认为 false
modules: false,
// 是否将组件中的 CSS 提取至一个独立的 CSS 文件中,当作为一个库构建时,你也可以将其设置为 false 免得用户自己导入 CSS
// 默认生产环境下是 true,开发环境下是 false
extract: false,
// 是否为 CSS 开启 source map。设置为 true 之后可能会影响构建的性能
sourceMap: false,
//向 CSS 相关的 loader 传递选项(支持 css-loader postcss-loader sass-loader less-loader stylus-loader)
loaderOptions: {
css: {},
less: {}
}
},
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment