引入海康威视插件

This commit is contained in:
zhoumengru
2025-09-11 16:14:55 +08:00
parent 671dd9fec7
commit e995c25fd2
57 changed files with 11735 additions and 2304 deletions

View File

@@ -1,12 +0,0 @@
module.exports = {
plugins: [
[
'import',
{
libraryName: 'ant-design-vue',
libraryDirectory: 'es',
style: true // 或 true使用 less
}
]
]
}

72
web/components.d.ts vendored Normal file
View File

@@ -0,0 +1,72 @@
/* eslint-disable */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
// biome-ignore lint: disable
export {}
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
AButton: typeof import('ant-design-vue/es')['Button']
ACard: typeof import('ant-design-vue/es')['Card']
ACascader: typeof import('ant-design-vue/es')['Cascader']
ACheckbox: typeof import('ant-design-vue/es')['Checkbox']
AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider']
ADatePicker: typeof import('ant-design-vue/es')['DatePicker']
AForm: typeof import('ant-design-vue/es')['Form']
AFormItem: typeof import('ant-design-vue/es')['FormItem']
AImage: typeof import('ant-design-vue/es')['Image']
AInput: typeof import('ant-design-vue/es')['Input']
AInputNumber: typeof import('ant-design-vue/es')['InputNumber']
AInputPassword: typeof import('ant-design-vue/es')['InputPassword']
Alarm: typeof import('./src/components/Home/Alarm.vue')['default']
AModal: typeof import('ant-design-vue/es')['Modal']
APagination: typeof import('ant-design-vue/es')['Pagination']
ARadio: typeof import('ant-design-vue/es')['Radio']
ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup']
ARangePicker: typeof import('ant-design-vue/es')['RangePicker']
ASelect: typeof import('ant-design-vue/es')['Select']
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
ASwitch: typeof import('ant-design-vue/es')['Switch']
ATable: typeof import('ant-design-vue/es')['Table']
ATag: typeof import('ant-design-vue/es')['Tag']
ATextarea: typeof import('ant-design-vue/es')['Textarea']
ATimePicker: typeof import('ant-design-vue/es')['TimePicker']
ATimeRangePicker: typeof import('ant-design-vue/es')['TimeRangePicker']
ATooltip: typeof import('ant-design-vue/es')['Tooltip']
ATreeSelect: typeof import('ant-design-vue/es')['TreeSelect']
Charge: typeof import('./src/components/Home/Charge.vue')['default']
ComTable: typeof import('./src/components/ComTable.vue')['default']
DetailInfo: typeof import('./src/components/DetailInfo.vue')['default']
Device: typeof import('./src/components/monitor/device.vue')['default']
DisCharge: typeof import('./src/components/Home/Modal/DisCharge.vue')['default']
EditCom: typeof import('./src/components/EditCom.vue')['default']
Energy: typeof import('./src/components/Home/Energy.vue')['default']
EnergyEchart: typeof import('./src/components/statisticalAnalysis/energyEchart.vue')['default']
EnvInfo: typeof import('./src/components/Home/Modal/EnvInfo.vue')['default']
Haikang: typeof import('./src/components/monitor/haikang.vue')['default']
LockOutlined: typeof import('@ant-design/icons-vue')['LockOutlined']
Map: typeof import('./src/components/Home/Map.vue')['default']
Map_tianditu: typeof import('./src/components/Home/Map_tianditu.vue')['default']
Modal: typeof import('./src/components/Home/Modal.vue')['default']
OnLine: typeof import('./src/components/Home/onLine.vue')['default']
OperateCom: typeof import('./src/components/OperateCom.vue')['default']
Operational: typeof import('./src/components/Home/Operational.vue')['default']
OperationalInfo: typeof import('./src/components/Home/Modal/OperationalInfo.vue')['default']
PolicyForm: typeof import('./src/components/system/policyForm.vue')['default']
'PolicyForm copy': typeof import('./src/components/system/policyForm copy.vue')['default']
PredictEcharts: typeof import('./src/components/predict/predictEcharts.vue')['default']
PrefabCabin: typeof import('./src/components/Home/Modal/PrefabCabin.vue')['default']
Pv: typeof import('./src/components/Home/Pv.vue')['default']
Revenue: typeof import('./src/components/Home/Modal/Revenue.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
SearchBox: typeof import('./src/components/SearchBox.vue')['default']
StatisticalInfo: typeof import('./src/components/Home/Modal/StatisticalInfo.vue')['default']
TreeTable: typeof import('./src/components/TreeTable.vue')['default']
UserOutlined: typeof import('@ant-design/icons-vue')['UserOutlined']
Utilization: typeof import('./src/components/Home/Modal/Utilization.vue')['default']
Videos: typeof import('./src/components/monitor/videos.vue')['default']
}
}

2537
web/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -14,10 +14,10 @@
"core-js": "^3.8.3",
"echarts": "^6.0.0",
"moment": "^2.30.1",
"qs": "^6.12.3",
"vue": "^3.2.13",
"vue-router": "^4.0.3",
"vuex": "^4.0.0",
"qs": "^6.12.3"
"vuex": "^4.0.0"
},
"devDependencies": {
"@babel/core": "^7.12.16",
@@ -34,13 +34,16 @@
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-vue": "^8.7.1",
"less": "^4.4.1",
"less-loader": "^12.3.0",
"prettier": "^2.8.8",
"sass": "^1.32.7",
"sass-loader": "^12.0.0",
"unplugin-vue-components": "^29.0.0",
"vue-eslint-parser": "^10.2.0",
"vue-tianditu": "^2.7.6",
"webpack-cli": "^6.0.1",
"webpack-dev-server": "^5.2.2",
"vue-tianditu": "^2.7.6"
"webpack-dev-server": "^5.2.2"
},
"eslintConfig": {
"root": true,

View File

@@ -0,0 +1,621 @@
(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() {}
};
}());

View File

@@ -0,0 +1,106 @@
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}();

View File

@@ -0,0 +1,35 @@
/*
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)})();

View File

@@ -0,0 +1,111 @@
define(function(require, exports, module) {
var _oCommon, _oUtils, _oBase64;
require("websdk");
_oCommon = require("common");
_oUtils = require("utils");
_oBase64 = require("base64");
function EncryptionFac () {}
EncryptionFac.prototype.encrypt = function (oStr, iRSABits, bBase64Encrypted, cbFun) {
//var that = this;
var iBits = 1024;
if (iRSABits) {
iBits = iRSABits;
}
var szPassPhrase = new Date() + "",
szMattsRSAkey = cryptico.generateRSAKey(szPassPhrase, iBits),
szPublicKeyString = cryptico.publicKeyString(szMattsRSAkey),
szXml = "<?xml version='1.0' encoding='UTF-8'?><PublicKey><key>" + _oBase64.encode(szPublicKeyString) + "</key></PublicKey>",
oXmlDoc = _oUtils.parseXmlFromStr(szXml);
WebSDK.WSDK_Request(_oCommon.m_szHostName, _oCommon.m_iHttpProtocal, _oCommon.m_iHttpPort, {
cmd: "challenge",
type: "POST",
data: oXmlDoc,
success: function (status, xmlDoc) {
var szDecryptionResult = cryptico.decrypt(_oBase64.decode(_oUtils.nodeValue(xmlDoc, "key")), szMattsRSAkey);
if(szDecryptionResult.plaintext != null) {
var szKey,szEncryptPassword;
var aResult = [];
if (iBits === 256) {
szKey = _oUtils.toHex(szDecryptionResult.plaintext);
} else {
szKey = szDecryptionResult.plaintext;
}
szEncryptPassword = aes_encrypt(szDecryptionResult.plaintext.substring(0, 16), szKey, true);
if("function" === typeof cbFun) {
if("string" === typeof oStr) {
bBase64Encrypted && ( oStr = _oBase64.encode(oStr) );
cbFun( _oBase64.encode( szEncryptPassword + _oUtils.encodeAES(oStr, szKey, "", "ecb") ) );
} else if("[object Array]" === Object.prototype.toString.call(oStr)) {
for(var i = 0, iArrayLen = oStr.length; i < iArrayLen; i++) {
bBase64Encrypted && ( oStr[i] = _oBase64.encode(oStr[i]) );
var szTemp = szEncryptPassword + _oUtils.encodeAES(oStr[i], szKey, "", "ecb");
aResult.push( _oBase64.encode(szTemp) );
}
cbFun(aResult);
}
}
}
}
});
};
EncryptionFac.prototype.encryptSync = function (oStr, iRSABits, bBase64Encrypted) {
//var that = this;
var iBits = 1024;
var aResult = [];
if (iRSABits) {
iBits = iRSABits;
}
var szPassPhrase = new Date() + "",
szMattsRSAkey = cryptico.generateRSAKey(szPassPhrase, iBits),
szPublicKeyString = cryptico.publicKeyString(szMattsRSAkey),
szXml = "<?xml version='1.0' encoding='UTF-8'?><PublicKey><key>" + _oBase64.encode(szPublicKeyString) + "</key></PublicKey>",
oXmlDoc = _oUtils.parseXmlFromStr(szXml);
WebSDK.WSDK_Request(_oCommon.m_szHostName, _oCommon.m_iHttpProtocal, _oCommon.m_iHttpPort, {
cmd: "challenge",
type: "POST",
async: false,
data: oXmlDoc,
success: function (status, xmlDoc) {
var szDecryptionResult = cryptico.decrypt(_oBase64.decode(_oUtils.nodeValue(xmlDoc, "key")), szMattsRSAkey);
if(szDecryptionResult.plaintext != null) {
var szKey, szEncryptPassword;
if (iBits === 256) {
szKey = _oUtils.toHex(szDecryptionResult.plaintext);
} else {
szKey = szDecryptionResult.plaintext;
}
szEncryptPassword = aes_encrypt(szDecryptionResult.plaintext.substring(0, 16), szKey, true);
if("string" === typeof oStr) {
bBase64Encrypted && ( oStr = _oBase64.encode(oStr) );
aResult.push( _oBase64.encode( szEncryptPassword + _oUtils.encodeAES(oStr, szKey, "", "ecb") ) );
} else {
for(var i = 0, iArrayLen = oStr.length; i < iArrayLen; i++) {
bBase64Encrypted && ( oStr[i] = _oBase64.encode(oStr[i]) );
var szTemp = szEncryptPassword + _oUtils.encodeAES(oStr[i], szKey, "", "ecb");
aResult.push( _oBase64.encode(szTemp) );
}
}
}
}
});
if("string" === typeof oStr) {
return aResult[0];
} else {
return aResult;
}
};
module.exports = new EncryptionFac();
});

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -0,0 +1,87 @@
importScripts('AudioAMER.js');
let channelNum = 2; // 通道数需求上只需要2通道不用改
let sampleRate = 32000; // 采样率支持8K/16K/32K/48K
let bitsPerSample = 16; // 采样精度支持16/32
let dataLen = 320; // 一帧数据长度采样点数320个16位采样点即640B支持4/8/10/16/20/24/30/32/40ms
// self.JSAudioCodecModule['onRuntimeInitialized'] = function () {
// JSAudioCodecModule().then(instance => {
// AudioModule = instance;
// });
// postMessage({type: "loaded"});
// };
JSAudioCodecModule().then(instance => {
AudioModule = instance;
postMessage({type: "loaded"});
});
onmessage = function (e) {
let data = e.data;
if ("create" === data.type) {
let size = AudioModule._malloc(4);
let alignment = AudioModule._malloc(4);
if (size === null || alignment === null) {
console.log("inputdata malloc failed!!!");
return -1;
}
channelNum = data.channelNum;
sampleRate = data.sampleRate;
bitsPerSample = data.bitsPerSample;
dataLen = data.dataLen;
let iRet = AudioModule._JSHIK_AMER_GetMemSize(channelNum, sampleRate, bitsPerSample, dataLen, size, alignment);
if (iRet !== 1) {
console.log("_CreatHandle failed!" + iRet);
} else {
let sizeOut = AudioModule.getValue(size, "i32");
let alignmentOut = AudioModule.getValue(alignment, "i32");
iRet = AudioModule._JSHIK_AMER_Create(channelNum, sampleRate, bitsPerSample, dataLen, sizeOut, alignmentOut);
console.log("Create_res:" + iRet);
postMessage({type: "created"});
}
if (size !== null) {
AudioModule._free(size);
size = null;
}
if (alignment !== null) {
AudioModule._free(alignment);
alignment = null;
}
} else if ("inputData" === data.type) {
let inputSize = dataLen * 2;//dataLen为320inputSize应该是 320 * 2 = 640
let pInputData1 = AudioModule._malloc(inputSize);
let pInputData2 = AudioModule._malloc(inputSize);
let pOutputData1 = AudioModule._malloc(inputSize);
let pOutputData2 = AudioModule._malloc(inputSize);
let pOutputData3 = AudioModule._malloc(inputSize);
if (pInputData1 === null || pInputData2 === null || pOutputData1 === null || pOutputData2 === null || pOutputData3 === null) {
console.log("inputdata or outputData malloc failed!!!");
return -1;
}
let inputData1 = new Uint8Array(data.buf1);
let inputData2 = new Uint8Array(data.buf2);
AudioModule.writeArrayToMemory(inputData1, pInputData1);
AudioModule.writeArrayToMemory(inputData2, pInputData2);
inputData1 = null;
inputData2 = null;
// 开始处理
let res = AudioModule._JSHIK_AMER_Process(pInputData1, pInputData2, pOutputData1, pOutputData2, pOutputData3, parseInt(inputSize / 2, 10));
if (res === 1) {
let aOutputData = new Uint8Array(inputSize);
aOutputData.set(AudioModule.HEAPU8.subarray(pOutputData3, pOutputData3 + inputSize)); // 必须取pOutputData3的数据
// postMessage({ type: "outputData", buf: aOutputData}, [aOutputData]);
postMessage({ type: "outputData", dType: 1, buf: aOutputData.buffer}, [aOutputData.buffer]);
}
AudioModule._free(pInputData1);
AudioModule._free(pInputData2);
AudioModule._free(pOutputData1);
AudioModule._free(pOutputData2);
AudioModule._free(pOutputData3);
} else if ("release" === data.type) {
//奇怪,到时和研究院确认一下,库为什么不提供释放资源或者停止的接口??
close();
}
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";var Module={};var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}JSPlayerModule(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";var Module={};var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}JSPlayerModule(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -0,0 +1 @@
"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}JSAudioInterComModule(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;

View File

@@ -0,0 +1,881 @@
/* eslint-disable no-cond-assign */
var bindAsEventListener = function (object, fun) {
var args = Array.prototype.slice.call(arguments).slice(2);
return function (event) {
return fun.apply(object, [event || window.event].concat(args));
};
};
/*
Function: bind
Description: 绑定对象到函数
Input: object 对象, fun 函数
Output: 无
return: 关联后的函数
*************************************************/
var bind = function (object, fun) {
return function () {
return fun.apply(object, arguments);
};
};
/*
Function: addEventHandler
Description: 添加事件
Input: oTarget 目标对象, sEventType 事件, fnHandler 函数
Output: 无
return: 无
*************************************************/
var addEventHandler = function (oTarget, sEventType, fnHandler) {
oTarget["on" + sEventType] = fnHandler;
};
var removeEventHandler = function (oTarget, sEventType) {
oTarget["on" + sEventType] = null;
};
/*
Function: getObjLeft
Description: 获取对象相对网页的左上角坐标
Input: obj 对象
Output: 无
return: 坐标
*************************************************/
function getObjLeft(obj) {
var x = obj.offsetLeft;
while (obj = obj.offsetParent) {
x += obj.offsetLeft;
}
return x;
}
/*
Function: getObjTop
Description: 获取对象相对网页的左上角坐标
Input: obj 对象
Output: 无
return: 坐标
*************************************************/
function getObjTop(obj) {
var y = obj.offsetTop;
while (obj = obj.offsetParent) {
y += obj.offsetTop;
}
return y;
}
/*
* Class ScaleInfo
* @version v1.0
* @function 工具类,时间刻度信息
*************************************************/
function ScaleInfo(x, y, iSeconds) {
this.m_ix = x;
this.m_iy = y;
this.m_ixMin = 0;
this.m_ixMax = 0;
this.m_iHour = parseInt(iSeconds / 3600, 10);
this.m_iMinute = parseInt(iSeconds % 3600 / 60, 10);
this.m_iSecond = parseInt(iSeconds % 3600 % 60, 10);
this.m_szTime = "";
if (this.m_iHour < 10 && this.m_iMinute < 10) {
this.m_szTime = "0" + this.m_iHour + ":0" + this.m_iMinute;
} else if (this.m_iHour < 10 && this.m_iMinute >= 10) {
this.m_szTime = "0" + this.m_iHour + ":" + this.m_iMinute;
} else if (this.m_iHour >= 10 && this.m_iMinute >= 10) {
this.m_szTime = "" + this.m_iHour + ":" + this.m_iMinute;
} else {
this.m_szTime = "" + this.m_iHour + ":0" + this.m_iMinute;
}
}
/*
Function: setPos
Description: 设置刻度的位置
Input: x 横坐标, y 纵坐标
Output: 无
return: 无
*************************************************/
ScaleInfo.prototype.setPos = function (x, y) {
// this.x = x;
if (x < this.m_ixMin) {
x = this.m_ixMax - (this.m_ixMin - x);
} else if (x > this.m_ixMax) {
x = this.m_ixMin + (x - this.m_ixMax);
}
this.m_ix = x;
this.m_iy = y;
};
/*
Function: setPosRange
Description: 设置刻度显示的范围
Input: ixMin 最小横坐标, ixMax 最大横坐标
Output: 无
return: 无
*************************************************/
ScaleInfo.prototype.setPosRange = function (ixMin, ixMax) {
this.m_ixMin = ixMin;
this.m_ixMax = ixMax;
};
/*
Function: isInRange
Description: 是否在范围内
Input: ixMin 最小横坐标, ixMax 最大横坐标
Output: 无
return: bool
*************************************************/
ScaleInfo.prototype.isInRange = function (iMin, iMax) {
if (this.m_ix >= iMin && this.m_ix <= iMax) {
return true;
}
return false;
};
/*
Function: update
Description: 更新刻度时间
Input: iSeconds
Output: 无
return: 无
*************************************************/
ScaleInfo.prototype.update = function (iSeconds) {
this.m_iHour = parseInt(iSeconds / 3600, 10);
this.m_iMinute = parseInt(iSeconds % 3600 / 60, 10);
this.m_iSecond = parseInt(iSeconds % 3600 % 60, 10);
if (this.m_iHour < 10 && this.m_iMinute < 10) {
this.m_szTime = "0" + this.m_iHour + ":0" + this.m_iMinute;
} else if (this.m_iHour < 10 && this.m_iMinute >= 10) {
this.m_szTime = "0" + this.m_iHour + ":" + this.m_iMinute;
} else if (this.m_iHour >= 10 && this.m_iMinute >= 10) {
this.m_szTime = "" + this.m_iHour + ":" + this.m_iMinute;
} else {
this.m_szTime = "" + this.m_iHour + ":0" + this.m_iMinute;
}
};
/*
* Class Time
* @version v1.0
* @function 工具类,时间相关信息
*************************************************/
function Time() {
var tCurrentTime = new Date();
this.m_iYear = tCurrentTime.getFullYear();
this.m_iMonth = tCurrentTime.getMonth() + 1;
this.m_iDay = tCurrentTime.getDate();
this.m_iHour = tCurrentTime.getHours();
this.m_iMinute = tCurrentTime.getMinutes();
this.m_iSecond = tCurrentTime.getSeconds();
this.m_iMilliseconds = tCurrentTime.getTime();//返回 1970 年 1 月 1 日至今的毫秒数
}
/*
Function: setTimeByMis
Description: 设置时间
Input: iMilliseconds: 1970 年 1 月 1 日至今的毫秒数
Output: 无
return: 无
*************************************************/
Time.prototype.setTimeByMis = function (iMilliseconds) {
var tSetTime = new Date(iMilliseconds);
this.m_iYear = tSetTime.getFullYear();
this.m_iMonth = tSetTime.getMonth() + 1;
this.m_iDay = tSetTime.getDate();
this.m_iHour = tSetTime.getHours();
this.m_iMinute = tSetTime.getMinutes();
this.m_iSecond = tSetTime.getSeconds();
this.m_iMilliseconds = iMilliseconds;
};
/*
Function: getStringTime
Description: 获取时间字符串
Input: 无
Output: 无
return: string yyyy-MM-dd HH:mm:ss
*************************************************/
Time.prototype.getStringTime = function () {
var szYear = "" + this.m_iYear;
var szMonth;
if (this.m_iMonth < 10) {
szMonth = "0" + this.m_iMonth;
} else {
szMonth = "" + this.m_iMonth;
}
var szDay;
if (this.m_iDay < 10) {
szDay = "0" + this.m_iDay;
} else {
szDay = "" + this.m_iDay;
}
var szHour;
if (this.m_iHour < 10) {
szHour = "0" + this.m_iHour;
} else {
szHour = "" + this.m_iHour;
}
var szMinute;
if (this.m_iMinute < 10) {
szMinute = "0" + this.m_iMinute;
} else {
szMinute = "" + this.m_iMinute;
}
var szSecond;
if (this.m_iSecond < 10) {
szSecond = "0" + this.m_iSecond;
} else {
szSecond = "" + this.m_iSecond;
}
var szCurrentTime = szYear + "-" + szMonth + "-" + szDay + " " + szHour + ":" + szMinute + ":" + szSecond;
return szCurrentTime;
};
/*
Function: parseTime
Description: 通过时间字符串设置时间
Input: szTime 时间 yyyy-MM-dd HH:mm:ss
Output: 无
return: 无
*************************************************/
Time.prototype.parseTime = function (szTime) {
var aDate = szTime.split(' ')[0].split('-');
var aTime = szTime.split(' ')[1].split(':');
this.m_iYear = parseInt(aDate[0], 10);
this.m_iMonth = parseInt(aDate[1], 10);
this.m_iDay = parseInt(aDate[2], 10);
this.m_iHour = parseInt(aTime[0], 10);
this.m_iMinute = parseInt(aTime[1], 10);
this.m_iSecond = parseInt(aTime[2], 10);
var tTime = new Date();
tTime.setFullYear(this.m_iYear);
tTime.setMonth(this.m_iMonth - 1, this.m_iDay);
tTime.setHours(this.m_iHour);
tTime.setMinutes(this.m_iMinute);
tTime.setSeconds(this.m_iSecond);
this.m_iMilliseconds = tTime.getTime();
};
/*
* Class FileInfo
* @version v1.0
* @function 工具类,录像文件相关信息
*************************************************/
function FileInfo(iX, iY, iWidth, iHeight, iType, cColor, tStartTime, tStopTime) {
this.m_iX = iX;
this.m_ixMin = 0;
this.m_ixMax = 0;
this.m_iY = iY;
this.m_iWidth = iWidth;
this.m_iHeight = iHeight;
this.m_cColor = cColor;
this.m_iType = iType;
this.m_tStartTime = tStartTime;
this.m_tStopTime = tStopTime;
}
/*
Function: isInRange
Description: 是否在范围之内
Input: left 左起始点 right 右终点
Output: 无
return: 无
*************************************************/
FileInfo.prototype.isInRange = function (left, right) {
if ((this.m_iX + this.m_iWidth) <= left || this.m_iX >= right) {
return false;
}
return true;
};
/*
Function: setPos
Description: 设置位置内
Input: iX iY左起始点坐标 iWidth 宽度 iHeight高度
Output: 无
return: 无
*************************************************/
FileInfo.prototype.setPos = function (iX, iY, iWidth, iHeight) {
this.m_iX = iX;
this.m_iWidth = iWidth;
this.m_iY = iY;
this.m_iHeight = iHeight;
};
/*
Function: setPosRange
Description: 设置范围
Input: ixMin, ixMax
Output: 无
return: 无
*************************************************/
FileInfo.prototype.setPosRange = function (ixMin, ixMax) {
this.m_ixMin = ixMin;
this.m_ixMax = ixMax;
};
/*
Function: draw
Description: 画文件信息
Input: g 设备资源
Output: 无
return: 无
*************************************************/
FileInfo.prototype.draw = function (g) {
if (this.isInRange(this.m_ixMin, this.m_ixMax)) {
var colorOld = g.fillStyle;
g.fillStyle = this.m_cColor;
if ((this.m_iX >= this.m_ixMin) && (this.m_iX + this.m_iWidth) <= this.m_ixMax) {
g.fillRect(this.m_iX, this.m_iY, this.m_iWidth, this.m_iHeight);
} else if ((this.m_iX < this.m_ixMax) && ((this.m_iX + this.m_iWidth) > this.m_ixMax)) {
g.fillRect(this.m_iX, this.m_iY, this.m_ixMax - this.m_iX, this.m_iHeight);
} else {
g.fillRect(this.m_ixMin, this.m_iY, (this.m_iX + this.m_iWidth) - this.m_ixMin, this.m_iHeight);
}
g.fillStyle = colorOld;
}
};
/*
* Class TimeBar
* @version v1.0
* @function 工具类,时间条
*************************************************/
function TimeBar(canvas, iWidth, iHeight, options) {
canvas.width = iWidth || 300;
canvas.height = iHeight || 50;
this.m_canvas = canvas;
this.m_ctx = canvas.getContext("2d");
this.m_iMinFileWidth = 1; //文件的最小宽度
let backgroundColor = 'rgb(0, 0, 0)'; //时间条背景颜色
let partLineColor = 'rgb(0,0,0)'; //分割线颜色
let timeScaleColor = 'rgb(150, 250, 150)'; //时间条刻度颜色
let middleLineColor = 'rgb(0, 250, 0)'; //中轴线颜色
let middleLineTimeColor = 'rgb(0, 250, 0)'; //中轴时间颜色
if (options) {
if (options.backgroundColor) {
backgroundColor = options.backgroundColor;
}
if (options.partLineColor) {
partLineColor = options.partLineColor;
}
if (options.timeScaleColor) {
timeScaleColor = options.timeScaleColor;
}
if (options.middleLineColor) {
middleLineColor = options.middleLineColor;
}
if (options.middleLineTimeColor) {
middleLineTimeColor = options.middleLineTimeColor;
}
}
this.backgroundColor = backgroundColor; //时间条背景颜色
this.partLineColor = partLineColor; //分割线颜色
this.channelNameColor = 'rgb(150, 150, 150)'; //通道名称颜色
this.timeScaleColor = timeScaleColor; //时间条刻度颜色
this.middleLineColor = middleLineColor; //中轴线颜色
this.middleLineTimeColor = middleLineTimeColor; //中轴时间颜色
this.defaultFileColor = 'rgb(0, 255, 0)'; //默认录像类型颜色
this.cmdFileColor = 'rgb(21, 184, 155)'; //命令触发录像颜色
this.scheFileColor = 'rgb(33, 150, 243)'; //录像计划颜色
this.alarmFileColor = 'rgb(255, 104, 66)'; //警告录像颜色
this.manualFileColor = 'rgb(247, 199, 5)'; //手动录像颜色
this.anrFileColor = 'rgb(138, 146, 153)'; //回传录像颜色
this.m_fMidTimeFont = '14px Verdana'; //中线时间字体及大小
this.m_fCurTimeFont = 'bold 12px Arial'; //鼠标当前时间字体及大小
this.m_fScaleFont = 'bold 10px Arial'; //刻度字体及大小 sans-serif
this.m_fChannelNameFont = '14px Verdana'; //通道名称字体
canvas.style.backgroundColor = this.backgroundColor;
this.m_szCurChannelName = ''; //当前通道名称
this.m_fCellTime = parseFloat(2.0); //每个代表几个小时
this.ScaleInfo = [];
this.ScaleInfoNum = parseInt(24 / this.m_fCellTime, 10); //总的刻度数量
this.ScaleInfoDisNum = 12; //显示的刻度数量
//初始化刻度
for (var i = 0; i < this.ScaleInfoNum; i++) {
this.ScaleInfo.push(new ScaleInfo(0, 0, parseInt(i * 3600 * this.m_fCellTime, 10)));
}
this.m_iMaxWndNum = 16; //最大窗口数
this.m_iSelWnd = 0; //选中的窗口号
this.FileInfoSet = new Array(this.m_iMaxWndNum); //文件信息集合
//初始化文件信息集合
for (i = 0; i < this.m_iMaxWndNum; i++) {
this.FileInfoSet[i] = [];
}
this.m_iHeight = parseInt(canvas.height, 10);
this.m_iWidth = parseInt(canvas.width, 10);
this.m_iFileListStartPos = 0; // 文件列表起始位置
this.m_iBlankHeight = 4; // 中间及底边空白高度
this.m_iTimeRectHeight = 30; //parseInt(this.m_iHeight * 4 / 7) 时间块的高度
this.m_iFileRectHeight = this.m_iHeight - this.m_iTimeRectHeight - this.m_iBlankHeight; //文件块的高度
this.m_iMiddleLinePos = parseInt((this.m_iFileListStartPos + this.m_iWidth) / 2, 10); //中轴线的位置
this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum); //每个像素的秒数
this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10); //每个像素的毫秒数
this.m_tCurrentMidTime = new Time(); //当前中轴线的时间
this.m_ctx.font = this.m_fMidTimeFont;
this.m_iTextWidth = this.m_ctx.measureText(this.m_tCurrentMidTime.getStringTime()).width;
this.m_tMouseCurTime = new Time(); //当前鼠标点的时间
this.m_ctx.font = this.m_fCurTimeFont;
this.m_iCurTextWidth = this.m_ctx.measureText(this.m_tMouseCurTime.getStringTime()).width;
this.m_iCanvasLeft = getObjLeft(this.m_canvas);
this.m_iCanvasTop = getObjTop(this.m_canvas);
//初始化时间刻度信息
for (i = 0; i < this.ScaleInfoNum; i++) {
// 计算与中轴线的时间差(只计算时分秒)
var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
// 设置刻度位置范围
this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
}
//注册消息响应
this.m_ieventX = 0;
this.m_iMousePosX = 0;
this.m_bMouseDown = false;
this.m_bMouseOver = false;
this.m_iMove = 0;
this.m_iMiddleLineTime = 0;
this.Start = function (oEvent) {
this.m_iMove = 0;
this.m_ieventX = oEvent.clientX;
this.m_iMiddleLineTime = this.m_tCurrentMidTime.m_iMilliseconds;
this.m_bMouseDown = true;
this.mouseDownCallbackFunc();
addEventHandler(document, 'mousemove', bindAsEventListener(this, this.Move));
addEventHandler(document, 'mouseup', bind(this, this.Stop));
addEventHandler(parent.document, 'mouseup', bind(this, this.Stop)); //解决鼠标在父页面释放时不能响应的问题
//焦点丢失
addEventHandler(window, "blur", bindAsEventListener(this, bindAsEventListener(this, this.Stop)));
//阻止默认动作
oEvent.preventDefault();
removeEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
};
this.mouseDownCallbackFunc = function () {
//
};
this.mouseUpCallbackFunc = function () {
//
};
this.mouseMoveCallbackFunc = function () {
//
};
this.Stop = function () {
this.m_bMouseDown = false;
if (this.m_iMove === 0) {
this.m_tCurrentMidTime.setTimeByMis(this.m_tMouseCurTime.m_iMilliseconds);
}
this.mouseUpCallbackFunc();
removeEventHandler(document, 'mousemove', bindAsEventListener(this, this.Move));
removeEventHandler(document, 'mouseup', bindAsEventListener(this, this.Stop));
removeEventHandler(window, "blur", bindAsEventListener(this, this.Stop));
addEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
};
this.onMouseMoveIn = true;
this.Move = function (oEvent) {
this.m_iMove = oEvent.clientX - this.m_ieventX;
if (this.m_bMouseDown) {
//清除选择
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
this.m_tCurrentMidTime.setTimeByMis(this.m_iMiddleLineTime - this.m_iMove * this.m_iCellMilliseconds);
this.repaint();
this.mouseMoveCallbackFunc();
}
};
this.onMouseMove = function (oEvent) {
this.m_iMousePosX = oEvent.clientX - this.m_iCanvasLeft;
this.m_tMouseCurTime.setTimeByMis((this.m_iMousePosX - this.m_iMiddleLinePos) * this.m_iCellMilliseconds + this.m_tCurrentMidTime.m_iMilliseconds);
this.repaint();
var szCurMouseTime = this.m_tMouseCurTime.getStringTime();
this.m_ctx.fillStyle = this.middleLineTimeColor;
this.m_ctx.font = this.m_fCurTimeFont;
this.m_ctx.fillText(szCurMouseTime.split(' ')[1], this.m_iMousePosX/*(this.m_iMousePosX - parseInt(this.m_iCurTextWidth / 2))*/, 20/*parseInt(this.m_iTimeRectHeight / 4)*/);
};
this.onMouseOut = function (/*oEvent*/) {
this.repaint();
};
addEventHandler(canvas, 'mousedown', bindAsEventListener(this, this.Start));
addEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
addEventHandler(canvas, 'mouseout', bindAsEventListener(this, this.onMouseOut));
this.repaint();
}
/*
Function: repaint
Description: 重绘
Input: 无
Output: 无
return: 无
*************************************************/
TimeBar.prototype.repaint = function () {
// var szCurrentTime = this.m_tCurrentMidTime.getStringTime();
this.updateScalePos();
this.updateFileListPos();
this.m_ctx.clearRect(0, 0, this.m_iWidth, this.m_iHeight);
//画通道名称分割线
this.m_ctx.strokeStyle = this.partLineColor;
this.m_ctx.lineWidth = 1;
this.m_ctx.beginPath();
this.m_ctx.moveTo(this.m_iFileListStartPos, this.m_iTimeRectHeight);
this.m_ctx.lineTo(this.m_iFileListStartPos, this.m_iHeight);
this.m_ctx.stroke();
//画文件两条横轴和纵轴
this.m_ctx.lineWidth = this.m_iBlankHeight;
this.m_ctx.beginPath();
this.m_ctx.moveTo(0, this.m_iTimeRectHeight);
this.m_ctx.lineTo(this.m_iWidth, this.m_iTimeRectHeight);
this.m_ctx.stroke();
this.m_ctx.beginPath();
this.m_ctx.moveTo(0, this.m_iHeight - this.m_iBlankHeight / 2);
this.m_ctx.lineTo(this.m_iWidth, this.m_iHeight - this.m_iBlankHeight / 2);
this.m_ctx.stroke();
//显示通道名称
this.m_ctx.fillStyle = this.channelNameColor;
this.m_ctx.font = this.m_fChannelNameFont;
this.m_ctx.fillText(this.m_szCurChannelName, 0, this.m_iTimeRectHeight + this.m_iBlankHeight + parseInt(this.m_iFileRectHeight / 2, 10) + 5, 90);
this.m_ctx.strokeStyle = this.timeScaleColor;
this.m_ctx.font = this.m_fScaleFont;
this.m_ctx.lineWidth = 1;
//画时间刻度
var i;
for (i = 0; i < this.ScaleInfoNum; i++) {
if (this.ScaleInfo[i].isInRange(this.m_iFileListStartPos, this.m_iWidth)) {
this.m_ctx.beginPath();
this.m_ctx.moveTo(this.ScaleInfo[i].m_ix, 2/*this.m_iTimeRectHeight*/);
this.m_ctx.lineTo(this.ScaleInfo[i].m_ix, 10/*this.m_iHeight*/);
this.m_ctx.stroke();
this.m_ctx.fillText(this.ScaleInfo[i].m_szTime, this.ScaleInfo[i].m_ix + 2/*this.ScaleInfo[i].m_ix - 15*/, 12/*this.m_iTimeRectHeight - 5*/);
}
}
//画文件信息区域
for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
this.FileInfoSet[this.m_iSelWnd][i].draw(this.m_ctx);
}
//画中轴线
this.m_ctx.strokeStyle = this.middleLineColor;
this.m_ctx.lineWidth = 2;
this.m_ctx.beginPath();
this.m_ctx.moveTo(this.m_iMiddleLinePos, 0);
this.m_ctx.lineTo(this.m_iMiddleLinePos, this.m_iHeight);
this.m_ctx.stroke();
};
/*
Function: updateScalePos
Description: 更新刻度
Input: 无
Output: 无
return: 无
*************************************************/
TimeBar.prototype.updateScalePos = function () {
if (this.ScaleInfo.length === 0) {
return;
}
// 以00:00移动的距离为准
var seconds = (this.ScaleInfo[0].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[0].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[0].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
var iPos0 = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
if (iPos0 < this.ScaleInfo[0].m_ixMin) {
iPos0 = this.ScaleInfo[0].m_ixMax - (this.ScaleInfo[0].m_ixMin - iPos0);
} else if (iPos0 > this.ScaleInfo[0].m_ixMax) {
iPos0 = this.ScaleInfo[0].m_ixMin + (iPos0 - this.ScaleInfo[0].m_ixMax);
}
var iMoved = iPos0 - this.ScaleInfo[0].m_ix;
//没有移动直接返回
if (iMoved === 0) {
return;
}
// 更新所有的刻度
for (var i = 0; i < this.ScaleInfoNum; i++) {
var iScalePos = this.ScaleInfo[i].m_ix + iMoved;
// 设置刻度位置范围
this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
}
};
/*
Function: updateFileListPos
Description: 更新文件
Input: 无
Output: 无
return: 无
*************************************************/
TimeBar.prototype.updateFileListPos = function () {
var iFileLength = this.FileInfoSet[this.m_iSelWnd].length;
if (iFileLength === 0) {
return;
}
var tStartTime = this.FileInfoSet[this.m_iSelWnd][0].m_tStartTime;
var seconds = parseInt((tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
var iFile0Pos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
var iMoved = iFile0Pos - this.FileInfoSet[this.m_iSelWnd][0].m_iX;
//没有移动直接返回
if (iMoved === 0) {
return;
}
// 更新所有
for (var i = 0; i < iFileLength; i++) {
var iX = this.FileInfoSet[this.m_iSelWnd][i].m_iX + iMoved;
var iY = this.FileInfoSet[this.m_iSelWnd][i].m_iY;
var iWidth = this.FileInfoSet[this.m_iSelWnd][i].m_iWidth;
var iHeight = this.FileInfoSet[this.m_iSelWnd][i].m_iHeight;
this.FileInfoSet[this.m_iSelWnd][i].setPos(iX, iY, iWidth, iHeight);
}
};
/*
Function: resize
Description: 重置大小
Input: iWidth宽度, iHeight高度
Output: 无
return: 无
*************************************************/
TimeBar.prototype.resize = function (iWidth, iHeight) {
this.m_canvas.height = iHeight;
this.m_canvas.width = iWidth;
this.m_iHeight = iHeight;
this.m_iWidth = iWidth;
this.m_iTimeRectHeight = parseInt(this.m_iHeight * 4 / 7, 10);
this.m_iFileRectHeight = this.m_iHeight - this.m_iTimeRectHeight - this.m_iBlankHeight;
this.m_iMiddleLinePos = parseInt((this.m_iFileListStartPos + this.m_iWidth) / 2, 10);
this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum);
this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10);
//初始化时间刻度信息
var i;
for (i = 0; i < this.ScaleInfoNum; i++) {
// 计算与中轴线的时间差(只计算时分秒)
var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
// 设置刻度位置范围
this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
}
//初始化文件列表信息
for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
var FileInfoSetSel = this.FileInfoSet[this.m_iSelWnd][i];
var iXLeftSeconds = parseInt((FileInfoSetSel.m_tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
var iXRightSeconds = parseInt((FileInfoSetSel.m_tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
if ((iFilePosRight - iFilePosLeft) < this.m_iMinFileWidth) {
iFilePosRight = iFilePosLeft + this.m_iMinFileWidth;
}
FileInfoSetSel.setPos(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2, 10), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2);
}
this.repaint();
};
/*
Function: setSpanType
Description: 设置时间条的显示样式
Input: 无
Output: 无
return: 无
*************************************************/
TimeBar.prototype.setSpanType = function (iSpanType) {
switch (iSpanType) {
case 6://每2小时一格
this.ScaleInfoDisNum = 12;
this.m_fCellTime = parseFloat(2.0);
break;
case 7://每小时一格
this.ScaleInfoDisNum = 12;
this.m_fCellTime = parseFloat(1.0);
break;
case 8://每半小时一格
this.ScaleInfoDisNum = 12;
this.m_fCellTime = parseFloat(0.5);
break;
case 9://每10分钟一格
this.ScaleInfoDisNum = 12;
this.m_fCellTime = parseFloat(1 / 6);
break;
case 10://每5分钟一格
this.ScaleInfoDisNum = 12;
this.m_fCellTime = parseFloat(1 / 12);
break;
case 11://每1分钟一格
this.ScaleInfoDisNum = 12;
this.m_fCellTime = parseFloat(1 / 60);
break;
default:
this.ScaleInfoDisNum = 12;
this.m_fCellTime = parseFloat(2.0);
return;
}
this.ScaleInfoNum = parseInt(24 / this.m_fCellTime, 10);
this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum);
this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10);
//初始化刻度
this.ScaleInfo.length = 0;
for (var i = 0; i < this.ScaleInfoNum; i++) {
this.ScaleInfo.push(new ScaleInfo(0, 0, parseInt(i * 3600 * this.m_fCellTime, 10)));
}
//初始化时间刻度信息
for (i = 0; i < this.ScaleInfoNum; i++) {
// 计算与中轴线的时间差(只计算时分秒)
var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
// 设置刻度位置范围
this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
}
//初始化文件列表信息
for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
var FileInfoSetSel = this.FileInfoSet[this.m_iSelWnd][i];
var iXLeftSeconds = parseInt((FileInfoSetSel.m_tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
var iXRightSeconds = parseInt((FileInfoSetSel.m_tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
if ((iFilePosRight - iFilePosLeft) < this.m_iMinFileWidth) {
iFilePosRight = iFilePosLeft + this.m_iMinFileWidth;
}
FileInfoSetSel.setPos(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2, 10), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2);
}
this.repaint();
};
/*
Function: addFile
Description: 添加文件
Input: StartTime 开始时间, StopTime 结束时间, iType 类型, iWndNum 默认当前窗口 添加到某个窗口
Output: 无
return: 无
*************************************************/
TimeBar.prototype.addFile = function (StartTime, StopTime, iType/*, iWndNum*/) {
var tStartTime = new Time();
var tStopTime = new Time();
tStartTime.parseTime(StartTime);
tStopTime.parseTime(StopTime);
var fileColor;
switch (iType) {
case 1:
fileColor = this.scheFileColor;
break;
case 2:
fileColor = this.alarmFileColor;
break;
case 3:
fileColor = this.cmdFileColor;
break;
case 4:
fileColor = this.manualFileColor;
break;
case 5:
fileColor = this.anrFileColor;
break;
default:
fileColor = this.defaultFileColor;
break;
}
var iXLeftSeconds = parseInt((tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
var iXRightSeconds = parseInt((tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
var fileInfo = new FileInfo(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2, 10), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2, iType, fileColor, tStartTime, tStopTime);
fileInfo.setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
if (arguments.length >= 4) {
this.FileInfoSet[arguments[3]].push(fileInfo);
} else {
this.FileInfoSet[this.m_iSelWnd].push(fileInfo);
}
};
/*
Function: clearWndFileList
Description: 清空某个窗口的文件信息
Input: iWndNum 窗口号 0-15 默认当前选中窗口
Output: 无
return: 无
*************************************************/
TimeBar.prototype.clearWndFileList = function ()/*iWndNum*/ {
var iWndParam;
if (arguments.length === 0) {
iWndParam = this.m_iSelWnd;
} else {
iWndParam = arguments[0];
}
if (iWndParam < 0) {
iWndParam = 0;
}
if (iWndParam >= 16) {
iWndParam = 15;
}
this.FileInfoSet[iWndParam].length = 0;
};
/*
Function: setMidLineTime
Description: 设置中轴线时间
Input: szTime yyyy-MM-dd HH:mm:ss
Output: 无
return: 无
*************************************************/
TimeBar.prototype.setMidLineTime = function (szTime) {
var tCurTime = new Time();
tCurTime.parseTime(szTime);
this.m_tCurrentMidTime.setTimeByMis(tCurTime.m_iMilliseconds);
this.repaint();
};
TimeBar.prototype.setMouseDownCallback = function (callbackFunc) {
this.mouseDownCallbackFunc = callbackFunc;
};
/*
Function: setMouseUpCallback
Description: 设置鼠标弹起回调函数
Input: func 回调函数 function(tStartTime, tStopTime)
Output: 无
return: 无
*************************************************/
TimeBar.prototype.setMouseUpCallback = function (callbackFunc) {
this.mouseUpCallbackFunc = callbackFunc;
};
TimeBar.prototype.setMouseMoveCallback = function (callbackFunc) {
this.mouseMoveCallbackFunc = callbackFunc;
};

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,240 @@
importScripts('libSystemTransform.js');
const RECORDRTP = 0; //录制一份未经过转封装的码流原始数据,用于定位问题
let dataType = 1;
// 字母字符串转byte数组
function stringToBytes (str) {
var ch;
var st;
var re = [];
for (var i = 0; i < str.length; i++) {
ch = str.charCodeAt(i); // get char
st = []; // set up "stack"
do {
st.push(ch & 0xFF); // push byte to stack
ch = ch >> 8; // shift value down by 1 byte
}
while (ch);
// add stack contents to result
// done because chars have "wrong" endianness
re = re.concat(st.reverse());
}
// return an array of bytes
return re;
}
// 转封装库回调函数
self.STCallBack = function (fileIndex, indexLen, data, dataLen) {
//stFrameInfo的类型见DETAIL_FRAME_INFO
let stFrameInfo = Module._GetDetialFrameInfo();
let nIsMp4Index = stFrameInfo.nIsMp4Index;
//console.log("FrameType is " , stFrameInfo);
//console.log("nIsMp4Index is " + nIsMp4Index);
//debugger
var pData = null;
pData = new Uint8Array(dataLen);
pData.set(Module.HEAPU8.subarray(data, data + dataLen));
if (dataType === 1) {
postMessage({ type: "outputData",
buf: pData.buffer,
dType: 1,
frameInfo: stFrameInfo }, [pData.buffer]);
dataType = 2;
} else {
if (nIsMp4Index) {
postMessage({ type: "outputData",
buf: pData.buffer,
dType: 6,
frameInfo: stFrameInfo }, [pData.buffer]); //6索引类型
} else {
postMessage({ type: "outputData",
buf: pData.buffer,
dType: 2,
frameInfo: stFrameInfo }, [pData.buffer]); //2:码流
}
}
//stFrameInfo的类型见DETAIL_FRAME_INFO
//let stFrameInfo = Module._GetDetialFrameInfo();
//let stFrameType = stFrameInfo.nFrameType;
//let nFrameNum = stFrameInfo.nFrameNum;
//let nTimeStamp = stFrameInfo.nTimeStamp;
//let nIsMp4Index = stFrameInfo.nIsMp4Index;
//console.log("FrameType is " + stFrameType);
//console.log("nIsMp4Index is " + nIsMp4Index);
};
// self.Module = { memoryInitializerRequest: loadMemInitFile(), TOTAL_MEMORY: 128*1024*1024 };
// importScripts('SystemTransform.js');
self.Module['onRuntimeInitialized'] = function () {
postMessage({type: "loaded"});
};
onmessage = function (e) {
var data = e.data;
if ("create" === data.type) {
if (RECORDRTP) {
postMessage({ type: "created" });
postMessage({ type: "outputData",
buf: data.buf,
dType: 1 }, [data.buf]);
} else {
var iHeadLen = data.len;
var pHead = Module._malloc(iHeadLen);
if (pHead === null) {
console.log("inputdata malloc failed!!!");
return -1;
}
var iTransType = data.packType;//目标格式
var iRet = 0;
var buf = new Uint8Array(data.buf);
//PS流(只有ps支持探测)并且编码格式异常正常是265和26411位和10位 不可能全是0全0 并且是ps就探测策略的情况下使用探测策略
if (buf[9] === 0 && buf[8] === 2 && buf[11] === 0 && buf[10] === 0) {
iRet = Module._CreatHandle(0, iTransType, iHeadLen); //用探测的策略
} else {
self.writeArrayToMemory(buf, pHead);
iRet = Module._CreatHandle(pHead, iTransType, iHeadLen);
//-2147483645代表的是参数错误此种情况大概率发生在头信息错误例如大华设备的情况此时用 无头探测的策略
//其他情况 按海康标准处理流程,不要做任何特殊处理
if (iRet == -2147483645) {
iRet = Module._CreatHandle(0, iTransType, iHeadLen); //失败了,用探测的策略再试一次
}
}
if (iRet != 0) {
if (iRet == -2147483647) {
postMessage({ type: "outputData",
dType: 1501 }); //标记为格式不支持
} else {
postMessage({ type: "outputData",
dType: 1501 }); //转封装创建失败,也同样提示码流格式不支持,如果后续要细化再区分
}
console.log("_CreatHandle failed!" + iRet);
} else {
if (data.options && typeof data.options.pKeyData !== "undefined" && data.options.pKeyData !== null) {
if ((2 === iTransType && "" === data.options.pKeyData)) {
//转ps的时候如果密码是空是允许的即使码流加密了导出加密后的码流就行
//此时不要设置密码否则反而会提示密码错误
} else {
var secretInfo = data.options;
var keyLen = secretInfo.nKeyLen;
var pKeyData = Module._malloc(keyLen);
if (pKeyData === null) {
console.log("setEncryptKey malloc failed!!!");
return -1;
}
var nKeySize = secretInfo.pKeyData.length;
var bufData = stringToBytes(secretInfo.pKeyData);
let inputData = new Uint8Array(bufData);
Module.writeArrayToMemory(inputData, pKeyData);
inputData = null;
iRet = Module._SysTransSetEncryptKey(secretInfo.nKeyType, pKeyData, keyLen, nKeySize);
if (iRet != 0) {
console.log("_SysTransSetEncryptKey failed!");
}
if (pKeyData != null) {
Module._free(pKeyData);
pKeyData = null;
}
}
}
//带samplingParam参数代表需要 用到 音频替换功能
if (data.options && typeof data.options.samplingParam !== "undefined") {
var oParam = data.options.samplingParam;
var nCapacityType = 1; //写死1 代表 剔除音频
var nType = 3; //写死3 代表 修改输出目标的海康头配置,内部包含视频参数、音频参数
var nAudioEnable = 1; //音频参数修改使能开关0=不启用1=启用
var nAudioFormat = oParam.iAudioType; //音频编码类型 对应关系参考海康媒体头规范PCM 0x7001 G711_U 0x7110 G711_A 0x7111 AAC 0x2001
var nAudioChannels = oParam.iChannel; //音频通道数直接设置为
var nAudioBitsPerSample = oParam.iAudioBitWidth; //音频位样率
var nAudioSamplesrate = oParam.iAudioSamplingRate; //音频采样率
var nAudioBitrate = oParam.iAudioBitRate; //音频比特率
iRet = Module._SysTransConfig(nCapacityType, nType, nAudioEnable, nAudioFormat,
nAudioChannels, nAudioBitsPerSample, nAudioSamplesrate, nAudioBitrate);
if (iRet != 0) {
console.log("_SysTransConfig Failed:" + iRet);
}
} else {
iRet = Module._SysTransConfig(128, 0, 0, 0, 0, 0, 0, 0); //nCapacityType = 0x00000080 代表开启私有信息回调 解决转mp4后私有信息丢失问题
if (iRet != 0) {
console.log("_SysTransConfig Failed:" + iRet);
}
}
iRet = Module._SysTransRegisterDataCallBack();
if (iRet != 0) {
console.log("_SysTransRegisterDataCallBack Failed:" + iRet);
}
iRet = Module._SysTransStart(null, null);
if (iRet != 0) {
console.log("_SysTransStart Failed:" + iRet);
}
postMessage({type: "created"});
}
if (pHead != null) {
Module._free(pHead);
pHead = null;
}
}
} else if ("inputData" === data.type) {
if (RECORDRTP) {
var aFileData = new Uint8Array(data.buf); // 拷贝一份
var iBufferLen = aFileData.length;
var szBufferLen = iBufferLen.toString(16);
if (szBufferLen.length === 1) {
szBufferLen = "000" + szBufferLen;
} else if (szBufferLen.length === 2) {
szBufferLen = "00" + szBufferLen;
} else if (szBufferLen.length === 3) {
szBufferLen = "0" + szBufferLen;
}
var aData = [0, 0, parseInt(szBufferLen.substring(0, 2), 16), parseInt(szBufferLen.substring(2, 4), 16)];
for (var iIndex = 0, iDataLength = aFileData.length; iIndex < iDataLength; iIndex++) {
aData[iIndex + 4] = aFileData[iIndex];
}
var dataUint8 = new Uint8Array(aData);
postMessage({type: "outputData",
buf: dataUint8.buffer,
dType: 2});
} else {
let inputMode = 0; //代表输入原始数据
if (data.samplingParam) {
iRet = Module._SysTransInputAudioPara(5, data.samplingParam.iChannel, data.samplingParam.iAudioBitWidth,
data.samplingParam.iAudioSamplingRate, data.samplingParam.iTimeStamp, data.samplingParam.iAudioBitRate); //参数含义和_SysTransConfig类似
if (iRet != 0) {
console.log("_SysTransInputAudioPara Failed:" + iRet);
}
inputMode = 2; //输入替换的音频
}
var pInputDataBuf = Module._malloc(data.len);
var idataLen = data.len;
self.writeArrayToMemory(new Uint8Array(data.buf), pInputDataBuf);
// 输入数据每次最多2m
let pp = Module._SysTransInputData(inputMode, pInputDataBuf, idataLen);
if (pp == -2147483627) {
//-2147483627 对应十六进制的80000015
postMessage({ type: "outputData",
dType: 1500 }); //标记为密码错误
} else if (pp == -2147483647) {
postMessage({ type: "outputData",
dType: 1501 }); //标记为格式不支持
} else if (pp != 0) {
console.log("InputData Failed:" + pp);
}
Module._free(pInputDataBuf);
}
} else if ("release" === data.type) {
var iRet = Module._SysTransStop();
if (iRet != 0) {
console.log("_SysTransStop failed!");
}
Module._SysTransRelease();
if (iRet != 0) {
console.log("_SysTransRelease failed!");
}
close();
}
};

File diff suppressed because one or more lines are too long

View File

@@ -753,7 +753,7 @@ export const deviceOptions = [
label: '厂家',
value: '',
key: 'factory',
type: 'input'
type: 'textarea'
},
{
label: '厂家电话',

View File

@@ -6,7 +6,17 @@
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
<title><%= htmlWebpackPlugin.options.title %></title>
<link rel="stylesheet" href="http://at.alicdn.com/t/c/font_5010233_6lxuclaoex9.css" />
<script type="text/JavaScript" src="codebase/jsPlugin/jquery.min.js"></script>
<script type="text/JavaScript" src="codebase/encryption/AES.js"></script>
<script type="text/JavaScript" src="codebase/encryption/cryptico.min.js"></script>
<script type="text/JavaScript" src="codebase/encryption/crypto-3.1.2.min.js"></script>
<script type="text/JavaScript" src="codebase/webVideoCtrl.js"></script>
</head>
<body>
<noscript>

View File

@@ -1,9 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 4945642 */
src: url('iconfont.woff2?t=1756516508134') format('woff2'),
url('iconfont.woff?t=1756516508134') format('woff'),
url('iconfont.ttf?t=1756516508134') format('truetype'),
url('iconfont.svg?t=1756516508134#iconfont') format('svg');
font-family: "iconfont"; /* Project id 5010233 */
src: url('iconfont.woff2?t=1757574994185') format('woff2'),
url('iconfont.woff?t=1757574994185') format('woff'),
url('iconfont.ttf?t=1757574994185') format('truetype');
}
.iconfont {
@@ -14,455 +13,151 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-full:before {
content: "\e651";
.icon-chunengguankong:before {
content: "\e60c";
}
.icon-exit:before {
content: "\e652";
.icon-bianyaqi1:before {
content: "\e60b";
}
.icon-a-qiyong:before {
content: "\e64e";
.icon-tuichu:before {
content: "\e7ed";
}
.icon-a-jinyong:before {
content: "\e64f";
.icon-bianyaqi:before {
content: "\e62f";
}
.icon-tuihuishenqing:before {
content: "\e64d";
.icon-jizhuangxiang:before {
content: "\e60a";
}
.icon-mti-loudianjiance:before {
content: "\e64c";
.icon-nengyuanguanli:before {
content: "\e67d";
}
.icon-guanbi:before {
content: "\e64b";
}
.icon-a-fenzu1411:before {
content: "\e649";
}
.icon-a-fenzu1409:before {
content: "\e64a";
}
.icon-xianlu:before {
content: "\e647";
}
.icon-jizhongqi:before {
content: "\e648";
}
.icon-a-lujing41:before {
content: "\e646";
}
.icon-a-lujing4:before {
.icon-quexianguanli:before {
content: "\e645";
}
.icon-Electrocardiogram:before {
content: "\e644";
.icon-L-chunengdianchicu:before {
content: "\e698";
}
.icon-hezha:before {
content: "\e642";
.icon-jizhongqi:before {
content: "\e607";
}
.icon-bisuo:before {
content: "\e643";
.icon-chongdianqiang:before {
content: "\e650";
}
.icon-lixian:before {
content: "\e63b";
.icon-guangfuban:before {
content: "\e609";
}
.icon-dengpao:before {
content: "\e63c";
.icon-zhuangjirongliang:before {
content: "\e683";
}
.icon-daunlu:before {
content: "\e63e";
.icon-charging-pile-line:before {
content: "\e83c";
}
.icon-loudianjiance:before {
content: "\e63f";
.icon-dianbiao:before {
content: "\ec4d";
}
.icon-guozai:before {
content: "\e641";
.icon-shuijinchuanganqiicon:before {
content: "\e605";
}
.icon-a-fenzu92:before {
content: "\e63a";
.icon-menjin:before {
content: "\e637";
}
.icon-yonghu2:before {
content: "\e68d";
.icon-fengsujiance:before {
content: "\e628";
}
.icon-guzhang:before {
content: "\e632";
.icon-xiaofang:before {
content: "\e60e";
}
.icon-leijishouyi:before {
content: "\e631";
.icon-guangzhaojianceshebei:before {
content: "\e608";
}
.icon-fadianliang:before {
content: "\e63d";
.icon-shipinjiankong:before {
content: "\e638";
}
.icon-fengji:before {
content: "\e661";
.icon-yanganjiance:before {
content: "\e6a8";
}
.icon-guangfu:before {
content: "\e633";
.icon-peidiangui:before {
content: "\e7bf";
}
.icon-jiantanpaifang:before {
content: "\e67d";
.icon-transformer:before {
content: "\e6ae";
}
.icon-zhaomingdeng:before {
content: "\e993";
}
.icon-wenshidujiance:before {
content: "\e6c8";
}
.icon-add:before {
content: "\e604";
}
.icon-shidu:before {
content: "\e60d";
}
.icon-wenduji:before {
content: "\e6de";
}
.icon-kongdiaogongcheng:before {
content: "\e62e";
}
.icon-lengji:before {
content: "\e639";
}
.icon-guanbi:before {
content: "\e606";
}
.icon-a-fenzu3:before {
content: "\e602";
}
.icon-nibianqi:before {
content: "\e603";
}
.icon-battery-charge-line:before {
content: "\e601";
}
.icon-a-fenzu13:before {
content: "\e600";
}
.icon-hebing:before {
content: "\e630";
}
.icon-a-fenzu2:before {
content: "\e62e";
}
.icon-jiantou:before {
content: "\e62d";
}
.icon-a-fenzu549:before {
content: "\e62c";
}
.icon-guanbi1:before {
content: "\e62a";
}
.icon-baohuzhuangzhi:before {
content: "\e704";
}
.icon-peidianfang:before {
content: "\e6ae";
}
.icon-map-mark0:before {
content: "\e6ba";
}
.icon-caokongguanli:before {
content: "\e62b";
}
.icon-a-CyberMonitoring:before {
content: "\e640";
}
.icon-a-GrowthChart:before {
content: "\e650";
}
.icon-a-SalesGrowth:before {
content: "\e668";
}
.icon-a-TrendChat:before {
content: "\e673";
}
.icon-a-CloudComputer:before {
content: "\e683";
}
.icon-a-CloudInfrastructure:before {
content: "\e687";
}
.icon-a-CloudManagement:before {
content: "\e689";
}
.icon-a-CloudSecurity:before {
content: "\e68e";
}
.icon-Dataserver:before {
content: "\e693";
}
.icon-a-VolumeEqualizer:before {
content: "\e6c0";
}
.icon-a-ResourceManagement1:before {
content: "\e808";
}
.icon-a-GraphUp:before {
content: "\e859";
}
.icon-a-FileCabinet:before {
content: "\e97d";
}
.icon-a-SystemSetting:before {
content: "\ee41";
}
.icon-map-mark1:before {
content: "\ee42";
}
.icon-map-mark2-copy:before {
content: "\ee43";
}
.icon-shouye:before {
content: "\e625";
}
.icon-dingwei:before {
content: "\e8c4";
}
.icon-guanbi2:before {
content: "\e62f";
}
.icon-chulizhuangtai:before {
content: "\e684";
}
.icon-a-fenzu302:before {
content: "\e629";
}
.icon-a-fenzu1163:before {
content: "\e605";
}
.icon-tuichu:before {
content: "\e627";
}
.icon-yonghu-yuan:before {
content: "\e628";
}
.icon-mima:before {
content: "\e8b2";
}
.icon-tuichu3:before {
content: "\e624";
}
.icon-yueliang:before {
content: "\e656";
}
.icon-tongzhi:before {
content: "\e674";
}
.icon-tongzhi1:before {
content: "\e9cd";
}
.icon-tongzhi2:before {
content: "\101d4";
}
.icon-xingzhuangjiehe:before {
content: "\e623";
}
.icon-xitongguanli:before {
content: "\e672";
}
.icon-pingtaiguanli:before {
content: "\e619";
}
.icon-shidu:before {
content: "\e635";
}
.icon-dingdan-quanbudingdan:before {
content: "\e626";
}
.icon-wendu:before {
content: "\e80f";
}
.icon-fengtian-guangzhao:before {
content: "\e636";
}
.icon-fengsu:before {
content: "\ea32";
}
.icon-wulianzhongxin_normal:before {
content: "\e620";
}
.icon-icon-1:before {
content: "\e621";
}
.icon-fengexian:before {
content: "\e634";
}
.icon-quxiao:before {
content: "\e637";
}
.icon-a-xingzhuangjiehe1x:before {
content: "\e638";
}
.icon-a-xingzhuangjiehe1x1:before {
content: "\e639";
}
.icon-xingzhuang1:before {
content: "\e622";
}
.icon-xingzhuang:before {
content: "\e604";
}
.icon-a-fenzu1865:before {
content: "\e61f";
}
.icon-confirm:before {
content: "\e61a";
}
.icon-a-fenzu412:before {
content: "\e61b";
}
.icon-shuaxin:before {
content: "\e61c";
}
.icon-download:before {
content: "\e61d";
}
.icon-upload:before {
.icon-quanpingmu:before {
content: "\e61e";
}
.icon-add:before {
content: "\e616";
}
.icon-chongzhi:before {
content: "\e617";
}
.icon-setProtectControl:before {
content: "\e618";
}
.icon-export:before {
content: "\e613";
}
.icon-import:before {
content: "\e614";
}
.icon-del:before {
content: "\e615";
}
.icon-setProtectValue:before {
content: "\e60e";
}
.icon-setLightMode:before {
content: "\e60f";
}
.icon-setTimeMode:before {
content: "\e610";
}
.icon-switchMode:before {
content: "\e611";
}
.icon-setTime:before {
content: "\e612";
}
.icon-sousu:before {
content: "\e60c";
}
.icon-a-fenzu2241:before {
content: "\e60d";
}
.icon-openOrClose:before {
content: "\e60b";
}
.icon-zhaoce:before {
content: "\e60a";
}
.icon-send:before {
content: "\e609";
}
.icon-a-fenzu5:before {
content: "\e608";
}
.icon-shezhi:before {
content: "\e607";
}
.icon-touxiang:before {
content: "\e606";
}
.icon-jiaoyizhanghuguanli:before {
content: "\e602";
}
.icon-yingxiaoxuanzhong:before {
content: "\e603";
}
.icon-a-lujing1:before {
content: "\e600";
}
.icon-a-lujing11:before {
content: "\e601";
}

File diff suppressed because one or more lines are too long

View File

@@ -1,212 +1,254 @@
{
"id": "4945642",
"name": "海达普平台3.0",
"id": "5010233",
"name": "光储充",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "44946071",
"name": "full",
"font_class": "full",
"unicode": "e651",
"unicode_decimal": 58961
"icon_id": "34089819",
"name": "BMS",
"font_class": "chunengguankong",
"unicode": "e60c",
"unicode_decimal": 58892
},
{
"icon_id": "44946066",
"name": "exit",
"font_class": "exit",
"unicode": "e652",
"unicode_decimal": 58962
"icon_id": "25725466",
"name": "变压器",
"font_class": "bianyaqi1",
"unicode": "e60b",
"unicode_decimal": 58891
},
{
"icon_id": "44797354",
"name": "qiyong",
"font_class": "a-qiyong",
"unicode": "e64e",
"unicode_decimal": 58958
"icon_id": "16921565",
"name": "退出",
"font_class": "tuichu",
"unicode": "e7ed",
"unicode_decimal": 59373
},
{
"icon_id": "44797352",
"name": "jinyong",
"font_class": "a-jinyong",
"unicode": "e64f",
"unicode_decimal": 58959
"icon_id": "6953156",
"name": "PCU",
"font_class": "bianyaqi",
"unicode": "e62f",
"unicode_decimal": 58927
},
{
"icon_id": "41945643",
"name": "退回申请",
"font_class": "tuihuishenqing",
"unicode": "e64d",
"unicode_decimal": 58957
"icon_id": "14515201",
"name": "预制舱",
"font_class": "jizhuangxiang",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "44643473",
"name": "mti-漏电监测",
"font_class": "mti-loudianjiance",
"unicode": "e64c",
"unicode_decimal": 58956
"icon_id": "18853254",
"name": "PCS",
"font_class": "nengyuanguanli",
"unicode": "e67d",
"unicode_decimal": 59005
},
{
"icon_id": "44642653",
"name": "关闭",
"font_class": "guanbi",
"unicode": "e64b",
"unicode_decimal": 58955
},
{
"icon_id": "44628330",
"name": "启用",
"font_class": "a-fenzu1411",
"unicode": "e649",
"unicode_decimal": 58953
},
{
"icon_id": "44628328",
"name": "禁用",
"font_class": "a-fenzu1409",
"unicode": "e64a",
"unicode_decimal": 58954
},
{
"icon_id": "44626923",
"name": "线路",
"font_class": "xianlu",
"unicode": "e647",
"unicode_decimal": 58951
},
{
"icon_id": "44626921",
"name": "集中器",
"font_class": "jizhongqi",
"unicode": "e648",
"unicode_decimal": 58952
},
{
"icon_id": "44626922",
"name": "路径 4 (1)",
"font_class": "a-lujing41",
"unicode": "e646",
"unicode_decimal": 58950
},
{
"icon_id": "44626457",
"name": "路径 4",
"font_class": "a-lujing4",
"icon_id": "22187612",
"name": "EMS",
"font_class": "quexianguanli",
"unicode": "e645",
"unicode_decimal": 58949
},
{
"icon_id": "40668428",
"name": "Electrocardiogram",
"font_class": "Electrocardiogram",
"unicode": "e644",
"unicode_decimal": 58948
"icon_id": "30628754",
"name": "BCU",
"font_class": "L-chunengdianchicu",
"unicode": "e698",
"unicode_decimal": 59032
},
{
"icon_id": "44621269",
"name": "分组 10",
"font_class": "hezha",
"unicode": "e642",
"unicode_decimal": 58946
"icon_id": "8634414",
"name": "集中器",
"font_class": "jizhongqi",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "44621265",
"name": "路径 1 (1)",
"font_class": "bisuo",
"unicode": "e643",
"unicode_decimal": 58947
"icon_id": "10074608",
"name": "充电枪",
"font_class": "chongdianqiang",
"unicode": "e650",
"unicode_decimal": 58960
},
{
"icon_id": "44621293",
"name": "离线",
"font_class": "lixian",
"unicode": "e63b",
"unicode_decimal": 58939
"icon_id": "11464298",
"name": "光伏板",
"font_class": "guangfuban",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "44621290",
"name": "49",
"font_class": "dengpao",
"unicode": "e63c",
"unicode_decimal": 58940
"icon_id": "23266155",
"name": "装机容量",
"font_class": "zhuangjirongliang",
"unicode": "e683",
"unicode_decimal": 59011
},
{
"icon_id": "44621289",
"name": "路径 6",
"font_class": "daunlu",
"unicode": "e63e",
"unicode_decimal": 58942
"icon_id": "42232081",
"name": "charging-pile-line",
"font_class": "charging-pile-line",
"unicode": "e83c",
"unicode_decimal": 59452
},
{
"icon_id": "44621287",
"name": "mti-漏电监测",
"font_class": "loudianjiance",
"unicode": "e63f",
"unicode_decimal": 58943
"icon_id": "5961298",
"name": "电表",
"font_class": "dianbiao",
"unicode": "ec4d",
"unicode_decimal": 60493
},
{
"icon_id": "44621285",
"name": "路径 1",
"font_class": "guozai",
"unicode": "e641",
"unicode_decimal": 58945
"icon_id": "11096116",
"name": "flooding",
"font_class": "shuijinchuanganqiicon",
"unicode": "e605",
"unicode_decimal": 58885
},
{
"icon_id": "44613655",
"name": "分组 92",
"font_class": "a-fenzu92",
"unicode": "e63a",
"unicode_decimal": 58938
"icon_id": "11183352",
"name": "门禁",
"font_class": "menjin",
"unicode": "e637",
"unicode_decimal": 58935
},
{
"icon_id": "8998607",
"name": "用户",
"font_class": "yonghu2",
"unicode": "e68d",
"unicode_decimal": 59021
"icon_id": "11343949",
"name": "风速监测",
"font_class": "fengsujiance",
"unicode": "e628",
"unicode_decimal": 58920
},
{
"icon_id": "17398117",
"name": "故障",
"font_class": "guzhang",
"unicode": "e632",
"unicode_decimal": 58930
"icon_id": "11859279",
"name": "消防",
"font_class": "xiaofang",
"unicode": "e60e",
"unicode_decimal": 58894
},
{
"icon_id": "683410",
"name": "累计收益",
"font_class": "leijishouyi",
"unicode": "e631",
"unicode_decimal": 58929
"icon_id": "11894140",
"name": "光照监测设备",
"font_class": "guangzhaojianceshebei",
"unicode": "e608",
"unicode_decimal": 58888
},
{
"icon_id": "6943378",
"name": "发电量",
"font_class": "fadianliang",
"unicode": "e63d",
"unicode_decimal": 58941
"icon_id": "17654833",
"name": "视频监控",
"font_class": "shipinjiankong",
"unicode": "e638",
"unicode_decimal": 58936
},
{
"icon_id": "31328216",
"name": "风机",
"font_class": "fengji",
"unicode": "e661",
"unicode_decimal": 58977
"icon_id": "18636600",
"name": "烟感监测",
"font_class": "yanganjiance",
"unicode": "e6a8",
"unicode_decimal": 59048
},
{
"icon_id": "37843318",
"name": "光伏-copy",
"font_class": "guangfu",
"unicode": "e633",
"unicode_decimal": 58931
"icon_id": "18799877",
"name": "配电柜",
"font_class": "peidiangui",
"unicode": "e7bf",
"unicode_decimal": 59327
},
{
"icon_id": "39630640",
"name": "减碳排放",
"font_class": "jiantanpaifang",
"unicode": "e67d",
"unicode_decimal": 59005
"icon_id": "25891413",
"name": "变压器",
"font_class": "transformer",
"unicode": "e6ae",
"unicode_decimal": 59054
},
{
"icon_id": "34248516",
"name": "照明灯",
"font_class": "zhaomingdeng",
"unicode": "e993",
"unicode_decimal": 59795
},
{
"icon_id": "41574592",
"name": "温湿度监测",
"font_class": "wenshidujiance",
"unicode": "e6c8",
"unicode_decimal": 59080
},
{
"icon_id": "9027941",
"name": "add",
"font_class": "add",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "6677873",
"name": "湿度",
"font_class": "shidu",
"unicode": "e60d",
"unicode_decimal": 58893
},
{
"icon_id": "16562592",
"name": "温度计",
"font_class": "wenduji",
"unicode": "e6de",
"unicode_decimal": 59102
},
{
"icon_id": "1132463",
"name": "空调工程",
"font_class": "kongdiaogongcheng",
"unicode": "e62e",
"unicode_decimal": 58926
},
{
"icon_id": "8852945",
"name": "冷机",
"font_class": "lengji",
"unicode": "e639",
"unicode_decimal": 58937
},
{
"icon_id": "5800409",
"name": "关闭",
"font_class": "guanbi",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "45407305",
"name": "分组 3",
"font_class": "a-fenzu3",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "45407301",
"name": "逆变器",
"font_class": "nibianqi",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "45407312",
"name": "battery-charge-line",
"font_class": "battery-charge-line",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "45401862",
"name": "分组 13",
"font_class": "a-fenzu13",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "44416323",
@@ -216,585 +258,11 @@
"unicode_decimal": 58928
},
{
"icon_id": "44603155",
"name": "分组 2",
"font_class": "a-fenzu2",
"unicode": "e62e",
"unicode_decimal": 58926
},
{
"icon_id": "19877417",
"name": "箭头",
"font_class": "jiantou",
"unicode": "e62d",
"unicode_decimal": 58925
},
{
"icon_id": "44581189",
"name": "分组 549",
"font_class": "a-fenzu549",
"unicode": "e62c",
"unicode_decimal": 58924
},
{
"icon_id": "4880431",
"name": "关闭",
"font_class": "guanbi1",
"unicode": "e62a",
"unicode_decimal": 58922
},
{
"icon_id": "27326599",
"name": "保护装置",
"font_class": "baohuzhuangzhi",
"unicode": "e704",
"unicode_decimal": 59140
},
{
"icon_id": "32257173",
"name": "配电房",
"font_class": "peidianfang",
"unicode": "e6ae",
"unicode_decimal": 59054
},
{
"icon_id": "35105134",
"name": "同心圆",
"font_class": "map-mark0",
"unicode": "e6ba",
"unicode_decimal": 59066
},
{
"icon_id": "40458894",
"name": "操控管理",
"font_class": "caokongguanli",
"unicode": "e62b",
"unicode_decimal": 58923
},
{
"icon_id": "40668708",
"name": "Cyber Monitoring",
"font_class": "a-CyberMonitoring",
"unicode": "e640",
"unicode_decimal": 58944
},
{
"icon_id": "40668774",
"name": "Growth Chart",
"font_class": "a-GrowthChart",
"unicode": "e650",
"unicode_decimal": 58960
},
{
"icon_id": "40668863",
"name": "Sales Growth",
"font_class": "a-SalesGrowth",
"unicode": "e668",
"unicode_decimal": 58984
},
{
"icon_id": "40668908",
"name": "Trend Chat",
"font_class": "a-TrendChat",
"unicode": "e673",
"unicode_decimal": 58995
},
{
"icon_id": "40668959",
"name": "Cloud Computer",
"font_class": "a-CloudComputer",
"unicode": "e683",
"unicode_decimal": 59011
},
{
"icon_id": "40668971",
"name": "Cloud Infrastructure",
"font_class": "a-CloudInfrastructure",
"unicode": "e687",
"unicode_decimal": 59015
},
{
"icon_id": "40668978",
"name": "Cloud Management",
"font_class": "a-CloudManagement",
"unicode": "e689",
"unicode_decimal": 59017
},
{
"icon_id": "40668994",
"name": "Cloud Security",
"font_class": "a-CloudSecurity",
"unicode": "e68e",
"unicode_decimal": 59022
},
{
"icon_id": "40669013",
"name": "Dataserver",
"font_class": "Dataserver",
"unicode": "e693",
"unicode_decimal": 59027
},
{
"icon_id": "40669125",
"name": "Volume Equalizer",
"font_class": "a-VolumeEqualizer",
"unicode": "e6c0",
"unicode_decimal": 59072
},
{
"icon_id": "40669723",
"name": "Resource Management",
"font_class": "a-ResourceManagement1",
"unicode": "e808",
"unicode_decimal": 59400
},
{
"icon_id": "40669819",
"name": "Graph Up",
"font_class": "a-GraphUp",
"unicode": "e859",
"unicode_decimal": 59481
},
{
"icon_id": "40670170",
"name": "File Cabinet",
"font_class": "a-FileCabinet",
"unicode": "e97d",
"unicode_decimal": 59773
},
{
"icon_id": "40671533",
"name": "System Setting",
"font_class": "a-SystemSetting",
"unicode": "ee41",
"unicode_decimal": 60993
},
{
"icon_id": "41578337",
"name": "同心圆-copy",
"font_class": "map-mark1",
"unicode": "ee42",
"unicode_decimal": 60994
},
{
"icon_id": "41578361",
"name": "同心圆-copy-copy",
"font_class": "map-mark2-copy",
"unicode": "ee43",
"unicode_decimal": 60995
},
{
"icon_id": "1228",
"name": "首页",
"font_class": "shouye",
"unicode": "e625",
"unicode_decimal": 58917
},
{
"icon_id": "11372763",
"name": "定位",
"font_class": "dingwei",
"unicode": "e8c4",
"unicode_decimal": 59588
},
{
"icon_id": "21164164",
"name": "关闭",
"font_class": "guanbi2",
"unicode": "e62f",
"unicode_decimal": 58927
},
{
"icon_id": "35113133",
"name": "处理状态",
"font_class": "chulizhuangtai",
"unicode": "e684",
"unicode_decimal": 59012
},
{
"icon_id": "44573704",
"name": "分组 302",
"font_class": "a-fenzu302",
"unicode": "e629",
"unicode_decimal": 58921
},
{
"icon_id": "44573686",
"name": "分组 1163",
"font_class": "a-fenzu1163",
"unicode": "e605",
"unicode_decimal": 58885
},
{
"icon_id": "44573683",
"name": "分组 449",
"font_class": "tuichu",
"unicode": "e627",
"unicode_decimal": 58919
},
{
"icon_id": "44573677",
"name": "分组 1565",
"font_class": "yonghu-yuan",
"unicode": "e628",
"unicode_decimal": 58920
},
{
"icon_id": "11372676",
"name": "密码",
"font_class": "mima",
"unicode": "e8b2",
"unicode_decimal": 59570
},
{
"icon_id": "28622327",
"name": "退出",
"font_class": "tuichu3",
"unicode": "e624",
"unicode_decimal": 58916
},
{
"icon_id": "35972990",
"name": "icon_夜间-月亮",
"font_class": "yueliang",
"unicode": "e656",
"unicode_decimal": 58966
},
{
"icon_id": "16388270",
"name": "通知",
"font_class": "tongzhi",
"unicode": "e674",
"unicode_decimal": 58996
},
{
"icon_id": "32538041",
"name": "通知",
"font_class": "tongzhi1",
"unicode": "e9cd",
"unicode_decimal": 59853
},
{
"icon_id": "42794618",
"name": "通知",
"font_class": "tongzhi2",
"unicode": "101d4",
"unicode_decimal": 66004
},
{
"icon_id": "44572036",
"name": "形状结合",
"font_class": "xingzhuangjiehe",
"unicode": "e623",
"unicode_decimal": 58915
},
{
"icon_id": "4138428",
"name": "系统管理",
"font_class": "xitongguanli",
"unicode": "e672",
"unicode_decimal": 58994
},
{
"icon_id": "5093337",
"name": "平台管理",
"font_class": "pingtaiguanli",
"unicode": "e619",
"unicode_decimal": 58905
},
{
"icon_id": "6677873",
"name": "湿度",
"font_class": "shidu",
"unicode": "e635",
"unicode_decimal": 58933
},
{
"icon_id": "17541547",
"name": "订单-全部订单",
"font_class": "dingdan-quanbudingdan",
"unicode": "e626",
"unicode_decimal": 58918
},
{
"icon_id": "17605421",
"name": "温度",
"font_class": "wendu",
"unicode": "e80f",
"unicode_decimal": 59407
},
{
"icon_id": "21135941",
"name": "光照",
"font_class": "fengtian-guangzhao",
"unicode": "e636",
"unicode_decimal": 58934
},
{
"icon_id": "25716499",
"name": "风速",
"font_class": "fengsu",
"unicode": "ea32",
"unicode_decimal": 59954
},
{
"icon_id": "35264434",
"name": "物联中心_normal",
"font_class": "wulianzhongxin_normal",
"unicode": "e620",
"unicode_decimal": 58912
},
{
"icon_id": "39347276",
"name": "icon-home",
"font_class": "icon-1",
"unicode": "e621",
"unicode_decimal": 58913
},
{
"icon_id": "41233755",
"name": "分割线",
"font_class": "fengexian",
"unicode": "e634",
"unicode_decimal": 58932
},
{
"icon_id": "44546776",
"name": "取消-抽屉",
"font_class": "quxiao",
"unicode": "e637",
"unicode_decimal": 58935
},
{
"icon_id": "44565750",
"name": "user_login",
"font_class": "a-xingzhuangjiehe1x",
"unicode": "e638",
"unicode_decimal": 58936
},
{
"icon_id": "44565801",
"name": "passwd_login",
"font_class": "a-xingzhuangjiehe1x1",
"unicode": "e639",
"unicode_decimal": 58937
},
{
"icon_id": "44572019",
"name": "形状",
"font_class": "xingzhuang1",
"unicode": "e622",
"unicode_decimal": 58914
},
{
"icon_id": "44572020",
"name": "形状",
"font_class": "xingzhuang",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "44571957",
"name": "分组 1865",
"font_class": "a-fenzu1865",
"unicode": "e61f",
"unicode_decimal": 58911
},
{
"icon_id": "44571956",
"name": "分组 929",
"font_class": "confirm",
"unicode": "e61a",
"unicode_decimal": 58906
},
{
"icon_id": "44571953",
"name": "分组 412",
"font_class": "a-fenzu412",
"unicode": "e61b",
"unicode_decimal": 58907
},
{
"icon_id": "44571951",
"name": "分组 1753",
"font_class": "shuaxin",
"unicode": "e61c",
"unicode_decimal": 58908
},
{
"icon_id": "44571950",
"name": "分组 2121",
"font_class": "download",
"unicode": "e61d",
"unicode_decimal": 58909
},
{
"icon_id": "44571949",
"name": "分组 204",
"font_class": "upload",
"icon_id": "29049773",
"name": "全屏幕",
"font_class": "quanpingmu",
"unicode": "e61e",
"unicode_decimal": 58910
},
{
"icon_id": "44571900",
"name": "分组 463",
"font_class": "add",
"unicode": "e616",
"unicode_decimal": 58902
},
{
"icon_id": "44571899",
"name": "分组 423",
"font_class": "chongzhi",
"unicode": "e617",
"unicode_decimal": 58903
},
{
"icon_id": "44571892",
"name": "分组 1977",
"font_class": "setProtectControl",
"unicode": "e618",
"unicode_decimal": 58904
},
{
"icon_id": "44571905",
"name": "分组 610",
"font_class": "export",
"unicode": "e613",
"unicode_decimal": 58899
},
{
"icon_id": "44571903",
"name": "分组 614",
"font_class": "import",
"unicode": "e614",
"unicode_decimal": 58900
},
{
"icon_id": "44571902",
"name": "分组 249",
"font_class": "del",
"unicode": "e615",
"unicode_decimal": 58901
},
{
"icon_id": "44571893",
"name": "分组 1237",
"font_class": "setProtectValue",
"unicode": "e60e",
"unicode_decimal": 58894
},
{
"icon_id": "44571891",
"name": "分组 2237",
"font_class": "setLightMode",
"unicode": "e60f",
"unicode_decimal": 58895
},
{
"icon_id": "44571888",
"name": "分组 2085",
"font_class": "setTimeMode",
"unicode": "e610",
"unicode_decimal": 58896
},
{
"icon_id": "44571885",
"name": "分组 1739",
"font_class": "switchMode",
"unicode": "e611",
"unicode_decimal": 58897
},
{
"icon_id": "44571884",
"name": "分组 1375",
"font_class": "setTime",
"unicode": "e612",
"unicode_decimal": 58898
},
{
"icon_id": "44571897",
"name": "分组 403",
"font_class": "sousu",
"unicode": "e60c",
"unicode_decimal": 58892
},
{
"icon_id": "44571896",
"name": "分组 2241",
"font_class": "a-fenzu2241",
"unicode": "e60d",
"unicode_decimal": 58893
},
{
"icon_id": "44567819",
"name": "分组 1067",
"font_class": "openOrClose",
"unicode": "e60b",
"unicode_decimal": 58891
},
{
"icon_id": "44567629",
"name": "分组 1928",
"font_class": "zhaoce",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "44567660",
"name": "分组 342",
"font_class": "send",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "44567617",
"name": "分组 5",
"font_class": "a-fenzu5",
"unicode": "e608",
"unicode_decimal": 58888
},
{
"icon_id": "44567394",
"name": "设置",
"font_class": "shezhi",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "44567418",
"name": "分组 1565",
"font_class": "touxiang",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "44567099",
"name": "交易账户",
"font_class": "jiaoyizhanghuguanli",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "44567095",
"name": "营销选中",
"font_class": "yingxiaoxuanzhong",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "44567155",
"name": "可视化",
"font_class": "a-lujing1",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "44567153",
"name": "用户",
"font_class": "a-lujing11",
"unicode": "e601",
"unicode_decimal": 58881
}
]
}

Binary file not shown.

View File

@@ -17,7 +17,7 @@
selectedRowKeys: data.selectedRowKeys,
onChange: onSelectChange
}
: false
: {}
"
:expanded-row-keys="data.newTableOpt.expand ? data.expandedKeys : null"
size="middle"

View File

@@ -420,7 +420,7 @@ const data = reactive({
],
treeCheckValue: null,
SHOW_PARENT: TreeSelect.SHOW_PARENT,
// SHOW_PARENT: TreeSelect.SHOW_PARENT,
loading: false,
imageUrl: ''

View File

@@ -49,15 +49,16 @@
<a-modal
v-model:open="modalOpen"
@ok="handleOk"
width="90%"
width="60%"
class="modal-device"
:get-container="() => $refs.device"
>
<div v-if="modalComponent == 1">
<div>
<div v-if="modalComponent == 1" class="modal-content">
<div class="item">
<div class="title">
<div>电流电压</div>
<img src="@/assets/images/titleLine.png" alt="" />
电流电压
<!-- <div>电流电压</div>
<img src="@/assets/images/titleLine.png" alt="" /> -->
</div>
<div class="echarts">
<predictEcharts
@@ -67,11 +68,8 @@
/>
</div>
</div>
<div>
<div class="title">
<div>功率</div>
<img src="@/assets/images/titleLine.png" alt="" />
</div>
<div class="item">
<div class="title">功率</div>
<div class="echarts">
<predictEcharts
:chart-options="chartOptions[1]"
@@ -246,6 +244,8 @@ export default {
},
mounted() {
this.getDeviceList()
},
methods: {
handlePagesizeChange(pageOption) {
@@ -286,8 +286,16 @@ export default {
})
this.chartData.ydata = res.data
this.chartData.xdata = this.generateTimePoints()
this.$nextTick(() => {
if (this.$refs.chartRef1) {
this.$refs.chartRef1.initCharts()
}
if (this.$refs.chartRef2) {
this.$refs.chartRef2.initCharts()
}
})
// this.$refs.chartRef1.initCharts()
// this.$refs.chartRef2.initCharts()
} catch (error) {
console.log(error)
}
@@ -327,13 +335,12 @@ export default {
async openModal(item, val) {
console.log(item, '=============')
this.modalComponent = val
this.modalOpen = true
if (val == 1) {
await this.getDevicCharts(item)
} else {
await this.getDeviceBCUDetail(item)
}
this.modalOpen = true
},
handleOk() {
this.modalOpen = false
@@ -347,17 +354,19 @@ export default {
width: 100%;
height: 100%;
margin-left: 20px;
display: grid;
display: flex;
flex-wrap: wrap;
grid-gap: 20px;
overflow-y: auto;
grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
align-content: flex-start;
// grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
.device-item {
border-radius: 15px;
background: $bg2-color;
padding: 15px;
min-width: 340px;
max-width: 430px;
max-height: 230px;
height: 260px;
flex: 1;
.item-header {
display: flex;
@@ -460,6 +469,25 @@ export default {
.environment {
width: 200px;
}
.modal-device {
color: #fff;
.modal-content {
height: 700px;
.item {
// height: 300px;
.title {
color: #fff;
width: 230px;
border-bottom: 5px solid transparent;
border-image: url('@/assets/boxBottom.png') 0 0 100% 0 stretch;
}
.echarts {
height: 300px;
}
}
}
}
:deep(.ant-modal-body) {
:deep(.ant-table-wrapper .ant-table-row-expand-icon) {
@@ -471,7 +499,19 @@ export default {
background-color: #f0f8ff !important;
}
}
// .a-modal :deep(.ant-table-thead > tr > th) {
// background-color: #f0f8ff !important;
// }
:deep(.ant-table-cell) {
&::before {
width: 0 !important;
}
}
:deep(.ant-table-thead > tr > td) {
border-bottom: none !important;
border-top: none !important;
}
:deep(.ant-table-wrapper .ant-table-tbody > tr > td) {
border-top: none !important;
}
:deep(.ant-table-wrapper .ant-table-thead > tr > th) {
border-bottom: none !important;
}
</style>

View File

@@ -0,0 +1,167 @@
<template>
<div class="title" >
<span>{{ item.name }}</span>
<img
src="@/assets/images/fillScreen.png"
alt=""
width="23px"
style="margin-left: 10px; cursor: pointer"
/>
</div>
<div :id="'divPlugin_' + index" class="plugin"></div>
<!-- <a-button @click="clickLogin">开始登录</a-button>
<a-button @click="clickStartRealPlay">开始预览</a-button> -->
</template>
<script>
export default {
props:{
index: {
type: Number,
default: 0
},
item: {
type: Object,
default: () => {}
}
},
data() {
return {
g_iWndIndex: 0,
szDeviceIdentify: '',
deviceport: '',
channels: [],
ip: '',
port: '',
username: '',
password: '',
iRtspPort: ''
}
},
mounted() {
// this.init()
},
methods: {
// 初始化
init() {
let that = this;
// 初始化插件参数及插入插件
this.$nextTick(() => {
window.WebVideoCtrl.I_InitPlugin('100%', '100%', {
bWndFull: true, // 但窗口双击全屏
iPackageType: 2, // 封装格式 无插件只能是2
iWndowType: 1, // 分屏类型 1*1 2*2 ....
bNoPlugin: true, // 开启无插件模式
cbInitPluginComplete: function () {
console.log("初始化成功!");
window.WebVideoCtrl.I_InsertOBJECTPlugin('divPlugin_' + that.index);
}
});
})
},
// 登录
clickLogin() {
if (!this.ip || !this.port) {
return
}
this.szDeviceIdentify = this.ip+"_"+this.port
WebVideoCtrl.I_Login(this.ip, 1, this.port, this.username, this.password,
{
success: function(xmlDoc) {
this.getChannelInfo() // 获取模拟通道
this.getDevicePort() // 获取端口 (影响不大)
}
})
},
// 获取模拟媒体通道
getChannelInfo() {
let self = this
if (!this.szDeviceIdentify) {
return
}
WebVideoCtrl.I_GetAnalogChannelInfo(self.szDeviceIdentify, {
async: false,
success: function (xmlDoc) {
let oChannels = $(xmlDoc).find("VideoInputChannel");
console.log('获取模拟通道成功', oChannels)
$.each(oChannels, function (i) {
let id = $(this).find("id").eq(0).text(),
name = $(this).find("name").eq(0).text();
if (!name) {
name = "Camera " + (i < 9 ? "0" + (i + 1) : (i + 1));
}
self.channels.push({
id: id,
name: name
})
});
},
error: function (status, xmlDoc) {
console.log('获取模拟通道失败', status, xmlDoc)
}
});
},
// 获取端口 不会对预览效果造成影响
getDevicePort() {
if (!this.szDeviceIdentify) {
return
}
let oPort = WebVideoCtrl.I_GetDevicePort(this.szDeviceIdentify);
console.log('获取通道端口号', oPort)
if (oPort != null) {
this.deviceport = oPort.iDevicePort;
this.iRtspPort= oPort.iRtspPort;
}
},
// 开始预览
clickStartRealPlay() {
let self = this
let oWndInfo = WebVideoCtrl.I_GetWindowStatus(self.g_iWndIndex),
iChannelID = self.channels[0].id
if (!this.szDeviceIdentify) {
return;
}
let startRealPlay = function () {
WebVideoCtrl.I_StartRealPlay(self.szDeviceIdentify, {
iRtspPort: parseInt(self.deviceport, 10), // RTSP端口必须是int
iStreamType: 1, // 码流类型1-主码流 必须int
iChannelID: parseInt(iChannelID, 10), // 播放通道 必须int
bZeroChannel: false, // 是否播放零通道 默认false
success: function () {
console.log("预览成功")
},
error: function (status, xmlDoc) {
console.log("预览失败", status, xmlDoc)
}
});
};
if (oWndInfo != null) {// 已经在播放了,先停止
WebVideoCtrl.I_Stop({
success: function () {
startRealPlay();
}
});
} else {
startRealPlay();
}
}
}
}
</script>
<style lang="scss" scoped>
.plugin{
width:100%;
height:calc(100% - 40px)
}
.title {
display: flex;
align-items: center;
font-size: 24px;
font-weight: 700;
margin-bottom: 10px;
color: #fff;
height: 30px;
}
</style>

View File

@@ -1,24 +1,14 @@
<template>
<div class="videos">
<div class="video-item" v-for="item in videoList" :key="item">
<div class="title">
<span>{{ item.name }}</span>
<img
src="@/assets/images/fillScreen.png"
alt=""
width="23px"
style="margin-left: 10px; cursor: pointer"
/>
</div>
<div class="video">
<video
src="https://media.w3.org/2010/05/sintel/trailer_hd.mp4"
controls="controls"
width="100%"
height="100%"
></video>
</div>
<div class="videosPage" id="videosPage">
<div
class="content"
:class="videosPageWidth < 900 ? 'con-w2' : 'con-w1'"
v-for="(item, index) in videoList"
:key="item"
>
<haikang :index="index" :item="item" class="video"></haikang>
</div>
</div>
<div class="environment">
<div class="tab-header">
@@ -36,7 +26,6 @@
:table-data="tableDatas[activeTab]"
ref="comTable"
:table-option="{ page: false }"
>
</ComTable>
</div>
@@ -45,9 +34,10 @@
<script>
import { postReq, getReq } from '@/request/api'
import haikang from './haikang.vue'
export default {
name: '',
components: {},
components: { haikang },
props: {
stationId: {
type: String,
@@ -154,11 +144,26 @@ export default {
select: false,
page: false
},
videoList: []
//
videoList: [],
g_iWndIndex: 0,
szDeviceIdentify: '',
deviceport: '',
channels: [],
ip: '',
port: '',
username: '',
password: '',
iRtspPort: '',
videosPageWidth: ''
}
},
mounted() {
console.log(this.systemType)
this.$nextTick(() => {
const div = document.getElementById('videosPage')
const width = div.offsetWidth
this.videosPageWidth = width
})
this.getEnvironment()
this.getDeviceList()
@@ -168,7 +173,6 @@ export default {
try {
const res = await getReq('/queryEnvironment', { station_id: this.stationId })
this.tableDatas = res.data
} catch (error) {
this.tableDatas = {}
console.log(error)
@@ -183,6 +187,7 @@ export default {
})
this.videoList = res.data.concat(res.data)
this.videoList = this.videoList.concat(this.videoList)
} catch (error) {
this.videoList = []
@@ -194,30 +199,27 @@ export default {
</script>
<style lang="scss" scoped>
.videos {
.videosPage {
width: calc(100% - 470px);
height: 100%;
margin-left: 20px;
display: grid;
display: flex;
flex-wrap: wrap;
grid-gap: 20px;
overflow-y: auto;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
.video-item {
align-content: flex-start;
justify-content: flex-start;
.content {
border-radius: 15px;
background: $bg2-color;
padding: 15px;
max-height: 290px;
max-width: 400px;
.title {
display: flex;
align-items: center;
font-size: 24px;
font-weight: 700;
color: #fff;
height: 280px;
}
.video {
margin-top: 10px;
.con-w1 {
width: calc((100% - 40px) / 3);
}
.con-w2 {
width: calc((100% - 20px) / 2);
}
}
.environment {

View File

@@ -81,7 +81,7 @@ export default {
show: true,
xAxisIndex: 0, // 控制第一个X轴
start: 0, // 初始显示范围起点(百分比)
end: 20, // 初始显示范围终点(百分比)
end: 100, // 初始显示范围终点(百分比)
height: 20, // 滑动条高度
bottom: 10 // 距离底部距离
},
@@ -89,7 +89,7 @@ export default {
type: 'inside', // 内置型(鼠标滚轮/拖拽交互)
xAxisIndex: 0,
start: 0,
end: 20
end: 100
}
],
xAxis: {

View File

@@ -1,13 +1,12 @@
<!-- eslint-disable camelcase -->
<template>
<div class="policyForm">
<div class="policyForm" ref="policyForm">
<div class="title">
<div>基础信息</div>
<img src="@/assets/images/titleLine.png" alt="" />
</div>
<a-form
:model="formData"
layout="inline"
label-align="left"
:label-col="{ style: { width: '85px' } }"
:rules="rules"
@@ -30,7 +29,7 @@
</a-select>
</a-form-item>
<a-form-item label="低谷电价" class="col4" required>
<a-form-item label="低谷电价" class="col2" required>
<a-input-number
:precision="2"
v-model:value="formData.price[0]"
@@ -39,7 +38,7 @@
/>
</a-form-item>
<a-form-item label="平段电价" class="col4" required>
<a-form-item label="平段电价" class="col2" required>
<a-input-number
:precision="2"
v-model:value="formData.price[1]"
@@ -48,7 +47,7 @@
/>
</a-form-item>
<a-form-item label="高峰电价" class="col4" required>
<a-form-item label="高峰电价" class="col2" required>
<a-input-number
:precision="2"
v-model:value="formData.price[2]"
@@ -57,7 +56,7 @@
/>
</a-form-item>
<a-form-item label="尖峰电价" class="col4" required>
<a-form-item label="尖峰电价" class="col2" required>
<a-input-number
:precision="2"
v-model:value="formData.price[3]"
@@ -179,7 +178,7 @@
</a-form-item>
</div>
<a-form-item label="策略描述" class="col2">
<a-form-item label="策略描述" class="col1">
<a-textarea v-model:value="formData.describe" :disabled="formStatus == 'read'" />
</a-form-item>
<a-form-item label="是否启用" class="col2">
@@ -193,7 +192,8 @@
</a-form-item>
</a-form>
</div>
<a-modal v-model:open="periodModal" @ok="handlePeriodModalOk">
<a-modal
v-model:open="periodModal" @ok="handlePeriodModalOk" :get-container="()=>$refs.policyForm">
<a-form
ref="periodRef"
:model="periodForm"
@@ -240,6 +240,7 @@ export default {
default: 'add'
}
},
emits:['closeModal'],
data() {
return {
data: [],
@@ -308,8 +309,8 @@ export default {
handler(newVal) {
if (this.formStatus == 'add') {
this.formData = {
type: '5',
name: '测试',
type: '',
name: '',
price: [0, 0, 0, 0],
period1: [],
period5: [
@@ -321,14 +322,7 @@ export default {
chargeType: null,
dischargeType: null
}
// {
// charge_time: [],
// discharge_time: [],
// charge_power: '',
// discharge_power: '',
// chargeType: 1,
// dischargeType:1
// }
],
is_open: false,
chargePolicy: 1
@@ -474,6 +468,7 @@ export default {
console.log(this.formData)
},
handleAdd() {
if(this.formStatus=='read') return
this.periodModal = true
this.periodForm = {}
},
@@ -481,7 +476,6 @@ export default {
this.$refs.periodRef
.validateFields()
.then((res) => {
console.log(this.formData.period1,'=============')
const target = this.formData.period1.find((item) => item.month == this.periodForm.month)
if (target) {
@@ -574,15 +568,18 @@ export default {
img {
width: 232px;
height: 6px;
margin-top: 10px;
// margin-top: 10px;
}
}
}
.ant-form {
display: flex;
flex-wrap:wrap ;
.charge {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
// display: grid;
// grid-template-columns: 1fr 1fr;
// gap: 10px;
.box {
border: 1px solid $table-border;
padding-left: 10px;
@@ -590,6 +587,7 @@ export default {
padding-bottom: 10px;
border-radius: 10px;
color: #fff;
margin-bottom: 10px;
}
}
}
@@ -615,7 +613,7 @@ export default {
.ant-select,
.ant-input-affix-wrapper,
.ant-input-number {
width: 150px;
width: 200px;
}
textarea {
.ant-input {
@@ -627,6 +625,7 @@ export default {
}
.col4 {
width: 25%;
min-width: 270px;
}
.col1 {
width: 100%;
@@ -645,5 +644,10 @@ export default {
:deep(.ant-table-wrapper .ant-table-cell){
background:none!important;
}
:deep(.ant-table-cell){
&::before{
width: 0 !important;
}
}
</style>

View File

@@ -5,7 +5,9 @@ import router from './router'
import store from './store'
import '@/style/index.scss'
// import 'ant-design-vue/dist/reset.css'
import 'ant-design-vue/dist/reset.css'
import '@/assets/iconfont/iconfont.css'
import * as echarts from 'echarts/core'
import { BarChart, LineChart } from 'echarts/charts'
import {
@@ -17,26 +19,14 @@ import {
TransformComponent,
DataZoomComponent
} from 'echarts/components'
// 标签自动布局、全局过渡动画等特性
import { LabelLayout, UniversalTransition } from 'echarts/features'
// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import { CanvasRenderer } from 'echarts/renderers'
import { setWidth } from '@/utils/column'
import { getBtns } from '@/utils/btnList'
import {
message,
Modal,
Button,
Table,
Tag,
Select,
DatePicker,
Input,
Pagination,
ConfigProvider,
notification,
TreeSelect
} from 'ant-design-vue'
import { message, Modal } from 'ant-design-vue'
import VueTianditu from 'vue-tianditu'
import SearchBox from '@/components/SearchBox.vue'
import ComTable from '@/components/ComTable.vue'
@@ -73,16 +63,5 @@ app.config.globalProperties.$message = message
app.config.globalProperties.$Modal = Modal
app.use(store).use(router)
app
.use(Button)
.use(Modal)
.use(Table)
.use(Tag)
.use(Select)
.use(DatePicker)
.use(Input)
.use(Pagination)
.use(ConfigProvider)
.use(notification)
.use(TreeSelect)
app.use(VueTianditu).mount('#app')

View File

@@ -16,7 +16,10 @@ $table-bg: #072e4a;
$page-border: #cad2dd;
//级联器样式,下拉选择器样式输入框等。。。
.ant-switch {
background: #00fffb;
background: #b1c4c4;
}
.ant-switch.ant-switch-checked{
background: #00fffb
}
.ant-switch .ant-switch-handle::before {
@@ -52,9 +55,13 @@ $page-border: #cad2dd;
.ant-picker-separator {
color: #fff !important;
}
.ant-picker-input::placeholder {
.ant-picker-input input::placeholder {
color: #ffffff3b !important;
}
.ant-picker-suffix{
color: #ffffff !important;
}
}
.ant-input-affix-wrapper {
.ant-input {
@@ -90,7 +97,8 @@ $page-border: #cad2dd;
&:disabled {
border: none;
color: #fff;
// color: #fff;
background: $btn-confirm;
}
}
.btn-del {

View File

@@ -16,123 +16,123 @@ export const policyTypes = [
export const deviceTypeList = [
{
value: 1,
value: '1',
label: '变压器',
iconfont: 'icon-transformer'
},
{
value: 2,
value: '2',
label: '配电柜',
iconfont: 'icon-dianpingcai'
},
{
value: 3,
value: '3',
label: '电表',
iconfont: 'icon-dianbiao'
},
{
value: 4,
value: '4',
label: '门禁',
iconfont: 'icon-menjin'
},
{
value: 5,
value: '5',
label: '空调',
iconfont: 'icon-kongdiaogongcheng'
},
{
value: 6,
value: '6',
label: '照明',
iconfont: 'icon-zhaomingdeng'
},
{
value: 7,
value: '7',
label: '消防',
iconfont: 'icon-xiaofang'
},
{
value: 8,
value: '8',
label: '光照监测设备',
iconfont: 'icon-guangzhaojianceshebei'
},
{
value: 9,
value: '9',
label: '风速监测设备',
iconfont: 'icon-fengsujiance'
},
{
value: 10,
value: '10',
label: '温湿度监测设备',
iconfont: 'icon-wenshidujiance'
},
{
value: 11,
value: '11',
label: '烟感监测设备',
iconfont: 'icon-yanganjiance'
},
{
value: 12,
value: '12',
label: '水浸传感器',
iconfont: 'icon-shuijinchuanganqiicon'
},
{
value: 13,
value: '13',
label: '视频监控',
iconfont: 'icon-shipinjiankong'
},
{
value: 100,
value: '100',
label: '储能预制舱',
iconfont: 'icon-jizhuangxiang'
},
{
value: 101,
value: '101',
label: 'EMS',
iconfont: 'icon-quexianguanli'
},
{
value: 102,
value: '102',
label: 'PCS',
iconfont: 'icon-nengyuanguanli'
},
{
value: 103,
value: '103',
label: 'PCU',
iconfont: 'icon-bianyaqi'
},
{
value: 104,
value: '104',
label: 'BMS',
iconfont: 'icon-BMSchunengdianchi'
iconfont: 'icon-chunengguankong'
},
{
value: 105,
value: '105',
label: 'BCU',
iconfont: 'icon-L-chunengdianchicu'
},
{
value: 106,
value: '106',
label: '充电桩',
iconfont: 'icon-charging-pile-line'
},
{
value: 107,
value: '107',
label: '充电枪',
iconfont: 'icon-chongdianqiang'
},
{
value: 108,
value: '108',
label: '集中器',
iconfont: 'icon-jizhongqi'
},
{
value: 109,
value: '109',
label: '光伏板',
iconfont: 'icon-guangfuban'
},
{
value: 110,
label: '风力发电机光感',
value: '110',
label: '风力发电机',
iconfont: 'icon-zhuangjirongliang'
}
]

View File

@@ -82,6 +82,8 @@ export default {
this.$message.success('登录成功')
localStorage.setItem('token', res.token)
localStorage.setItem('permission',JSON.stringify( res.permission) )
localStorage.setItem('account',JSON.stringify( res.account) )
this.$router.push('/')
}

View File

@@ -1,6 +1,18 @@
<template>
<div class="main">
<div class="header"></div>
<div class="header">
<span class="time">
<span class="text" style="margin-right: 15px"> {{ dateVal }} </span>
<span class="text" style="width: 80px;">{{ currentTime }}</span>
<span class="text">{{ weekVal }}</span>
</span>
<span class="title text"> 能源站监控与运行管理系统 </span>
<span class="user">
<span style="margin-right: 15px"> {{ user }}</span>
<span class="iconfont icon-tuichu" @click="logout"></span>
</span>
</div>
<div class="page">
<div class="subMenu" v-if="subMenu.length > 0">
@@ -35,7 +47,9 @@
<script>
// @ is an alias to /src
import moment from 'moment'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'
import { createVNode } from 'vue'
export default {
name: 'MainView',
components: {},
@@ -104,13 +118,18 @@ export default {
]
}
],
subMenu: []
subMenu: [],
currentTime: '',
timer: null,
dateVal: moment().locale('zh-cn').format('ll') + ' ',
weekVal: moment().locale('zh-cn').format('dddd'),
user:localStorage.getItem('account').replace(/^"|"$/g, '')
}
},
watch: {
$route: {
handler(n) {
console.log(n,"nnnnnnnnnnnnnn")
console.log(n, 'nnnnnnnnnnnnnn')
this.subMenu = n.matched[1].children || []
},
immediate: true
@@ -119,8 +138,35 @@ export default {
mounted() {
this.initRoute()
this.getDateTime()
this.timer = setInterval(() => {
this.getDateTime()
}, 1000)
},
unmounted() {
clearInterval(this.timer)
},
methods: {
logout(){
const that=this
this.$Modal.confirm({
title: '你确认退出系统吗?',
icon: createVNode(ExclamationCircleOutlined),
async onOk() {
localStorage.clear()
that.$router.push('/login')
},
onCancel() {
},
class: 'test'
})
},
//getDateTime
getDateTime() {
this.currentTime = moment().locale('zh-cn').format('LTS')
},
// 过滤函数:根据权限数据过滤路由并附加权限信息
filterRoutes(routes, permissions) {
return routes.filter((route) => {
@@ -130,7 +176,7 @@ export default {
// 如果有权限项,附加到路由对象
if (routePermissions.length > 0) {
route.permissions = routePermissions;
route.permissions = routePermissions
hasViewPermission = true
}
@@ -188,6 +234,44 @@ export default {
.header {
width: 100%;
height: 70px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20px;
.text {
background: linear-gradient(
180deg,
rgb(255, 255, 255) 0%,
rgb(227, 254, 255) 33.17%,
rgb(35 190 195) 100%
);
-webkit-background-clip: text; /* 兼容 WebKit 浏览器 */
background-clip: text;
color: transparent; /* 必须设置为透明 */
display: inline-block; /* 确保背景裁剪生效 */
line-height: 80px;
font-size: 18px;
}
.title{
font-size: 40px;
position: absolute;
left: 50%;
transform: translateX(-50%);
margin-top: 10px;
}
.user{
font-weight: 700;
font-size: 18px;
.icon-tuichu{
cursor: pointer;
}
}
.time{
font-weight: 700;
}
}
.subMenu {
display: flex;
@@ -222,7 +306,7 @@ export default {
height: 100%;
}
.subcontent {
height: calc(100% - 46px);
height: calc(100% - 56px);
}
.menu {
position: absolute;
@@ -242,6 +326,7 @@ export default {
color: #fff;
font-size: 20px;
font-weight: 700;
border: 1px solid #ffffff00;
cursor: pointer;
margin: 0 35px;
}

View File

@@ -210,7 +210,8 @@ export default {
@import url(@/style/color.scss);
.monitor {
// width: 100%;
height: calc(100% - 40px);
// height: calc(100% - 40px);
height: 100%;
padding: 20px;
background: $bg1-color;
border-radius: 15px;
@@ -243,14 +244,13 @@ export default {
display: grid;
border-radius: 12px;
background: $bg2-color;
padding-top: 10px;
padding-top: 15px;
grid-template-rows: repeat(auto-fit, minmax(140px, 4fr));
.station-item {
flex: 1;
width: 100px;
margin: 0 10px 10px 10px;
margin: 0 15px 15px 15px;
border-radius: 12px;
min-width: 160px;
width: 180px;
display: flex;
flex-direction: column;
color: #fff;

View File

@@ -1,6 +1,6 @@
<template>
<div class="alarmLog">
<searchBox :btn-option-list="btnOptionList" @operateForm="operateForm"></searchBox>
<!-- <searchBox :btn-option-list="btnOptionList" @operateForm="operateForm"></searchBox> -->
<div class="content-table">
<ComTable
@@ -15,8 +15,8 @@
</template>
<template #status="record">
<span
><a-tag :color="record.status ? 'red' : 'green'">{{
record.status ? '异常' : '正常'
><a-tag :color="record.status==0 ? 'red' : 'green'">{{
record.status==0 ? '异常' : '正常'
}}</a-tag></span
>
</template>
@@ -193,10 +193,10 @@ export default {
<style lang="scss" scoped>
.alarmLog {
height: 100%;
padding: 20px;
.content-table {
height: calc(100% - 90px);
padding: 10px;
height: 100%;
}
}
</style>

View File

@@ -18,8 +18,8 @@
<span>{{ getType(record.type) }}</span>
</template>
<template #isEnable="record">
<span><a-tag :color="record.is_open ? 'green' : 'red'">{{
record.is_open ? '启用' : '禁用'
<span><a-tag :color="record.is_open==1 ? 'green' : 'red'">{{
record.is_open==1 ? '启用' : '禁用'
}}</a-tag></span>
</template>
@@ -203,7 +203,7 @@ export default {
if (i.key === 'id') {
e.ruleForm.id = row.id
} else if (i.key === 'is_open') {
e.ruleForm.is_open = Boolean(row.is_open)
e.ruleForm.is_open = Boolean(Number(row.is_open))
} else {
e.ruleForm[i.key] = row[i.key] || ''
}
@@ -232,10 +232,12 @@ export default {
<style lang="scss" scoped>
.device {
height: 100%;
padding: 0 10px;
.content-table {
width: 100%;
height: calc(100% - 90px);
padding: 10px;
padding: 0 10px;
}
}
</style>

View File

@@ -1,6 +1,6 @@
<template>
<div class="syslog">
<searchBox :btn-option-list="btnOptionList" @operateForm="operateForm"></searchBox>
<!-- <searchBox :btn-option-list="btnOptionList" @operateForm="operateForm"></searchBox> -->
<div class="content-table">
<ComTable
@@ -12,8 +12,8 @@
>
<template #status="record">
<span>
<a-tag :color="record.status ? 'red' : 'green'">{{
record.status ? '异常' : '正常'
<a-tag :color="record.status==0 ? 'red' : 'green'">{{
record.status==0 ? '异常' : '正常'
}}</a-tag>
</span>
</template>
@@ -176,10 +176,10 @@ export default {
<style lang="scss" scoped>
.syslog {
height: 100%;
padding: 20px;
.content-table {
height: calc(100% - 90px);
padding: 10px;
height: 100%;
}
}
</style>

View File

@@ -15,7 +15,7 @@
<div>{{ getPolicyType(record.type) }}</div>
</template>
<template #isOpen="record">
<a-tag :color="record.is_open == 1 ? '#2db7f5' : '#f50'">{{
<a-tag :color="record.is_open == 1 ? 'green' : 'red'">{{
record.is_open == 1 ? '启用' : '禁用'
}}</a-tag>
</template>
@@ -28,8 +28,8 @@
<div>
<a-modal
v-model:open="formModal"
width="70%"
style="top: 20px"
width="900px"
style="top: 20px;"
:footer="null"
:get-container="() => $refs.policy"
>
@@ -48,6 +48,7 @@ export default {
name: '',
components: { policyForm },
props: {},
data() {
return {
formModal: false,
@@ -58,21 +59,18 @@ export default {
title: '策略ID',
dataIndex: 'policy_id',
key: 'policyId',
width: 120,
ellipsis: true
},
{
title: '策略名称',
dataIndex: 'name',
key: 'name',
width: 120,
ellipsis: true
},
{
title: '策略类型',
dataIndex: 'type', //策略类型1削峰套利2需求响应3自发自用
key: 'type',
width: 120,
ellipsis: true,
scopedSlots: { customRender: 'type' }
},
@@ -80,7 +78,6 @@ export default {
title: '策略描述',
dataIndex: 'describe',
key: 'describe',
width: 120,
ellipsis: true
},
{
@@ -94,7 +91,6 @@ export default {
title: '是否启用',
dataIndex: 'is_open',
key: 'isOpen',
width: 120,
ellipsis: true,
scopedSlots: { customRender: 'isOpen' }
},
@@ -103,8 +99,8 @@ export default {
title: '操作',
dataIndex: 'action',
key: 'action',
width: 150,
ellipsis: true,
fixed:'right',
scopedSlots: { customRender: 'action' }
}
],
@@ -130,16 +126,18 @@ export default {
},
methods: {
async getTableList() {
this.$refs.comTable.loading = true
try {
this.$refs.comTable.loading = false
const res = await getReq('/queryPolicyList', {
page: this.pageOption.page,
page_size: this.pageOption.pageSize
})
console.log(res)
this.tableData = res.data
this.pageOption.count = res.count
} catch (error) {
console.log(error)
this.$refs.comTable.loading = false
}
},
getPolicyType(type) {
@@ -236,10 +234,11 @@ export default {
.policy {
// width: 100%;
height: 100%;
padding: 0 15px;
padding: 0 10px;
.content-table {
width: 100%;
height: calc(100% - 90px);
padding: 0 10px;
}
}
</style>

View File

@@ -44,6 +44,7 @@ import { columnList, userOptions } from '../../../public/config/columnList'
import { getReq, postReq } from '@/request/api.js'
import EditCom from '@/components/EditCom.vue'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'
import { Modal } from 'ant-design-vue'
import { createVNode } from 'vue'
export default {
name: '',

View File

@@ -1,5 +1,7 @@
const { defineConfig } = require('@vue/cli-service')
const path = require('path')
const Components = require('unplugin-vue-components/webpack')
const { AntDesignVueResolver } = require('unplugin-vue-components/resolvers')
module.exports = defineConfig({
transpileDependencies: true,
publicPath: '/',
@@ -30,7 +32,11 @@ module.exports = defineConfig({
},
less: {
lessOptions: {
javascriptEnabled: true // 兼容 Less 3.0+ 的 JavaScript 表达式
modifyVars: {
//这是配置css主题色
'primary-color': '#143d7d'
},
javascriptEnabled: true
}
}
},
@@ -45,7 +51,15 @@ module.exports = defineConfig({
// 扩展 webpack 配置
plugins: [
// 添加插件
Components({
resolvers: [
AntDesignVueResolver({
resolveIcons: true, // 自动按需加载图标,
importStyle: false //不单独导入样式,对样式进行全局引入
})
],
dts: true // 生成类型声明
})
],
resolve: {
alias: {