4 files added
6 files modified
New file |
| | |
| | | |
| | | { |
| | | "header": { |
| | | "event": "Allocation failed - JavaScript heap out of memory", |
| | | "trigger": "FatalError", |
| | | "filename": "report.20200514.164013.12768.0.001.json", |
| | | "dumpEventTime": "2020-05-14T16:40:13Z", |
| | | "dumpEventTimeStamp": "1589445613571", |
| | | "processId": 12768, |
| | | "cwd": "E:\\HugeInfo_Code\\oa", |
| | | "commandLine": [ |
| | | "node", |
| | | "E:\\HugeInfo_Code\\oa\\node_modules\\_react-app-rewired@2.1.5@react-app-rewired\\scripts\\start.js" |
| | | ], |
| | | "nodejsVersion": "v12.2.0", |
| | | "wordSize": 64, |
| | | "arch": "x64", |
| | | "platform": "win32", |
| | | "componentVersions": { |
| | | "node": "12.2.0", |
| | | "v8": "7.4.288.21-node.17", |
| | | "uv": "1.28.0", |
| | | "zlib": "1.2.11", |
| | | "brotli": "1.0.7", |
| | | "ares": "1.15.0", |
| | | "modules": "72", |
| | | "nghttp2": "1.38.0", |
| | | "napi": "4", |
| | | "llhttp": "1.1.3", |
| | | "http_parser": "2.8.0", |
| | | "openssl": "1.1.1b", |
| | | "cldr": "35.1", |
| | | "icu": "64.2", |
| | | "tz": "2019a", |
| | | "unicode": "12.1" |
| | | }, |
| | | "release": { |
| | | "name": "node", |
| | | "headersUrl": "https://nodejs.org/download/release/v12.2.0/node-v12.2.0-headers.tar.gz", |
| | | "sourceUrl": "https://nodejs.org/download/release/v12.2.0/node-v12.2.0.tar.gz", |
| | | "libUrl": "https://nodejs.org/download/release/v12.2.0/win-x64/node.lib" |
| | | }, |
| | | "osName": "Windows_NT", |
| | | "osRelease": "10.0.18363", |
| | | "osVersion": "Windows 10 Home China", |
| | | "osMachine": "x86_64", |
| | | "host": "LAPTOP-RI7D261L" |
| | | }, |
| | | "javascriptStack": { |
| | | "message": "No stack.", |
| | | "stack": [ |
| | | "Unavailable." |
| | | ] |
| | | }, |
| | | "nativeStack": [ |
| | | { |
| | | "pc": "0x00007ff7eb4e4e09", |
| | | "symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+9161" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7eb4e8764", |
| | | "symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+23844" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7eb4e7785", |
| | | "symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+19781" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7eb5cf9ab", |
| | | "symbol": "uv_loop_fork+47931" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7eb9071fe", |
| | | "symbol": "v8::internal::Parser::ReportMessageAt+206" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7eb8db27a", |
| | | "symbol": "v8::internal::wasm::StreamingDecoder::NotifyCompilationEnded+666" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7eb9716bc", |
| | | "symbol": "v8::internal::Heap::CreateFillerObjectAt+2972" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7eb97942f", |
| | | "symbol": "v8::internal::LocalEmbedderHeapTracer::NotifyV8MarkingWorklistWasEmpty+5375" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7eb96faa3", |
| | | "symbol": "v8::internal::Heap::CollectGarbage+1235" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7eb96e1a4", |
| | | "symbol": "v8::internal::GCTracer::AddScopeSample+1316" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7eb9aedd3", |
| | | "symbol": "v8::internal::Factory::NewFillerObject+67" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7ebcd57d6", |
| | | "symbol": "v8::internal::OptimizingCompileDispatcher::Unblock+116966" |
| | | }, |
| | | { |
| | | "pc": "0x00007ff7ec170366", |
| | | "symbol": "v8::internal::NativesCollection<0>::GetScriptsSource+660214" |
| | | } |
| | | ], |
| | | "javascriptHeap": { |
| | | "totalMemory": 2155225088, |
| | | "totalCommittedMemory": 2155225088, |
| | | "usedMemory": 1854888984, |
| | | "availableMemory": 78820712, |
| | | "memoryLimit": 2197815296, |
| | | "heapSpaces": { |
| | | "read_only_space": { |
| | | "memorySize": 524288, |
| | | "committedMemory": 524288, |
| | | "capacity": 523976, |
| | | "used": 31712, |
| | | "available": 492264 |
| | | }, |
| | | "new_space": { |
| | | "memorySize": 33554432, |
| | | "committedMemory": 33554432, |
| | | "capacity": 16767232, |
| | | "used": 943080, |
| | | "available": 15824152 |
| | | }, |
| | | "old_space": { |
| | | "memorySize": 1975640064, |
| | | "committedMemory": 1975640064, |
| | | "capacity": 1717317928, |
| | | "used": 1714171072, |
| | | "available": 3146856 |
| | | }, |
| | | "code_space": { |
| | | "memorySize": 4358144, |
| | | "committedMemory": 4358144, |
| | | "capacity": 3402048, |
| | | "used": 3402048, |
| | | "available": 0 |
| | | }, |
| | | "map_space": { |
| | | "memorySize": 7868416, |
| | | "committedMemory": 7868416, |
| | | "capacity": 3247280, |
| | | "used": 3247280, |
| | | "available": 0 |
| | | }, |
| | | "large_object_space": { |
| | | "memorySize": 132657152, |
| | | "committedMemory": 132657152, |
| | | "capacity": 132543488, |
| | | "used": 132543488, |
| | | "available": 0 |
| | | }, |
| | | "code_large_object_space": { |
| | | "memorySize": 622592, |
| | | "committedMemory": 622592, |
| | | "capacity": 550304, |
| | | "used": 550304, |
| | | "available": 0 |
| | | }, |
| | | "new_large_object_space": { |
| | | "memorySize": 0, |
| | | "committedMemory": 0, |
| | | "capacity": 16767232, |
| | | "used": 0, |
| | | "available": 16767232 |
| | | } |
| | | } |
| | | }, |
| | | "resourceUsage": { |
| | | "userCpuSeconds": 648.609, |
| | | "kernelCpuSeconds": 263.234, |
| | | "cpuConsumptionPercent": 3.63255, |
| | | "maxRss": 2726780928, |
| | | "pageFaults": { |
| | | "IORequired": 6475453, |
| | | "IONotRequired": 0 |
| | | }, |
| | | "fsActivity": { |
| | | "reads": 15165, |
| | | "writes": 644 |
| | | } |
| | | }, |
| | | "libuv": [ |
| | | ], |
| | | "environmentVariables": { |
| | | "=C:": "C:\\", |
| | | "ALLUSERSPROFILE": "C:\\ProgramData", |
| | | "APPDATA": "C:\\Users\\Mr Ke\\AppData\\Roaming", |
| | | "AUTHORINFO": "\"Ke Liqin <545800322@qq.com>\"", |
| | | "BABEL_ENV": "development", |
| | | "CLASSPATH": ".;C:\\Program Files\\Java\\jdk1.8.0_131\\lib;C:\\Program Files\\Java\\jdk1.8.0_131\\lib\\tools.jar", |
| | | "COLORTERM": "truecolor", |
| | | "CommonProgramFiles": "C:\\Program Files\\Common Files", |
| | | "CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files", |
| | | "CommonProgramW6432": "C:\\Program Files\\Common Files", |
| | | "COMPUTERNAME": "LAPTOP-RI7D261L", |
| | | "ComSpec": "C:\\WINDOWS\\system32\\cmd.exe", |
| | | "configsetroot": "C:\\WINDOWS\\ConfigSetRoot", |
| | | "DriverData": "C:\\Windows\\System32\\Drivers\\DriverData", |
| | | "FPS_BROWSER_APP_PROFILE_STRING": "Internet Explorer", |
| | | "FPS_BROWSER_USER_PROFILE_STRING": "Default", |
| | | "HOME": "C:\\Users\\Mr Ke", |
| | | "HOMEDRIVE": "C:", |
| | | "HOMEPATH": "\\Users\\Mr Ke", |
| | | "INIT_CWD": "E:\\HugeInfo_Code\\oa", |
| | | "JAVA_HOME": "C:\\Program Files\\Java\\jdk1.8.0_131", |
| | | "LANG": "zh_CN.UTF-8", |
| | | "LOCALAPPDATA": "C:\\Users\\Mr Ke\\AppData\\Local", |
| | | "LOGONSERVER": "\\\\LAPTOP-RI7D261L", |
| | | "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\":[\"start\"],\"original\":[\"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\\Mr Ke\\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_disturl": "https://npm.taobao.org/dist", |
| | | "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_git": "git", |
| | | "npm_config_git_tag_version": "true", |
| | | "npm_config_global": "", |
| | | "npm_config_globalconfig": "C:\\Users\\Mr Ke\\AppData\\Roaming\\npm\\etc\\npmrc", |
| | | "npm_config_globalignorefile": "C:\\Users\\Mr Ke\\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\\Mr Ke\\.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.npm.taobao.org/", |
| | | "npm_config_node_gyp": "C:\\Users\\Mr Ke\\AppData\\Roaming\\nvm\\v12.2.0\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js", |
| | | "npm_config_node_options": "", |
| | | "npm_config_node_version": "12.2.0", |
| | | "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\\Mr Ke\\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.npm.taobao.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\\MRKE~1\\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\\Mr Ke\\.npmrc", |
| | | "npm_config_user_agent": "npm/6.9.0 node/v12.2.0 win32 x64", |
| | | "npm_config_version": "", |
| | | "npm_config_versions": "", |
| | | "npm_config_viewer": "browser", |
| | | "npm_execpath": "C:\\Users\\Mr Ke\\AppData\\Roaming\\nvm\\v12.2.0\\node_modules\\npm\\bin\\npm-cli.js", |
| | | "npm_lifecycle_event": "start", |
| | | "npm_lifecycle_script": "react-app-rewired start", |
| | | "npm_node_execpath": "C:\\Program Files\\nodejs\\node.exe", |
| | | "npm_package_browserslist_development_0": "ie 8", |
| | | "npm_package_browserslist_development_1": "last 1 chrome version", |
| | | "npm_package_browserslist_development_2": "last 1 firefox version", |
| | | "npm_package_browserslist_development_3": "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_antd": "^3.26.11", |
| | | "npm_package_dependencies_axios": "^0.19.2", |
| | | "npm_package_dependencies_braft_editor": "^2.3.9", |
| | | "npm_package_dependencies_mocker_api": "^1.9.0", |
| | | "npm_package_dependencies_node_sass": "^4.13.1", |
| | | "npm_package_dependencies_react": "^16.12.0", |
| | | "npm_package_dependencies_react_app_polyfill": "^1.0.6", |
| | | "npm_package_dependencies_react_dom": "^16.12.0", |
| | | "npm_package_dependencies_react_router_dom": "^5.1.2", |
| | | "npm_package_dependencies_react_scripts": "3.4.0", |
| | | "npm_package_dependencies_sass_loader": "^8.0.2", |
| | | "npm_package_dependencies_wangeditor": "^3.1.1", |
| | | "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_description": "This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).", |
| | | "npm_package_devDependencies_babel_plugin_import": "^1.13.0", |
| | | "npm_package_devDependencies_customize_cra": "^0.9.1", |
| | | "npm_package_devDependencies_es6_promise": "^4.2.8", |
| | | "npm_package_devDependencies_less": "^3.11.1", |
| | | "npm_package_devDependencies_less_loader": "^5.0.0", |
| | | "npm_package_devDependencies_mockjs": "^1.0.1-beta3", |
| | | "npm_package_devDependencies_moment": "^2.24.0", |
| | | "npm_package_devDependencies_react_app_rewired": "^2.1.5", |
| | | "npm_package_devDependencies__babel_plugin_proposal_class_properties": "^7.8.3", |
| | | "npm_package_eslintConfig_extends": "react-app", |
| | | "npm_package_gitHead": "fc68f6006949a91fced69951778a7c88859cbb6c", |
| | | "npm_package_homepage": "http://.", |
| | | "npm_package_name": "my-app", |
| | | "npm_package_private": "true", |
| | | "npm_package_readmeFilename": "README.md", |
| | | "npm_package_scripts_build": "react-app-rewired build", |
| | | "npm_package_scripts_eject": "react-app-rewired eject", |
| | | "npm_package_scripts_mock": "mocker ./mock", |
| | | "npm_package_scripts_page": "node .pjcode/page", |
| | | "npm_package_scripts_start": "react-app-rewired start", |
| | | "npm_package_scripts_test": "react-app-rewired test", |
| | | "npm_package_scripts_view": "node .pjcode/view", |
| | | "npm_package_version": "0.1.0", |
| | | "NPM_PREFIX_NPM_CLI_JS": "C:\\Users\\Mr Ke\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js", |
| | | "NUMBER_OF_PROCESSORS": "8", |
| | | "NVM_HOME": "C:\\Users\\Mr Ke\\AppData\\Roaming\\nvm", |
| | | "NVM_SYMLINK": "C:\\Program Files\\nodejs", |
| | | "OneDrive": "C:\\Users\\Mr Ke\\OneDrive", |
| | | "OS": "Windows_NT", |
| | | "Path": "C:\\Users\\Mr Ke\\AppData\\Roaming\\nvm\\v12.2.0\\node_modules\\npm\\node_modules\\npm-lifecycle\\node-gyp-bin;E:\\HugeInfo_Code\\oa\\node_modules\\.bin;C:\\ProgramData\\Oracle\\Java\\javapath;D:\\Program Files\\Git\\cmd;C:\\Windows\\System32;C:\\Program Files (x86)\\Common Files\\Thunder Network\\KanKan\\Codecs;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files\\NVIDIA Corporation\\NVIDIA NvDLISR;\"C:\\Program Files\\Java\\jdk1.8.0_131\\bin;C:\\Program Files\\Java\\jdk1.8.0_131\\jre\\bin\";C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;D:\\Program Files\\Yarn\\bin\\;C:\\Program Files\\TortoiseSVN\\bin;C:\\Users\\Mr Ke\\AppData\\Roaming\\nvm;C:\\Program Files\\nodejs;C:\\Users\\Mr Ke\\AppData\\Local\\Programs\\Python\\Python37\\Scripts\\;C:\\Users\\Mr Ke\\AppData\\Local\\Programs\\Python\\Python37\\;C:\\Users\\Mr Ke\\AppData\\Local\\Microsoft\\WindowsApps;D:\\Program Files\\Microsoft VS Code\\bin;C:\\Users\\Mr Ke\\AppData\\Local\\BypassRuntm;C:\\Users\\Mr Ke\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\Mr Ke\\AppData\\Local\\Yarn\\bin;C:\\Users\\Mr Ke\\AppData\\Roaming\\npm;C:\\Users\\Mr Ke\\AppData\\Roaming\\nvm;C:\\Program Files\\nodejs", |
| | | "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JSE;.WSF;.WSH;.MSC;.CPL", |
| | | "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:\\Users\\Mr Ke\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules", |
| | | "PUBLIC": "C:\\Users\\Public", |
| | | "REACT_APP_CODER": "liuwh", |
| | | "REACT_APP_EMAIL": "", |
| | | "SESSIONNAME": "Console", |
| | | "SystemDrive": "C:", |
| | | "SystemRoot": "C:\\WINDOWS", |
| | | "TEMP": "C:\\Users\\MRKE~1\\AppData\\Local\\Temp", |
| | | "TERM_PROGRAM": "vscode", |
| | | "TERM_PROGRAM_VERSION": "1.45.0", |
| | | "TMP": "C:\\Users\\MRKE~1\\AppData\\Local\\Temp", |
| | | "USERDOMAIN": "LAPTOP-RI7D261L", |
| | | "USERDOMAIN_ROAMINGPROFILE": "LAPTOP-RI7D261L", |
| | | "USERNAME": "Mr Ke", |
| | | "USERPROFILE": "C:\\Users\\Mr Ke", |
| | | "WEBPACK_DEV_SERVER": "true", |
| | | "windir": "C:\\WINDOWS" |
| | | }, |
| | | "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\\ADVAPI32.dll", |
| | | "C:\\WINDOWS\\System32\\msvcrt.dll", |
| | | "C:\\WINDOWS\\System32\\sechost.dll", |
| | | "C:\\WINDOWS\\System32\\USER32.dll", |
| | | "C:\\WINDOWS\\SYSTEM32\\dbghelp.dll", |
| | | "C:\\WINDOWS\\System32\\win32u.dll", |
| | | "C:\\WINDOWS\\System32\\ucrtbase.dll", |
| | | "C:\\WINDOWS\\System32\\GDI32.dll", |
| | | "C:\\WINDOWS\\System32\\gdi32full.dll", |
| | | "C:\\WINDOWS\\System32\\msvcp_win.dll", |
| | | "C:\\WINDOWS\\System32\\PSAPI.DLL", |
| | | "C:\\WINDOWS\\System32\\CRYPT32.dll", |
| | | "C:\\WINDOWS\\SYSTEM32\\IPHLPAPI.DLL", |
| | | "C:\\WINDOWS\\System32\\MSASN1.dll", |
| | | "C:\\WINDOWS\\SYSTEM32\\USERENV.dll", |
| | | "C:\\WINDOWS\\System32\\bcrypt.dll", |
| | | "C:\\WINDOWS\\System32\\profapi.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\\uxtheme.dll", |
| | | "C:\\WINDOWS\\System32\\combase.dll", |
| | | "C:\\WINDOWS\\system32\\mswsock.dll", |
| | | "C:\\WINDOWS\\System32\\kernel.appcore.dll", |
| | | "C:\\WINDOWS\\SYSTEM32\\CRYPTBASE.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:\\Windows\\System32\\rasadhlp.dll", |
| | | "C:\\WINDOWS\\System32\\fwpuclnt.dll", |
| | | "\\\\?\\E:\\HugeInfo_Code\\oa\\node_modules\\_node-sass@4.13.1@node-sass\\vendor\\win32-x64-72\\binding.node" |
| | | ] |
| | | } |
| | |
| | | /** Happy Coding */ |
| | | .hot-list-table-view { |
| | | &-main { |
| | | margin: 24px 0; |
| | | margin: 14px 0; |
| | | padding-bottom: 24px; |
| | | background: #fff; |
| | | &-content { |
| | |
| | | |
| | | /** 通知列表 */ |
| | | import React, { ReactNode, ReactEventHandler, Component } from 'react'; |
| | | import { Alert } from 'antd'; |
| | | import { Alert, Tooltip } from 'antd'; |
| | | import fetch from '../../../api/request'; |
| | | |
| | | import './index.scss'; |
| | |
| | | this.config = { |
| | | }; |
| | | this.state = { |
| | | content: '' |
| | | notice: null |
| | | }; |
| | | } |
| | | |
| | |
| | | fetch({ |
| | | url: `api/document/getNewNotice` |
| | | }).then(res => { |
| | | if( res ) { |
| | | if (res) { |
| | | this.setState({ |
| | | content: res.documentTitle || '' |
| | | notice: res |
| | | // documentTitle: res.documentTitle || '' |
| | | }) |
| | | } |
| | | }) |
| | |
| | | |
| | | componentDidMount() { } |
| | | |
| | | emoveTAG = (str) => { |
| | | return str.replace(/<[^>]+>/g, ""); |
| | | } |
| | | |
| | | onClick = () => { |
| | | this.props.history.push({ pathname: "/index/workbench/announcement" }); |
| | | } |
| | | |
| | | onMouseOut = () => { |
| | | this.refs.marquee.start(); |
| | | } |
| | | |
| | | onMouseOver = () => { |
| | | this.refs.marquee.stop(); |
| | | } |
| | | |
| | | linkDetail = (id) => { |
| | | this.props.history.push({ pathname: `/document/detail/${id}` }); |
| | | |
| | | } |
| | | |
| | | |
| | | renderDom = () => { |
| | | let { content } = this.state; |
| | | let { notice } = this.state; |
| | | return <div className="notify-list-main-dom"> |
| | | <span className="notify-list-main-dom-msg">最新通知:{content}</span> |
| | | <span className="notify-list-main-dom-fuc" onClick={this.onClick}>[查看全部]</span> |
| | | <div className="notify-list-main-dom-msg">最新通知: |
| | | <div className="notify-list-main-dom-msg-title" onClick={() => { notice.id && this.linkDetail(notice.id) }}> |
| | | <marquee onMouseOut={this.onMouseOut} onMouseOver={this.onMouseOver} ref='marquee' style={{ cursor: 'pointer' }}>{notice.documentTitle || ''}</marquee> |
| | | </div> |
| | | { |
| | | notice.documentContent ? <Tooltip placement='topLeft' title={this.emoveTAG(notice.documentContent)} arrowPointAtCenter> |
| | | <div className="notify-list-main-dom-msg-content" onClick={() => { notice.id && this.linkDetail(notice.id) }}>{this.emoveTAG(notice.documentContent)}</div> |
| | | </Tooltip> : null |
| | | } |
| | | </div> |
| | | <div className="notify-list-main-dom-fuc" onClick={this.onClick}>[查看全部]</div> |
| | | </div> |
| | | } |
| | | |
| | | render() { |
| | | let { content } = this.state; |
| | | let { notice } = this.state; |
| | | |
| | | return ( |
| | | <div className="notify-list-main"> |
| | | { |
| | | content && |
| | | notice && |
| | | <Alert |
| | | // message="Warning Text Warning Text Warning TextW arning Text Warning Text Warning TextWarning Text" |
| | | message={this.renderDom()} |
| | |
| | | /** Happy Coding */ |
| | | .notify-list { |
| | | &-main { |
| | | margin: 20px 0; |
| | | margin: 14px 0; |
| | | & .ant-alert-warning { |
| | | background: #fff9e5 !important; |
| | | border: 0 !important; |
| | |
| | | width: 100%; |
| | | display: flex; |
| | | &-msg { |
| | | width: 55%; |
| | | width: 70%; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | margin-right: 20px; |
| | | display: flex; |
| | | align-items: center; |
| | | &-title{ |
| | | width: 210px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | &-content { |
| | | flex: 1; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | padding: 0 20px; |
| | | font-size: 12px; |
| | | display: flex; |
| | | align-items: center; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | &-fuc { |
| | | font-family: PingFangSC-Medium; |
| | | font-size: 14px; |
| | | color: #559DE6; |
| | | color: #559de6; |
| | | line-height: 22px; |
| | | cursor: pointer; |
| | | letter-spacing: 1px; |
New file |
| | |
| | | import React from 'react'; |
| | | import { Checkbox, Row, Col } from 'antd'; |
| | | |
| | | export default class MultiSelect extends React.Component{ |
| | | |
| | | onChange=checkedValues => { |
| | | this.props.onChange(checkedValues); |
| | | } |
| | | render(){ |
| | | const {all,own}= this.props; |
| | | return( |
| | | <div> |
| | | {all.length==0 |
| | | ?<div style={{fontSize:16}}>暂无数据</div> |
| | | :<Checkbox.Group style={{ width: '100%' }} defaultValue={own} onChange={this.onChange}> |
| | | <Row> |
| | | {all.map(e=>( |
| | | <Col span={4} key={e.id}><Checkbox value={e.id}>{e.name}</Checkbox></Col> |
| | | ))} |
| | | </Row> |
| | | </Checkbox.Group> |
| | | } |
| | | </div> |
| | | ) |
| | | |
| | | } |
| | | } |
| | |
| | | documentType: res.documentType || 'DT00002' |
| | | }, |
| | | loading: false, |
| | | fileList: res.attachmentList && res.attachmentList.map((a) => ({ ...a, key: a.id, uid: a.id, name: a.fileName + '.' + a.suffix, })) || [] |
| | | fileList: res.attachmentList && res.attachmentList.map((a) => ({ ...a, key: a.id, uid: a.id, name: a.fileName + '.' + a.suffix, status: 'done' })) || [] |
| | | }); |
| | | }); |
| | | } |
| | |
| | | header: { |
| | | Authorization: window.localStorage.getItem('token') |
| | | }, |
| | | showUploadList: { |
| | | showDownloadIcon: true, |
| | | showRemoveIcon: false, |
| | | showPreviewIcon: true |
| | | }, |
| | | onDownload: (file) => { |
| | | console.log('file', file) |
| | | }, |
| | | onChange: ({ file, fileList }) => { |
| | | fileList = fileList.slice(-2); |
| | | fileList = fileList.map(file => { |
| | |
| | | onPreview: (file) => { |
| | | window.open(file.url); |
| | | }, |
| | | showUploadList: { showPreviewIcon: true, showDownloadIcon: true, showRemoveIcon: false } |
| | | }; |
| | | |
| | | return ( |
New file |
| | |
| | | import React from 'react'; |
| | | import { Link } from 'react-router-dom'; |
| | | import { Card, Row, Col, Icon, Form, Input, Button, Select, Table, DatePicker, message, Breadcrumb, Spin, Layout, Upload, Modal } from 'antd'; |
| | | import MultiSelect from '../../common/multiSelect'; |
| | | import Fetch from '../fetch'; |
| | | import { saveUser, findGroups, findRoles } from "../fetch/api"; |
| | | import ChangePswView from '../component/ChangePswView'; |
| | | import { domain } from "../fetch/_"; |
| | | console.log(domain) |
| | | |
| | | const FormItem = Form.Item; |
| | | const Option = Select.Option; |
| | | |
| | | class UserDetail extends React.Component { |
| | | constructor(props) { |
| | | super(props) |
| | | this.id = props.match.params.id == 'new' ? '' : props.match.params.id; |
| | | this.flag = props.match.params.flag == 'Modify' ? '修改' : '新增'; |
| | | this.state = { |
| | | spinning: true, |
| | | user: {}, |
| | | account: {}, |
| | | groupIds: [], //组 |
| | | roleIds: [], //角色 |
| | | |
| | | previewVisible: false, |
| | | previewImage: '', |
| | | fileList: [], |
| | | |
| | | roleList: [], |
| | | ownRoles: [], |
| | | groupList: [], |
| | | ownGroups: [], |
| | | changePswVisible: false, |
| | | btnLoading: false |
| | | } |
| | | } |
| | | componentWillMount() { |
| | | let _this = this; |
| | | findGroups().then(res => { |
| | | _this.setState({ |
| | | groupList: res.data |
| | | }) |
| | | }); |
| | | findRoles().then(res => { |
| | | _this.setState({ |
| | | roleList: res.data |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | componentDidMount() { |
| | | let _this = this; |
| | | if (_this.id !== '') { |
| | | Fetch.getUserDetail({ id: _this.id }) |
| | | .then(res => { |
| | | console.log('detail', res) |
| | | this.setState({ |
| | | dataSet: res, |
| | | spinning: false, |
| | | user: res.user, |
| | | account: res.account, |
| | | groupIds: res.groupIds, |
| | | roleIds: res.roleIds, |
| | | fileList: (res.user.avatar == null || res.user.avatar == '') ? [] : [{ |
| | | uid: '-1', |
| | | name: 'xxx.png', |
| | | status: 'done', |
| | | url: res.user.avatar |
| | | }] |
| | | }); |
| | | }); |
| | | } |
| | | _this.setState({ |
| | | spinning: false |
| | | }) |
| | | } |
| | | |
| | | handleCancel = () => this.setState({ previewVisible: false }) |
| | | |
| | | handlePreview = (file) => { |
| | | this.setState({ |
| | | previewImage: file.url || file.thumbUrl, |
| | | previewVisible: true, |
| | | }); |
| | | } |
| | | |
| | | handleChange = ({ fileList, file }) => { |
| | | const { user } = this.state; |
| | | this.setState({ |
| | | fileList, |
| | | }) |
| | | if (file.status == 'done') { |
| | | this.setState({ |
| | | user: { |
| | | ...user, |
| | | avatar: file.response.data |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | |
| | | handleRemove = ({ fileList }) => { |
| | | const { user } = this.state; |
| | | this.setState({ |
| | | user: { |
| | | ...user, |
| | | avatar: '' |
| | | }, |
| | | fileList: [] |
| | | }) |
| | | } |
| | | |
| | | roleChange = checkedValues => { |
| | | this.setState({ roleIds: checkedValues }) |
| | | } |
| | | groupChange = checkedValues => { |
| | | this.setState({ groupIds: checkedValues }) |
| | | } |
| | | |
| | | onOK = (data) => { |
| | | console.log('data', data); |
| | | let _this = this; |
| | | const { getFieldValue } = _this.props.form; |
| | | let formData = { |
| | | accountId: _this.state.account.id, |
| | | newPassword: data.newPassWord |
| | | } |
| | | _this.setState({ |
| | | btnLoading: true |
| | | }) |
| | | Fetch.getChangePsw(formData).then(res => { |
| | | console.log('res', res); |
| | | if (res.code == 0) { |
| | | message.success("密码修改成功", 2); |
| | | } else { |
| | | message.error(res.message, 2); |
| | | } |
| | | _this.setState({ |
| | | btnLoading: false, |
| | | changePswVisible: false |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | handleSubmit = (e) => { // 提交表单数据 |
| | | e.preventDefault(); |
| | | let _this = this; |
| | | _this.props.form.validateFields((err, values) => { |
| | | if (err) return; |
| | | _this.setState({ spinning: true }); |
| | | (values.sex == "1" || values.sex == "男") ? values.sex = 1 : values.sex = 2; |
| | | saveUser({ |
| | | account: { |
| | | ..._this.state.account, |
| | | id: _this.state.account.id || '', |
| | | account: values.account, |
| | | credential: values.credential, |
| | | }, |
| | | user: { |
| | | ..._this.state.user, |
| | | id: _this.state.user.id, |
| | | trueName: values.trueName, |
| | | sex: values.sex, |
| | | idcard: values.idcard, |
| | | mobile: values.mobile, |
| | | email: values.email, |
| | | }, |
| | | roleIds: _this.state.roleIds, |
| | | groupIds: _this.state.groupIds |
| | | }).then(res => { |
| | | if (res.code === 0) { |
| | | message.success("保存用户成功", 2, () => { |
| | | _this.setState({ spinning: false }); |
| | | _this.props.history.push("/baseManage/user") |
| | | }); |
| | | } else { |
| | | message.error(res.msg, 2); |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | isMobile = (rule, value, callback) => { |
| | | const regMobile = /^0?1[3|4|5|8][0-9]\d{8}$/ |
| | | if (!regMobile.test(value)) { |
| | | if (value == "") { |
| | | callback(); |
| | | return; |
| | | } else { |
| | | callback('手机号码格式不正确'); |
| | | return; |
| | | } |
| | | } |
| | | callback() |
| | | } |
| | | |
| | | isIdCard = (rule, value, callback) => { |
| | | |
| | | const regMobile = /^[1-9]\d{7}((0[1-9])|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/; |
| | | if (!regMobile.test(value)) { |
| | | if (value == "") { |
| | | callback(); |
| | | return; |
| | | } else { |
| | | callback('身份证号码格式不正确'); |
| | | return; |
| | | } |
| | | } |
| | | callback() |
| | | } |
| | | |
| | | render() { |
| | | const { getFieldDecorator } = this.props.form; |
| | | const formItemLayout = { |
| | | labelCol: { xs: { span: 24 }, sm: { span: 10 }, }, |
| | | wrapperCol: { xs: { span: 24 }, sm: { span: 14 }, }, |
| | | }; |
| | | const { user, account, groupIds, roleIds, previewVisible, previewImage, fileList, roleList, groupList, changePswVisible, btnLoading } = this.state; |
| | | const uploadButton = ( |
| | | <div> |
| | | <Icon type="plus" /> |
| | | <div className="ant-upload-text">上传头像</div> |
| | | </div> |
| | | ); |
| | | return ( |
| | | <Layout className="h-100 page-table"> |
| | | <Breadcrumb className="breadcrumb-style"> |
| | | <Breadcrumb.Item>基础管理</Breadcrumb.Item> |
| | | <Breadcrumb.Item>用户管理</Breadcrumb.Item> |
| | | <Breadcrumb.Item>{this.flag}</Breadcrumb.Item> |
| | | </Breadcrumb> |
| | | <Spin spinning={this.state.spinning}> |
| | | <Modal visible={previewVisible} footer={null} onCancel={this.handleCancel}> |
| | | <img alt="example" style={{ width: '100%' }} src={previewImage} /> |
| | | </Modal> |
| | | <div style={{ margin: 20 }}> |
| | | <Form onSubmit={this.handleSubmit}> |
| | | <div className="border-bottom card-title"> |
| | | <Row style={{ borderStyle: 'solid', borderWidth: 0.01, display: 'flex' }} className="flexbox" align="middle"> |
| | | <span style={{ fontSize: 16, fontWeight: 650 }} className="flex1 vertical-middle">账号信息</span> |
| | | <div style={{ float: 'right' }}> |
| | | {/* <Link to="/baseManage/user"><Button type="default">返回</Button></Link> |
| | | */} |
| | | <Button type="default" onClick={() => { |
| | | this.props.history.goBack(); |
| | | }}>返回</Button> |
| | | <Button htmlType="submit" type="primary">确认</Button> |
| | | </div> |
| | | </Row> |
| | | </div> |
| | | <Card> |
| | | <Row> |
| | | <Col span={16}> |
| | | { |
| | | this.flag == '修改' ? |
| | | <Row> |
| | | <Col span={12}> |
| | | <FormItem label={"账号"} {...formItemLayout}> |
| | | {/* <Input placeholder="请输入账号" value={account.account || ''} disabled /> */} |
| | | {account.account || ''} |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={12}> |
| | | <FormItem label={"密码"} {...formItemLayout}> |
| | | {/* <Input placeholder="请输入密码" disabled={true} type="password" value={account.credential || ''} disabled /> */} |
| | | {/* {account.credential || ''} */} |
| | | {'********'} |
| | | </FormItem> |
| | | </Col> |
| | | </Row> |
| | | : |
| | | <Row> |
| | | <Col span={12}> |
| | | <FormItem label={"账号"} {...formItemLayout}> |
| | | {getFieldDecorator('account', { |
| | | rules: [{ required: true, message: '账号必填' }], |
| | | initialValue: account.account || '' |
| | | })( |
| | | <Input placeholder="请输入账号" /> |
| | | )}</FormItem> |
| | | </Col> |
| | | <Col span={12}> |
| | | <FormItem label={"密码"} {...formItemLayout} hasFeedback> |
| | | {getFieldDecorator('credential', { |
| | | rules: [{ required: true, message: '密码必填' }], |
| | | initialValue: account.credential || '' |
| | | })( |
| | | <Input.Password placeholder="请输入密码" type="password" /> |
| | | )}</FormItem> |
| | | </Col> |
| | | </Row> |
| | | } |
| | | </Col> |
| | | { |
| | | this.flag == '修改' && |
| | | <Col span={8}> |
| | | <div style={{ marginLeft: '20%' }}> |
| | | <Button type="primary" onClick={() => { |
| | | this.setState({ |
| | | changePswVisible: true |
| | | }) |
| | | }}>修改密码</Button> |
| | | </div> |
| | | </Col> |
| | | } |
| | | </Row> |
| | | </Card> |
| | | <div className="border-bottom card-title"> |
| | | <Row style={{ borderStyle: 'solid', borderWidth: 0.01, display: 'flex' }} className="flexbox" align="middle"> |
| | | <span style={{ fontSize: 16, fontWeight: 650 }} className="flex1 vertical-middle">基础信息</span> |
| | | </Row> |
| | | </div> |
| | | <Card> |
| | | <Row> |
| | | <Col span={16}> |
| | | <Row> |
| | | <Col span={12}> |
| | | <FormItem label={"姓名"} {...formItemLayout}> |
| | | {getFieldDecorator('trueName', { |
| | | rules: [{ required: true, message: '姓名必填' }], |
| | | initialValue: user.trueName || '' |
| | | })( |
| | | <Input placeholder="请输入姓名" /> |
| | | )}</FormItem> |
| | | </Col> |
| | | <Col span={12}> |
| | | <FormItem label={"性别"} {...formItemLayout}> |
| | | {getFieldDecorator('sex', { |
| | | rules: [{ required: true, message: '微信用户名称必填' }], |
| | | initialValue: user.sex || undefined |
| | | })( |
| | | // <Input placeholder="请输入" /> |
| | | <Select> |
| | | <Option value="">请选择</Option> |
| | | <Option value={1}>男</Option> |
| | | <Option value={2}>女</Option> |
| | | </Select> |
| | | )}</FormItem> |
| | | </Col> |
| | | </Row> |
| | | <Row> |
| | | <Col span={12}> |
| | | <FormItem label={"手机号码"} {...formItemLayout}> |
| | | {getFieldDecorator('mobile', { |
| | | rules: [{ |
| | | required: true, message: '手机号码必填' |
| | | }, { |
| | | validator: this.isMobile |
| | | }], |
| | | initialValue: user.mobile || '' |
| | | })( |
| | | <Input placeholder="请输入手机号码" /> |
| | | )}</FormItem> |
| | | </Col> |
| | | <Col span={12}> |
| | | <FormItem label={"电子邮箱"} {...formItemLayout}> |
| | | {getFieldDecorator('email', { |
| | | rules: [{ |
| | | type: 'email', message: '电子邮箱格式不正确', |
| | | }], |
| | | initialValue: user.email || '' |
| | | })( |
| | | <Input placeholder="请输入电子邮箱" /> |
| | | )}</FormItem> |
| | | </Col> |
| | | </Row> |
| | | <Row> |
| | | <Col span={12}> |
| | | <FormItem label={"身份证号码"} {...formItemLayout}> |
| | | {getFieldDecorator('idcard', { |
| | | rules: [{ |
| | | required: true, message: '身份证号码必填' |
| | | }, { |
| | | validator: this.isIdCard |
| | | }], |
| | | initialValue: user.idcard || '' |
| | | })( |
| | | <Input placeholder="请输入身份证号码" /> |
| | | )}</FormItem> |
| | | </Col> |
| | | </Row> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div style={{ marginLeft: '20%' }}> |
| | | <Upload |
| | | action={domain + `api/user/uploadAvatar`} |
| | | listType="picture-card" |
| | | fileList={fileList} |
| | | onPreview={this.handlePreview} |
| | | onChange={this.handleChange} |
| | | onRemove={this.handleRemove} |
| | | > |
| | | {fileList.length > 0 ? null : uploadButton} |
| | | </Upload> |
| | | {/* <img style={{height:200,width:200}} src={user.avatar || 'https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1539672841&di=042d8481194441c486945d99dfe79495&src=http://www.qqwangming.org/uploads/71f459727f5055a0/8.jpg'} alt=""/> */} |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </Card> |
| | | </Form> |
| | | <div className="border-bottom card-title"> |
| | | <Row style={{ borderStyle: 'solid', borderWidth: 0.01, display: 'flex' }} className="flexbox" align="middle"> |
| | | <span style={{ fontSize: 16, fontWeight: 650 }} className="flex1">拥有角色</span> |
| | | <Link to={{ pathname: "/organizationMgt/roleDetail/new/Add", state: { id: 'new' } }}> |
| | | <span style={{ float: 'right', fontSize: 10, fontColor: 'blue' }}>没有角色?点击新建</span> |
| | | </Link> |
| | | </Row> |
| | | </div> |
| | | <Card> |
| | | <Row> |
| | | <MultiSelect key={roleIds ? roleIds.toString() : 'init'} all={roleList} own={roleIds} onChange={this.roleChange} /> |
| | | </Row> |
| | | </Card> |
| | | <div className="border-bottom card-title"> |
| | | <Row style={{ borderStyle: 'solid', borderWidth: 0.01, display: 'flex' }} className="flexbox" align="middle"> |
| | | <span style={{ fontSize: 16, fontWeight: 650 }} className="flex1">拥有组</span> |
| | | <Link to={{ pathname: "/baseManage/groupDetail/new/Add", state: { id: '' } }}> |
| | | <span style={{ float: 'right', fontSize: 10, fontColor: 'blue' }}>没有组?点击新建</span> |
| | | </Link> |
| | | </Row> |
| | | </div> |
| | | <Card> |
| | | <Row> |
| | | <MultiSelect key={groupIds ? groupIds.toString() : 'init'} all={groupList} own={groupIds} onChange={this.groupChange} /> |
| | | </Row> |
| | | </Card> |
| | | </div> |
| | | </Spin> |
| | | { |
| | | changePswVisible && <ChangePswView onCancel={() => { this.setState({ changePswVisible: false }) }} onOK={this.onOK} btnLoading={btnLoading} /> |
| | | } |
| | | </Layout> |
| | | ) |
| | | } |
| | | } |
| | | |
| | | const UserDetailForm = Form.create()(UserDetail); |
| | | export default UserDetailForm; |
New file |
| | |
| | | import React from 'react'; |
| | | import { Link } from 'react-router-dom'; |
| | | import { Card, Row, Col, Icon, Form, Input, Button, Select, Table, DatePicker, message, Breadcrumb, Layout, Modal, Pagination, Divider } from 'antd'; |
| | | import TableView from '../../common/TableView'; |
| | | import SearchFormView from '../../common/SearchFormView'; |
| | | import moment from 'moment'; |
| | | import fetch from '../../../api/request'; |
| | | |
| | | const FormItem = Form.Item; |
| | | const Option = Select.Option; |
| | | const confirm = Modal.confirm; |
| | | |
| | | |
| | | class UserManage extends React.Component { |
| | | constructor(props) { |
| | | super(props); |
| | | this.state = { |
| | | formData: { |
| | | __key: Date.now(), |
| | | type: '', |
| | | title: '', |
| | | page: 1, |
| | | size: 10, |
| | | }, |
| | | }; |
| | | } |
| | | |
| | | componentDidMount() { } |
| | | |
| | | setFormData = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | } |
| | | |
| | | render() { |
| | | const { formData } = this.state; |
| | | let tableParams = { |
| | | url: `api/user/query`, |
| | | formData, |
| | | key: formData.__key, |
| | | columns: this.renderColumns(), |
| | | extraFromData: { |
| | | type: 'DT00002', |
| | | }, |
| | | setFormData: this.setFormData |
| | | } |
| | | |
| | | return ( |
| | | <div className="usermanage-main margin padding bg-white"> |
| | | <SearchFormView |
| | | formData={formData} |
| | | setFormData={this.setFormData} |
| | | data={[ |
| | | { type: 'input', name: '姓名', label: '姓名', key: 'trueName' }, |
| | | { type: 'input', name: '身份证号码', label: '身份证号码', key: 'idcard' }, |
| | | { type: 'input', name: '手机号码', label: '手机号码', key: 'mobile' }, |
| | | { type: 'input', name: '电子邮箱', label: '电子邮箱', key: 'email' }, |
| | | ]} /> |
| | | <Row type="flex" gutter={20} className="margin-bottom"> |
| | | <Col> |
| | | <Button type="primary">同步微信用户</Button> |
| | | </Col> |
| | | <Col> |
| | | <Button type="primary">新增用户</Button> |
| | | </Col> |
| | | </Row> |
| | | <TableView {...tableParams} /> |
| | | </div> |
| | | ) |
| | | } |
| | | |
| | | // 新增用户 |
| | | add = () => { |
| | | this.props.history.push('/baseManage/userDetail/new/Add') |
| | | } |
| | | // 删除用户 |
| | | onDel = (_text, _record) => { |
| | | // Fetch.userDel({ ids: _text.id }).then(res => { |
| | | // if (res.code == 0) { |
| | | // message.warning('正在更新列表'); |
| | | // this.loadData(1, this.state.pageSize); |
| | | // } |
| | | // }, err => { |
| | | // message.error(err); |
| | | // }); |
| | | } |
| | | |
| | | renderColumns = () => { |
| | | let obj = this; |
| | | return [ |
| | | { title: '头像', className: "txt-c", dataIndex: 'avatar', key: 'avatar', render: (text, record) => text ? <img style={{ height: 23, width: 25 }} src={text} /> : <Icon type="user-delete" style={{ fontSize: 20 }} /> }, |
| | | { title: '姓名', className: "txt-c", dataIndex: 'trueName', key: 'trueName' }, |
| | | { title: '身份证', className: "txt-c", dataIndex: 'idcard', key: 'idcard' }, |
| | | { title: '邮箱', className: "txt-c", dataIndex: 'email', key: 'email' }, |
| | | { title: '手机号码', className: "txt-c", dataIndex: 'mobile', key: 'mobile' }, |
| | | { title: '创建时间', className: "txt-c", dataIndex: 'createTime', key: 'createTime', render: (text, record) => text !== "" && text != null ? moment(text).format("YYYY-MM-DD HH:mm") : "" }, |
| | | { |
| | | title: '操作', className: "txt-c", key: 'operation', render: (text, record) => { |
| | | return <div> |
| | | <Link to={{ pathname: "/baseManage/userDetail/" + record.id + '/Modify', query: { id: record.id } }}>修改</Link> |
| | | <Divider type="vertical" /> |
| | | <a href="javascript:void(0);" onClick={() => this.delete(record.id)}>删除</a> |
| | | </div> |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | delete = (id) => { |
| | | let _this = this; |
| | | confirm({ |
| | | title: <span style={{ fontSize: 19 }}>确定要删除该用户吗?</span>, |
| | | onOk() { |
| | | // Fetch.userDel({ ids: id }).then(res => { |
| | | // if (res.code == 0) { |
| | | // message.success("删除成功") |
| | | // _this.loadData(1, _this.state.pageSize); |
| | | // } |
| | | // }, err => { |
| | | // message.error(err); |
| | | // }); |
| | | }, |
| | | onCancel() { }, |
| | | }); |
| | | } |
| | | userSync = () => { |
| | | let _this = this; |
| | | this.setState({ loading: true }) |
| | | // syncCpUser().then(res => { |
| | | // if (res.code == 0) { |
| | | // _this.loadData(1, this.state.pageSize) |
| | | // _this.setState({ |
| | | // loading: false |
| | | // }); |
| | | // message.success("同步成功!"); |
| | | // } else { |
| | | // message.error("操作失败,请联系管理员"); |
| | | // this.setState({ spinning: false }) |
| | | // } |
| | | // }) |
| | | } |
| | | |
| | | } |
| | | |
| | | const UserManageList = Form.create()(UserManage); |
| | | export default UserManageList; |
| | |
| | | .ant-layout-content { |
| | | overflow: auto; |
| | | } |
| | | .ant-table-middle > .ant-table-content > .ant-table-header > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-body > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-scroll > .ant-table-header > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-scroll > .ant-table-body > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-fixed-left > .ant-table-header > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-fixed-right > .ant-table-header > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-header > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-body > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-scroll > .ant-table-header > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-scroll > .ant-table-body > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-fixed-left > .ant-table-header > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-fixed-right > .ant-table-header > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-tbody > tr > td{ |
| | | padding: 9px 8px !important; |
| | | } |
| | | |
| | | .margin { |
| | | margin: 20px; |
| | | } |
| | | |
| | | .padding{ |
| | | padding: 20px; |
| | | } |
| | | |
| | | .bg-white{ |
| | | background: #fff; |
| | | } |
| | | |
| | | .ant-divider-horizontal{ |
| | | margin: 20px 0 !important; |
| | | } |
| | | |
| | | .margin-bottom{ |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | |
| | |
| | | // 引进页面(pages) |
| | | import Index from './pages/Index'; |
| | | import Login from './pages/login/login'; |
| | | import Workbench from './pages/index/workbench';//首页--工作台 |
| | | import System from './pages/index/System';//首页--工作制度 |
| | | import Announcement from './pages/index/Announcement';//全部通知 |
| | | import Workbench from './pages/index/workbench'; //首页--工作台 |
| | | import System from './pages/index/System'; //首页--工作制度 |
| | | import Announcement from './pages/index/Announcement'; //全部通知 |
| | | |
| | | import DocumentEdit from './pages/document/DocumentEdit';//新建文档 |
| | | import DocumentDetail from './pages/document/DocumentDetail';//文档详情 |
| | | import BrowseLog from './pages/logManage/browseLog';//浏览日志 |
| | | import OperLog from './pages/logManage/operLog';//操作日志 |
| | | import Rawler from './pages/logManage/Rawler';//爬虫词条管理 |
| | | import Information from './pages/personal/information';//个人信息 |
| | | import DocumentEdit from './pages/document/DocumentEdit'; //新建文档 |
| | | import DocumentDetail from './pages/document/DocumentDetail'; //文档详情 |
| | | import BrowseLog from './pages/logManage/browseLog'; //浏览日志 |
| | | import OperLog from './pages/logManage/operLog'; //操作日志 |
| | | import Rawler from './pages/logManage/Rawler'; //爬虫词条管理 |
| | | import Information from './pages/personal/information'; //个人信息 |
| | | |
| | | // 基础平台 |
| | | import UserManage from './components/page/basicConfig/UserManage';//用户管理 |
| | | |
| | | const { Content } = Layout; |
| | | const history = createHashHistory(); |
| | |
| | | </Switch> |
| | | <Content> |
| | | <Switch> |
| | | {/* 基础平台 */} |
| | | <Route path="/baseManage/user" component={UserManage} /> |
| | | |
| | | {/* 新建文档 */} |
| | | <Route path="/document/create/:id?" component={DocumentEdit} /> |
| | | {/* 文档、通知详情 */} |
| | | <Route path="/document/detail/:id" component={DocumentDetail} /> |
| | | |
| | | {/* 全部通知 */} |
| | | <Route path="/index/workbench/announcement" component={Announcement} /> |
| | | <Route |
| | | path="/index/workbench/announcement" |
| | | component={Announcement} |
| | | /> |
| | | {/* 规章制度 */} |
| | | <Route path="/index/rules" component={System} /> |
| | | {/* 首页 */} |
| | |
| | | {/* 登录页 */} |
| | | <Route path="/login" component={Login} /> |
| | | <Route path="/" component={Workbench} /> |
| | | |
| | | {/* 路由的页面重定向 */} |
| | | <Redirect to="/" component={Workbench} /> |
| | | </Switch> |