From 2ea56ed08b58386f0612635101b1acd51cd4a44c Mon Sep 17 00:00:00 2001 From: Mr Ke <kelq@hugeinfo.com.cn> Date: Wed, 29 Apr 2020 18:06:45 +0800 Subject: [PATCH] 浏览日志,操作日志;用户中心(个人信息);用户管理(用户中心) --- src/pages/logManage/browseLog.jsx | 34 + report.20200429.154239.11428.0.001.json | 479 +++++++++++++++++++ src/components/common/TopListTableView/index.jsx | 18 src/components/page/DocumentEditPage/index.jsx | 1 src/components/page/logManage/operLog/index.jsx | 106 ++++ src/components/common/HotListTableView/index.jsx | 2 src/pages/document/DocumentEdit.jsx | 1 src/index.css | 2 src/components/page/AnnouncementPage/index.jsx | 8 src/components/page/logManage/browseLog/index.jsx | 102 ++++ src/components/common/ChangePswView/index.scss | 1 src/components/common/ChangePswView/index.jsx | 105 ++++ src/components/page/index/rulesList/index.jsx | 8 src/components/page/personal/information/index.jsx | 270 ++++++++++ src/pages/index/Announcement.jsx | 9 src/api/httpurl.js | 4 src/pages/document/DocumentDetail.jsx | 2 src/index.js | 13 src/pages/personal/information.jsx | 42 + src/pages/logManage/operLog.jsx | 34 + src/components/page/logManage/browseLog/index.scss | 14 src/components/common/SearchFormView/index.jsx | 13 src/components/page/personal/information/index.scss | 14 /dev/null | 45 - src/components/common/HeadView/index.jsx | 2 src/components/common/FindAlreadyReadOrNotView/index.jsx | 11 src/menu/menu.data.js | 78 ++ src/components/page/logManage/operLog/index.scss | 14 src/components/common/ChangePswView/test.jsx | 17 src/components/common/NotifyList/index.jsx | 9 30 files changed, 1,353 insertions(+), 105 deletions(-) diff --git a/report.20200429.154239.11428.0.001.json b/report.20200429.154239.11428.0.001.json new file mode 100644 index 0000000..c64ab97 --- /dev/null +++ b/report.20200429.154239.11428.0.001.json @@ -0,0 +1,479 @@ + +{ + "header": { + "event": "Allocation failed - JavaScript heap out of memory", + "trigger": "FatalError", + "filename": "report.20200429.154239.11428.0.001.json", + "dumpEventTime": "2020-04-29T15:42:39Z", + "dumpEventTimeStamp": "1588146159494", + "processId": 11428, + "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": "0x00007ff6cab74e09", + "symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+9161" + }, + { + "pc": "0x00007ff6cab78764", + "symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+23844" + }, + { + "pc": "0x00007ff6cab77785", + "symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+19781" + }, + { + "pc": "0x00007ff6cac5f9ab", + "symbol": "uv_loop_fork+47931" + }, + { + "pc": "0x00007ff6caf971fe", + "symbol": "v8::internal::Parser::ReportMessageAt+206" + }, + { + "pc": "0x00007ff6caf6b27a", + "symbol": "v8::internal::wasm::StreamingDecoder::NotifyCompilationEnded+666" + }, + { + "pc": "0x00007ff6cb0016bc", + "symbol": "v8::internal::Heap::CreateFillerObjectAt+2972" + }, + { + "pc": "0x00007ff6cb00942f", + "symbol": "v8::internal::LocalEmbedderHeapTracer::NotifyV8MarkingWorklistWasEmpty+5375" + }, + { + "pc": "0x00007ff6cafffaa3", + "symbol": "v8::internal::Heap::CollectGarbage+1235" + }, + { + "pc": "0x00007ff6caffe1a4", + "symbol": "v8::internal::GCTracer::AddScopeSample+1316" + }, + { + "pc": "0x00007ff6cb03edd3", + "symbol": "v8::internal::Factory::NewFillerObject+67" + }, + { + "pc": "0x00007ff6cb3657d6", + "symbol": "v8::internal::OptimizingCompileDispatcher::Unblock+116966" + }, + { + "pc": "0x00007ff6cb800366", + "symbol": "v8::internal::NativesCollection<0>::GetScriptsSource+660214" + } + ], + "javascriptHeap": { + "totalMemory": 2157289472, + "totalCommittedMemory": 2157289472, + "usedMemory": 1853721280, + "availableMemory": 75007304, + "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": 2275576, + "available": 14491656 + }, + "old_space": { + "memorySize": 1983504384, + "committedMemory": 1983504384, + "capacity": 1717265352, + "used": 1714535024, + "available": 2730328 + }, + "code_space": { + "memorySize": 3833856, + "committedMemory": 3833856, + "capacity": 3185248, + "used": 3185248, + "available": 0 + }, + "map_space": { + "memorySize": 5246976, + "committedMemory": 5246976, + "capacity": 3255600, + "used": 3255600, + "available": 0 + }, + "large_object_space": { + "memorySize": 130002944, + "committedMemory": 130002944, + "capacity": 129887816, + "used": 129887816, + "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": 365.906, + "kernelCpuSeconds": 204.828, + "cpuConsumptionPercent": 11.2438, + "maxRss": 2718556160, + "pageFaults": { + "IORequired": 2805436, + "IONotRequired": 0 + }, + "fsActivity": { + "reads": 10538, + "writes": 349 + } + }, + "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": "c0c820559b46f3a5ede6fbd7f66e77d09981829f", + "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.44.2", + "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\\dbghelp.dll", + "C:\\WINDOWS\\System32\\USER32.dll", + "C:\\WINDOWS\\System32\\ucrtbase.dll", + "C:\\WINDOWS\\System32\\win32u.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\\MSASN1.dll", + "C:\\WINDOWS\\SYSTEM32\\IPHLPAPI.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" + ] +} \ No newline at end of file diff --git a/src/api/httpurl.js b/src/api/httpurl.js index bbd512e..0244c8a 100644 --- a/src/api/httpurl.js +++ b/src/api/httpurl.js @@ -1,6 +1,6 @@ //内网测试地址 -// let StagingUrl = 'http://192.168.0.105:9072'; -let StagingUrl = "http://120.79.193.119:9072"; +let StagingUrl = 'http://192.168.0.116:9072'; +// let StagingUrl = "http://120.79.193.119:9072"; //mock地址 diff --git a/src/components/common/ChangePswView/index.jsx b/src/components/common/ChangePswView/index.jsx new file mode 100644 index 0000000..7029782 --- /dev/null +++ b/src/components/common/ChangePswView/index.jsx @@ -0,0 +1,105 @@ +import React from 'react'; +import { Form, Row, Col, Input, DatePicker, Button, Modal, } from 'antd'; + +import './index.scss'; + +class ChangePswView extends React.Component { + constructor(props) { + super(props); + this.state = { + + }; + } + + onSubmitChangePsw = e => { + this.props.form.validateFields((err, data) => { + if (!err) { + console.log('data', data); + this.props.onOK({ + ...data, + }); + } + }); + } + + render() { + const { changePswVisible, onCancel, btnLoading } = this.props; + const { getFieldDecorator, getFieldValue } = this.props.form; + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 6 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 18 }, + }, + }; + const rules = [ + { + pattern: /^[-_a-z0-9]{6,}$/i, + message: '长度不少于6的数字字母“-”或“_”', + }, + { + pattern: /[-_a-z]/, + message: '必须包含字母“-”或“_”', + }, + ]; + + return ( + <Modal + destroyOnClose + title="修改密码" + visible={true} + footer={null} + onCancel={onCancel}> + <Form onSubmit={this.onSubmitChangePsw} style={{ padding: '20px 20px 0 20px' }}> + <Form.Item label="新密码" {...formItemLayout} > + {getFieldDecorator('newPassWord', { + rules: [{ required: true, message: '请输入新密码' }], + })(<Input type="password" placeholder="请输入新密码" />)} + </Form.Item> + <Form.Item label="重复新密码" {...formItemLayout} > + {getFieldDecorator('_newPword', { + rules: [ + { + required: true, + validator(_, value, callback) { + if (value != getFieldValue('newPassWord')) { + callback('两次密码输入不一致'); + } + callback(); + }, + }, + ], + })( + <Input + type="password" + placeholder="重复新密码" + /> + )} + </Form.Item> + <Form.Item> + <Row + type="flex" + gutter={20} + justify="end" + style={{ marginTop: '20px' }}> + <Col> + <Button onClick={onCancel}>取消</Button> + </Col> + <Col> + <Button type="primary" htmlType="submit" loding={btnLoading}> + 确定 + </Button> + </Col> + </Row> + </Form.Item> + </Form> + </Modal> + ); + } +} + +const ChangePswViewForm = Form.create()(ChangePswView); +export default ChangePswViewForm; \ No newline at end of file diff --git a/src/components/common/ChangePswView/index.scss b/src/components/common/ChangePswView/index.scss new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/components/common/ChangePswView/index.scss @@ -0,0 +1 @@ + diff --git a/src/components/common/ChangePswView/test.jsx b/src/components/common/ChangePswView/test.jsx new file mode 100644 index 0000000..a1fa7bb --- /dev/null +++ b/src/components/common/ChangePswView/test.jsx @@ -0,0 +1,17 @@ +import React from 'react'; +import Component from './index'; +export default class App extends React.Component { +// constructor(props) { +// super(props); +// this.state = { }; +// } + + render() { + return ( + <div> + <Component /> + </div> + ); + } + +} diff --git a/src/components/common/FindAlreadyReadOrNotView/index.jsx b/src/components/common/FindAlreadyReadOrNotView/index.jsx index 50a371d..693c0f7 100644 --- a/src/components/common/FindAlreadyReadOrNotView/index.jsx +++ b/src/components/common/FindAlreadyReadOrNotView/index.jsx @@ -7,7 +7,7 @@ /** Happy Coding */ import React, { ReactNode, ReactEventHandler, Component, useEffect, useState } from 'react'; // import { Link } from 'react-router-dom'; -import { Icon, Tabs, Avatar, Spin } from 'antd'; +import { Icon, Tabs, Avatar, Spin, Empty } from 'antd'; import './index.scss'; const { TabPane } = Tabs; import fetch from '../../../api/request'; @@ -64,9 +64,11 @@ data1.map((a) => ( <div className="flex-box-row align-center space-between modal-list-item" key={a.id}> <span className="modal-label">{a.noticeUserName || '无'}</span> - <span className="modal-time">{a.createTime ? moment(a.createTime).format("YYYY-MM-DD HH:mm") : '无'}</span> </div> )) + } + { + data1.length == 0 && <Empty /> } </div> </Spin> @@ -78,10 +80,13 @@ data2.map((a) => ( <div className="flex-box-row align-center space-between modal-list-item" key={a.id}> <span className="modal-label">{a.noticeUserName || '无'}</span> - <span className="modal-time">{a.createTime ? moment(a.createTime).format("YYYY-MM-DD HH:mm") : '无'}</span> + <span className="modal-time">{a.updateTime ? moment(a.updateTime).format("YYYY-MM-DD HH:mm:ss") : '无'}</span> </div> )) } + { + data2.length == 0 && <Empty /> + } </div> </Spin> </TabPane> diff --git a/src/components/common/HeadView/index.jsx b/src/components/common/HeadView/index.jsx index 759af0d..e40d599 100644 --- a/src/components/common/HeadView/index.jsx +++ b/src/components/common/HeadView/index.jsx @@ -32,7 +32,7 @@ var loginUser = window.localStorage.getItem('loginUser') || '{}'; loginUser = JSON.parse(loginUser); - console.log(loginUser) + return ( <Header style={{ background: '#fff', padding: 0, boxShadow: 'inset 0 -1px 0 0 #E5E5E5' }}> { diff --git a/src/components/common/HotListTableView/index.jsx b/src/components/common/HotListTableView/index.jsx index 312dd41..92ea24a 100644 --- a/src/components/common/HotListTableView/index.jsx +++ b/src/components/common/HotListTableView/index.jsx @@ -45,7 +45,6 @@ fetch({ url: `api/news/keywordlist` }).then(res => { - console.log('res', res); this.setState({ loading: false }) @@ -58,7 +57,6 @@ } setFormData = data => { - console.log('form', data); this.setState({ formData: data, }); diff --git a/src/components/common/NotifyList/index.jsx b/src/components/common/NotifyList/index.jsx index 86d7c72..1b707bc 100644 --- a/src/components/common/NotifyList/index.jsx +++ b/src/components/common/NotifyList/index.jsx @@ -25,10 +25,11 @@ fetch({ url: `api/document/getNewNotice` }).then(res => { - console.log('res', res); - this.setState({ - content: res.documentTitle || '' - }) + if( res ) { + this.setState({ + content: res.documentTitle || '' + }) + } }) } diff --git a/src/components/common/SearchFormView/index.jsx b/src/components/common/SearchFormView/index.jsx index f187baa..398649e 100644 --- a/src/components/common/SearchFormView/index.jsx +++ b/src/components/common/SearchFormView/index.jsx @@ -108,6 +108,7 @@ render() { const { formData = {}, data = [], children } = this.props; + let size = 'default'; return ( <div className="search-form-view-main"> @@ -123,7 +124,7 @@ return ( <Form.Item label={item.label}> <Select - size="small" + size={size} style={{ width: '100%' }} placeholder={item.name} value={formData[item.key]} @@ -144,7 +145,7 @@ return ( <Form.Item label={item.label}> <Input - size="small" + size={size} placeholder={item.name} name={item.key} value={formData[item.key]} @@ -156,7 +157,7 @@ return ( <Form.Item label={item.label}> <DatePicker - size="small" + size={size} style={{ width: '100%' }} placeholder={item.name} onChange={(date, dateString) => { @@ -171,7 +172,7 @@ <Form.Item label={item.label}> <RangePicker style={{ width: '100%'}} - size="small" + size={size} ranges={{ Today: [moment(), moment()], 'This Month': [ @@ -214,7 +215,7 @@ <Row type="flex" gutter={20} align="middle" align="middle" style={{ height: 40 }}> <Col> <Button - size="small" + size={size} type="primary" onClick={() => { this.onClick('search'); @@ -224,7 +225,7 @@ </Col> <Col> <Button - size="small" + size={size} onClick={() => { this.onClick('reset'); }}> diff --git a/src/components/common/TopListTableView/index.jsx b/src/components/common/TopListTableView/index.jsx index 595b4a9..edb1878 100644 --- a/src/components/common/TopListTableView/index.jsx +++ b/src/components/common/TopListTableView/index.jsx @@ -27,14 +27,15 @@ fetch({ url: `api/merits/queryMerits` }).then(res => { - console.log('res', res); - this.setState({ - topList: [ - { ...tag['latenessRanking'], dataSource: res['latenessRanking'] }, - { ...tag['meritsRanking'], dataSource: res['meritsRanking'] }, - { ...tag['defectRanking'], dataSource: res['defectRanking'] }, - ] - }) + if( res) { + this.setState({ + topList: [ + { ...tag['latenessRanking'], dataSource: res['latenessRanking'] }, + { ...tag['meritsRanking'], dataSource: res['meritsRanking'] }, + { ...tag['defectRanking'], dataSource: res['defectRanking'] }, + ] + }) + } }) } @@ -57,7 +58,6 @@ render() { let { topList } = this.state; - console.log(topList) return ( <div className="top-list-table-view-main"> <Row type="flex" gutter={12}> diff --git a/src/components/page/AnnouncementPage/index.jsx b/src/components/page/AnnouncementPage/index.jsx index 72802a0..c9dd074 100644 --- a/src/components/page/AnnouncementPage/index.jsx +++ b/src/components/page/AnnouncementPage/index.jsx @@ -53,7 +53,7 @@ return this.emoveTAG(cur) } }, - { title: '接受情况', dataIndex: 'groupType', render: (cur, item) => <a onClick={() => { this.setState({ visible: true, documentId: item.id }) }}><span>{item.readNumber || 0}/{item.noticeNumber || 0}</span></a> }, + { title: '接受情况', dataIndex: 'groupType', render: (cur, item) => <a onClick={() => { this.setState({ visible: true, documentId: item.id, curItem: item }) }}><span>{item.readNumber || 0}/{item.noticeNumber || 0}</span></a> }, { title: '通知时间', dataIndex: 'createTime', render: (cur, item) => cur !== "" && cur != null ? moment(cur).format("YYYY-MM-DD HH:mm") : "" }, { title: '操作', render: (text, record) => <a onClick={() => this.link(record.id)}>查看</a> } ]; @@ -67,7 +67,7 @@ } render() { - const { formData, documentId, visible } = this.state; + const { formData, documentId, visible, curItem } = this.state; let tableParams = { url: `api/document/getNotice`, @@ -85,7 +85,9 @@ visible={visible} onCancel={() => this.setState({ visible: false })} footer={null} - title="接收情况" + title={<div> + {curItem ? curItem.documentTitle : '接受情况'} + </div>} > { documentId && diff --git a/src/components/page/DocumentEditPage/index.jsx b/src/components/page/DocumentEditPage/index.jsx index 4ec5c62..8543d5c 100644 --- a/src/components/page/DocumentEditPage/index.jsx +++ b/src/components/page/DocumentEditPage/index.jsx @@ -163,6 +163,7 @@ showUploadList: { showPreviewIcon: true, showDownloadIcon: false, showRemoveIcon: disabled ? false : true } }; + //指定编辑器工具栏的控件列表 const controls = ['undo', 'redo', 'separator', 'headings', 'separator', 'font-size', 'line-height', 'letter-spacing', 'separator', 'text-color', 'bold', 'italic', 'underline', 'strike-through', 'separator', 'text-indent', 'text-align', 'separator', diff --git a/src/components/page/index/rulesList/index.jsx b/src/components/page/index/rulesList/index.jsx index ee82d16..29d7f52 100644 --- a/src/components/page/index/rulesList/index.jsx +++ b/src/components/page/index/rulesList/index.jsx @@ -52,7 +52,7 @@ return cur ? this.emoveTAG(cur) : '无' } }, - { title: '接受情况', dataIndex: 'groupType', render: (cur, item) => <a onClick={() => { this.setState({ visible: true, documentId: item.id }) }}> <span>{item.readNumber || 0}/{item.noticeNumber || 0}</span></a> }, + { title: '接受情况', dataIndex: 'groupType', render: (cur, item) => <a onClick={() => { this.setState({ visible: true, documentId: item.id, curItem: item }) }}> <span>{item.readNumber || 0}/{item.noticeNumber || 0}</span></a> }, { title: '发布时间', dataIndex: 'createTime', render: (cur, item) => cur !== "" && cur != null ? moment(cur).format("YYYY-MM-DD HH:mm") : "" }, { title: '操作', render: (text, record) => <a onClick={() => this.link(record.id)}>查看</a> } ]; @@ -69,7 +69,7 @@ render() { - const { formData, visible, documentId } = this.state; + const { formData, visible, documentId, curItem } = this.state; let tableParams = { url: `api/document/getNotice`, @@ -87,7 +87,9 @@ visible={visible} onCancel={() => this.setState({ visible: false })} footer={null} - title="接收情况" + title={<div > + {curItem ? curItem.documentTitle : '接受情况'} + </div>} > { documentId && diff --git a/src/components/page/jurisdictionPersonMgt/index.jsx b/src/components/page/jurisdictionPersonMgt/index.jsx deleted file mode 100644 index e5bc043..0000000 --- a/src/components/page/jurisdictionPersonMgt/index.jsx +++ /dev/null @@ -1,110 +0,0 @@ -/* eslint-disable */ -/**柯礼钦 - * 4/3/2020, 9:51:59 AM - * doc comment for the file goes here - */ - -/** 辖区人口管理 */ -import React, { ReactNode, ReactEventHandler, Component } from 'react'; -import TableView from '../../common/TableView'; -import { Tag } from 'antd'; -import { tagList } from './tag' -import './index.scss'; - -const { CheckableTag } = Tag; - -export default class JurisdictionPersonMgt extends Component { - constructor(props) { - super(props); - this.config = { - }; - this.state = { - formData: { - __key: Date.now(), - filter: JSON.stringify({ - tabType: null, - keywords: '' - }), - page: 1, - size: 10, - }, - selectedTags: [] - }; - } - - componentWillMount() { } - - componentDidMount() { } - - renderColumns = () => { - return [ - { - title: '序号', - dataIndex: 'index', - key: 'index', - }, - { - title: '操作', - key: 'operation', - render: (text, record) => { - return ( - <React.Fragment> - - </React.Fragment> - ); - }, - }, - ]; - } - - setFormData = data => { - console.log('form', data); - this.setState({ - formData: data, - }); - // this.props.history.push(this.props.location.pathname + '?' + Object.entries(data) - // .map(([k, v]) => `${k}=${v}`) - // .join('&')); - } - - // 处理标签选择函数 - handletagchange = (key, bool) => { - - } - - render() { - const { formData, selectedTags } = this.state; - - let tableParams = { - url: `hik-grided-address/api/v1/house/houseinfo/getPage`, - formData, - key: formData.__key, - columns: this.renderColumns(), - extraFromData: { - }, - setFormData: this.setFormData - } - - return ( - <div className="jurisdiction-person-mgt-main"> - <div className="margin-bottom"> - <span style={{ marginRight: 8 }}>人口标签:</span> - {tagList.map(({ name, value }) => ( - <CheckableTag - key={name} - checked={selectedTags.indexOf(name) > -1} - // checked={selectedTags.indexOf(tag) > -1} - onChange={checked => { - this.handletagchange(name, checked) - }} - > - {value} - </CheckableTag> - ))} - </div> - <TableView {...tableParams} /> - </div> - ) - } -} - diff --git a/src/components/page/jurisdictionPersonMgt/index.scss b/src/components/page/jurisdictionPersonMgt/index.scss deleted file mode 100644 index 1a2f7ea..0000000 --- a/src/components/page/jurisdictionPersonMgt/index.scss +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable */ -/**柯礼钦 - * 4/3/2020, 9:51:59 AM - * doc comment for the file goes here - */ - -/** Happy Coding */ -.jurisdiction-person-mgt { - &-main { - - } -} diff --git a/src/components/page/jurisdictionPersonMgt/tag.js b/src/components/page/jurisdictionPersonMgt/tag.js deleted file mode 100644 index 654d94a..0000000 --- a/src/components/page/jurisdictionPersonMgt/tag.js +++ /dev/null @@ -1,30 +0,0 @@ -/* eslint-disable */ -export const tagList = [{ - name: '1', - value: '全部' -},{ - name: '2', - value: '新生人口' -},{ - name: '3', - value: '死亡人口' -},{ - name: '4', - value: '留守人口' -},{ - name: '5', - value: '高龄补贴' -},{ - name: '6', - value: '独生子女' -},{ - name: '7', - value: '育龄妇女' -},{ - name: '8', - value: '重点青少年' -},{ - name: '9', - value: '特殊人群' -}]; - diff --git a/src/components/page/logManage/browseLog/index.jsx b/src/components/page/logManage/browseLog/index.jsx new file mode 100644 index 0000000..f556d93 --- /dev/null +++ b/src/components/page/logManage/browseLog/index.jsx @@ -0,0 +1,102 @@ +/* eslint-disable */ +/**liuwh + * 4/29/2020, 2:21:33 PM + * doc comment for the file goes here + */ + +/** 浏览日志 */ +import React, { ReactNode, ReactEventHandler, Component } from 'react'; +import { Badge } from 'antd'; +import TableView from '../../../common/TableView'; +import SearchFormView from '../../../common/SearchFormView'; +import './index.scss'; +import moment from 'moment'; + +export default class BrowseLog extends Component { + constructor(props) { + super(props); + this.config = { + }; + this.state = { + formData: { + __key: Date.now(), + page: 1, + size: 10, + keyWord: '' + }, + }; + } + + componentDidMount() { } + + setFormData = data => { + console.log('form', data); + this.setState({ + formData: data, + }); + } + + renderColumns = () => { + return [ + { title: '序号', dataIndex: 'index' }, + { title: '浏览者', dataIndex: 'userName' }, + { title: '浏览模块', dataIndex: 'moduleName' }, + { title: '浏览功能', dataIndex: 'functionName' }, + { title: '浏览描述', dataIndex: 'operDesc' }, + { + title: '浏览日期', dataIndex: 'createTime', render: (cur, item) => { + return cur ? moment(cur).format("YYYY-MM-DD HH:mm") : "" + } + }, + { title: 'IP地址', dataIndex: 'operIp' }, + { title: '访问终端', dataIndex: 'operTerminal' }, + { title: '访问浏览器', dataIndex: 'operBrowser' }, + { title: '状态', dataIndex: 'operStatus', render: (cur, item)=> { + return this.operStatus(cur) + }} + ]; + } + + operStatus = (status) => { + switch (status) { + case '1': + return <Badge count={'成功'} style={{ backgroundColor: '#52c41a' }}/> + case '99': + return <Badge count={'失败'} /> + } + } + + render() { + const { formData } = this.state; + + let tableParams = { + url: `api/log/queryLog`, + formData, + key: formData.__key, + columns: this.renderColumns(), + extraFromData: { + logType: '1', + }, + setFormData: this.setFormData + } + + return ( + <div className="browse-log-main"> + <SearchFormView + formData={formData} + setFormData={this.setFormData} + data={[ + { type: 'input', name: '关键字', label: '关键字', key: 'keyWord' }, + { + type: 'rangePicker', + label: '浏览时间', + name: JSON.stringify(['开始时间', '结束时间']), + key: JSON.stringify(['startTime', 'endTime']), + keylistName: 'rangeTimelist', + }, + ]} /> + <TableView {...tableParams} /> + </div> + ) + } +} diff --git a/src/components/page/logManage/browseLog/index.scss b/src/components/page/logManage/browseLog/index.scss new file mode 100644 index 0000000..4a429b7 --- /dev/null +++ b/src/components/page/logManage/browseLog/index.scss @@ -0,0 +1,14 @@ +/* eslint-disable */ +/**liuwh + * 4/29/2020, 2:21:33 PM + * doc comment for the file goes here + */ + +/** Happy Coding */ +.browse-log { + &-main { + background: #fff; + margin: 20px; + padding: 20px; + } +} diff --git a/src/components/page/logManage/operLog/index.jsx b/src/components/page/logManage/operLog/index.jsx new file mode 100644 index 0000000..0018315 --- /dev/null +++ b/src/components/page/logManage/operLog/index.jsx @@ -0,0 +1,106 @@ +/* eslint-disable */ +/** kelq + * 4/29/2020, 3:51:53 PM + * doc comment for the file goes here + */ + +/** 操作日志 */ +import React, { ReactNode, ReactEventHandler, Component } from 'react'; +import { Badge } from 'antd'; +import TableView from '../../../common/TableView'; +import SearchFormView from '../../../common/SearchFormView'; +import './index.scss'; +import moment from 'moment'; + +import './index.scss'; + +export default class OperLog extends Component { + constructor(props) { + super(props); + this.config = { + }; + this.state = { + formData: { + __key: Date.now(), + page: 1, + size: 10, + keyWord: '' + }, + }; + } + + componentDidMount() { } + + setFormData = data => { + console.log('form', data); + this.setState({ + formData: data, + }); + } + + renderColumns = () => { + return [ + { title: '序号', dataIndex: 'index' }, + { title: '操作者', dataIndex: 'userName' }, + { title: '操作模块', dataIndex: 'moduleName' }, + { title: '操作功能', dataIndex: 'functionName' }, + { title: '操作描述', dataIndex: 'operDesc' }, + { + title: '操作日期', dataIndex: 'createTime', render: (cur, item) => { + return cur ? moment(cur).format("YYYY-MM-DD HH:mm") : "" + } + }, + { title: 'IP地址', dataIndex: 'operIp' }, + { title: '访问终端', dataIndex: 'operTerminal' }, + { title: '访问浏览器', dataIndex: 'operBrowser' }, + { + title: '状态', dataIndex: 'operStatus', render: (cur, item) => { + return this.operStatus(cur) + } + } + ]; + } + + operStatus = (status) => { + switch (status) { + case '1': + return <Badge count={'成功'} style={{ backgroundColor: '#52c41a' }}/> + case '99': + return <Badge count={'失败'} /> + } + } + + render() { + const { formData } = this.state; + + let tableParams = { + url: `api/log/queryLog`, + formData, + key: formData.__key, + columns: this.renderColumns(), + extraFromData: { + logType: '2', + }, + setFormData: this.setFormData + } + return ( + <div className="oper-log-main"> + <SearchFormView + formData={formData} + setFormData={this.setFormData} + data={[ + { type: 'input', name: '关键字', label: '关键字', key: 'keyWord' }, + { + type: 'rangePicker', + label: '浏览时间', + name: JSON.stringify(['开始时间', '结束时间']), + key: JSON.stringify(['startTime', 'endTime']), + keylistName: 'rangeTimelist', + }, + ]} /> + <TableView {...tableParams} /> + </div> + ) + } +} + diff --git a/src/components/page/logManage/operLog/index.scss b/src/components/page/logManage/operLog/index.scss new file mode 100644 index 0000000..9382759 --- /dev/null +++ b/src/components/page/logManage/operLog/index.scss @@ -0,0 +1,14 @@ +/* eslint-disable */ +/**liuwh + * 4/29/2020, 3:51:53 PM + * doc comment for the file goes here + */ + +/** Happy Coding */ +.oper-log { + &-main { + background: #fff; + margin: 20px; + padding: 20px; + } +} diff --git a/src/components/page/personal/information/index.jsx b/src/components/page/personal/information/index.jsx new file mode 100644 index 0000000..9e06fe0 --- /dev/null +++ b/src/components/page/personal/information/index.jsx @@ -0,0 +1,270 @@ +/* eslint-disable */ +/**kelq + * 4/29/2020, 4:28:00 PM + * doc comment for the file goes here + */ + +/** 个人信息 */ +import React, { ReactNode, ReactEventHandler, Component } from 'react'; +import { Card, Form, Row, Col, Input, Button, Select, message, Spin } from 'antd'; +import ChangePswView from '../../../common/ChangePswView'; + +const FormItem = Form.Item; +const Option = Select.Option; + +import './index.scss'; +import fetch from '../../../../api/request'; +import creatHistory from 'history/createHashHistory'; +const history = creatHistory();//返回上一页这段代码 + +class Information extends Component { + constructor(props) { + super(props); + this.config = { + }; + this.state = { + spinning: true, + btnLoading: false,//修改密码弹窗loading + submitLoading: false,//提交按钮loading + account: {}, + user: {} + }; + } + + componentDidMount() { + this.initPersonInfo(); + } + + initPersonInfo = () => { + this.setState({ spinning: true }) + fetch({ + url: `api/user/findUserInfo`, + }).then(res => { + this.setState({ spinning: false }); + if (res) { + console.log('res', res); + this.setState({ + ...res + }) + } + }) + } + + // 验证手机格式 + 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() + } + + // 验证idcard格式 + 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() + } + + //修改密码 + onOK = (data) => { + console.log('data', data); + let _this = this; + let formData = { + accountId: _this.state.account.id, + newPassword: data.newPassWord + } + _this.setState({ + btnLoading: true + }) + fetch({ + url: `api/account/changePassword`, + params: formData + }).then(res => { + _this.setState({ + btnLoading: false, + changePswVisible: false + }) + if (res) { + message.success("密码修改成功"); + } + }) + } + + //修改个人信息 + handleSubmit = (e) => { + e.preventDefault(); + let _this = this; + let { account, user } = _this.state; + _this.props.form.validateFields((err, values) => { + if (err) return; + console.log(values); + _this.setState({ submitLoading: true }) + fetch({ + url: `api/user/save`, + method: 'POST', + data: { + user: { + ..._this.state.user, + trueName: values.trueName, + sex: values.sex, + idcard: values.idcard, + mobile: values.mobile, + email: values.email, + } + } + }).then(res => { + _this.setState({ submitLoading: false }); + if (res) { + message.success('保存成功') + this.props.setData({ + key: Date.now() + }) + } + }) + }) + } + + render() { + const { getFieldDecorator } = this.props.form; + const { account, user, changePswVisible, btnLoading, spinning, submitLoading } = this.state; + const formItemLayout = { + labelCol: { xs: { span: 24 }, sm: { span: 10 }, }, + wrapperCol: { xs: { span: 24 }, sm: { span: 14 }, }, + }; + + return ( + <div className="information-main"> + { + spinning && <Spin spinning={this.state.spinning} style={{ height: 200, display: 'flex', justifyContent: 'center', alignItems: 'center' }}></Spin> + } + { + !spinning && <React.Fragment> + <Card title="账号信息" bordered={false} > + <Row> + <Col span={16}> + <Row> + <Col span={12}> + <FormItem label={"账号"} {...formItemLayout}> + {account.account || ''} + </FormItem> + </Col> + <Col span={12}> + <FormItem label={"密码"} {...formItemLayout}> + <div> + ********<Button type="primary" onClick={() => { + this.setState({ + changePswVisible: true + }) + }} style={{ marginLeft: 20 }}>修改密码</Button> + </div> + </FormItem> + </Col> + </Row> + </Col> + </Row> + </Card> + <Card title="基础信息" bordered={false} > + <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 placeholder="请选择" style={{ width: '100%' }}> + <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> + </Row> + </Card> + + <Row type="flex" gutter={20} style={{ marginTop: '12px' }}> + <Col className="gutter-row" ><Button onClick={() => { history.goBack() }}>返回</Button></Col> + <Col className="gutter-row" ><Button type="primary" loading={submitLoading} onClick={this.handleSubmit}>确定</Button></Col> + </Row> + { + changePswVisible && <ChangePswView onCancel={() => { this.setState({ changePswVisible: false }) }} onOK={this.onOK} btnLoading={btnLoading} /> + } + </React.Fragment> + } + + </div> + + ) + } +} + +const InformationForm = Form.create()(Information); +export default InformationForm; diff --git a/src/components/page/personal/information/index.scss b/src/components/page/personal/information/index.scss new file mode 100644 index 0000000..ac6ecdf --- /dev/null +++ b/src/components/page/personal/information/index.scss @@ -0,0 +1,14 @@ +/* eslint-disable */ +/**liuwh + * 4/29/2020, 4:28:00 PM + * doc comment for the file goes here + */ + +/** Happy Coding */ +.information { + &-main { + background: #fff; + margin: 20px; + padding: 20px; + } +} diff --git a/src/index.css b/src/index.css index 4c05cbe..ee83cf1 100644 --- a/src/index.css +++ b/src/index.css @@ -31,3 +31,5 @@ overflow: auto; } + + diff --git a/src/index.js b/src/index.js index e7f5a47..5f3f604 100644 --- a/src/index.js +++ b/src/index.js @@ -20,13 +20,15 @@ // 引进页面(pages) import Index from './pages/Index'; import Login from './pages/login/login'; -import JurisdictionPersonMgt from './pages/collect/jurisdictionPersonMgt';//信息采集--辖区人口管理 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 Information from './pages/personal/information';//个人信息 const { Content } = Layout; const history = createHashHistory(); @@ -55,10 +57,17 @@ <Route path="/index/workbench/announcement" component={Announcement} /> {/* 规章制度 */} <Route path="/index/rules" component={System} /> - {/* 首页 */} <Route path="/index" component={Workbench} /> + {/* 浏览日志 */} + <Route path="/logManage/browseLog" component={BrowseLog} /> + {/* 操作日志 */} + <Route path="/logManage/operLog" component={OperLog} /> + {/* 个人信息 */} + <Route path="/personal/information" component={Information} /> + + {/* 登录页 */} <Route path="/login" component={Login} /> <Route path="/" component={Workbench} /> {/* 路由的页面重定向 */} diff --git a/src/menu/menu.data.js b/src/menu/menu.data.js index 18f6622..f8afa87 100644 --- a/src/menu/menu.data.js +++ b/src/menu/menu.data.js @@ -17,16 +17,17 @@ path: '/index', permKey: '/index', parentKey: '/', - children: [] + children: [], }, { key: '/index/rules', name: '规章制度', path: '/index/rules', permKey: '/index/rules', - children: [] - } - ] + parentKey: '/', + children: [], + }, + ], }, { key: 'workOffice', @@ -41,7 +42,8 @@ path: 'http://120.79.193.119:9090/', permKey: 'http://120.79.193.119:9090/', children: [], - type: 'open' + parentKey: 'workOffice', + type: 'open', }, { key: 'workOffice', @@ -49,9 +51,10 @@ path: 'https://account.teambition.com/login/password', permKey: 'https://account.teambition.com/login/password', children: [], - type: 'open' - } - ] + parentKey: 'workOffice', + type: 'open', + }, + ], }, { key: '/document', @@ -65,9 +68,10 @@ name: '新建文档', path: '/document/create', permKey: '/document/create', - children: [] - } - ] + parentKey: '/document', + children: [], + }, + ], }, { key: '/logManage', @@ -81,10 +85,54 @@ name: '浏览日志', path: '/logManage/browseLog', permKey: '/logManage/browseLog', - children: [] - } - ] - } + parentKey: '/logManage', + children: [], + }, + { + key: '/logManage/operLog', + name: '操作日志', + path: '/logManage/operLog', + permKey: '/logManage/operLog', + parentKey: '/logManage', + children: [], + }, + ], + }, + { + key: 'administration', + name: '用户管理', + path: 'administration', + icon: 'team', + permKey: 'administration', + children: [ + { + key: '/administration', + name: '用户中心', + path: 'http://120.79.193.119:9074/base/login.html#/', + permKey: 'http://120.79.193.119:9074/base/login.html#/', + children: [], + parentKey: 'administration', + type: 'open', + }, + ], + }, + { + key: 'personal', + name: '个人中心', + path: 'personal', + icon: 'user', + permKey: 'personal', + children: [ + { + key: '/personal/information', + name: '个人信息', + path: '/personal/information', + permKey: '/personal/information', + children: [], + parentKey: 'personal', + }, + ], + }, ]; export default menus; diff --git a/src/pages/collect/jurisdictionPersonMgt.jsx b/src/pages/collect/jurisdictionPersonMgt.jsx deleted file mode 100644 index 32a6e45..0000000 --- a/src/pages/collect/jurisdictionPersonMgt.jsx +++ /dev/null @@ -1,45 +0,0 @@ -/* eslint-disable */ -/**柯礼钦 - * 4/2/2020, 11:22:51 AM - * doc comment for the file goes here - */ - -/** 信息采集-- 辖区人口管理 */ -import React, { ReactNode, ReactEventHandler, Component } from 'react'; -import JurisdictionPersonMgtPage from '../../components/page/jurisdictionPersonMgt'; -import BreadcrumbView from '../../components/common/BreadcrumbView' - -// import { Link } from 'react-router-dom'; -// import { Icon } from 'antd'; - -export default class JurisdictionPersonMgt extends Component { - constructor(props) { - super(props); - this.config = { - navigationBarTitleText: '', - }; - this.state = { - }; - } - - componentWillMount() { } - - componentDidMount() { } - - componentWillUnmount() { } - - componentDidShow() { } - - componentDidHide() { } - - render() { - return ( - <div className="jurisdiction-person-mgt-main margin bg-white"> - <BreadcrumbView /> - - <JurisdictionPersonMgtPage {...this.props} /> - </div> - ) - } -} - diff --git a/src/pages/document/DocumentDetail.jsx b/src/pages/document/DocumentDetail.jsx index a490ea9..df40271 100644 --- a/src/pages/document/DocumentDetail.jsx +++ b/src/pages/document/DocumentDetail.jsx @@ -31,7 +31,7 @@ render() { return ( <div className="document-edit-main h-100 flex-box-column"> - <BreadcrumbView data={[{ name: '查看文档' }]} /> + {/* <BreadcrumbView data={[{ name: '查看文档' }]} /> */} <div className="flex-1"> <DocumentDetailPage {...this.props} /> </div> diff --git a/src/pages/document/DocumentEdit.jsx b/src/pages/document/DocumentEdit.jsx index 68b4b10..e0f05bf 100644 --- a/src/pages/document/DocumentEdit.jsx +++ b/src/pages/document/DocumentEdit.jsx @@ -31,7 +31,6 @@ render() { return ( <div className="document-edit-main h-100 flex-box-column"> - <BreadcrumbView data={[{ name: '新建文档' }]} /> <div className="flex-1"> <DocumentEditPage {...this.props} /> </div> diff --git a/src/pages/index/Announcement.jsx b/src/pages/index/Announcement.jsx index 7b6fa38..0462c88 100644 --- a/src/pages/index/Announcement.jsx +++ b/src/pages/index/Announcement.jsx @@ -27,16 +27,9 @@ render() { return ( <div className="announcement-main"> - <BreadcrumbView data={[{ name: '工作台',url:'#/index/workbench' },{ name: '全部通知' }]} /> <AnnouncementPage {...this.props}/> </div> ) } } -//export default function Announcement({ }) { -// return ( -// <div className="announcement-main"> -// -// </div> -// ) -//} + diff --git a/src/pages/logManage/browseLog.jsx b/src/pages/logManage/browseLog.jsx new file mode 100644 index 0000000..1c8c204 --- /dev/null +++ b/src/pages/logManage/browseLog.jsx @@ -0,0 +1,34 @@ +/* eslint-disable */ +/**kelq + * 4/29/2020, 2:13:58 PM + * doc comment for the file goes here + */ + +/** 浏览日志 */ +import React, { ReactNode, ReactEventHandler, Component } from 'react'; +import BrowseLogPage from '../../components/page/logManage/browseLog'; + +export default class BrowseLog extends Component { + constructor(props) { + super(props); + this.config = { + }; + this.state = { + }; + } + + componentWillMount() { } + + componentDidMount() { } + + componentDidShow() { } + + render() { + return ( + <div className="browse-log-page-main"> + <BrowseLogPage /> + </div> + ) + } +} + diff --git a/src/pages/logManage/operLog.jsx b/src/pages/logManage/operLog.jsx new file mode 100644 index 0000000..7f2d1e9 --- /dev/null +++ b/src/pages/logManage/operLog.jsx @@ -0,0 +1,34 @@ +/* eslint-disable */ +/**liuwh + * 4/29/2020, 3:51:10 PM + * doc comment for the file goes here + */ + +/** 操作日志 */ +import React, { ReactNode, ReactEventHandler, Component } from 'react'; +import OperLogPage from '../../components/page/logManage/operLog' + +export default class OperLog extends Component { + constructor(props) { + super(props); + this.config = { + }; + this.state = { + }; + } + + componentWillMount() { } + + componentDidMount() { } + + componentDidShow() { } + + render() { + return ( + <div className="oper-log-page-main"> + <OperLogPage /> + </div> + ) + } +} + diff --git a/src/pages/personal/information.jsx b/src/pages/personal/information.jsx new file mode 100644 index 0000000..362e006 --- /dev/null +++ b/src/pages/personal/information.jsx @@ -0,0 +1,42 @@ +/* eslint-disable */ +/**kelq + * 4/29/2020, 4:26:56 PM + * doc comment for the file goes here + */ + +/** 个人信息 */ +import React, { ReactNode, ReactEventHandler, Component } from 'react'; +import InformationPage from '../../components/page/personal/information'; +import { now } from 'moment'; + +export default class Information extends Component { + constructor(props) { + super(props); + this.config = { + }; + this.state = { + key: Date.now() + }; + } + + componentWillMount() { } + + componentDidMount() { } + + componentDidShow() { } + + setData = (data) => { + this.setState({ + ...data + }) + } + + render() { + let { key } = this.state; + return ( + <div className="information-page-main"> + <InformationPage {...this.props} setData={this.setData} key={key}/> + </div> + ) + } +} -- Gitblit v1.8.0