fix(api):update store

This commit is contained in:
wang_yp 2024-09-24 20:51:28 +08:00
parent 836806a12c
commit cc638d92ee
31 changed files with 1931 additions and 263 deletions

614
package-lock.json generated
View File

@ -82,6 +82,7 @@
"webpack": "^5.64.4",
"webpack-dev-server": "^4.6.0",
"webpack-manifest-plugin": "^4.0.2",
"webrtc": "^1.14.1",
"workbox-webpack-plugin": "^6.4.1"
}
},
@ -7538,7 +7539,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"peer": true,
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -8050,7 +8050,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz",
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"peer": true,
"dependencies": {
"cipher-base": "^1.0.1",
"inherits": "^2.0.1",
@ -8063,7 +8062,6 @@
"version": "1.1.7",
"resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz",
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
"peer": true,
"dependencies": {
"cipher-base": "^1.0.3",
"create-hash": "^1.1.0",
@ -10861,6 +10859,21 @@
"node": ">= 0.4.0"
}
},
"node_modules/filetransfer": {
"version": "2.0.5",
"resolved": "https://registry.npmmirror.com/filetransfer/-/filetransfer-2.0.5.tgz",
"integrity": "sha512-u48DwnSlHgXQs7KRrhsCXJIVUlqoQ4PbllMWqnsl9fD+rDvbMxXiGMXyLZ1+iKRw/EMezysK0vYo4CPtU6N7qA==",
"dependencies": {
"async": "^0.9.0",
"iana-hashes": "^1.0.0",
"wildemitter": "1.x"
}
},
"node_modules/filetransfer/node_modules/async": {
"version": "0.9.2",
"resolved": "https://registry.npmmirror.com/async/-/async-0.9.2.tgz",
"integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw=="
},
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
@ -11461,6 +11474,41 @@
"node": ">=0.10.0"
}
},
"node_modules/getscreenmedia": {
"version": "1.5.6",
"resolved": "https://registry.npmmirror.com/getscreenmedia/-/getscreenmedia-1.5.6.tgz",
"integrity": "sha512-onBzBz0lqXUr85+OlJlCxNeQfikx2/o5vJJniTSbOr273PUbKIqRu7VQXAKBYW99ZF6AmmUX/5WU2pGskhLGFQ==",
"dependencies": {
"getusermedia": "^2.0.0"
}
},
"node_modules/getscreenmedia/node_modules/getusermedia": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/getusermedia/-/getusermedia-2.0.1.tgz",
"integrity": "sha512-G1gFU5yt2B/atoufTyur/KqWwTgLTIV04cjgIr8cVKbZZM53Cp7bit3XomsZ82KFyS011DtB06wkzl7WZ7uHkA==",
"dependencies": {
"webrtc-adapter": "^2.0.2"
}
},
"node_modules/getscreenmedia/node_modules/webrtc-adapter": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/webrtc-adapter/-/webrtc-adapter-2.1.0.tgz",
"integrity": "sha512-i38RPNdm68QS6jQFWDuYEOLv5HvWE0Hz99eePd7Nk/c3FmhFUR6zNyfhASdPewm2u1tMfHkRTx9cAZyq3prRlA==",
"dependencies": {
"sdp": "^1.0.0"
},
"engines": {
"npm": "^3.10.0"
}
},
"node_modules/getusermedia": {
"version": "1.3.7",
"resolved": "https://registry.npmmirror.com/getusermedia/-/getusermedia-1.3.7.tgz",
"integrity": "sha512-LO5s4IDZTkRbyBk+o+9/WTrJP34o6diQYPhc80ceNqoiYLarSbQQIpEm5WYnPaiFXt9JVbjndwHrjgiUxji4pQ==",
"dependencies": {
"webrtc-adapter": "^1.0.1"
}
},
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
@ -11621,6 +11669,14 @@
"resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz",
"integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="
},
"node_modules/hark": {
"version": "1.2.3",
"resolved": "https://registry.npmmirror.com/hark/-/hark-1.2.3.tgz",
"integrity": "sha512-u68vz9SCa38ESiFJSDjqK8XbXqWzyot7Cj6Y2b6jk2NJ+II3MY2dIrLMg/kjtIAun4Y1DHF/20hfx4rq1G5GMg==",
"dependencies": {
"wildemitter": "^1.2.0"
}
},
"node_modules/harmony-reflect": {
"version": "1.6.2",
"resolved": "https://registry.npmmirror.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz",
@ -11765,7 +11821,6 @@
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.0.4.tgz",
"integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==",
"peer": true,
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -12098,6 +12153,16 @@
"@babel/runtime": "^7.12.0"
}
},
"node_modules/iana-hashes": {
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/iana-hashes/-/iana-hashes-1.1.0.tgz",
"integrity": "sha512-dNFf+NqkF9M1lSluGyHGZNwxdIc8tL++n12Fp3/pcW85jN0ZePP78KugTA16J/paPNlGANE6kUlw81OQs4ulLQ==",
"dependencies": {
"create-hash": "^1.1.0",
"create-hmac": "^1.1.3",
"randombytes": "^2.0.6"
}
},
"node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz",
@ -15715,6 +15780,25 @@
"node": ">=8.9.0"
}
},
"node_modules/localmedia": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/localmedia/-/localmedia-1.2.1.tgz",
"integrity": "sha512-eETyJREvf7P1hiT/72VH/rdtlOqHafFn/oADG6D6tmAj/nETTeY3kSEODgzPdK+VejqvauC9gP5BpSLkcKwCuQ==",
"dependencies": {
"getscreenmedia": "^1.0.0",
"getusermedia": "^1.0.0",
"hark": "^1.0.0",
"mediastream-gain": "^1.0.0",
"mockconsole": "0.0.x",
"webrtcsupport": "^2.2.0",
"wildemitter": "^1.0.0"
}
},
"node_modules/localmedia/node_modules/webrtcsupport": {
"version": "2.2.0",
"resolved": "https://registry.npmmirror.com/webrtcsupport/-/webrtcsupport-2.2.0.tgz",
"integrity": "sha512-9KvL8SxgzbMC/SUMvW+4qcvsXtAnM0iSuxjOwsCqBbA+DA5biaQq8+f4aGfb341BgoFrQX2PQNsvrL2YkuYB1w=="
},
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
@ -15731,12 +15815,74 @@
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/lodash._arrayeach": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
"integrity": "sha512-Mn7HidOVcl3mkQtbPsuKR0Fj0N6Q6DQB77CtYncZcJc0bx5qv2q4Gl6a0LC1AN+GSxpnBDNnK3CKEm9XNA4zqQ=="
},
"node_modules/lodash._arraymap": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz",
"integrity": "sha512-IhRssF2bzQoFQ2Q5H1O52HuJY+OtcHDZekEhaMJ6RkUF+gpLlAsizSRsKp3Ho555ANRk69DFp5b4LOlym4S0bw=="
},
"node_modules/lodash._basecallback": {
"version": "3.3.1",
"resolved": "https://registry.npmmirror.com/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz",
"integrity": "sha512-LQffghuO63ufDY33KKO1ezGKbcFZK3ngYV7JpxaUomoM5acf0YeXU3Pm8csVE0girVs50TXzfNibl69Co3ggJA==",
"dependencies": {
"lodash._baseisequal": "^3.0.0",
"lodash._bindcallback": "^3.0.0",
"lodash.isarray": "^3.0.0",
"lodash.pairs": "^3.0.0"
}
},
"node_modules/lodash._baseeach": {
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz",
"integrity": "sha512-IqUZ9MQo2UT1XPGuBntInqTOlc+oV+bCo0kMp+yuKGsfvRSNgUW0YjWVZUrG/gs+8z/Eyuc0jkJjOBESt9BXxg==",
"dependencies": {
"lodash.keys": "^3.0.0"
}
},
"node_modules/lodash._baseget": {
"version": "3.7.2",
"resolved": "https://registry.npmmirror.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz",
"integrity": "sha512-OgVr3AufoSqlh6eHWOLdLzRdn6TU3LlEGQjtsyLr9XRtPoXUywzquM1uYE+qQAno1kB9CvpI1gsvGwiVwPinog=="
},
"node_modules/lodash._baseisequal": {
"version": "3.0.7",
"resolved": "https://registry.npmmirror.com/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz",
"integrity": "sha512-U+3GsNEZj9ebI03ncLC2pLmYVjgtYZEwdkAPO7UGgtGvAz36JVFPAQUufpSaVL93Cz5arc6JGRKZRhaOhyVJYA==",
"dependencies": {
"lodash.isarray": "^3.0.0",
"lodash.istypedarray": "^3.0.0",
"lodash.keys": "^3.0.0"
}
},
"node_modules/lodash._bindcallback": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
"integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ=="
},
"node_modules/lodash._getnative": {
"version": "3.9.1",
"resolved": "https://registry.npmmirror.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
"integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA=="
},
"node_modules/lodash._reinterpolate": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
"integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==",
"peer": true
},
"node_modules/lodash._topath": {
"version": "3.8.1",
"resolved": "https://registry.npmmirror.com/lodash._topath/-/lodash._topath-3.8.1.tgz",
"integrity": "sha512-QsF5c8A+Biv0oxuSCd05JqhXHPCjvFT0nMXVevfMgU1pp5iEHVSin2cKXi3lQe5+px285p7kAHVtOnbNE79syw==",
"dependencies": {
"lodash.isarray": "^3.0.0"
}
},
"node_modules/lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
@ -15757,11 +15903,48 @@
"resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
"integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="
},
"node_modules/lodash.isarguments": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
"integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="
},
"node_modules/lodash.isarray": {
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
"integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ=="
},
"node_modules/lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
},
"node_modules/lodash.istypedarray": {
"version": "3.0.6",
"resolved": "https://registry.npmmirror.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz",
"integrity": "sha512-lGWJ6N8AA3KSv+ZZxlTdn4f6A7kMfpJboeyvbFdE7IU9YAgweODqmOgdUHOA+c6lVWeVLysdaxciFXi+foVsWw=="
},
"node_modules/lodash.keys": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/lodash.keys/-/lodash.keys-3.1.2.tgz",
"integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==",
"dependencies": {
"lodash._getnative": "^3.0.0",
"lodash.isarguments": "^3.0.0",
"lodash.isarray": "^3.0.0"
}
},
"node_modules/lodash.map": {
"version": "3.1.4",
"resolved": "https://registry.npmmirror.com/lodash.map/-/lodash.map-3.1.4.tgz",
"integrity": "sha512-v7djb/pW+RLcvsmQlHAjZN+zyKyiXgSEdq7V3kVmoT1aCa1bBWy4RbnJRN1SAvNGvkRVfqj66V01wiq+C3b6Cg==",
"dependencies": {
"lodash._arraymap": "^3.0.0",
"lodash._basecallback": "^3.0.0",
"lodash._baseeach": "^3.0.0",
"lodash.isarray": "^3.0.0",
"lodash.keys": "^3.0.0"
}
},
"node_modules/lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@ -15772,6 +15955,25 @@
"resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
},
"node_modules/lodash.pairs": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/lodash.pairs/-/lodash.pairs-3.0.1.tgz",
"integrity": "sha512-lgXvpU43ZNQrZ/pK2cR97YzKeAno3e3HhcyvLKsofljeHKrQcZhT1vW7fg4X61c92tM+mjD/DypoLZYuAKNIkQ==",
"dependencies": {
"lodash.keys": "^3.0.0"
}
},
"node_modules/lodash.pluck": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/lodash.pluck/-/lodash.pluck-3.1.2.tgz",
"integrity": "sha512-L0UkqH/O3Vh+3KowchOe2+YzWMGdR90CbzpzTXGMujZAVfBmjGSvaJwpflJa4C/WNhNvLrlCtMjo6/Uvhty67g==",
"dependencies": {
"lodash._baseget": "^3.0.0",
"lodash._topath": "^3.0.0",
"lodash.isarray": "^3.0.0",
"lodash.map": "^3.0.0"
}
},
"node_modules/lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
@ -15933,7 +16135,6 @@
"version": "1.3.5",
"resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz",
"integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"peer": true,
"dependencies": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1",
@ -15953,6 +16154,14 @@
"node": ">= 0.6"
}
},
"node_modules/mediastream-gain": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/mediastream-gain/-/mediastream-gain-1.0.1.tgz",
"integrity": "sha512-fRBqj0VYSM1w/FqybEhIxyFv0GZe3mej15psQmjaekEMaZEDMJJSk2R06vpqF2Wsn9Elzbx5MgaxORdcNCJkig==",
"dependencies": {
"webrtcsupport": "^1.0.0"
}
},
"node_modules/memfs": {
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz",
@ -16327,6 +16536,11 @@
}
}
},
"node_modules/mockconsole": {
"version": "0.0.1",
"resolved": "https://registry.npmmirror.com/mockconsole/-/mockconsole-0.0.1.tgz",
"integrity": "sha512-9wFq0SJFTaxxEYmfjWf4U8uYku5HKwn3OsTOct3aQFLDois6HrLse2iZAy7v5hyTNts2XH6Y1LW8iMXWxiH6Vg=="
},
"node_modules/move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz",
@ -28389,7 +28603,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz",
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"peer": true,
"dependencies": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
@ -28503,6 +28716,30 @@
"node": "6.* || >= 7.*"
}
},
"node_modules/rtcpeerconnection": {
"version": "3.1.6",
"resolved": "https://registry.npmmirror.com/rtcpeerconnection/-/rtcpeerconnection-3.1.6.tgz",
"integrity": "sha512-SObgG8nFtpuOD13bzlMv7tbKlTyAozbZdtE4DXc3zazSUt9b9AWbnnR+xyQw91eQ+lWXTdyHzPD8hZZSB9Rt3Q==",
"dependencies": {
"lodash.foreach": "^3.0.2",
"lodash.pluck": "^3.0.2",
"sdp-jingle-json": "2.x",
"traceablepeerconnection": "^1.0.0",
"webrtc-adapter-test": "^0.2.3",
"wildemitter": "1.x"
}
},
"node_modules/rtcpeerconnection/node_modules/lodash.foreach": {
"version": "3.0.3",
"resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-3.0.3.tgz",
"integrity": "sha512-PA7Lp7pe2HMJBoB1vELegEIF3waUFnM0fWDKJVYolwZ4zHh6WTmnq0xmzfQksD66gx2quhDNyBdyaE2T8/DP3Q==",
"dependencies": {
"lodash._arrayeach": "^3.0.0",
"lodash._baseeach": "^3.0.0",
"lodash._bindcallback": "^3.0.0",
"lodash.isarray": "^3.0.0"
}
},
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
@ -29017,6 +29254,16 @@
"get-ready": "~1.0.0"
}
},
"node_modules/sdp": {
"version": "1.5.4",
"resolved": "https://registry.npmmirror.com/sdp/-/sdp-1.5.4.tgz",
"integrity": "sha512-9x0+fpJHW2bbqtIktmL+H9m+BswgurPVPhWrur4cCZPDWDSsdGYvRBaKhDXlnNCD1b/Xi8cOTG2u703CTQuwgg=="
},
"node_modules/sdp-jingle-json": {
"version": "2.2.1",
"resolved": "https://registry.npmmirror.com/sdp-jingle-json/-/sdp-jingle-json-2.2.1.tgz",
"integrity": "sha512-xmFFjZWsFrcX4kVWq3ZNjy7+VkH4nalB+RiNvQSQ7oDsDypI+93XcvO8FPSHgsHtUd2bTozLZgXM6KLeVtJ4Zw=="
},
"node_modules/select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz",
@ -29321,7 +29568,6 @@
"version": "2.4.11",
"resolved": "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"peer": true,
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -31080,6 +31326,15 @@
"node": ">=8"
}
},
"node_modules/traceablepeerconnection": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/traceablepeerconnection/-/traceablepeerconnection-1.2.0.tgz",
"integrity": "sha512-YdBqgxPB03fwuNaEXZTOsqLxZJnA2A6D1UqA+1RVYFCc9VoD4EIprg0HiaWZpKqj3n1XuJiS+5hZBALqDjKpKw==",
"dependencies": {
"webrtc-adapter": "^1.0",
"wildemitter": "1.x"
}
},
"node_modules/tryer": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz",
@ -32451,6 +32706,37 @@
"url": "https://opencollective.com/webpack"
}
},
"node_modules/webrtc": {
"version": "1.14.1",
"resolved": "https://registry.npmmirror.com/webrtc/-/webrtc-1.14.1.tgz",
"integrity": "sha512-en4xHfLMsgRY7cxju6qcHyCE56/+005HkC4V5qtpTLlUlHLxHX11pB8jnyZp6gaZ6A65sh0VnbHn1AyI052ovw==",
"dependencies": {
"filetransfer": "^2.0.0",
"localmedia": "^1.0.2",
"mockconsole": "0.0.1",
"rtcpeerconnection": "^3.0.6",
"webrtcsupport": "^1.2.4",
"wildemitter": "1.x"
}
},
"node_modules/webrtc-adapter": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/webrtc-adapter/-/webrtc-adapter-1.2.2.tgz",
"integrity": "sha512-qJKt/SbDF62+8/akW0pTry0cPO5LVai+mIb3h9ei87sCfeVVKLpkX0/HgStLUtbu5cbuMi0UYHtuUaSvw3g75g==",
"dependencies": {
"sdp": "^1.0.0"
}
},
"node_modules/webrtc-adapter-test": {
"version": "0.2.10",
"resolved": "https://registry.npmmirror.com/webrtc-adapter-test/-/webrtc-adapter-test-0.2.10.tgz",
"integrity": "sha512-fhFwkniodK0gDVYi/P/qMRV4PNLT+ctJo/WCKL4izK2SYkN6gj4ajy3Pi/bEgM5wRnUdN14oIlvb5BKtFtloVw=="
},
"node_modules/webrtcsupport": {
"version": "1.3.2",
"resolved": "https://registry.npmmirror.com/webrtcsupport/-/webrtcsupport-1.3.2.tgz",
"integrity": "sha512-/7cKJNIFHUVuTgKRLUKNxqFzHXNI+sGUbYdJAcYWoXJyzkEy+NTmKyWPGf2qbE6hmJxfDLA5utyaBttxpT778A=="
},
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz",
@ -32614,6 +32900,11 @@
"resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz",
"integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng=="
},
"node_modules/wildemitter": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/wildemitter/-/wildemitter-1.2.1.tgz",
"integrity": "sha512-UMmSUoIQSir+XbBpTxOTS53uJ8s/lVhADCkEbhfRjUGFDPme/XGOb0sBWLx5sTz7Wx/2+TlAw1eK9O5lw5PiEw=="
},
"node_modules/win-release": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/win-release/-/win-release-1.1.1.tgz",
@ -38595,7 +38886,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"peer": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -39019,7 +39309,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz",
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"peer": true,
"requires": {
"cipher-base": "^1.0.1",
"inherits": "^2.0.1",
@ -39032,7 +39321,6 @@
"version": "1.1.7",
"resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz",
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
"peer": true,
"requires": {
"cipher-base": "^1.0.3",
"create-hash": "^1.1.0",
@ -41123,6 +41411,23 @@
"resolved": "https://registry.npmmirror.com/filesize/-/filesize-8.0.7.tgz",
"integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ=="
},
"filetransfer": {
"version": "2.0.5",
"resolved": "https://registry.npmmirror.com/filetransfer/-/filetransfer-2.0.5.tgz",
"integrity": "sha512-u48DwnSlHgXQs7KRrhsCXJIVUlqoQ4PbllMWqnsl9fD+rDvbMxXiGMXyLZ1+iKRw/EMezysK0vYo4CPtU6N7qA==",
"requires": {
"async": "^0.9.0",
"iana-hashes": "^1.0.0",
"wildemitter": "1.x"
},
"dependencies": {
"async": {
"version": "0.9.2",
"resolved": "https://registry.npmmirror.com/async/-/async-0.9.2.tgz",
"integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw=="
}
}
},
"fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
@ -41545,6 +41850,40 @@
"integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
"peer": true
},
"getscreenmedia": {
"version": "1.5.6",
"resolved": "https://registry.npmmirror.com/getscreenmedia/-/getscreenmedia-1.5.6.tgz",
"integrity": "sha512-onBzBz0lqXUr85+OlJlCxNeQfikx2/o5vJJniTSbOr273PUbKIqRu7VQXAKBYW99ZF6AmmUX/5WU2pGskhLGFQ==",
"requires": {
"getusermedia": "^2.0.0"
},
"dependencies": {
"getusermedia": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/getusermedia/-/getusermedia-2.0.1.tgz",
"integrity": "sha512-G1gFU5yt2B/atoufTyur/KqWwTgLTIV04cjgIr8cVKbZZM53Cp7bit3XomsZ82KFyS011DtB06wkzl7WZ7uHkA==",
"requires": {
"webrtc-adapter": "^2.0.2"
}
},
"webrtc-adapter": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/webrtc-adapter/-/webrtc-adapter-2.1.0.tgz",
"integrity": "sha512-i38RPNdm68QS6jQFWDuYEOLv5HvWE0Hz99eePd7Nk/c3FmhFUR6zNyfhASdPewm2u1tMfHkRTx9cAZyq3prRlA==",
"requires": {
"sdp": "^1.0.0"
}
}
}
},
"getusermedia": {
"version": "1.3.7",
"resolved": "https://registry.npmmirror.com/getusermedia/-/getusermedia-1.3.7.tgz",
"integrity": "sha512-LO5s4IDZTkRbyBk+o+9/WTrJP34o6diQYPhc80ceNqoiYLarSbQQIpEm5WYnPaiFXt9JVbjndwHrjgiUxji4pQ==",
"requires": {
"webrtc-adapter": "^1.0.1"
}
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
@ -41664,6 +42003,14 @@
"resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz",
"integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="
},
"hark": {
"version": "1.2.3",
"resolved": "https://registry.npmmirror.com/hark/-/hark-1.2.3.tgz",
"integrity": "sha512-u68vz9SCa38ESiFJSDjqK8XbXqWzyot7Cj6Y2b6jk2NJ+II3MY2dIrLMg/kjtIAun4Y1DHF/20hfx4rq1G5GMg==",
"requires": {
"wildemitter": "^1.2.0"
}
},
"harmony-reflect": {
"version": "1.6.2",
"resolved": "https://registry.npmmirror.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz",
@ -41767,7 +42114,6 @@
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.0.4.tgz",
"integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==",
"peer": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -42011,6 +42357,16 @@
"@babel/runtime": "^7.12.0"
}
},
"iana-hashes": {
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/iana-hashes/-/iana-hashes-1.1.0.tgz",
"integrity": "sha512-dNFf+NqkF9M1lSluGyHGZNwxdIc8tL++n12Fp3/pcW85jN0ZePP78KugTA16J/paPNlGANE6kUlw81OQs4ulLQ==",
"requires": {
"create-hash": "^1.1.0",
"create-hmac": "^1.1.3",
"randombytes": "^2.0.6"
}
},
"iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz",
@ -44628,6 +44984,27 @@
"json5": "^2.1.2"
}
},
"localmedia": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/localmedia/-/localmedia-1.2.1.tgz",
"integrity": "sha512-eETyJREvf7P1hiT/72VH/rdtlOqHafFn/oADG6D6tmAj/nETTeY3kSEODgzPdK+VejqvauC9gP5BpSLkcKwCuQ==",
"requires": {
"getscreenmedia": "^1.0.0",
"getusermedia": "^1.0.0",
"hark": "^1.0.0",
"mediastream-gain": "^1.0.0",
"mockconsole": "0.0.x",
"webrtcsupport": "^2.2.0",
"wildemitter": "^1.0.0"
},
"dependencies": {
"webrtcsupport": {
"version": "2.2.0",
"resolved": "https://registry.npmmirror.com/webrtcsupport/-/webrtcsupport-2.2.0.tgz",
"integrity": "sha512-9KvL8SxgzbMC/SUMvW+4qcvsXtAnM0iSuxjOwsCqBbA+DA5biaQq8+f4aGfb341BgoFrQX2PQNsvrL2YkuYB1w=="
}
}
},
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
@ -44641,12 +45018,74 @@
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"lodash._arrayeach": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
"integrity": "sha512-Mn7HidOVcl3mkQtbPsuKR0Fj0N6Q6DQB77CtYncZcJc0bx5qv2q4Gl6a0LC1AN+GSxpnBDNnK3CKEm9XNA4zqQ=="
},
"lodash._arraymap": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz",
"integrity": "sha512-IhRssF2bzQoFQ2Q5H1O52HuJY+OtcHDZekEhaMJ6RkUF+gpLlAsizSRsKp3Ho555ANRk69DFp5b4LOlym4S0bw=="
},
"lodash._basecallback": {
"version": "3.3.1",
"resolved": "https://registry.npmmirror.com/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz",
"integrity": "sha512-LQffghuO63ufDY33KKO1ezGKbcFZK3ngYV7JpxaUomoM5acf0YeXU3Pm8csVE0girVs50TXzfNibl69Co3ggJA==",
"requires": {
"lodash._baseisequal": "^3.0.0",
"lodash._bindcallback": "^3.0.0",
"lodash.isarray": "^3.0.0",
"lodash.pairs": "^3.0.0"
}
},
"lodash._baseeach": {
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz",
"integrity": "sha512-IqUZ9MQo2UT1XPGuBntInqTOlc+oV+bCo0kMp+yuKGsfvRSNgUW0YjWVZUrG/gs+8z/Eyuc0jkJjOBESt9BXxg==",
"requires": {
"lodash.keys": "^3.0.0"
}
},
"lodash._baseget": {
"version": "3.7.2",
"resolved": "https://registry.npmmirror.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz",
"integrity": "sha512-OgVr3AufoSqlh6eHWOLdLzRdn6TU3LlEGQjtsyLr9XRtPoXUywzquM1uYE+qQAno1kB9CvpI1gsvGwiVwPinog=="
},
"lodash._baseisequal": {
"version": "3.0.7",
"resolved": "https://registry.npmmirror.com/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz",
"integrity": "sha512-U+3GsNEZj9ebI03ncLC2pLmYVjgtYZEwdkAPO7UGgtGvAz36JVFPAQUufpSaVL93Cz5arc6JGRKZRhaOhyVJYA==",
"requires": {
"lodash.isarray": "^3.0.0",
"lodash.istypedarray": "^3.0.0",
"lodash.keys": "^3.0.0"
}
},
"lodash._bindcallback": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
"integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ=="
},
"lodash._getnative": {
"version": "3.9.1",
"resolved": "https://registry.npmmirror.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
"integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA=="
},
"lodash._reinterpolate": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
"integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==",
"peer": true
},
"lodash._topath": {
"version": "3.8.1",
"resolved": "https://registry.npmmirror.com/lodash._topath/-/lodash._topath-3.8.1.tgz",
"integrity": "sha512-QsF5c8A+Biv0oxuSCd05JqhXHPCjvFT0nMXVevfMgU1pp5iEHVSin2cKXi3lQe5+px285p7kAHVtOnbNE79syw==",
"requires": {
"lodash.isarray": "^3.0.0"
}
},
"lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
@ -44667,11 +45106,48 @@
"resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
"integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="
},
"lodash.isarguments": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
"integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="
},
"lodash.isarray": {
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
"integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ=="
},
"lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
},
"lodash.istypedarray": {
"version": "3.0.6",
"resolved": "https://registry.npmmirror.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz",
"integrity": "sha512-lGWJ6N8AA3KSv+ZZxlTdn4f6A7kMfpJboeyvbFdE7IU9YAgweODqmOgdUHOA+c6lVWeVLysdaxciFXi+foVsWw=="
},
"lodash.keys": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/lodash.keys/-/lodash.keys-3.1.2.tgz",
"integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==",
"requires": {
"lodash._getnative": "^3.0.0",
"lodash.isarguments": "^3.0.0",
"lodash.isarray": "^3.0.0"
}
},
"lodash.map": {
"version": "3.1.4",
"resolved": "https://registry.npmmirror.com/lodash.map/-/lodash.map-3.1.4.tgz",
"integrity": "sha512-v7djb/pW+RLcvsmQlHAjZN+zyKyiXgSEdq7V3kVmoT1aCa1bBWy4RbnJRN1SAvNGvkRVfqj66V01wiq+C3b6Cg==",
"requires": {
"lodash._arraymap": "^3.0.0",
"lodash._basecallback": "^3.0.0",
"lodash._baseeach": "^3.0.0",
"lodash.isarray": "^3.0.0",
"lodash.keys": "^3.0.0"
}
},
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@ -44682,6 +45158,25 @@
"resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
},
"lodash.pairs": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/lodash.pairs/-/lodash.pairs-3.0.1.tgz",
"integrity": "sha512-lgXvpU43ZNQrZ/pK2cR97YzKeAno3e3HhcyvLKsofljeHKrQcZhT1vW7fg4X61c92tM+mjD/DypoLZYuAKNIkQ==",
"requires": {
"lodash.keys": "^3.0.0"
}
},
"lodash.pluck": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/lodash.pluck/-/lodash.pluck-3.1.2.tgz",
"integrity": "sha512-L0UkqH/O3Vh+3KowchOe2+YzWMGdR90CbzpzTXGMujZAVfBmjGSvaJwpflJa4C/WNhNvLrlCtMjo6/Uvhty67g==",
"requires": {
"lodash._baseget": "^3.0.0",
"lodash._topath": "^3.0.0",
"lodash.isarray": "^3.0.0",
"lodash.map": "^3.0.0"
}
},
"lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
@ -44817,7 +45312,6 @@
"version": "1.3.5",
"resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz",
"integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"peer": true,
"requires": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1",
@ -44834,6 +45328,14 @@
"resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
},
"mediastream-gain": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/mediastream-gain/-/mediastream-gain-1.0.1.tgz",
"integrity": "sha512-fRBqj0VYSM1w/FqybEhIxyFv0GZe3mej15psQmjaekEMaZEDMJJSk2R06vpqF2Wsn9Elzbx5MgaxORdcNCJkig==",
"requires": {
"webrtcsupport": "^1.0.0"
}
},
"memfs": {
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz",
@ -45102,6 +45604,11 @@
"integrity": "sha512-NkJREyFTSUXR772Qaai51BnE1voWx56LOL80xG7qkZr6vo8vEaLF3sz1JNUVh+rxmUzxYaqOhfuxTfqUh0FXUg==",
"requires": {}
},
"mockconsole": {
"version": "0.0.1",
"resolved": "https://registry.npmmirror.com/mockconsole/-/mockconsole-0.0.1.tgz",
"integrity": "sha512-9wFq0SJFTaxxEYmfjWf4U8uYku5HKwn3OsTOct3aQFLDois6HrLse2iZAy7v5hyTNts2XH6Y1LW8iMXWxiH6Vg=="
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz",
@ -54135,7 +54642,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz",
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"peer": true,
"requires": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
@ -54226,6 +54732,32 @@
"integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
"peer": true
},
"rtcpeerconnection": {
"version": "3.1.6",
"resolved": "https://registry.npmmirror.com/rtcpeerconnection/-/rtcpeerconnection-3.1.6.tgz",
"integrity": "sha512-SObgG8nFtpuOD13bzlMv7tbKlTyAozbZdtE4DXc3zazSUt9b9AWbnnR+xyQw91eQ+lWXTdyHzPD8hZZSB9Rt3Q==",
"requires": {
"lodash.foreach": "^3.0.2",
"lodash.pluck": "^3.0.2",
"sdp-jingle-json": "2.x",
"traceablepeerconnection": "^1.0.0",
"webrtc-adapter-test": "^0.2.3",
"wildemitter": "1.x"
},
"dependencies": {
"lodash.foreach": {
"version": "3.0.3",
"resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-3.0.3.tgz",
"integrity": "sha512-PA7Lp7pe2HMJBoB1vELegEIF3waUFnM0fWDKJVYolwZ4zHh6WTmnq0xmzfQksD66gx2quhDNyBdyaE2T8/DP3Q==",
"requires": {
"lodash._arrayeach": "^3.0.0",
"lodash._baseeach": "^3.0.0",
"lodash._bindcallback": "^3.0.0",
"lodash.isarray": "^3.0.0"
}
}
}
},
"run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
@ -54599,6 +55131,16 @@
"get-ready": "~1.0.0"
}
},
"sdp": {
"version": "1.5.4",
"resolved": "https://registry.npmmirror.com/sdp/-/sdp-1.5.4.tgz",
"integrity": "sha512-9x0+fpJHW2bbqtIktmL+H9m+BswgurPVPhWrur4cCZPDWDSsdGYvRBaKhDXlnNCD1b/Xi8cOTG2u703CTQuwgg=="
},
"sdp-jingle-json": {
"version": "2.2.1",
"resolved": "https://registry.npmmirror.com/sdp-jingle-json/-/sdp-jingle-json-2.2.1.tgz",
"integrity": "sha512-xmFFjZWsFrcX4kVWq3ZNjy7+VkH4nalB+RiNvQSQ7oDsDypI+93XcvO8FPSHgsHtUd2bTozLZgXM6KLeVtJ4Zw=="
},
"select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz",
@ -54853,7 +55395,6 @@
"version": "2.4.11",
"resolved": "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"peer": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -56233,6 +56774,15 @@
"punycode": "^2.1.1"
}
},
"traceablepeerconnection": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/traceablepeerconnection/-/traceablepeerconnection-1.2.0.tgz",
"integrity": "sha512-YdBqgxPB03fwuNaEXZTOsqLxZJnA2A6D1UqA+1RVYFCc9VoD4EIprg0HiaWZpKqj3n1XuJiS+5hZBALqDjKpKw==",
"requires": {
"webrtc-adapter": "^1.0",
"wildemitter": "1.x"
}
},
"tryer": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz",
@ -57268,6 +57818,37 @@
"resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz",
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="
},
"webrtc": {
"version": "1.14.1",
"resolved": "https://registry.npmmirror.com/webrtc/-/webrtc-1.14.1.tgz",
"integrity": "sha512-en4xHfLMsgRY7cxju6qcHyCE56/+005HkC4V5qtpTLlUlHLxHX11pB8jnyZp6gaZ6A65sh0VnbHn1AyI052ovw==",
"requires": {
"filetransfer": "^2.0.0",
"localmedia": "^1.0.2",
"mockconsole": "0.0.1",
"rtcpeerconnection": "^3.0.6",
"webrtcsupport": "^1.2.4",
"wildemitter": "1.x"
}
},
"webrtc-adapter": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/webrtc-adapter/-/webrtc-adapter-1.2.2.tgz",
"integrity": "sha512-qJKt/SbDF62+8/akW0pTry0cPO5LVai+mIb3h9ei87sCfeVVKLpkX0/HgStLUtbu5cbuMi0UYHtuUaSvw3g75g==",
"requires": {
"sdp": "^1.0.0"
}
},
"webrtc-adapter-test": {
"version": "0.2.10",
"resolved": "https://registry.npmmirror.com/webrtc-adapter-test/-/webrtc-adapter-test-0.2.10.tgz",
"integrity": "sha512-fhFwkniodK0gDVYi/P/qMRV4PNLT+ctJo/WCKL4izK2SYkN6gj4ajy3Pi/bEgM5wRnUdN14oIlvb5BKtFtloVw=="
},
"webrtcsupport": {
"version": "1.3.2",
"resolved": "https://registry.npmmirror.com/webrtcsupport/-/webrtcsupport-1.3.2.tgz",
"integrity": "sha512-/7cKJNIFHUVuTgKRLUKNxqFzHXNI+sGUbYdJAcYWoXJyzkEy+NTmKyWPGf2qbE6hmJxfDLA5utyaBttxpT778A=="
},
"websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz",
@ -57394,6 +57975,11 @@
"resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz",
"integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng=="
},
"wildemitter": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/wildemitter/-/wildemitter-1.2.1.tgz",
"integrity": "sha512-UMmSUoIQSir+XbBpTxOTS53uJ8s/lVhADCkEbhfRjUGFDPme/XGOb0sBWLx5sTz7Wx/2+TlAw1eK9O5lw5PiEw=="
},
"win-release": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/win-release/-/win-release-1.1.1.tgz",

View File

@ -77,6 +77,7 @@
"webpack": "^5.64.4",
"webpack-dev-server": "^4.6.0",
"webpack-manifest-plugin": "^4.0.2",
"webrtc": "^1.14.1",
"workbox-webpack-plugin": "^6.4.1"
},
"scripts": {

View File

@ -1,66 +1,13 @@
import { inject, observer } from "mobx-react";
import { Modal } from "antd";
import { Store } from "antd/lib/form/interface";
import { Outlet } from "react-router";
import SimpleForm from "./components/form/simple_form";
import { FormInstance } from "antd/lib/form";
import React from "react";
import MyComponent from "./components/errorComp";
const App = (props: Store) => {
const { usrStore } = props;
const formRef = React.useRef<FormInstance>(null);
const loginForm = [
{
type: "input",
label: "用户名",
name: "account",
value: "",
rules: [{ required: true, message: "请输入用户名!" }],
},
{
type: "password",
label: "密码",
name: "password",
value: "",
rules: [{ required: true, message: "请输入密码!" }],
},
];
const onFinish = (values: any) => {
usrStore.login({
userName: values.account,
passWord: values.password,
});
};
const onFinishFailed = () => {};
const App = () => {
return (
<>
<MyComponent>
<Outlet />
<Modal
title="登录"
className="owner_model"
width={"50%"}
open={usrStore.isNeedLogin}
afterClose={() => {}}
onOk={() => {
formRef.current?.submit();
}}
onCancel={() => {
usrStore.closeLoginDilog();
}}
>
<SimpleForm
formRef={formRef}
formName="login_basic"
colProps={4}
formDatas={loginForm}
onFinish={onFinish}
onFinishFailed={onFinishFailed}
/>
</Modal>
</MyComponent>
</>
);
};
export default inject("usrStore")(observer(App));
export default App;

View File

@ -1,4 +1,5 @@
import { FormInstance } from "antd"
import React from "react"
export enum FormType {
input = "input",
select = "select",
@ -32,6 +33,7 @@ export interface SimpleFormData {
onFinishFailed: Function,
formDatas: Array<FormDatas>,
createCallback?: Function
children?: React.ReactElement
}

View File

@ -28,6 +28,9 @@ const SimpleForm = (props: SimpleFormData) => {
onFinish={onFinish}
autoComplete="on"
>
{
props.children??props.children
}
{props.formDatas.map((v) => {
switch (v.type) {
case FormType.input:
@ -159,6 +162,8 @@ const SimpleForm = (props: SimpleFormData) => {
);
}
})}
</Form>
);
};

View File

@ -0,0 +1,301 @@
// // 档案管理
// import { Button, Space, Modal, FormInstance, Flex } from "antd";
// import { inject, observer } from "mobx-react";
// import { useEffect, useState } from "react";
// import { Store } from "antd/lib/form/interface";
// import SimpleForm from "@/components/form/simple_form";
// import React from "react";
// import { folderConfig } from "./archives_conf";
// import { Form, Select } from "antd";
// import BTable from "@/components/b_table";
// const { Option } = Select;
// const Archive = (props: Store) => {
// const { folderStore,archivesStore } = props;
// const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
// const [isModalOpenArchives, setIsModalOpenArchives] =
// useState<boolean>(false);
// const [projectConfig, setProjectConfig] = useState<any>([]);
// const formRef = React.useRef<FormInstance>(null);
// const [tagId, setId] = useState<Number | null>(null);
// const [folderList, setfolderList] = useState<any>(null); // 仓库列表
// const onFinish = (values: any) => {
// let data = values;
// if (!tagId) {
// folderStore.add(data);
// } else {
// folderStore.putItem(tagId, data);
// }
// setIsModalOpen(false);
// };
// useEffect(() => {
// folderStore.getlist().then(()=>{
// setfolderList(folderStore.list);
// });
// }, [folderStore]);
// // 添加事件
// const addHandler = () => {
// setProjectConfig(folderConfig);
// setIsModalOpen(true);
// };
// // 取消
// const cancelHandler = () => {
// setId(null);
// setIsModalOpen(false);
// };
// const cancelHandlerArch = () => {
// setIsModalOpenArchives(false);
// };
// // 文件夹点击
// const folderHandle = () => {
// setIsModalOpenArchives(true);
// };
// const onFinishFailed = () => {};
// return (
// <div className="contentBox">
// <Space direction="vertical" size="middle" style={{ display: "flex" }}>
// <Space direction="horizontal" size={"middle"}>
// <Button type="default" onClick={addHandler}>
// 添加档案
// </Button>
// </Space>
// <BTable
// store={archivesStore}
// columns={[
// ...columns,
// {
// title: "操作",
// dataIndex: "id",
// ellipsis: {
// showTitle: false,
// },
// render: (any, record) => column_widget(any, record),
// },
// ]}
// dataSource={archivesStore.list}
// />
// <Modal
// title={"档案查看"}
// width={"80%"}
// open={isModalOpenArchives}
// onOk={() => cancelHandlerArch}
// onCancel={cancelHandlerArch}
// >
// </Modal>
// <Modal
// title={!tagId ? "添加文件夹" : "编辑文件夹"}
// width={600}
// open={isModalOpen}
// afterClose={() => formRef.current?.resetFields()}
// onOk={() => formRef.current?.submit()}
// onCancel={cancelHandler}
// >
// <SimpleForm
// formRef={formRef}
// createCallback={() => {}}
// formName="card_basic"
// colProps={12}
// span={6}
// subBtnName="提交"
// formDatas={projectConfig}
// onFinish={onFinish}
// initialValues={true}
// onFinishFailed={onFinishFailed}
// >
// <Form.Item
// key="ac_identity"
// label="所属档案类别"
// name="ac_identity"
// rules={[{ required: true, message: "请选择所属档案类别!" }]}
// >
// <Select placeholder="">
// {folderList?.map((v: any) => {
// return (
// <Option key={v.identity} value={v.identity}>
// {v.category_name}
// </Option>
// );
// })}
// </Select>
// </Form.Item>
// </SimpleForm>
// </Modal>
// </Space>
// </div>
// );
// };
// export default inject(...["archivesStore", "folderStore"])(
// observer(Archive)
// );
import { Button, Space, Modal, FormInstance, Select } from "antd";
import { inject, observer } from "mobx-react";
import BTable from "@/components/b_table";
import { useEffect, useState } from "react";
import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { columns_ac, defaultConfig } from "./archivesCat_clumn";
import { Form } from "antd";
import dayjs from "dayjs";
const { Option } = Select;
const Archive = (props: Store) => {
const { archivesStore, folderStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [record, setRecord] = useState<any>(null);
const [stashList, setStash] = useState<any>(null); // 仓库列表
// 获取物资列表
useEffect(() => {
folderStore.getlist().then(() => {
setStash(folderStore.list)
setProjectConfig(defaultConfig);
});
}, [folderStore]);
// 获取分类
useEffect(() => {
archivesStore.getlist()
}, [archivesStore]);
const column_widget = (any, record) => {
return (
<Space wrap>
<Button
type="dashed"
size="small"
onClick={() => {
edit(record);
}}
>
</Button>
<Button
type="dashed"
danger
size="small"
onClick={() => {
archivesStore.deleteItem(record.id);
}}
>
</Button>
</Space>
);
};
const edit = (record) => {
setIsModalOpen(true);
record.expiry_date = dayjs(record.expiry_date);
setRecord(record);
};
const onFinish = (values: any) => {
let data = {
...values,
file_url: values.file_url[0].name,
};
if (!record?.id) {
archivesStore.add(data);
} else {
archivesStore.putItem(record.id, data);
}
setIsModalOpen(false);
};
const onFinishFailed = () => {};
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button
type="default"
onClick={() => {
setRecord(null);
setProjectConfig(defaultConfig);
setIsModalOpen(true);
}}
>
</Button>
</Space>
<BTable
store={archivesStore}
columns={[
...columns_ac,
{
title: "操作",
dataIndex: "id",
ellipsis: {
showTitle: false,
},
render: (any, record) => column_widget(any, record),
},
]}
dataSource={archivesStore.list}
/>
<Modal
title={!record?.id ? "添加档案" : "编辑档案"}
width={1200}
open={isModalOpen}
afterClose={() => formRef.current?.resetFields()}
onOk={() => formRef.current?.submit()}
onCancel={() => {
setIsModalOpen(false);
}}
>
<SimpleForm
formRef={formRef}
createCallback={() => {
if (record?.id) {
formRef.current?.setFieldsValue(record);
} else {
formRef.current?.setFieldsValue(null);
}
}}
formName="card_basic"
colProps={25}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
>
<>
<Form.Item
key="folder_identity"
label="文件夹"
name="folder_identity"
rules={[{ required: true, message: "请选择文件夹!" }]}
>
<Select placeholder="">
{stashList?.map((v: any) => {
return (
<Option key={v.identity} value={v.identity}>
{v.folder_name}
</Option>
);
})}
</Select>
</Form.Item>
</>
</SimpleForm>
</Modal>
</Space>
</div>
);
};
export default inject(
"archivesStore",
"folderStore"
)(observer(Archive));

View File

@ -0,0 +1,124 @@
// 类别
import { Button, Space, Modal, FormInstance } from "antd";
import { inject, observer } from "mobx-react";
import BTable from "@/components/b_table";
import { useEffect, useState } from "react";
import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { columns, defaultConfig } from "./archivesCat_clumn";
const ArchivesCat = (props: Store) => {
const { acStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [record, setRecord] = useState<any>(null);
useEffect(() => {
acStore.getlist();
setProjectConfig(defaultConfig);
}, [acStore]);
const column_widget = (any, record) => {
return (
<Space wrap>
<Button
type="dashed"
size="small"
onClick={() => {
edit(record);
}}
>
</Button>
<Button
type="dashed"
danger
size="small"
onClick={() => {
acStore.deleteItem(record.id);
}}
>
</Button>
</Space>
);
};
const edit = (record) => {
setIsModalOpen(true);
setRecord(record);
};
const onFinish = (values: any) => {
let data = {
...values,
pid: values.pid ?? 0,
};
if (!record?.id) {
acStore.add(data);
} else {
acStore.putItem(record.id, data);
}
setIsModalOpen(false);
};
const handleAdd = () => {
setRecord(null);
setProjectConfig(defaultConfig);
setIsModalOpen(true);
};
const onFinishFailed = () => {};
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button onClick={handleAdd}></Button>
</Space>
<BTable
store={acStore}
columns={[
...columns,
{
title: "操作",
dataIndex: "id",
ellipsis: {
showTitle: false,
},
render: (any, record) => column_widget(any, record),
},
]}
dataSource={acStore.list}
/>
<Modal
title={!record?.id ? "添加档案类别" : "编辑档案类别"}
width={1200}
open={isModalOpen}
afterClose={() => formRef.current?.resetFields()}
onOk={() => formRef.current?.submit()}
onCancel={() => {
setIsModalOpen(false);
}}
>
<SimpleForm
formRef={formRef}
createCallback={() => {
if (record?.id) {
formRef.current?.setFieldsValue(record);
} else {
formRef.current?.setFieldsValue(null);
}
}}
formName="card_basic"
colProps={25}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
/>
</Modal>
</Space>
</div>
);
};
export default inject("acStore")(observer(ArchivesCat));

View File

@ -0,0 +1,46 @@
import { FormType } from "@/components/form/interface";
import { UserDataType } from "@/model/userModel";
import { ColumnsType } from "antd/lib/table";
export const columns: ColumnsType<UserDataType> = [
{
title: "分类名称",
dataIndex: "category_name",
},
];
export const columns_ac: ColumnsType<UserDataType> = [
{
title: "档案名称",
dataIndex: "archives_name",
},
{
title: "档案描述",
dataIndex: "archives_desc",
},
];
export const defaultConfig = [
{
type: FormType.input,
label: "档案名称",
name: "archives_name",
value: "",
rules: [{ required: true, message: "请输入分类名称!" }],
},
{
type: FormType.input,
label: "档案描述",
name: "archives_desc",
value: "",
},
{
type: FormType.upload,
label: "档案文件",
name: "file_url",
value: "",
},
];

View File

@ -0,0 +1,139 @@
// 档案管理
import { Button, Space, Modal, FormInstance, Flex } from "antd";
import { inject, observer } from "mobx-react";
import { useEffect, useState } from "react";
import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import FolderTwoTone from "@ant-design/icons/FolderOpenTwoTone";
import { folderConfig } from "./archives_conf";
import { Form, Select } from "antd";
import Preview from "./preview";
const { Option } = Select;
const ArchivesFolder = (props: Store) => {
const { folderStore, acStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [isModalOpenArchives, setIsModalOpenArchives] =
useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [tagId, setId] = useState<Number | null>(null);
const [catList, setCatList] = useState<any>(null); // 仓库列表
const onFinish = (values: any) => {
let data = values;
if (!tagId) {
folderStore.add(data);
} else {
folderStore.putItem(tagId, data);
}
setIsModalOpen(false);
};
useEffect(() => {
folderStore.getlist();
acStore.getlist().then(() => {
setCatList(acStore.list);
});
}, [folderStore, acStore]);
// 添加事件
const addHandler = () => {
setProjectConfig(folderConfig);
setIsModalOpen(true);
};
// 取消
const cancelHandler = () => {
setId(null);
setIsModalOpen(false);
};
const cancelHandlerArch = () => {
setIsModalOpenArchives(false);
};
// 文件夹点击
const folderHandle = (e) => {
folderStore.getAlist(e.identity).then((res) => {
setIsModalOpenArchives(true);
})
};
const onFinishFailed = () => {};
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button type="default" onClick={addHandler}>
</Button>
</Space>
<Flex wrap gap="25px" justify="start">
{Array.from({ length: folderStore.list?.length ?? 0 }, (_, i) => (
<div
key={i}
onClick={()=>folderHandle(folderStore.list[i])}
style={{ cursor: "pointer", width: "120px" }}
>
<FolderTwoTone rotate={-270} style={{ fontSize: "80px" }} />
<p style={{ fontSize: "14px" }}>
{folderStore.list[i].folder_name}
</p>
</div>
))}
</Flex>
<Modal
title={"档案预览"}
width={"80%"}
open={isModalOpenArchives}
onCancel={cancelHandlerArch}
footer={null}
>
<Preview list={folderStore.alist} />
</Modal>
<Modal
title={!tagId ? "添加文件夹" : "编辑文件夹"}
width={600}
open={isModalOpen}
afterClose={() => formRef.current?.resetFields()}
onOk={() => formRef.current?.submit()}
onCancel={cancelHandler}
>
<SimpleForm
formRef={formRef}
createCallback={() => {}}
formName="card_basic"
colProps={12}
span={6}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
>
<Form.Item
key="ac_identity"
label="所属档案类别"
name="ac_identity"
rules={[{ required: true, message: "请选择所属档案类别!" }]}
>
<Select placeholder="">
{catList?.map((v: any) => {
return (
<Option key={v.identity} value={v.identity}>
{v.category_name}
</Option>
);
})}
</Select>
</Form.Item>
</SimpleForm>
</Modal>
</Space>
</div>
);
};
export default inject(...["archivesStore", "folderStore", "acStore"])(
observer(ArchivesFolder)
);

View File

@ -1,10 +1,4 @@
export const folderConfig = [
{
type: "input",
label: "所属档案分类",
name: "ac_identity",
value: "",
},
{
type: "input",
label: "文件夹名称",

View File

@ -1,106 +1,37 @@
import { Button, Space, Modal, FormInstance, Flex } from "antd";
import { inject, observer } from "mobx-react";
import { useEffect, useState } from "react";
import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import FolderTwoTone from "@ant-design/icons/FolderOpenTwoTone";
import { folderConfig, catConfig, archiveConfig } from "./archives_conf";
const Archives = (props: Store) => {
const { folderStore, acStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [tagId, setId] = useState<Number | null>(null);
const onFinish = (values: any) => {
let data = values;
data.head_img = values.head_img[0].url;
if (!tagId) {
folderStore.add(data);
} else {
folderStore.putItem(tagId, data);
}
setIsModalOpen(false);
};
useEffect(() => {
folderStore.getlist();
acStore.getlist();
}, [folderStore, acStore]);
// 添加事件
const addHandler = () => {
setProjectConfig(folderConfig);
setIsModalOpen(true);
};
import { Tabs, TabsProps } from "antd";
import ArchivesCat from "./archivesCat";
import ArchivesFolder from "./archivesFolder";
import Archive from "./archive";
// 取消
const cancelHandler = () => {
setId(null);
setIsModalOpen(false);
};
// 文件夹点击
const folderHandle = () => {};
const addCatHandler = () => {
setProjectConfig(catConfig);
setIsModalOpen(true);
const Archives = () => {
const onChange = (key: string) => {
console.log(key);
};
const addArchivesHandler = () => {
setProjectConfig(archiveConfig);
setIsModalOpen(true);
};
const onFinishFailed = () => {};
const items: TabsProps["items"] = [
{
key: "1",
label: "档案类别管理",
children: <ArchivesCat />,
},
{
key: "2",
label: "档案文件夹管理",
children: <ArchivesFolder />,
},
{
key: "3",
label: "档案管理",
children: <Archive />,
},
];
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button type="default" onClick={addHandler}>
</Button>
<Button type="default" onClick={addCatHandler}>
</Button>
<Button type="default" onClick={addArchivesHandler}>
</Button>
</Space>
<Flex wrap gap="25px" justify="start">
{Array.from({ length: folderStore.list?.length ?? 0 }, (_, i) => (
<div key={i} onClick={folderHandle}>
<FolderTwoTone rotate={-270} style={{ fontSize: "120px" }} />
<p>{folderStore.list[i].folder_name}</p>
</div>
))}
</Flex>
<Modal
title={!tagId ? "添加文件夹" : "编辑文件夹"}
width={600}
open={isModalOpen}
afterClose={() => formRef.current?.resetFields()}
onOk={() => formRef.current?.submit()}
onCancel={cancelHandler}
>
<SimpleForm
formRef={formRef}
createCallback={() => {}}
formName="card_basic"
colProps={12}
span={6}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
/>
</Modal>
</Space>
</div>
<>
<Tabs defaultActiveKey="1" items={items} onChange={onChange} />
</>
);
};
export default inject(...["archivesStore", "folderStore", "acStore"])(
observer(Archives)
);
export default Archives;

View File

@ -0,0 +1,28 @@
.preview_container{
width: 100%;
height: 100%;
display: flex;
align-items: start;
.preview_center{
width: 10px;
}
.preview_left{
width: 10%;
height: 100%;
.select{
background-color: red;
color: #fff;
}
>span{
display: block;
padding-left: 10px;
cursor: pointer;
height: 35px;
line-height: 35px;
}
}
.preview_right{
width: 75%;
height: 100%;
}
}

View File

@ -0,0 +1,27 @@
import { useState } from "react";
import "./preview.less";
const Preview = (props: any) => {
const { list } = props;
const [selectIndex, setSelectIndex] = useState<number>(0);
return (
<div className="preview_container">
<div className="preview_left">
{list.map((item: any, index: number) => (
<span
className={selectIndex === index ? "select" : ""}
onClick={() => setSelectIndex(index)}
key={item}
>
{item.archives_name}
</span>
))}
</div>
<div className="preview_center"></div>
<div className="preview_right">
<p></p>
</div>
</div>
);
};
export default Preview;

View File

@ -1,17 +1,19 @@
import { useState } from "react";
import { Button, Modal } from "antd";
import "./right.less";
import { webRTC } from "@/util/webRtc";
const HomeBottom = () => {
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const openDispatch = () => {
setIsModalOpen(true);
webRTC.init();
};
const handleCancle = () => {
setIsModalOpen(false);
};
const handleSubmit = ()=>{
const handleSubmit = () => {
setIsModalOpen(false);
}
};
return (
<div className="bottom_container">
<div className="bottom_content">
@ -31,14 +33,24 @@ const HomeBottom = () => {
<Button key="return" ghost onClick={handleCancle}>
</Button>,
<Button className="btn-dp" key="submit" type="primary" ghost onClick={handleSubmit}>
<Button
className="btn-dp"
key="submit"
type="primary"
ghost
onClick={handleSubmit}
>
</Button>,
]}
onCancel={() => {
setIsModalOpen(false);
}}
></Modal>
>
<div>
<video id="localVideo" width={300} height={300} src=""></video>
</div>
</Modal>
</div>
);
};

View File

@ -1,4 +1,4 @@
import { Button, Space, Modal, FormInstance } from "antd";
import { Button, Space, Modal, FormInstance, Select } from "antd";
import { inject, observer } from "mobx-react";
import BTable from "@/components/b_table";
import { useEffect, useState } from "react";
@ -6,17 +6,43 @@ import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { columns, defaultConfig } from "./material_column";
import { Form } from "antd";
import dayjs from "dayjs";
const { Option } = Select;
const Material = (props: Store) => {
const { materialStore } = props;
const { materialStore, stashStore, storageStore, materialCatStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [record, setRecord] = useState<any>(null);
const [stashList, setStash] = useState<any>(null); // 仓库列表
const [storageList, setStorageList] = useState<any>([]); // 货架列表
const [catList, setcatList] = useState<any>([]); // 物资分类列表
// 获取物资列表
useEffect(() => {
materialStore.getlist();
setProjectConfig(defaultConfig);
materialStore.getlist().then(() => {
setProjectConfig(defaultConfig);
});
}, [materialStore]);
// 获取仓库列表
useEffect(() => {
stashStore.getlist().then(() => {
setStash(stashStore.list);
});
}, [stashStore]);
// 获取分类
useEffect(() => {
materialCatStore.getlist().then(() => {
setcatList(materialCatStore.list);
});
}, [materialCatStore]);
const handleChange = async (v) => {
await storageStore.getlist({ stash_identity: v });
setStorageList(storageStore.list ?? []);
};
const column_widget = (any, record) => {
return (
<Space wrap>
@ -45,12 +71,15 @@ const Material = (props: Store) => {
};
const edit = (record) => {
setIsModalOpen(true);
record.expiry_date = dayjs(record.expiry_date);
setRecord(record);
};
const onFinish = (values: any) => {
let data = {
...values,
pid:values.pid??0
pid: values.pid ?? 0,
storage_cloumn: Number(values.storage_cloumn),
supplie_piker: values.supplie_piker[0].name,
};
if (!record?.id) {
materialStore.add(data);
@ -117,11 +146,72 @@ const Material = (props: Store) => {
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
/>
>
<>
<Form.Item
key="stash_identity"
label="所属仓库"
name="stash_identity"
rules={[{ required: true, message: "请选择所属仓库!" }]}
>
<Select
placeholder=""
onChange={(v) => {
handleChange(v);
}}
>
{stashList?.map((v: any) => {
return (
<Option key={v.identity} value={v.identity}>
{v.stash_name}
</Option>
);
})}
</Select>
</Form.Item>
<Form.Item
key="storage_identity"
label="所属货架"
name="storage_identity"
rules={[{ required: true, message: "请选择所属货架!" }]}
>
<Select placeholder="">
{storageList?.map((v: any) => {
return (
<Option key={v.identity} value={v.identity}>
{v.name}
</Option>
);
})}
</Select>
</Form.Item>
<Form.Item
key="catory_identity"
label="物资分类"
name="catory_identity"
rules={[{ required: true, message: "请选择物资分类!" }]}
>
<Select placeholder="">
{catList?.map((v: any) => {
return (
<Option key={v.identity} value={v.identity}>
{v.name}
</Option>
);
})}
</Select>
</Form.Item>
</>
</SimpleForm>
</Modal>
</Space>
</div>
);
};
export default inject("materialStore")(observer(Material));
export default inject(
"materialStore",
"stashStore",
"storageStore",
"materialCatStore"
)(observer(Material));

View File

@ -12,11 +12,11 @@ export const columns: ColumnsType<UserDataType> = [
},
{
title: "过期时间",
dataIndex: "storage_identity",
dataIndex: "expiry_date",
},
{
title: "货架名称",
dataIndex: "expiry_date",
dataIndex: "storage_name",
},
{
title: "货架位置",
@ -24,26 +24,12 @@ export const columns: ColumnsType<UserDataType> = [
},
{
title: "所属仓库",
dataIndex: "expiry_date",
dataIndex: "stash_name",
},
];
export const defaultConfig = [
{
type: FormType.select,
label: "所属仓库",
name: "stash_identity",
value: "",
selectUrl:"storage/list",
rules: [{ required: true, message: "请输入物资名称!" }],
},
{
type: FormType.input,
label: "所属货架",
name: "storage_identity",
value: "",
rules: [{ required: true, message: "请选择货架!" }],
},
{
type: FormType.input,
label: "货架位置",
@ -51,14 +37,7 @@ export const defaultConfig = [
value: "",
rules: [{ required: true, message: "请选择货架位置!" }],
},
{
type: FormType.select,
label: "物资分类",
name: "catory_identity",
value: 0,
selectUrl:"suppliesCat/list",
rules: [{ required: true, message: "请选择物资分类!" }],
},
{
type: FormType.input,
label: "物资名称",
@ -84,6 +63,6 @@ export const defaultConfig = [
type: FormType.upload,
label: "物资图片",
name: "supplie_piker",
value: "",
value: [],
},
];

View File

@ -0,0 +1,19 @@
import { FormType } from "@/components/form/interface";
import { UserDataType } from "@/model/userModel";
import { ColumnsType } from "antd/lib/table";
export const columns: ColumnsType<UserDataType> = [
{
title: "分类名称",
dataIndex: "title",
},
];
export const defaultConfig = [
{
type: FormType.input,
label: "分类名称",
name: "title",
value: "",
rules: [{ required: true, message: "请输入仓库名称!" }],
},
];

View File

@ -1,10 +1,28 @@
import { Tabs, TabsProps } from "antd";
import RegulationsCat from "./regulationsCat";
import Regulations from "./regulations";
const PolRegulations = () => {
return (
<>
<p>PolRegulations</p>
</>
);
};
export default PolRegulations;
const onChange = (key: string) => {
console.log(key);
};
const items: TabsProps["items"] = [
{
key: "1",
label: "政治法规分类管理",
children: <RegulationsCat />,
},
{
key: "2",
label: "政治法规管理",
children: <Regulations />,
},
];
return (
<>
<Tabs defaultActiveKey="1" items={items} onChange={onChange} />
</>
);
};
export default PolRegulations;

View File

@ -0,0 +1,163 @@
import { Button, Space, Modal, FormInstance, Select } from "antd";
import { inject, observer } from "mobx-react";
import BTable from "@/components/b_table";
import { useEffect, useState } from "react";
import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { columns, defaultConfig } from "./regulations_column";
import { Form } from "antd";
import dayjs from "dayjs";
const { Option } = Select;
const Regulations = (props: Store) => {
const { regulationsStore, regulationsCatStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [record, setRecord] = useState<any>(null);
const [stashList, setStash] = useState<any>(null); // 仓库列表
// 获取物资列表
useEffect(() => {
regulationsStore.getlist().then(() => {
setProjectConfig(defaultConfig);
});
}, [regulationsStore]);
// 获取分类
useEffect(() => {
regulationsCatStore.getlist().then(() => {
setStash(regulationsCatStore.list);
});
}, [regulationsCatStore]);
const column_widget = (any, record) => {
return (
<Space wrap>
<Button
type="dashed"
size="small"
onClick={() => {
edit(record);
}}
>
</Button>
<Button
type="dashed"
danger
size="small"
onClick={() => {
regulationsStore.deleteItem(record.id);
}}
>
</Button>
</Space>
);
};
const edit = (record) => {
setIsModalOpen(true);
record.expiry_date = dayjs(record.expiry_date);
setRecord(record);
};
const onFinish = (values: any) => {
let data = {
...values,
file_url: values.file_url[0].name,
};
if (!record?.id) {
regulationsStore.add(data);
} else {
regulationsStore.putItem(record.id, data);
}
setIsModalOpen(false);
};
const onFinishFailed = () => {};
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button
type="default"
onClick={() => {
setRecord(null);
setProjectConfig(defaultConfig);
setIsModalOpen(true);
}}
>
</Button>
</Space>
<BTable
store={regulationsStore}
columns={[
...columns,
{
title: "操作",
dataIndex: "id",
ellipsis: {
showTitle: false,
},
render: (any, record) => column_widget(any, record),
},
]}
dataSource={regulationsStore.list}
/>
<Modal
title={!record?.id ? "添加法规" : "编辑法规"}
width={1200}
open={isModalOpen}
afterClose={() => formRef.current?.resetFields()}
onOk={() => formRef.current?.submit()}
onCancel={() => {
setIsModalOpen(false);
}}
>
<SimpleForm
formRef={formRef}
createCallback={() => {
if (record?.id) {
formRef.current?.setFieldsValue(record);
} else {
formRef.current?.setFieldsValue(null);
}
}}
formName="card_basic"
colProps={25}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
>
<>
<Form.Item
key="pr_categry_identity"
label="分类"
name="pr_categry_identity"
rules={[{ required: true, message: "请选择物资分类!" }]}
>
<Select placeholder="">
{stashList?.map((v: any) => {
return (
<Option key={v.identity} value={v.identity}>
{v.title}
</Option>
);
})}
</Select>
</Form.Item>
</>
</SimpleForm>
</Modal>
</Space>
</div>
);
};
export default inject(
"regulationsStore",
"regulationsCatStore"
)(observer(Regulations));

View File

@ -0,0 +1,127 @@
import { Button, Space, Modal, FormInstance } from "antd";
import { inject, observer } from "mobx-react";
import BTable from "@/components/b_table";
import { useEffect, useState } from "react";
import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { columns, defaultConfig } from "./cat_column";
const RegulationsCat = (props: Store) => {
const { regulationsCatStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [record, setRecord] = useState<any>(null);
useEffect(() => {
regulationsCatStore.getlist();
setProjectConfig(defaultConfig);
}, [regulationsCatStore]);
const column_widget = (any, record) => {
return (
<Space wrap>
<Button
type="dashed"
size="small"
onClick={() => {
edit(record);
}}
>
</Button>
<Button
type="dashed"
danger
size="small"
onClick={() => {
regulationsCatStore.deleteItem(record.id);
}}
>
</Button>
</Space>
);
};
const edit = (record) => {
setIsModalOpen(true);
setRecord(record);
};
const onFinish = (values: any) => {
let data = {
...values,
pid:values.pid??0
};
if (!record?.id) {
regulationsCatStore.add(data);
} else {
regulationsCatStore.putItem(record.id, data);
}
setIsModalOpen(false);
};
const onFinishFailed = () => {};
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button
type="default"
onClick={() => {
setRecord(null);
setProjectConfig(defaultConfig);
setIsModalOpen(true);
}}
>
</Button>
</Space>
<BTable
store={regulationsCatStore}
columns={[
...columns,
{
title: "操作",
dataIndex: "id",
ellipsis: {
showTitle: false,
},
render: (any, record) => column_widget(any, record),
},
]}
dataSource={regulationsCatStore.list}
/>
<Modal
title={!record?.id ? "添加个人属性" : "编辑个人属性"}
width={1200}
open={isModalOpen}
afterClose={() => formRef.current?.resetFields()}
onOk={() => formRef.current?.submit()}
onCancel={() => {
setIsModalOpen(false);
}}
>
<SimpleForm
formRef={formRef}
createCallback={() => {
if (record?.id) {
formRef.current?.setFieldsValue(record);
} else {
formRef.current?.setFieldsValue(null);
}
}}
formName="card_basic"
colProps={25}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
/>
</Modal>
</Space>
</div>
);
};
export default inject("regulationsCatStore")(observer(RegulationsCat));

View File

@ -0,0 +1,55 @@
import { FormType } from "@/components/form/interface";
import { UserDataType } from "@/model/userModel";
import { ColumnsType } from "antd/lib/table";
export const columns: ColumnsType<UserDataType> = [
{
title: "法规标题",
dataIndex: "title",
},
{
title: "法规副标题",
dataIndex: "sub_title",
},
{
title: "法规内容",
dataIndex: "content",
width: 300,
ellipsis: true,
},
{
title: "政策法规分类",
dataIndex: "storage_name",
},
];
export const defaultConfig = [
{
type: FormType.input,
label: "法规标题",
name: "title",
value: "",
rules: [{ required: true, message: "请输入法规标题!" }],
},
{
type: FormType.input,
label: "法规副标题",
name: "sub_title",
value: "",
rules: [{ required: true, message: "请输入法规副标题!" }],
},
{
type: "editor",
label: "内容",
name: "content",
value: "",
rules: [{ required: true, message: "请填写内容" }],
},
{
type: "upload",
label: "附件图片",
name: "file_url",
value: [],
},
];

View File

@ -22,24 +22,8 @@ const Storage = (props: Store) => {
const column_widget = (any, record) => {
return (
<Space wrap>
<Button
type="dashed"
size="small"
onClick={() => {
edit(record);
}}
>
</Button>
<Button
type="dashed"
danger
size="small"
onClick={() => {
storageStore.deleteItem(record.id);
}}
>
<Button type="dashed" size="small" onClick={() => {edit(record)}}></Button>
<Button type="dashed" danger size="small" onClick={() => {storageStore.deleteItem(record.id)}}>
</Button>
</Space>

View File

@ -8,12 +8,10 @@ import { Store } from "antd/lib/form/interface";
import "./user.less";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { useNavigate } from "react-router";
const User = (props: Store) => {
const { usrStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const nav = useNavigate();
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [record, setRecord] = useState<any>(null);
@ -164,14 +162,7 @@ const User = (props: Store) => {
>
</Button>
<Button
type="default"
onClick={() => {
nav("/tag");
}}
>
</Button>
</Space>
<BTable store={usrStore} columns={columns} dataSource={usrStore.list} />

View File

@ -54,10 +54,12 @@ const WhseMgmt = (props: Store) => {
</Space>
);
};
// 编辑按钮
const edit = (record) => {
setIsModalOpen(true);
setRecord(record);
};
// 表单提交
const onFinish = (values: any) => {
let data = {
...values,
@ -71,22 +73,18 @@ const WhseMgmt = (props: Store) => {
}
setIsModalOpen(false);
};
const addhandler = () => {
setRecord(null);
setProjectConfig(defaultConfig);
setIsModalOpen(true);
};
const onFinishFailed = () => {};
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button
type="default"
onClick={() => {
setRecord(null);
setProjectConfig(defaultConfig);
setIsModalOpen(true);
}}
>
</Button>
<Button onClick={addhandler}></Button>
</Space>
<BTable
store={stashStore}

View File

@ -1,5 +1,5 @@
import { makeObservable } from "mobx";
// 用户信息
// 档案
import BaseStore from "./baseStore";
import { TagDataType } from "@/model/userModel";

View File

@ -1,5 +1,5 @@
import { makeObservable } from "mobx";
// 用户信息
// 档案分类
import BaseStore from "./baseStore";
import { TagDataType } from "@/model/userModel";

View File

@ -1,5 +1,6 @@
import { makeObservable } from "mobx";
// 用户信息
import { action, makeObservable, observable } from "mobx";
// 档案文件夹
import baseHttp from "@/service/base";
import BaseStore from "./baseStore";
import { TagDataType } from "@/model/userModel";
@ -8,12 +9,23 @@ class FolderConfig {
static ADD: string = "archives/folder"
static DELETE: string = "archives/folder"
static EDIT: string = "archives/folder"
static AList: string = "archives/list"
}
class FolderStore extends BaseStore<TagDataType> {
constructor() {
super(FolderConfig)
makeObservable(this, {})
makeObservable(this, {
getAlist: action,
alist: observable,
})
}
async getAlist(idl?: string) {
let res = await baseHttp.get(FolderConfig.AList+"/"+idl, {});
this.alist = res.data?.record;
}
alist!: Array<any>;
}
const folderStore = new FolderStore()
export default folderStore;

View File

@ -11,6 +11,8 @@ import { persMgmtStore } from './persMgmt';
import { storageStore } from './storage';
import { materialCatStore } from './materialCat';
import { materialStore } from './materialStore';
import { regulationsCatStore } from './regulationsCat';
import { regulationsStore } from './regulations';
const store = {
usrStore,
@ -26,6 +28,8 @@ const store = {
storageStore,
materialCatStore,
materialStore,
regulationsCatStore,
regulationsStore
};
export default store;

19
src/store/regulations.ts Normal file
View File

@ -0,0 +1,19 @@
import { makeObservable } from "mobx";
// 用户信息
import BaseStore from "./baseStore";
import { TagDataType } from "@/model/userModel";
class RegulationsConfig {
static LIST: string = "regulations/list"
static ADD: string = "regulations"
static DELETE: string = "regulations"
static EDIT: string = "regulations"
}
class Regulations extends BaseStore<TagDataType> {
constructor() {
super(RegulationsConfig)
makeObservable(this, {})
}
}
export const regulationsStore = new Regulations()

View File

@ -0,0 +1,19 @@
import { makeObservable } from "mobx";
// 用户信息
import BaseStore from "./baseStore";
import { TagDataType } from "@/model/userModel";
class RegulationsCatConfig {
static LIST: string = "regulations/catgory/list"
static ADD: string = "regulations/catgory"
static DELETE: string = "regulations/catgory"
static EDIT: string = "regulations/catgory"
}
class RegulationsCat extends BaseStore<TagDataType> {
constructor() {
super(RegulationsCatConfig)
makeObservable(this, {})
}
}
export const regulationsCatStore = new RegulationsCat()

47
src/util/webRtc.ts Normal file
View File

@ -0,0 +1,47 @@
import { message } from 'antd/lib';
import WebRTC from 'webrtc';
class WebRtc {
private rtc: WebRTC
async init() {
this.rtc = new WebRTC({debug: true});
try {
let strem = await navigator.mediaDevices.getUserMedia({ audio: true, video: true })
var localVideo = document.getElementById('localVideo') as HTMLVideoElement;
localVideo.srcObject = strem;
console.log('localVideo', this.rtc?.addStream);
// this.rtc?.addStream(strem);
} catch (error) {
console.log(error);
// message.error(`error ${JSON.stringify(message)}`)
}
}
calls() {
this.rtc.createOffer()
.then((offer) => {
// ...
})
.catch((error) => {
console.log('Error creating offer: ', error);
});
// 接听呼叫
this.rtc.createAnswer()
.then((answer) => {
// 发送answer信令等操作
// ...
})
.catch((error) => {
console.log('Error creating answer: ', error);
});
}
close() {
this.rtc.close();
}
}
export const webRTC = new WebRtc()