Commit 6a033d1d by zhujian

'fix'

parent 6a844944
{
"header": {
"reportVersion": 2,
"event": "Allocation failed - JavaScript heap out of memory",
"trigger": "FatalError",
"filename": "report.20210401.105323.55612.0.001.json",
"dumpEventTime": "2021-04-01T10:53:23Z",
"dumpEventTimeStamp": "1617245603487",
"processId": 55612,
"threadId": null,
"cwd": "C:\\Users\\admin\\xiaomai\\xiaomai-cloud-class-web",
"commandLine": [
"node",
"scripts/start.js"
],
"nodejsVersion": "v12.16.3",
"wordSize": 64,
"arch": "x64",
"platform": "win32",
"componentVersions": {
"node": "12.16.3",
"v8": "7.8.279.23-node.35",
"uv": "1.34.2",
"zlib": "1.2.11",
"brotli": "1.0.7",
"ares": "1.16.0",
"modules": "72",
"nghttp2": "1.40.0",
"napi": "5",
"llhttp": "2.0.4",
"http_parser": "2.9.3",
"openssl": "1.1.1g",
"cldr": "36.0",
"icu": "65.1",
"tz": "2019c",
"unicode": "12.1"
},
"release": {
"name": "node",
"lts": "Erbium",
"headersUrl": "https://nodejs.org/download/release/v12.16.3/node-v12.16.3-headers.tar.gz",
"sourceUrl": "https://nodejs.org/download/release/v12.16.3/node-v12.16.3.tar.gz",
"libUrl": "https://nodejs.org/download/release/v12.16.3/win-x64/node.lib"
},
"osName": "Windows_NT",
"osRelease": "10.0.18363",
"osVersion": "Windows 10 Pro",
"osMachine": "x86_64",
"cpus": [
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 5435843,
"nice": 0,
"sys": 5018328,
"idle": 215171078,
"irq": 1418281
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 2509578,
"nice": 0,
"sys": 1841718,
"idle": 221273656,
"irq": 38343
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 8413968,
"nice": 0,
"sys": 5013765,
"idle": 212197218,
"irq": 93453
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 3652062,
"nice": 0,
"sys": 2196062,
"idle": 219776828,
"irq": 43203
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 4915125,
"nice": 0,
"sys": 2809156,
"idle": 217900671,
"irq": 78109
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 2340328,
"nice": 0,
"sys": 1177750,
"idle": 222106875,
"irq": 24656
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 4430078,
"nice": 0,
"sys": 2128781,
"idle": 219066093,
"irq": 51734
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 3844562,
"nice": 0,
"sys": 1357375,
"idle": 220423015,
"irq": 26500
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 11182953,
"nice": 0,
"sys": 2309000,
"idle": 212132984,
"irq": 76109
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 3822796,
"nice": 0,
"sys": 1150843,
"idle": 220651296,
"irq": 80671
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 5035984,
"nice": 0,
"sys": 8298203,
"idle": 212290750,
"irq": 63218
},
{
"model": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
"speed": 3192,
"user": 5453875,
"nice": 0,
"sys": 1530250,
"idle": 218640812,
"irq": 47968
}
],
"networkInterfaces": [
{
"name": "以太网",
"internal": false,
"mac": "a8:5e:45:b4:05:40",
"address": "fe80::c4af:8af2:8435:4f1",
"netmask": "ffff:ffff:ffff:ffff::",
"family": "IPv6",
"scopeid": 14
},
{
"name": "以太网",
"internal": false,
"mac": "a8:5e:45:b4:05:40",
"address": "10.0.1.151",
"netmask": "255.255.254.0",
"family": "IPv4"
},
{
"name": "Loopback Pseudo-Interface 1",
"internal": true,
"mac": "00:00:00:00:00:00",
"address": "::1",
"netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"family": "IPv6",
"scopeid": 0
},
{
"name": "Loopback Pseudo-Interface 1",
"internal": true,
"mac": "00:00:00:00:00:00",
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"family": "IPv4"
}
],
"host": "DESKTOP-C38ISPA"
},
"javascriptStack": {
"message": "No stack.",
"stack": [
"Unavailable."
]
},
"nativeStack": [
{
"pc": "0x00007ff6d7722449",
"symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+11577"
},
{
"pc": "0x00007ff6d77269a9",
"symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+29337"
},
{
"pc": "0x00007ff6d7725828",
"symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+24856"
},
{
"pc": "0x00007ff6d785d8c2",
"symbol": "v8::base::CPU::has_sse+68658"
},
{
"pc": "0x00007ff6d8079bbe",
"symbol": "v8::Isolate::ReportExternalAllocationLimitReached+94"
},
{
"pc": "0x00007ff6d8061c91",
"symbol": "v8::SharedArrayBuffer::Externalize+833"
},
{
"pc": "0x00007ff6d7f2e1ec",
"symbol": "v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436"
},
{
"pc": "0x00007ff6d7f39420",
"symbol": "v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312"
},
{
"pc": "0x00007ff6d7f35f44",
"symbol": "v8::internal::Heap::PageFlagsAreConsistent+3204"
},
{
"pc": "0x00007ff6d7f2b743",
"symbol": "v8::internal::Heap::CollectGarbage+1283"
},
{
"pc": "0x00007ff6d7f29db4",
"symbol": "v8::internal::Heap::AddRetainedMap+2452"
},
{
"pc": "0x00007ff6d7f4afbd",
"symbol": "v8::internal::Factory::NewFillerObject+61"
},
{
"pc": "0x00007ff6d7cb1871",
"symbol": "v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+1665"
},
{
"pc": "0x00007ff6d84c6c4d",
"symbol": "v8::internal::SetupIsolateDelegate::SetupHeap+546637"
},
{
"pc": "0x00007ff6d84c7b7d",
"symbol": "v8::internal::SetupIsolateDelegate::SetupHeap+550525"
},
{
"pc": "0x000001a4f68ed9d9",
"symbol": ""
}
],
"javascriptHeap": {
"totalMemory": 2179272704,
"totalCommittedMemory": 2179272704,
"usedMemory": 2103855312,
"availableMemory": 48911208,
"memoryLimit": 2197815296,
"heapSpaces": {
"read_only_space": {
"memorySize": 262144,
"committedMemory": 262144,
"capacity": 32808,
"used": 32808,
"available": 0
},
"new_space": {
"memorySize": 33554432,
"committedMemory": 33554432,
"capacity": 16759296,
"used": 3562272,
"available": 13197024
},
"old_space": {
"memorySize": 1969369088,
"committedMemory": 1969369088,
"capacity": 1928135560,
"used": 1927723264,
"available": 412296
},
"code_space": {
"memorySize": 3837952,
"committedMemory": 3837952,
"capacity": 3253792,
"used": 3253792,
"available": 0
},
"map_space": {
"memorySize": 7081984,
"committedMemory": 7081984,
"capacity": 4403680,
"used": 4403680,
"available": 0
},
"large_object_space": {
"memorySize": 164544512,
"committedMemory": 164544512,
"capacity": 164335208,
"used": 164335208,
"available": 0
},
"code_large_object_space": {
"memorySize": 622592,
"committedMemory": 622592,
"capacity": 544288,
"used": 544288,
"available": 0
},
"new_large_object_space": {
"memorySize": 0,
"committedMemory": 0,
"capacity": 16759296,
"used": 0,
"available": 16759296
}
}
},
"resourceUsage": {
"userCpuSeconds": 294.906,
"kernelCpuSeconds": 222.421,
"cpuConsumptionPercent": 269.441,
"maxRss": 2946191360,
"pageFaults": {
"IORequired": 2303672,
"IONotRequired": 0
},
"fsActivity": {
"reads": 15688,
"writes": 268
}
},
"libuv": [
],
"workers": [
],
"environmentVariables": {
"=C:": "C:\\Users\\admin\\xiaomai\\xiaomai-cloud-class-web",
"ALLUSERSPROFILE": "C:\\ProgramData",
"APPDATA": "C:\\Users\\admin\\AppData\\Roaming",
"BABEL_ENV": "development",
"ChocolateyInstall": "C:\\ProgramData\\chocolatey",
"ChocolateyLastPathUpdate": "132489353938825301",
"CommonProgramFiles": "C:\\Program Files\\Common Files",
"CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files",
"CommonProgramW6432": "C:\\Program Files\\Common Files",
"COMPUTERNAME": "DESKTOP-C38ISPA",
"ComSpec": "C:\\Windows\\system32\\cmd.exe",
"DriverData": "C:\\Windows\\System32\\Drivers\\DriverData",
"FPS_BROWSER_APP_PROFILE_STRING": "Internet Explorer",
"FPS_BROWSER_USER_PROFILE_STRING": "Default",
"HOME": "C:\\Users\\admin",
"HOMEDRIVE": "C:",
"HOMEPATH": "\\Users\\admin",
"INIT_CWD": "C:\\Users\\admin\\xiaomai\\xiaomai-cloud-class-web",
"JAVA_HOME": "C:\\Program Files\\Java\\jdk1.8.0_281",
"LOCALAPPDATA": "C:\\Users\\admin\\AppData\\Local",
"LOGONSERVER": "\\\\DESKTOP-C38ISPA",
"NODE": "C:\\Program Files\\nodejs\\node.exe",
"NODE_ENV": "development",
"NODE_EXE": "C:\\Program Files\\nodejs\\\\node.exe",
"NODE_PATH": "",
"NPM_CLI_JS": "C:\\Program Files\\nodejs\\\\node_modules\\npm\\bin\\npm-cli.js",
"npm_config_access": "",
"npm_config_allow_same_version": "",
"npm_config_also": "",
"npm_config_always_auth": "",
"npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"start\"],\"original\":[\"run\",\"start\"]}",
"npm_config_audit": "true",
"npm_config_audit_level": "low",
"npm_config_auth_type": "legacy",
"npm_config_before": "",
"npm_config_bin_links": "true",
"npm_config_browser": "",
"npm_config_ca": "",
"npm_config_cache": "C:\\Users\\admin\\AppData\\Roaming\\npm-cache",
"npm_config_cache_lock_retries": "10",
"npm_config_cache_lock_stale": "60000",
"npm_config_cache_lock_wait": "10000",
"npm_config_cache_max": "Infinity",
"npm_config_cache_min": "10",
"npm_config_cafile": "",
"npm_config_cert": "",
"npm_config_cidr": "",
"npm_config_color": "true",
"npm_config_commit_hooks": "true",
"npm_config_depth": "Infinity",
"npm_config_description": "true",
"npm_config_dev": "",
"npm_config_dry_run": "",
"npm_config_editor": "notepad.exe",
"npm_config_engine_strict": "",
"npm_config_fetch_retries": "2",
"npm_config_fetch_retry_factor": "10",
"npm_config_fetch_retry_maxtimeout": "60000",
"npm_config_fetch_retry_mintimeout": "10000",
"npm_config_force": "",
"npm_config_format_package_lock": "true",
"npm_config_fund": "true",
"npm_config_git": "git",
"npm_config_git_tag_version": "true",
"npm_config_global": "",
"npm_config_globalconfig": "C:\\Users\\admin\\AppData\\Roaming\\npm\\etc\\npmrc",
"npm_config_globalignorefile": "C:\\Users\\admin\\AppData\\Roaming\\npm\\etc\\npmignore",
"npm_config_global_style": "",
"npm_config_group": "",
"npm_config_ham_it_up": "",
"npm_config_heading": "npm",
"npm_config_https_proxy": "",
"npm_config_if_present": "",
"npm_config_ignore_prepublish": "",
"npm_config_ignore_scripts": "",
"npm_config_init_author_email": "",
"npm_config_init_author_name": "",
"npm_config_init_author_url": "",
"npm_config_init_license": "ISC",
"npm_config_init_module": "C:\\Users\\admin\\.npm-init.js",
"npm_config_init_version": "1.0.0",
"npm_config_json": "",
"npm_config_key": "",
"npm_config_legacy_bundling": "",
"npm_config_link": "",
"npm_config_local_address": "",
"npm_config_loglevel": "notice",
"npm_config_logs_max": "10",
"npm_config_long": "",
"npm_config_maxsockets": "50",
"npm_config_message": "%s",
"npm_config_metrics_registry": "https://registry.npmjs.org/",
"npm_config_node_gyp": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js",
"npm_config_node_options": "",
"npm_config_node_version": "12.16.3",
"npm_config_noproxy": "",
"npm_config_offline": "",
"npm_config_onload_script": "",
"npm_config_only": "",
"npm_config_optional": "true",
"npm_config_otp": "",
"npm_config_package_lock": "true",
"npm_config_package_lock_only": "",
"npm_config_parseable": "",
"npm_config_prefer_offline": "",
"npm_config_prefer_online": "",
"npm_config_prefix": "C:\\Users\\admin\\AppData\\Roaming\\npm",
"npm_config_preid": "",
"npm_config_production": "",
"npm_config_progress": "true",
"npm_config_proxy": "",
"npm_config_read_only": "",
"npm_config_rebuild_bundle": "true",
"npm_config_registry": "https://registry.npmjs.org/",
"npm_config_rollback": "true",
"npm_config_save": "true",
"npm_config_save_bundle": "",
"npm_config_save_dev": "",
"npm_config_save_exact": "",
"npm_config_save_optional": "",
"npm_config_save_prefix": "^",
"npm_config_save_prod": "",
"npm_config_scope": "",
"npm_config_scripts_prepend_node_path": "warn-only",
"npm_config_script_shell": "",
"npm_config_searchexclude": "",
"npm_config_searchlimit": "20",
"npm_config_searchopts": "",
"npm_config_searchstaleness": "900",
"npm_config_send_metrics": "",
"npm_config_shell": "C:\\Windows\\system32\\cmd.exe",
"npm_config_shrinkwrap": "true",
"npm_config_sign_git_commit": "",
"npm_config_sign_git_tag": "",
"npm_config_sso_poll_frequency": "500",
"npm_config_sso_type": "oauth",
"npm_config_strict_ssl": "true",
"npm_config_tag": "latest",
"npm_config_tag_version_prefix": "v",
"npm_config_timing": "",
"npm_config_tmp": "C:\\Users\\admin\\AppData\\Local\\Temp",
"npm_config_umask": "0000",
"npm_config_unicode": "",
"npm_config_unsafe_perm": "true",
"npm_config_update_notifier": "true",
"npm_config_usage": "",
"npm_config_user": "",
"npm_config_userconfig": "C:\\Users\\admin\\.npmrc",
"npm_config_user_agent": "npm/6.14.4 node/v12.16.3 win32 x64",
"npm_config_version": "",
"npm_config_versions": "",
"npm_config_viewer": "browser",
"npm_execpath": "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js",
"npm_lifecycle_event": "start",
"npm_lifecycle_script": "node scripts/start.js",
"npm_node_execpath": "C:\\Program Files\\nodejs\\node.exe",
"npm_package_babel_plugins_0": "jsx-control-statements",
"npm_package_babel_presets_0": "react-app",
"npm_package_browserslist_development_0": "last 1 chrome version",
"npm_package_browserslist_development_1": "last 1 firefox version",
"npm_package_browserslist_development_2": "last 1 safari version",
"npm_package_browserslist_production_0": ">0.2%",
"npm_package_browserslist_production_1": "not dead",
"npm_package_browserslist_production_2": "not op_mini all",
"npm_package_dependencies_ali_oss": "^6.12.0",
"npm_package_dependencies_antd": "^4.9.4",
"npm_package_dependencies_array_move": "^3.0.1",
"npm_package_dependencies_axios": "^0.20.0",
"npm_package_dependencies_babel_eslint": "10.1.0",
"npm_package_dependencies_babel_jest": "^24.9.0",
"npm_package_dependencies_babel_loader": "8.1.0",
"npm_package_dependencies_babel_plugin_jsx_control_statements": "^4.1.0",
"npm_package_dependencies_babel_plugin_named_asset_import": "^0.3.6",
"npm_package_dependencies_babel_preset_react_app": "^9.1.2",
"npm_package_dependencies_bizcharts": "^4.1.7",
"npm_package_dependencies_camelcase": "^5.3.1",
"npm_package_dependencies_case_sensitive_paths_webpack_plugin": "2.3.0",
"npm_package_dependencies_classnames": "^2.2.6",
"npm_package_dependencies_cropper": "^3.1.4",
"npm_package_dependencies_cross_env": "^7.0.2",
"npm_package_dependencies_css_loader": "3.4.2",
"npm_package_dependencies_dom_to_image": "^2.6.0",
"npm_package_dependencies_dotenv": "8.2.0",
"npm_package_dependencies_dotenv_expand": "5.1.0",
"npm_package_dependencies_eslint": "^6.6.0",
"npm_package_dependencies_eslint_config_react_app": "^5.2.1",
"npm_package_dependencies_eslint_loader": "3.0.3",
"npm_package_dependencies_eslint_plugin_flowtype": "4.6.0",
"npm_package_dependencies_eslint_plugin_import": "2.20.1",
"npm_package_dependencies_eslint_plugin_jsx_a11y": "6.2.3",
"npm_package_dependencies_eslint_plugin_jsx_control_statements": "^2.2.1",
"npm_package_dependencies_eslint_plugin_react": "7.19.0",
"npm_package_dependencies_eslint_plugin_react_hooks": "^1.6.1",
"npm_package_dependencies_file_loader": "4.3.0",
"npm_package_dependencies_fs_extra": "^8.1.0",
"npm_package_dependencies_html2canvas": "^1.0.0-rc.7",
"npm_package_dependencies_html_webpack_plugin": "4.0.0-beta.11",
"npm_package_dependencies_husky": "^4.2.5",
"npm_package_dependencies_identity_obj_proxy": "3.0.0",
"npm_package_dependencies_jest": "24.9.0",
"npm_package_dependencies_jest_environment_jsdom_fourteen": "1.0.1",
"npm_package_dependencies_jest_resolve": "24.9.0",
"npm_package_dependencies_jest_watch_typeahead": "0.4.2",
"npm_package_dependencies_jquery": "^3.4.1",
"npm_package_dependencies_less": "^3.12.2",
"npm_package_dependencies_less_loader": "^6.2.0",
"npm_package_dependencies_lottie_web": "^5.7.6",
"npm_package_dependencies_microevent": "^1.0.0",
"npm_package_dependencies_mini_css_extract_plugin": "0.9.0",
"npm_package_dependencies_moment": "^2.27.0",
"npm_package_dependencies_optimize_css_assets_webpack_plugin": "5.0.3",
"npm_package_dependencies_pnp_webpack_plugin": "1.6.4",
"npm_package_dependencies_postcss_flexbugs_fixes": "4.1.0",
"npm_package_dependencies_postcss_loader": "3.0.0",
"npm_package_dependencies_postcss_normalize": "8.0.1",
"npm_package_dependencies_postcss_preset_env": "6.7.0",
"npm_package_dependencies_postcss_safe_parser": "4.0.1",
"npm_package_dependencies_prop_types": "^15.7.2",
"npm_package_dependencies_qs": "^6.9.4",
"npm_package_dependencies_react": "^16.13.1",
"npm_package_dependencies_react_app_polyfill": "^1.0.6",
"npm_package_dependencies_react_async_component": "^2.0.0",
"npm_package_dependencies_react_dev_utils": "^10.2.1",
"npm_package_dependencies_react_dom": "^16.13.1",
"npm_package_dependencies_react_infinite_scroller": "^1.2.4",
"npm_package_dependencies_react_lottie": "^1.2.3",
"npm_package_dependencies_react_router_dom": "^5.2.0",
"npm_package_dependencies_react_sortable_hoc": "^1.11.0",
"npm_package_dependencies_resolve": "1.15.0",
"npm_package_dependencies_resolve_url_loader": "3.1.1",
"npm_package_dependencies_semver": "6.3.0",
"npm_package_dependencies_style_loader": "0.23.1",
"npm_package_dependencies_terser_webpack_plugin": "2.3.8",
"npm_package_dependencies_ts_pnp": "1.1.6",
"npm_package_dependencies_typescript": "^4.0.2",
"npm_package_dependencies_underscore": "^1.10.2",
"npm_package_dependencies_url_loader": "2.3.0",
"npm_package_dependencies_video_react": "0.14.1",
"npm_package_dependencies_wangeditor": "^4.6.9",
"npm_package_dependencies_webpack": "4.42.0",
"npm_package_dependencies_webpack_dev_server": "3.11.0",
"npm_package_dependencies_webpack_manifest_plugin": "2.2.0",
"npm_package_dependencies_workbox_webpack_plugin": "4.3.1",
"npm_package_dependencies_xiaomai_b_components": "1.4.4",
"npm_package_dependencies__antv_data_set": "^0.11.8",
"npm_package_dependencies__antv_g2": "^3.5.13",
"npm_package_dependencies__babel_core": "7.9.0",
"npm_package_dependencies__babel_plugin_transform_typescript": "^7.11.0",
"npm_package_dependencies__babel_preset_typescript": "^7.10.4",
"npm_package_dependencies__svgr_webpack": "4.3.3",
"npm_package_dependencies__testing_library_jest_dom": "^4.2.4",
"npm_package_dependencies__testing_library_react": "^9.3.2",
"npm_package_dependencies__testing_library_user_event": "^7.1.2",
"npm_package_dependencies__typescript_eslint_eslint_plugin": "^2.10.0",
"npm_package_dependencies__typescript_eslint_parser": "^2.10.0",
"npm_package_dependencies__types_ali_oss": "^6.0.5",
"npm_package_dependencies__types_qs": "^6.9.5",
"npm_package_dependencies__types_react": "^16.9.46",
"npm_package_dependencies__types_react_dom": "^16.9.8",
"npm_package_dependencies__types_react_router_dom": "^5.1.5",
"npm_package_dependencies__types_underscore": "^1.10.22",
"npm_package_description": "This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).",
"npm_package_devDependencies_ali_oss": "^6.12.0",
"npm_package_devDependencies_react_sortable_hoc": "^1.11.0",
"npm_package_devDependencies_vconsole_webpack_plugin": "^1.5.2",
"npm_package_devDependencies__types_ali_oss": "^6.0.5",
"npm_package_devDependencies__types_jquery": "^3.5.4",
"npm_package_eslintConfig_extends": "react-app",
"npm_package_gitHead": "4898b7f545fa2037fac5e8ed81077e8e3806fb7c",
"npm_package_homepage": "http://./",
"npm_package_name": "cloudclass",
"npm_package_private": "true",
"npm_package_readmeFilename": "README.md",
"npm_package_scripts_build_dev": "cross-env DEPLOY_ENV=dev node scripts/build.js",
"npm_package_scripts_build_dev1": "cross-env DEPLOY_ENV=dev node scripts/build.js",
"npm_package_scripts_build_gray": "cross-env DEPLOY_ENV=gray node scripts/build.js",
"npm_package_scripts_build_prod": "cross-env DEPLOY_ENV=prod node scripts/build.js",
"npm_package_scripts_build_rc": "cross-env DEPLOY_ENV=rc node scripts/build.js",
"npm_package_scripts_start": "node scripts/start.js",
"npm_package_version": "0.1.0",
"NPM_PREFIX_NPM_CLI_JS": "C:\\Users\\admin\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js",
"NUMBER_OF_PROCESSORS": "12",
"OneDrive": "C:\\Users\\admin\\OneDrive",
"OS": "Windows_NT",
"Path": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\npm-lifecycle\\node-gyp-bin;C:\\Users\\admin\\xiaomai\\xiaomai-cloud-class-web\\node_modules\\.bin;C:\\Users\\admin\\AppData\\Roaming\\npm;C:\\Program Files\\nodejs\\;C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\应用\\Git\\cmd;C:\\Program Files\\nodejs\\;C:\\ProgramData\\chocolatey\\bin;\\;C:\\Program Files (x86)\\Yozosoft\\Yozo_Office\\Lib\\xuggler\\bin;C:\\Program Files\\Java\\jdk1.8.0_281\\bin;C:\\Users\\admin\\.cargo\\bin;C:\\Users\\admin\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\admin\\AppData\\Roaming\\npm;C:\\Users\\admin\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\admin\\AppData\\Local\\GitHubDesktop\\bin",
"PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC",
"PROCESSOR_ARCHITECTURE": "AMD64",
"PROCESSOR_IDENTIFIER": "Intel64 Family 6 Model 158 Stepping 10, GenuineIntel",
"PROCESSOR_LEVEL": "6",
"PROCESSOR_REVISION": "9e0a",
"ProgramData": "C:\\ProgramData",
"ProgramFiles": "C:\\Program Files",
"ProgramFiles(x86)": "C:\\Program Files (x86)",
"ProgramW6432": "C:\\Program Files",
"PROMPT": "$P$G",
"PSModulePath": "C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules",
"PUBLIC": "C:\\Users\\Public",
"SESSIONNAME": "Console",
"SystemDrive": "C:",
"SystemRoot": "C:\\Windows",
"TEMP": "C:\\Users\\admin\\AppData\\Local\\Temp",
"TMP": "C:\\Users\\admin\\AppData\\Local\\Temp",
"USERDOMAIN": "DESKTOP-C38ISPA",
"USERDOMAIN_ROAMINGPROFILE": "DESKTOP-C38ISPA",
"USERNAME": "admin",
"USERPROFILE": "C:\\Users\\admin",
"WEBPACK_DEV_SERVER": "true",
"windir": "C:\\Windows",
"WXDRIVE_START_ARGS": "--wxdrive-setting=0 --disable-gpu --disable-software-rasterizer --enable-features=NetworkServiceInProcess",
"YOZO_HOME": "C:\\Program Files (x86)\\Yozosoft\\Yozo_Office",
"ZES_ENABLE_SYSMAN": "1"
},
"sharedObjects": [
"C:\\Program Files\\nodejs\\node.exe",
"C:\\Windows\\SYSTEM32\\ntdll.dll",
"C:\\Windows\\System32\\KERNEL32.DLL",
"C:\\Windows\\System32\\KERNELBASE.dll",
"C:\\Windows\\System32\\WS2_32.dll",
"C:\\Windows\\System32\\RPCRT4.dll",
"C:\\Windows\\System32\\PSAPI.DLL",
"C:\\Windows\\System32\\ADVAPI32.dll",
"C:\\Windows\\SYSTEM32\\dbghelp.dll",
"C:\\Windows\\System32\\msvcrt.dll",
"C:\\Windows\\System32\\ucrtbase.dll",
"C:\\Windows\\System32\\sechost.dll",
"C:\\Windows\\System32\\USER32.dll",
"C:\\Windows\\SYSTEM32\\IPHLPAPI.DLL",
"C:\\Windows\\SYSTEM32\\USERENV.dll",
"C:\\Windows\\System32\\win32u.dll",
"C:\\Windows\\System32\\GDI32.dll",
"C:\\Windows\\System32\\profapi.dll",
"C:\\Windows\\System32\\gdi32full.dll",
"C:\\Windows\\System32\\msvcp_win.dll",
"C:\\Windows\\System32\\CRYPT32.dll",
"C:\\Windows\\System32\\MSASN1.dll",
"C:\\Windows\\System32\\bcrypt.dll",
"C:\\Windows\\SYSTEM32\\WINMM.dll",
"C:\\Windows\\SYSTEM32\\winmmbase.dll",
"C:\\Windows\\System32\\cfgmgr32.dll",
"C:\\Windows\\System32\\bcryptPrimitives.dll",
"C:\\Windows\\System32\\IMM32.DLL",
"C:\\Windows\\System32\\powrprof.dll",
"C:\\Windows\\System32\\UMPDC.dll",
"C:\\Windows\\SYSTEM32\\CRYPTBASE.DLL",
"C:\\Windows\\system32\\uxtheme.dll",
"C:\\Windows\\System32\\combase.dll",
"C:\\Windows\\system32\\mswsock.dll",
"C:\\Windows\\System32\\kernel.appcore.dll",
"C:\\Windows\\System32\\NSI.dll",
"C:\\Windows\\SYSTEM32\\dhcpcsvc6.DLL",
"C:\\Windows\\SYSTEM32\\dhcpcsvc.DLL",
"C:\\Windows\\SYSTEM32\\DNSAPI.dll",
"C:\\Windows\\system32\\napinsp.dll",
"C:\\Windows\\system32\\pnrpnsp.dll",
"C:\\Windows\\System32\\winrnr.dll",
"C:\\Windows\\system32\\NLAapi.dll",
"C:\\Windows\\system32\\wshbth.dll",
"C:\\Program Files\\Bonjour\\mdnsNSP.dll",
"C:\\Windows\\System32\\rasadhlp.dll",
"C:\\Windows\\System32\\fwpuclnt.dll"
]
}
\ No newline at end of file
...@@ -7,15 +7,34 @@ ...@@ -7,15 +7,34 @@
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
class Permission { class Permission {
constructor(permissionCodes) { constructor(permissionCodes) {
this.permissionCodes = permissionCodes; this.permissionCodes = permissionCodes;
}
// 添加、编辑、删除排课
ContentClass_Schedule() {
return this.permissionCodes.includes('ShopStaff');
}
} }
export default Permission;
// 添加、编辑、删除排课
\ No newline at end of file ContentClass_Schedule() {
return this.permissionCodes.includes('ShopStaff');
}
CreateNewExam() {
return this.permissionCodes.includes('AddExam');
}
// AddExam() { //创建考试
// return this.permissionCodes.includes('AddExam');
// }
SeeExamData() { // 查看考试数据
return this.permissionCodes.includes('SeeExamData');
}
DelExam() { // 删除考试
return this.permissionCodes.includes('SeeExamData');
}
}
Permission.prototype.AddExam = function () { //创建考试
return this.permissionCodes.includes('AddExam');
}
export default Permission;
.xm-search-filter {
position: relative;
.ant-input-search-button{
border-left:none;
}
.search-condition {
width: calc(100% - 80px);
display: flex;
align-items: center;
flex-wrap: wrap;
&__item {
width: 30%;
margin-right: 3%;
margin-bottom: 12px;
display: flex;
.search-name{
vertical-align: middle;
display:inline-block;
height:32px;
line-height:32px;
margin-right: 4px;
}
.search-input{
flex:1;
}
}
}
.reset-fold-area {
position: absolute;
right: 12px;
}
.resetBtn {
color: #999999;
font-size: 18px;
margin-right: 8px;
}
.fold-btn {
font-size: 14px;
color: #666666;
line-height: 20px;
.fold-icon {
font-size: 12px;
margin-left:4px;
}
}
}
\ No newline at end of file
...@@ -1665,3 +1665,34 @@ input:focus { ...@@ -1665,3 +1665,34 @@ input:focus {
.row-dragging .drag-visible { .row-dragging .drag-visible {
visibility: visible; visibility: visible;
} }
.oneLineText{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.table_operate {
display: flex;
align-items: center;
flex-wrap: wrap;
.operate-text {
color: #5289FA;
cursor: pointer;
}
.operate__item {
color: #5289FA;
cursor: pointer;
&.split {
margin: 0 8px;
color: #BFBFBF;
}
}
.more{
color: #5289FA;
cursor: pointer;
cursor: pointer;
}
}
import React, { useState, useRef, useEffect } from 'react'
import { Select } from 'antd';
import StoreService from "@/domains/store-domain/storeService";
export default function ExaminationManager(props: any) {
const queryInit: any = {
planName: ''
}
const teacherQueryInit: any = {};
const [teacherQuery, setTeacherQuery] = useState({
current:1,
size: 10
});
const [teacherList, setTeacherList] = useState([]);
const [hasNext, setHasNext] = useState(true);
const teacherQueryRef = useRef({})
useEffect(() => {
teacherQueryRef.current = teacherQuery;
getTeacherList()
}, [teacherQuery])
function getTeacherList() {
const _query: any = {
...teacherQueryRef.current,
};
StoreService.getStoreUserBasicPage(_query).then((res) => {
const { result = {} } = res;
const { records = [], total = 0, hasNext } = result;
const list = _query.current > 1 ? teacherList.concat(records) : records;
setTeacherList(list);
setHasNext(hasNext)
});
}
// 滑动加载更多讲师列表
function handleScrollTeacherList(e: any) {
const container = e.target;
const scrollToBottom = container && container.scrollHeight <= container.clientHeight + container.scrollTop;
if (scrollToBottom && hasNext) {
let _teacherQuery: any = { ...teacherQueryRef.current };
_teacherQuery.current = _teacherQuery.current + 1;
setTeacherQuery(_teacherQuery)
}
}
return <div className="search-condition__item">
<span className="search-name">创建人:</span>
<Select
placeholder="请选择创建人"
className='search-input'
showSearch
allowClear
onPopupScroll={handleScrollTeacherList}
suffixIcon={<span className="icon iconfont" style={{ fontSize: '12px', color: '#BFBFBF' }}>&#xe835;</span>}
value={props.val || null}
onChange={(value) => {
props.onChange(value)
}}
onSearch={(value) => {
let _teacherQuery: any = { ...teacherQueryRef.current };
_teacherQuery.nickName = value;
setTeacherQuery(_teacherQuery)
}}
onClear={() => {
props.onChange(null)
setTeacherQuery({
current:1,
size: 10
})
}}
>
{teacherList.map((item: any) => {
return (
<Select.Option value={item.id} key={item.id}>{item.nickName}</Select.Option>
);
})}
</Select>
</div>
}
\ No newline at end of file
...@@ -33,9 +33,11 @@ class GraphicsCourseFilter extends React.Component { ...@@ -33,9 +33,11 @@ class GraphicsCourseFilter extends React.Component {
expandFilter:false expandFilter:false
} }
} }
componentDidMount() { componentDidMount() {
this.getTeacherList(); this.getTeacherList();
} }
getTeacherList(current = 1, selectList){ getTeacherList(current = 1, selectList){
const { teacherQuery,teacherList} = this.state; const { teacherQuery,teacherList} = this.state;
const _query = { const _query = {
...@@ -53,6 +55,7 @@ class GraphicsCourseFilter extends React.Component { ...@@ -53,6 +55,7 @@ class GraphicsCourseFilter extends React.Component {
}) })
}); });
} }
// 滑动加载更多讲师列表 // 滑动加载更多讲师列表
handleScrollTeacherList = (e) => { handleScrollTeacherList = (e) => {
const { hasNext } = this.state; const { hasNext } = this.state;
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
@import '../../core/page.less'; @import '../../core/page.less';
@import '../../core/table.less'; @import '../../core/table.less';
@import '../../core/global.less'; @import '../../core/global.less';
@import '../../core/filter.less';
@top-height: 50px; @top-height: 50px;
......
import React, { useState, useRef, useEffect, useContext } from 'react'
import { Row, Input, Select, DatePicker, Tooltip, Button, Table, Dropdown, Menu } from 'antd';
import TeacherSelect from '@/modules/common/TeacherSelect';
import Service from "@/common/js/service";
import moment from 'moment';
import { PageControl } from "@/components";
import User from "@/common/js/user";
import { XMContext } from "@/store/context";
import StoreService from "@/domains/store-domain/storeService";
import './index.less'
const { RangePicker } = DatePicker;
const { Search } = Input;
const { Option } = Select;
export default function ExaminationManager() {
const queryInit: any = {
examName: '',
current: 1, size: 10, order: 'PASS_CNT_DESC'
}
const examStatus = {
EXAM_INIT: '未开始', EXAM_STARTED: '进行中', EXAM_FINISHED: '已结束'
}
const sortState: any = false;
const ctx: any = useContext(XMContext);
console.log(ctx)
const [query, setQuery] = useState(queryInit);
const [expandFilter, setExpandFilter] = useState(false);
const [total, setTotal] = useState(0);
const [list, setList] = useState([]);
const [questionCntSort, setQuestionCntSort] = useState(sortState)
const queryRef = useRef(null);
const columns = [
{
title: "考试",
// fixed:'left',
// width:350,
dataIndex: "examName",
render: (text: any, record: any) => <div style={{ width: 330 }}>
<div className='oneLineText' style={{ width: 330 }} >{text}</div>
<div>{moment(record.examStartTime).format("YYYY-MM-DD HH:mm")}~{moment(record.examEndTime).format("YYYY-MM-DD HH:mm")} <div className="status">{(examStatus as any)[record.examState]}</div></div>
<div>创建人:{record.examCreator}</div>
</div>,
},
{
title: "考试时长",
dataIndex: "examDuration",
render: (text: any) => <span>{text || 0}</span>,
},
{
title: "及格分/总分",
dataIndex: "totalScore",
render: (text: any, record: any) => <span>{`${record.passScore || 0}/${record.totalScore || 0}`}</span>,
},
{
title: "题目数量",
dataIndex: "questionCnt",
},
{
title: "参与人数",
dataIndex: "userCnt",
sorter: true,
// sortDirections: ['USER_CNT_DESC', 'USER_CNT_ASC'],
sortOrder: null,
},
{
title: "及格数",
dataIndex: "userCnt",
},
{
title: "创建时间",
dataIndex: "examCreateTime",
render: (text: any, record: any) => <span>{moment(text).format("YYYY-MM-DD HH:mm")}</span>,
},
{
title: "操作",
dataIndex: "operate",
render: (text: any, record: any) => <div className="table_operate">
{
ctx.xmState?.userPermission?.SeeExamData() && [<div
key="data"
className="operate__item"
onClick={() => { }}
>
数据
</div>,
<span className="operate__item split" > | </span>]
}
<div
key="share"
className="operate__item"
onClick={() => { }}
>
分享
</div>
{
(ctx.xmState?.userPermission?.AddExam() || ctx.xmState?.userPermission?.DelExam()) && [<span className="operate__item split" > | </span>, <Dropdown overlay={getOpe(record)}>
<span className='more'>更多</span>
</Dropdown>]
}
</div>,
},
];
function getOpe(item: any) {
return <Menu>
{
ctx.xmState?.userPermission?.AddExam() && <Menu.Item key="0">
<span
onClick={() => {
}}
>
编辑
</span>
</Menu.Item>
}
{
ctx.xmState?.userPermission?.DelExam() && <Menu.Item key="1">
<span
onClick={() => {
}}
>
删除
</span>
</Menu.Item>
}
</Menu>
}
function getList() {
Service.Hades("public/hades/queryExamPageList", {
...query, userId: User.getStoreUserId(),
tenantId: User.getStoreId(),
source: 0
}).then((res) => {
setList(res.result?.records || [])
})
}
useEffect(() => {
queryRef.current = query;
getList();
}, [query])
function onShowSizeChange(current: any, size: any) {
setQuery({ current: 1, size, order: 'PASS_CNT_DESC' })
}
return <div className="page examination-manager">
<div className="content-header">考试</div>
<div className="box content-body">
<div className="xm-search-filter">
<div style={{ display: 'flex' }}>
<div className="search-condition">
<div className="search-condition__item">
<span className="search-name">考试名称:</span>
<Search
value={query.examName}
className='search-input'
placeholder="搜索考试名称"
onChange={(e) => {
const _query = { ...query }
_query.examName = e.target.value
setQuery(_query);
}}
onSearch={() => { }}
enterButton={<span className="icon iconfont">&#xe832;</span>}
/>
</div>
<TeacherSelect val={query.examCreator} onChange={(examCreator: any) => {
const _query = { ...query }
_query.examCreator = examCreator;
setQuery(_query);
}} ></TeacherSelect>
<div className="search-condition__item">
<span className="search-name">考试时间:</span>
<RangePicker
className='search-input'
value={[
query.examStartTime ? moment(Number(query.examStartTime)) : null,
query.examStartTime ? moment(Number(query.examEndTime)) : null
]}
onChange={(date: any) => {
const _query = { ...query }
_query.examStartTime = date && date[0]?.startOf('day').valueOf();
_query.examEndTime = date && date[0]?.endOf('day').valueOf();
setQuery(_query);
}} />
</div>
<div className="search-condition__item">
<span className="search-name">创建时间:</span>
<RangePicker
className='search-input'
value={[
query.createStartTime ? moment(Number(query.createStartTime)) : null,
query.createStartTime ? moment(Number(query.createEndTime)) : null
]}
onChange={(date: any) => {
const _query = { ...query }
_query.createStartTime = date && date[0]?.startOf('day').valueOf();
_query.createEndTime = date && date[0]?.endOf('day').valueOf();
setQuery(_query);
}} />
</div>
</div>
<div className="reset-fold-area">
<Tooltip title="清空筛选"><span className="resetBtn iconfont icon" onClick={() => {
setQuery({ current: 1, size: 10, order: 'PASS_CNT_DESC' });
}}>&#xe61b; </span></Tooltip>
<span style={{ cursor: 'pointer' }} className="fold-btn" onClick={() => {
setExpandFilter(!expandFilter)
}}>{expandFilter ? <span><span>收起</span><span className="iconfont icon fold-icon" >&#xe82d; </span> </span> : <span>展开<span className="iconfont icon fold-icon" >&#xe835; </span></span>}</span>
</div>
</div>
</div>
{
ctx.xmState?.userPermission?.AddExam() && <Button type='primary' style={{ margin: '12px 0' }}>新建考试</Button>
}
<div className="content">
<Table
bordered
size="small"
columns={columns}
dataSource={list}
onChange={() => { }}
scroll={{ x: 1100 }}
pagination={false}
style={{ margin: '16px 0' }}>
</Table>
{total > 0 &&
<PageControl
size="small"
current={query.current - 1}
pageSize={query.size}
total={total}
onShowSizeChange={onShowSizeChange}
toPage={(page: any) => {
let _query: any = { ...query.current };
_query.current = page;
setQuery(_query)
}}
/>
}
</div>
</div>
</div>
}
\ No newline at end of file
.examination-manager{
.status{
display: inline-block;
margin-left: 20px;
border: 1px solid #999;
padding: 2px 4px;
line-height: 16px;
}
}
\ No newline at end of file
...@@ -31,6 +31,8 @@ import AddNewQuestion from '@/modules/teach-tool/question-bank/AddNewQuestion'; ...@@ -31,6 +31,8 @@ import AddNewQuestion from '@/modules/teach-tool/question-bank/AddNewQuestion';
import ExaminationPaperIndex from '@/modules/teach-tool/examination-paper/ExaminationPaperIndex'; import ExaminationPaperIndex from '@/modules/teach-tool/examination-paper/ExaminationPaperIndex';
import NewExaminationPaper from '@/modules/teach-tool/examination-paper/NewExaminationPaper'; import NewExaminationPaper from '@/modules/teach-tool/examination-paper/NewExaminationPaper';
import ExaminationManagerIndex from '@/modules/teach-tool/examination-manager/Index';
const mainRoutes = [ const mainRoutes = [
{ {
path: '/home', path: '/home',
...@@ -117,6 +119,14 @@ const mainRoutes = [ ...@@ -117,6 +119,14 @@ const mainRoutes = [
component:NewExaminationPaper, component:NewExaminationPaper,
name: '新建试卷' name: '新建试卷'
}, },
{
path: '/examination-manage-index',
component:ExaminationManagerIndex,
name: '考试'
},
{ {
path: '/course-category-manage', path: '/course-category-manage',
component:CourseCategoryManage, component:CourseCategoryManage,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment