forked from huge/frontEnd/hugeOA

Mr Ke
2020-05-16 c235b08e0e1f965357b34e0dbd6d8605fd6c68df
最新消息修改、附件下载
4 files added
6 files modified
1227 ■■■■■ changed files
report.20200514.164013.12768.0.001.json 479 ●●●●● patch | view | raw | blame | history
src/components/common/HotListTableView/index.scss 2 ●●● patch | view | raw | blame | history
src/components/common/NotifyList/index.jsx 46 ●●●● patch | view | raw | blame | history
src/components/common/NotifyList/index.scss 24 ●●●● patch | view | raw | blame | history
src/components/common/multiSelect/index.jsx 27 ●●●●● patch | view | raw | blame | history
src/components/page/DocumentDetailPage/index.jsx 11 ●●●● patch | view | raw | blame | history
src/components/page/basicConfig/UserDetail.jsx 439 ●●●●● patch | view | raw | blame | history
src/components/page/basicConfig/UserManage.jsx 147 ●●●●● patch | view | raw | blame | history
src/index.css 22 ●●●●● patch | view | raw | blame | history
src/index.js 30 ●●●●● patch | view | raw | blame | history
report.20200514.164013.12768.0.001.json
New file
@@ -0,0 +1,479 @@
{
  "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"
  ]
}
src/components/common/HotListTableView/index.scss
@@ -7,7 +7,7 @@
/** Happy Coding */
.hot-list-table-view {
  &-main {
    margin: 24px 0;
    margin: 14px 0;
    padding-bottom: 24px;
    background: #fff;
    &-content {
src/components/common/NotifyList/index.jsx
@@ -6,7 +6,7 @@
/** 通知列表 */
import React, { ReactNode, ReactEventHandler, Component } from 'react';
import { Alert } from 'antd';
import { Alert, Tooltip } from 'antd';
import fetch from '../../../api/request';
import './index.scss';
@@ -17,7 +17,7 @@
    this.config = {
    };
    this.state = {
      content: ''
      notice: null
    };
  }
@@ -25,9 +25,10 @@
    fetch({
      url: `api/document/getNewNotice`
    }).then(res => {
      if( res ) {
      if (res) {
        this.setState({
          content: res.documentTitle || ''
          notice: res
          // documentTitle: res.documentTitle || ''
        })
      }
    })
@@ -35,25 +36,52 @@
  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()}
src/components/common/NotifyList/index.scss
@@ -7,7 +7,7 @@
/** Happy Coding */
.notify-list {
  &-main {
    margin: 20px 0;
    margin: 14px 0;
    & .ant-alert-warning {
      background: #fff9e5 !important;
      border: 0 !important;
@@ -16,16 +16,34 @@
      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;
src/components/common/multiSelect/index.jsx
New file
@@ -0,0 +1,27 @@
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>
    )
  }
}
src/components/page/DocumentDetailPage/index.jsx
@@ -58,7 +58,7 @@
          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' })) || []
      });
    });
  }
@@ -136,6 +136,14 @@
      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 => {
@@ -151,7 +159,6 @@
      onPreview: (file) => {
        window.open(file.url);
      },
      showUploadList: { showPreviewIcon: true, showDownloadIcon: true, showRemoveIcon: false }
    };
    return (
src/components/page/basicConfig/UserDetail.jsx
New file
@@ -0,0 +1,439 @@
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;
src/components/page/basicConfig/UserManage.jsx
New file
@@ -0,0 +1,147 @@
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;
src/index.css
@@ -30,6 +30,28 @@
.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;
}
src/index.js
@@ -20,16 +20,19 @@
// 引进页面(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();
@@ -49,13 +52,19 @@
          </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} />
              {/* 首页 */}
@@ -73,6 +82,7 @@
              {/* 登录页 */}
              <Route path="/login" component={Login} />
              <Route path="/" component={Workbench} />
              {/* 路由的页面重定向 */}
              <Redirect to="/" component={Workbench} />
            </Switch>