Commit 252817f1 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏
parents ac146745 e9ffdf8b
......@@ -83,6 +83,7 @@ const memberCenterRoute = {
path: '/memberCenter/noAuth',
auth: false,
hideInMenu: true,
name: '无权限',
component: '@/pages/403',
},
// 能力中心的404页
......
{
"header": {
"reportVersion": 1,
"event": "Allocation failed - JavaScript heap out of memory",
"trigger": "FatalError",
"filename": "report.20210804.155111.26372.0.001.json",
"dumpEventTime": "2021-08-04T15:51:11Z",
"dumpEventTimeStamp": "1628063471363",
"processId": 26372,
"cwd": "F:\\pc\\lingxi-business-paltform",
"commandLine": [
"C:\\Program Files\\nodejs\\node.exe",
"F:\\pc\\lingxi-business-paltform\\node_modules\\.bin\\\\..\\umi\\bin\\umi.js",
"build"
],
"nodejsVersion": "v12.15.0",
"wordSize": 64,
"arch": "x64",
"platform": "win32",
"componentVersions": {
"node": "12.15.0",
"v8": "7.7.299.13-node.16",
"uv": "1.33.1",
"zlib": "1.2.11",
"brotli": "1.0.7",
"ares": "1.15.0",
"modules": "72",
"nghttp2": "1.40.0",
"napi": "5",
"llhttp": "2.0.4",
"http_parser": "2.9.3",
"openssl": "1.1.1d",
"cldr": "35.1",
"icu": "64.2",
"tz": "2019c",
"unicode": "12.1"
},
"release": {
"name": "node",
"lts": "Erbium",
"headersUrl": "https://nodejs.org/download/release/v12.15.0/node-v12.15.0-headers.tar.gz",
"sourceUrl": "https://nodejs.org/download/release/v12.15.0/node-v12.15.0.tar.gz",
"libUrl": "https://nodejs.org/download/release/v12.15.0/win-x64/node.lib"
},
"osName": "Windows_NT",
"osRelease": "10.0.17134",
"osVersion": "Windows 10 Pro",
"osMachine": "x86_64",
"cpus": [
{
"model": "Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz",
"speed": 2904,
"user": 23768671,
"nice": 0,
"sys": 19487687,
"idle": 294227609,
"irq": 3215828
},
{
"model": "Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz",
"speed": 2904,
"user": 25971421,
"nice": 0,
"sys": 14055000,
"idle": 297457218,
"irq": 96500
},
{
"model": "Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz",
"speed": 2904,
"user": 36302359,
"nice": 0,
"sys": 18148125,
"idle": 283033156,
"irq": 78140
},
{
"model": "Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz",
"speed": 2904,
"user": 23471546,
"nice": 0,
"sys": 15003843,
"idle": 299008250,
"irq": 101281
},
{
"model": "Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz",
"speed": 2904,
"user": 24836375,
"nice": 0,
"sys": 14092562,
"idle": 298554703,
"irq": 89218
},
{
"model": "Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz",
"speed": 2904,
"user": 29928062,
"nice": 0,
"sys": 16491125,
"idle": 291064453,
"irq": 90796
}
],
"networkInterfaces": [
{
"name": "以太网",
"internal": false,
"mac": "a8:5e:45:b4:75:d7",
"address": "fe80::f51b:eb4:4ec0:d370",
"netmask": "ffff:ffff:ffff:ffff::",
"family": "IPv6",
"scopeid": 14
},
{
"name": "以太网",
"internal": false,
"mac": "a8:5e:45:b4:75:d7",
"address": "10.0.0.56",
"netmask": "255.255.254.0",
"family": "IPv4"
},
{
"name": "Loopback Pseudo-Interface 1",
"internal": true,
"mac": "00:00:00:00:00:00",
"address": "::1",
"netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"family": "IPv6",
"scopeid": 0
},
{
"name": "Loopback Pseudo-Interface 1",
"internal": true,
"mac": "00:00:00:00:00:00",
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"family": "IPv4"
}
],
"host": "PT-20191211ATIL"
},
"javascriptStack": {
"message": "No stack.",
"stack": [
"Unavailable."
]
},
"nativeStack": [
{
"pc": "0x00007ff7b9951759",
"symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+10873"
},
{
"pc": "0x00007ff7b9955b7c",
"symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+28316"
},
{
"pc": "0x00007ff7b9954b38",
"symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+24152"
},
{
"pc": "0x00007ff7b9a4446b",
"symbol": "v8::base::CPU::has_sse+37723"
},
{
"pc": "0x00007ff7ba248d9e",
"symbol": "v8::Isolate::ReportExternalAllocationLimitReached+94"
},
{
"pc": "0x00007ff7ba230de1",
"symbol": "v8::SharedArrayBuffer::Externalize+833"
},
{
"pc": "0x00007ff7ba0fe6ac",
"symbol": "v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436"
},
{
"pc": "0x00007ff7ba0da6a3",
"symbol": "v8::internal::MarkCompactCollector::EnsureSweepingCompleted+1747"
},
{
"pc": "0x00007ff7ba0d899b",
"symbol": "v8::internal::ConcurrentBitmap<1>::IsClean+65995"
},
{
"pc": "0x00007ff7ba10401d",
"symbol": "v8::internal::Heap::LeftTrimFixedArray+1117"
},
{
"pc": "0x00007ff7ba105d24",
"symbol": "v8::internal::Heap::PageFlagsAreConsistent+1060"
},
{
"pc": "0x00007ff7ba0fbe13",
"symbol": "v8::internal::Heap::CollectGarbage+1283"
},
{
"pc": "0x00007ff7ba0fa5e4",
"symbol": "v8::internal::Heap::AddRetainedMap+2356"
},
{
"pc": "0x00007ff7ba11b8b5",
"symbol": "v8::internal::Factory::NewFillerObject+53"
},
{
"pc": "0x00007ff7b9e87a17",
"symbol": "v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+3687"
},
{
"pc": "0x00007ff7ba674d3d",
"symbol": "v8::internal::SetupIsolateDelegate::SetupHeap+567949"
},
{
"pc": "0x000001aa1ef29d29",
"symbol": ""
}
],
"javascriptHeap": {
"totalMemory": 2874466304,
"totalCommittedMemory": 2874466304,
"usedMemory": 2415902256,
"availableMemory": 1506034072,
"memoryLimit": 4345298944,
"heapSpaces": {
"read_only_space": {
"memorySize": 262144,
"committedMemory": 262144,
"capacity": 261872,
"used": 32296,
"available": 229576
},
"new_space": {
"memorySize": 33554432,
"committedMemory": 33554432,
"capacity": 16759808,
"used": 418640,
"available": 16341168
},
"old_space": {
"memorySize": 2627317760,
"committedMemory": 2627317760,
"capacity": 2227868296,
"used": 2227725096,
"available": 143200
},
"code_space": {
"memorySize": 13533184,
"committedMemory": 13533184,
"capacity": 7641504,
"used": 7486688,
"available": 154816
},
"map_space": {
"memorySize": 26218496,
"committedMemory": 26218496,
"capacity": 7980000,
"used": 7980000,
"available": 0
},
"large_object_space": {
"memorySize": 172957696,
"committedMemory": 172957696,
"capacity": 171709136,
"used": 171709136,
"available": 0
},
"code_large_object_space": {
"memorySize": 622592,
"committedMemory": 622592,
"capacity": 550400,
"used": 550400,
"available": 0
},
"new_large_object_space": {
"memorySize": 0,
"committedMemory": 0,
"capacity": 16759808,
"used": 0,
"available": 16759808
}
}
},
"resourceUsage": {
"userCpuSeconds": 190.218,
"kernelCpuSeconds": 22.437,
"cpuConsumptionPercent": 142.721,
"maxRss": 3050725376,
"pageFaults": {
"IORequired": 1261622,
"IONotRequired": 0
},
"fsActivity": {
"reads": 18421,
"writes": 135
}
},
"libuv": [
],
"environmentVariables": {
"=C:": "C:\\",
"=F:": "F:\\pc\\lingxi-business-paltform",
"ALLUSERSPROFILE": "C:\\ProgramData",
"ANDROID_HOME": "C:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk",
"APPDATA": "C:\\Users\\Administrator\\AppData\\Roaming",
"asl.log": "Destination=file",
"BACK_GATEWAY": "http://10.0.0.17:8100",
"CHROME_CRASHPAD_PIPE_NAME": "\\\\.\\pipe\\crashpad_10628_IIPKUPQBOITDZSTE",
"COLORTERM": "truecolor",
"CommonProgramFiles": "C:\\Program Files\\Common Files",
"CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files",
"CommonProgramW6432": "C:\\Program Files\\Common Files",
"COMPUTERNAME": "PT-20191211ATIL",
"ComSpec": "C:\\Windows\\system32\\cmd.exe",
"dp0": "F:\\pc\\lingxi-business-paltform\\node_modules\\.bin\\",
"DriverData": "C:\\Windows\\System32\\Drivers\\DriverData",
"FPS_BROWSER_APP_PROFILE_STRING": "Internet Explorer",
"FPS_BROWSER_USER_PROFILE_STRING": "Default",
"GIT_ASKPASS": "d:\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass.sh",
"HOME": "C:\\Users\\Administrator",
"HOMEDRIVE": "C:",
"HOMEPATH": "\\Users\\Administrator",
"HTTPS": "true",
"INIT_CWD": "F:\\pc\\lingxi-business-paltform",
"IOJS_ORG_MIRROR": "https://npm.taobao.org/mirrors/iojs",
"LANG": "zh_CN.UTF-8",
"LOCALAPPDATA": "C:\\Users\\Administrator\\AppData\\Local",
"LOGONSERVER": "\\\\PT-20191211ATIL",
"NODE": "C:\\Program Files\\nodejs\\node.exe",
"NODEJS_ORG_MIRROR": "https://npm.taobao.org/mirrors/node",
"NODE_ENV": "production",
"NODE_EXE": "C:\\Program Files\\nodejs\\\\node.exe",
"NODE_OPTIONS": "--max_old_space_size=4096",
"NODIST_IOJS_MIRROR": "https://npm.taobao.org/mirrors/iojs",
"NODIST_NODE_MIRROR": "https://npm.taobao.org/mirrors/node",
"NPM_CLI_JS": "C:\\Program Files\\nodejs\\\\node_modules\\npm\\bin\\npm-cli.js",
"npm_config_access": "",
"npm_config_allow_same_version": "",
"npm_config_also": "",
"npm_config_always_auth": "",
"npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"build:v2\"],\"original\":[\"run\",\"build:v2\"]}",
"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\\Administrator\\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_chromedriver_cdnurl": "https://npm.taobao.org/mirrors/chromedriver",
"npm_config_cidr": "",
"npm_config_cofing": "https://registry.npmjs.org/",
"npm_config_color": "true",
"npm_config_commit_hooks": "true",
"npm_config_couchbase_binary_host_mirror": "https://npm.taobao.org/mirrors/couchbase/v{version}",
"npm_config_debug_binary_host_mirror": "https://npm.taobao.org/mirrors/node-inspector",
"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_electron_mirror": "https://npm.taobao.org/mirrors/electron/",
"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_flow_bin_binary_host_mirror": "https://npm.taobao.org/mirrors/flow/v",
"npm_config_force": "",
"npm_config_format_package_lock": "true",
"npm_config_fse_binary_host_mirror": "https://npm.taobao.org/mirrors/fsevents",
"npm_config_fund": "true",
"npm_config_fuse_bindings_binary_host_mirror": "https://npm.taobao.org/mirrors/fuse-bindings/v{version}",
"npm_config_git": "git",
"npm_config_git4win_mirror": "https://npm.taobao.org/mirrors/git-for-windows",
"npm_config_git_tag_version": "true",
"npm_config_global": "",
"npm_config_globalconfig": "C:\\Users\\Administrator\\AppData\\Roaming\\npm\\etc\\npmrc",
"npm_config_globalignorefile": "C:\\Users\\Administrator\\AppData\\Roaming\\npm\\etc\\npmignore",
"npm_config_global_style": "",
"npm_config_gl_binary_host_mirror": "https://npm.taobao.org/mirrors/gl/v{version}",
"npm_config_group": "",
"npm_config_grpc_node_binary_host_mirror": "https://npm.taobao.org/mirrors",
"npm_config_hackrf_binary_host_mirror": "https://npm.taobao.org/mirrors/hackrf/v{version}",
"npm_config_ham_it_up": "",
"npm_config_heading": "npm",
"npm_config_home": "https://npm.taobao.org",
"npm_config_https_proxy": "",
"npm_config_if_present": "",
"npm_config_ignore_optional": "",
"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": "MIT",
"npm_config_init_module": "C:\\Users\\Administrator\\.npm-init.js",
"npm_config_init_version": "1.0.0",
"npm_config_json": "",
"npm_config_key": "",
"npm_config_legacy_bundling": "",
"npm_config_leveldown_binary_host_mirror": "https://npm.taobao.org/mirrors/leveldown/v{version}",
"npm_config_leveldown_hyper_binary_host_mirror": "https://npm.taobao.org/mirrors/leveldown-hyper/v{version}",
"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": "http://10.0.0.19:4873/",
"npm_config_mknod_binary_host_mirror": "https://npm.taobao.org/mirrors/mknod/v{version}",
"npm_config_nodegit_binary_host_mirror": "https://npm.taobao.org/mirrors/nodegit/v{version}/",
"npm_config_node_gyp": "node C:\\Users\\Administrator\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js",
"npm_config_node_options": "",
"npm_config_node_sqlite3_binary_host_mirror": "https://npm.taobao.org/mirrors",
"npm_config_node_tk5_binary_host_mirror": "https://npm.taobao.org/mirrors/node-tk5/v{version}",
"npm_config_node_version": "12.15.0",
"npm_config_noproxy": "",
"npm_config_offline": "",
"npm_config_onload_script": "",
"npm_config_only": "",
"npm_config_operadriver_cdnurl": "https://npm.taobao.org/mirrors/operadriver",
"npm_config_optional": "true",
"npm_config_otp": "",
"npm_config_package_lock": "true",
"npm_config_package_lock_only": "",
"npm_config_parseable": "",
"npm_config_phantomjs_cdnurl": "https://npm.taobao.org/mirrors/phantomjs",
"npm_config_prefer_offline": "",
"npm_config_prefer_online": "",
"npm_config_prefix": "C:\\Users\\Administrator\\AppData\\Roaming\\npm",
"npm_config_preid": "",
"npm_config_production": "",
"npm_config_profiler_binary_host_mirror": "https://npm.taobao.org/mirrors/node-inspector/",
"npm_config_progress": "true",
"npm_config_proxy": "",
"npm_config_puppeteer_download_host": "https://npm.taobao.org/mirrors",
"npm_config_python": "C:\\Users\\Administrator\\.windows-build-tools\\python27\\python.exe",
"npm_config_python_mirror": "https://npm.taobao.org/mirrors/python",
"npm_config_rabin_binary_host_mirror": "https://npm.taobao.org/mirrors/rabin/v{version}",
"npm_config_read_only": "",
"npm_config_rebuild_bundle": "true",
"npm_config_registry": "http://10.0.0.19:7001",
"npm_config_rollback": "true",
"npm_config_sass_binary_site": "https://npm.taobao.org/mirrors/node-sass",
"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_sodium_prebuilt_binary_host_mirror": "https://npm.taobao.org/mirrors/sodium-prebuilt/v{version}",
"npm_config_sqlite3_binary_site": "https://npm.taobao.org/mirrors/sqlite3",
"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\\ADMINI~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\\Administrator\\.npmrc",
"npm_config_user_agent": "yarn/1.22.10 npm/? node/v12.15.0 win32 x64",
"npm_config_utf_8_validate_binary_host_mirror": "https://npm.taobao.org/mirrors/utf-8-validate/v{version}",
"npm_config_utp_native_binary_host_mirror": "https://npm.taobao.org/mirrors/utp-native/v{version}",
"npm_config_version": "",
"npm_config_versions": "",
"npm_config_version_commit_hooks": "true",
"npm_config_version_git_message": "v%s",
"npm_config_version_git_sign": "",
"npm_config_version_git_tag": "true",
"npm_config_version_tag_prefix": "v",
"npm_config_viewer": "browser",
"npm_config_wrap_output": "",
"npm_config_zmq_prebuilt_binary_host_mirror": "https://npm.taobao.org/mirrors/zmq-prebuilt/v{version}",
"npm_execpath": "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js",
"npm_lifecycle_event": "build:clean",
"npm_lifecycle_script": "cross-env NODE_OPTIONS=--max_old_space_size=4096 umi build",
"npm_node_execpath": "C:\\Program Files\\nodejs\\node.exe",
"npm_package_dependencies_antd": "^4.16.6",
"npm_package_dependencies_antd_img_crop": "^3.12.0",
"npm_package_dependencies_babel_plugin_transform_remove_console": "^6.9.4",
"npm_package_dependencies_bignumber_js": "^9.0.1",
"npm_package_dependencies_bizcharts": "^4.1.10",
"npm_package_dependencies_copy_to_clipboard": "^3.3.1",
"npm_package_dependencies_crypto_js": "^4.0.0",
"npm_package_dependencies_god": "^0.2.10",
"npm_package_dependencies_immutability_helper": "^3.1.1",
"npm_package_dependencies_js_cookie": "^2.2.1",
"npm_package_dependencies_lingxi_design_ui": "^2.0.6",
"npm_package_dependencies_lint_staged": "^10.0.7",
"npm_package_dependencies_lodash": "^4.17.20",
"npm_package_dependencies_mobx": "^5.15.4",
"npm_package_dependencies_mobx_react": "^6.2.2",
"npm_package_dependencies_moment": "^2.27.0",
"npm_package_dependencies_pinyin": "^2.9.1",
"npm_package_dependencies_prettier": "^1.19.1",
"npm_package_dependencies_qrcode": "^1.4.4",
"npm_package_dependencies_query_string": "^6.13.1",
"npm_package_dependencies_react": "^16.12.0",
"npm_package_dependencies_react_dnd": "^11.1.3",
"npm_package_dependencies_react_dnd_html5_backend": "^11.1.3",
"npm_package_dependencies_react_dom": "^16.12.0",
"npm_package_dependencies_react_fontawesome": "^1.7.1",
"npm_package_dependencies_react_image_crop": "^8.6.4",
"npm_package_dependencies_react_reconciler": "^0.25.1",
"npm_package_dependencies_react_sortablejs": "^6.0.0",
"npm_package_dependencies_rgbaster": "^2.1.1",
"npm_package_dependencies_sortablejs": "^1.12.0",
"npm_package_dependencies_typescript": "^3.9.7",
"npm_package_dependencies_umi": "3.2.28",
"npm_package_dependencies_video_react": "^0.14.1",
"npm_package_dependencies_yorkie": "^2.0.0",
"npm_package_dependencies__antv_data_set": "^0.11.5",
"npm_package_dependencies__ant_design_icons": "^4.2.1",
"npm_package_dependencies__ant_design_pro_layout": "^5.0.16",
"npm_package_dependencies__ctrl_tinycolor": "^3.4.0",
"npm_package_dependencies__formily_antd": "^1.3.3",
"npm_package_dependencies__formily_antd_components": "^1.3.3",
"npm_package_dependencies__lingxi_disign_core": "^1.0.1",
"npm_package_dependencies__lingxi_disign_react": "^1.0.3",
"npm_package_dependencies__lingxi_disign_react_web": "^1.0.2",
"npm_package_dependencies__lingxi_disign_ui": "^1.0.1",
"npm_package_dependencies__turf_turf": "^6.4.0",
"npm_package_dependencies__types_crypto_js": "^4.0.1",
"npm_package_dependencies__types_js_cookie": "^2.2.6",
"npm_package_dependencies__umijs_hooks": "^1.9.3",
"npm_package_dependencies__umijs_plugin_esbuild": "^1.0.1",
"npm_package_dependencies__umijs_preset_react": "1.x",
"npm_package_dependencies__umijs_test": "^3.2.0",
"npm_package_description": "### 为数商云&醒电构建项目提供react脚手架模板",
"npm_package_devDependencies_async": "^3.2.0",
"npm_package_devDependencies_axios": "^0.19.2",
"npm_package_devDependencies_chalk": "^4.1.0",
"npm_package_devDependencies_clone": "^2.1.2",
"npm_package_devDependencies_connect_history_api_fallback": "^1.6.0",
"npm_package_devDependencies_cross_env": "^7.0.3",
"npm_package_devDependencies_events": "^3.2.0",
"npm_package_devDependencies_express": "^4.17.1",
"npm_package_devDependencies_fs_extra": "^9.0.1",
"npm_package_devDependencies_glob": "^7.1.6",
"npm_package_devDependencies_god_upload_scp": "1.0.1",
"npm_package_devDependencies_god_yapi2ts": "^1.0.0",
"npm_package_devDependencies_gulp": "^4.0.2",
"npm_package_devDependencies_gulp_git": "^2.10.1",
"npm_package_devDependencies_hard_source_webpack_plugin": "^0.13.1",
"npm_package_devDependencies_http_proxy_middleware": "^1.0.5",
"npm_package_devDependencies_json2ts": "^0.0.7",
"npm_package_devDependencies_node_cmd": "^4.0.0",
"npm_package_devDependencies_ora": "^4.0.4",
"npm_package_devDependencies_scp2": "^0.1.0-b1",
"npm_package_devDependencies_ssh2": "^0.8.9",
"npm_package_devDependencies_util": "^0.12.3",
"npm_package_devDependencies__types_qrcode": "^1.3.4",
"npm_package_devDependencies__types_sortablejs": "^1.10.6",
"npm_package_gitHead": "65e92bbb4cda82a30084789862c6fe37eea04234",
"npm_package_license": "MIT",
"npm_package_lint_staged___ts__x__0": "prettier --parser=typescript --write",
"npm_package_lint_staged____js_jsx_less_md_json__0": "prettier --write",
"npm_package_name": "lingxi-business-paltform",
"npm_package_readmeFilename": "README.md",
"npm_package_scripts_api": "god-ytt",
"npm_package_scripts_build": "yarn api && yarn scripts:build && yarn build:clean",
"npm_package_scripts_build_10": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.0.10:8100 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.0.10:9400 yarn build",
"npm_package_scripts_build_all": "cross-env SITE_ID=1 BACK_GATEWAY=http://lingxi-all.wg.shushangyun.com USE_ROUTE_CONFIG=false SOCKET_URL=ws://lingxi-all.wg.shushangyun.com yarn build",
"npm_package_scripts_build_analyze": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ANALYZE=1 umi build",
"npm_package_scripts_build_clean": "cross-env NODE_OPTIONS=--max_old_space_size=4096 umi build",
"npm_package_scripts_build_dev": "pm2 start scripts/devServer.js",
"npm_package_scripts_build_scm": "cross-env SITE_ID=1 BACK_GATEWAY=http://lingxi-scm.wg.shushangyun.com USE_ROUTE_CONFIG=false SOCKET_URL=ws://lingxi-scm.wg.shushangyun.com yarn build",
"npm_package_scripts_build_study": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.1.207:8100 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.1.207:9400 yarn build",
"npm_package_scripts_build_v2": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.0.17:8100 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.0.17:9880 yarn build",
"npm_package_scripts_build_v2Preview": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.1.220:8100 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.1.220:9400 yarn build",
"npm_package_scripts_build_v2scm": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.1.220:8100 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.1.220:9400 yarn build",
"npm_package_scripts_build_yxc": "yarn api && yarn scripts:build-yxc && umi build",
"npm_package_scripts_clean": "rimraf node_modules",
"npm_package_scripts_postinstall": "umi generate tmp",
"npm_package_scripts_prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
"npm_package_scripts_scripts_build": "node scripts/run",
"npm_package_scripts_scripts_build_yxc": "node scripts/run http://yxc-web-demo.shushangyun.com/api",
"npm_package_scripts_start": "yarn api && yarn scripts:build && cross-env NODE_OPTIONS=--max_old_space_size=4096 umi dev",
"npm_package_scripts_start_10": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.0.10:8100 USE_ROUTE_CONFIG=true SOCKET_URL=ws://10.0.0.10:9400 yarn start",
"npm_package_scripts_start_25": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.0.25:8100 USE_ROUTE_CONFIG=true SOCKET_URL=ws://10.0.0.25:9400 yarn start",
"npm_package_scripts_start_analyze": "ANALYZE=1 umi dev",
"npm_package_scripts_start_cross": "cross-env SITE_ID=352 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.0.25:9400 yarn start",
"npm_package_scripts_start_dev": "umi dev ",
"npm_package_scripts_start_scm": "cross-env SITE_ID=1 BACK_GATEWAY=http://lingxi-scm.wg.shushangyun.com USE_ROUTE_CONFIG=false SOCKET_URL=ws://lingxi-scm.wg.shushangyun.com yarn start",
"npm_package_scripts_start_study": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.1.207:8100 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.1.207:9400 yarn start",
"npm_package_scripts_start_url": "cross-env SITE_ID=1 BACK_GATEWAY=http://lingxi-all.wg.shushangyun.com USE_ROUTE_CONFIG=true SOCKET_URL=ws://lingxi-all.wg.shushangyun.com yarn start",
"npm_package_scripts_start_v2": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.0.17:8100 USE_ROUTE_CONFIG=true SOCKET_URL=ws://10.0.0.17:9880 yarn start",
"npm_package_scripts_start_v2Preview": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.1.220:8100 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.1.220:9400 yarn start",
"npm_package_scripts_start_v2scm": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.1.220:8100 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.1.220:9400 yarn start",
"npm_package_scripts_test": "umi-test",
"npm_package_scripts_test_coverage": "umi-test --coverage",
"npm_package_scripts_upload_10": "cross-env local=10 taskName=upload yarn scripts:build",
"npm_package_scripts_upload_25": "cross-env local=25 taskName=upload yarn scripts:build",
"npm_package_scripts_upload_scm": "cross-env local=scm taskName=upload yarn scripts:build",
"npm_package_scripts_upload_study": "cross-env local=study taskName=upload yarn scripts:build",
"npm_package_scripts_upload_v2": "cross-env local=v2 taskName=upload yarn scripts:build",
"npm_package_scripts_upload_v2Preview": "cross-env local=v2Preview taskName=upload yarn scripts:build",
"npm_package_scripts_upload_v2scm": "cross-env local=v2scm taskName=upload yarn scripts:build",
"npm_package_version": "1.0.4",
"NPM_PREFIX_NPM_CLI_JS": "C:\\Users\\Administrator\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js",
"NUMBER_OF_PROCESSORS": "6",
"NVMW_IOJS_ORG_MIRROR": "https://npm.taobao.org/mirrors/iojs",
"NVMW_NODEJS_ORG_MIRROR": "https://npm.taobao.org/mirrors/node",
"NVMW_NPM_MIRROR": "https://npm.taobao.org/mirrors/npm",
"NVM_IOJS_ORG_MIRROR": "https://npm.taobao.org/mirrors/iojs",
"NVM_NODEJS_ORG_MIRROR": "https://npm.taobao.org/mirrors/node",
"OneDrive": "C:\\Users\\Administrator\\OneDrive",
"ORIGINAL_XDG_CURRENT_DESKTOP": "undefined",
"OS": "Windows_NT",
"Path": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\yarn--1628063321797-0.06722880081974258;F:\\pc\\lingxi-business-paltform\\node_modules\\.bin;C:\\Users\\Administrator\\AppData\\Local\\Yarn\\Data\\link\\node_modules\\.bin;C:\\Program Files\\libexec\\lib\\node_modules\\npm\\bin\\node-gyp-bin;C:\\Program Files\\lib\\node_modules\\npm\\bin\\node-gyp-bin;C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\node-gyp-bin;C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\yarn--1628063211217-0.5247000430510165;F:\\pc\\lingxi-business-paltform\\node_modules\\.bin;C:\\Users\\Administrator\\AppData\\Local\\Yarn\\Data\\link\\node_modules\\.bin;C:\\Users\\Administrator\\AppData\\Roaming\\npm\\bin;C:\\Program Files\\libexec\\lib\\node_modules\\npm\\bin\\node-gyp-bin;C:\\Program Files\\lib\\node_modules\\npm\\bin\\node-gyp-bin;C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\node-gyp-bin;C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\npm-lifecycle\\node-gyp-bin;F:\\pc\\lingxi-business-paltform\\node_modules\\.bin;C:\\Program Files\\Common Files\\Oracle\\Java\\javapath;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Program Files\\Git\\cmd;C:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\platform-tools;C:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\emulator;C:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\tools;C:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\tools\\bin;C:\\Program Files\\nodejs\\;C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python39\\Scripts\\;C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python39\\;C:\\Users\\Administrator\\.windows-build-tools\\python27\\;C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\Administrator\\AppData\\Local\\BypassRuntm;D:\\Microsoft VS Code\\bin;C:\\Users\\Administrator\\AppData\\Roaming\\npm",
"PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JSE;.WSF;.WSH;.MSC;.CPL",
"PORT": "4396",
"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\\Administrator\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules",
"PUBLIC": "C:\\Users\\Public",
"SESSIONNAME": "Console",
"SITE_ID": "1",
"SOCKET_URL": "ws://10.0.0.17:9880",
"SystemDrive": "C:",
"SystemRoot": "C:\\Windows",
"TEMP": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp",
"TERM_PROGRAM": "vscode",
"TERM_PROGRAM_VERSION": "1.58.2",
"TMP": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp",
"UMI_DIR": "F:\\pc\\lingxi-business-paltform\\node_modules\\umi",
"UMI_VERSION": "3.2.28",
"USERDOMAIN": "PT-20191211ATIL",
"USERDOMAIN_ROAMINGPROFILE": "PT-20191211ATIL",
"USERNAME": "Administrator",
"USERPROFILE": "C:\\Users\\Administrator",
"USE_ROUTE_CONFIG": "false",
"VSCODE_GIT_ASKPASS_MAIN": "d:\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass-main.js",
"VSCODE_GIT_ASKPASS_NODE": "D:\\Microsoft VS Code\\Code.exe",
"VSCODE_GIT_IPC_HANDLE": "\\\\.\\pipe\\vscode-git-c8597e1775-sock",
"windir": "C:\\Windows",
"YARN_WRAP_OUTPUT": "false",
"_prog": "node"
},
"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\\win32u.dll",
"C:\\Windows\\System32\\GDI32.dll",
"C:\\Windows\\System32\\gdi32full.dll",
"C:\\Windows\\System32\\msvcp_win.dll",
"C:\\Windows\\SYSTEM32\\dbghelp.dll",
"C:\\Windows\\System32\\ucrtbase.dll",
"C:\\Windows\\System32\\PSAPI.DLL",
"C:\\Windows\\System32\\CRYPT32.dll",
"C:\\Windows\\System32\\MSASN1.dll",
"C:\\Windows\\System32\\WINMM.dll",
"C:\\Windows\\System32\\WINMMBASE.dll",
"C:\\Windows\\System32\\cfgmgr32.dll",
"C:\\Windows\\SYSTEM32\\USERENV.dll",
"C:\\Windows\\System32\\profapi.dll",
"C:\\Windows\\SYSTEM32\\bcrypt.dll",
"C:\\Windows\\SYSTEM32\\IPHLPAPI.DLL",
"C:\\Windows\\System32\\IMM32.DLL",
"C:\\Windows\\System32\\powrprof.dll",
"C:\\Windows\\SYSTEM32\\CRYPTBASE.DLL",
"C:\\Windows\\System32\\bcryptPrimitives.dll",
"C:\\Windows\\system32\\uxtheme.dll",
"C:\\Windows\\System32\\combase.dll",
"C:\\Windows\\system32\\mswsock.dll",
"C:\\Windows\\System32\\kernel.appcore.dll",
"C:\\Windows\\System32\\NSI.dll",
"C:\\Windows\\SYSTEM32\\dhcpcsvc6.DLL",
"C:\\Windows\\SYSTEM32\\dhcpcsvc.DLL",
"C:\\Windows\\system32\\napinsp.dll",
"C:\\Windows\\system32\\pnrpnsp.dll",
"C:\\Windows\\system32\\NLAapi.dll",
"C:\\Windows\\SYSTEM32\\DNSAPI.dll",
"C:\\Windows\\System32\\winrnr.dll",
"C:\\Program Files\\Bonjour\\mdnsNSP.dll"
]
}
\ No newline at end of file
......@@ -120,7 +120,9 @@ export function onRouteChange({ routes, matchedRoutes, location, action }) {
const breadCrumb = matchedRoutes.slice(2).reduce((prev, current) => {
return prev += "." + current.route.name
}, 'menu')
recent.put(breadCrumb, location.pathname + location.search);
if (breadCrumb) {
recent.put(breadCrumb, location.pathname + location.search);
}
}
// if (isDev) {
......
@import '~antd/es/style/themes/default.less';
@addressList-prefix: addressList;
.@{addressList-prefix} {
display: block;
&-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: @padding-sm - 2 @padding-md;
background-color: @background-color-base;
border-radius: 4px;
cursor: pointer;
box-sizing: border-box;
border: 1px solid transparent;
transition: all .3s;
&:not(:last-child) {
margin-bottom: @margin-md;
}
&:hover {
background-color: @white;
border-color: @primary-color;
.@{addressList-prefix}-item-actions {
visibility: visible;
}
}
&-left {
display: flex;
align-items: center;
}
&-right {
flex-shrink: 0;
}
&-default {
padding: @padding-xss - 2 @padding-xss;
font-size: 12px;
color: #5C626A;
background-color: #EBECF0;
border-radius: 2px;
}
&-actions {
visibility: hidden;
transition: all .3s;
}
}
}
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-08-05 14:23:40
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-08-05 18:12:24
* @Description: 地址单选框组
*/
import React, { useState, useEffect, useMemo } from 'react';
import { Radio, Button, Modal, message } from 'antd';
import { ExclamationCircleOutlined } from '@ant-design/icons';
import { PublicApi } from '@/services/api';
import { GetLogisticsShipperAddressGetResponse, GetLogisticsReceiverAddressGetResponse } from '@/services/LogisticsApi';
import { IRequestSuccess } from '@/index';
import styles from './index.less';
const { confirm } = Modal;
export type AddressItemType = {
/**
* 主键id
*/
id: number,
/**
* 发货人名称
*/
shipperName: string,
/**
* 收件人名称
*/
receiverName: string,
/**
* 发货地址
*/
fullAddress: string,
/**
* 手机号码
*/
phone: string,
/**
* 是否默认0-否1-是
*/
isDefault: number,
}
export type AddressValueType = Omit<AddressItemType, 'shipperName' | 'receiverName'> & {
/**
* 寄件人 或者 收件人名称
*/
name: string,
}
interface IProps {
/**
* 类型:1 收货地址 2 发货地址,默认 2
*/
addressType: 1 | 2,
/**
* 值
*/
value?: AddressValueType,
/**
* 选择触发改变
*/
onChange?: (value: AddressValueType) => void,
/**
* 是否默认选择 默认地址,是的话会触发 onChange value为默认地址,默认为false
*/
isDefaultAddress?: boolean,
}
const AddressRadioGroup: React.FC<IProps> = (props) => {
const {
addressType = 2,
value,
onChange,
isDefaultAddress = false,
} = props;
const [list, setList] = useState<AddressValueType[]>([]);
const [internalValue, setInternalValue] = useState<AddressValueType | undefined>(undefined);
const triggerChange = (value: AddressValueType) => {
if (onChange) {
onChange(value);
}
};
const getAddressList = () => {
const fetchAction = addressType === 2 ? PublicApi.getLogisticsSelectListShipperAddress() : PublicApi.getLogisticsSelectListReceiverAddress();
fetchAction.then((res: IRequestSuccess<AddressItemType[]>) => {
if (res.code === 1000) {
const defaultItem = res.data?.find((item) => item.isDefault);
setList(res.data?.map(({ shipperName, receiverName, ...rest }) => ({
name: shipperName || receiverName,
...rest,
})));
if (isDefaultAddress && defaultItem) {
const { shipperName, receiverName, ...rest } = defaultItem;
triggerChange({
name: shipperName || receiverName,
...rest,
});
}
}
}).catch((err) => {
console.warn(err);
});
};
useEffect(() => {
if ('value' in props) {
setInternalValue(value);
}
}, [value]);
useEffect(() => {
getAddressList();
}, []);
const handleSelectItem = (id: number) => {
const current = list.find((item) => item.id === id);
if (!('value' in props)) {
setInternalValue(current);
}
if (current) {
triggerChange(current);
}
};
const handleRadioClick = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {
e.stopPropagation();
};
const handleEdit = (e: React.MouseEvent<HTMLElement, MouseEvent>, id: number) => {
e.stopPropagation();
};
const handleDelete = (e: React.MouseEvent<HTMLElement, MouseEvent>, id: number) => {
e.stopPropagation();
confirm({
title: '提示',
icon: <ExclamationCircleOutlined />,
content: `是否需要删除该地址信息?`,
onOk() {
return (
addressType === 2
? PublicApi.postLogisticsShipperAddressDelete({ id })
: PublicApi.postLogisticsReceiverAddressDelete({ id })
);
},
});
};
// 设置默认地址,这里直接调用修改地址接口
const handleSetDefaultItem = async (e: React.MouseEvent<HTMLElement, MouseEvent>, id: number) => {
e.stopPropagation();
const mesInstance = message.loading({
content: '正在设置',
duration: 0,
});
try {
const res = addressType === 2 ? await PublicApi.getLogisticsShipperAddressGet({ id: `${id}`}) : await PublicApi.getLogisticsReceiverAddressGet({ id: `${id}`});
if (res.code === 1000) {
addressType === 2
? await PublicApi.postLogisticsShipperAddressUpdate({
...(res.data as GetLogisticsShipperAddressGetResponse),
isDefault: 1,
})
: await PublicApi.postLogisticsReceiverAddressUpdate({
...(res.data as GetLogisticsReceiverAddressGetResponse),
isDefault: 1,
});
}
} catch (error) {
console.warn(error);
}
mesInstance();
};
const options = useMemo(() => {
return list.map((item) => ({
value: item.id,
label: `${item.name} ${item.fullAddress} ${item.phone}`,
isDefault: !!item.isDefault,
}));
}, [list]);
return (
<div className={styles.addressList}>
<Radio.Group value={internalValue?.id} style={{ display: 'block' }}>
{options.map((item) => (
<div
key={item.value}
className={styles['addressList-item']}
onClick={() => handleSelectItem(item.value)}
>
<div className={styles['addressList-item-left']}>
<Radio value={item.value} onClick={handleRadioClick}>{item.label}</Radio>
{item.isDefault ? (
<span className={styles['addressList-item-default']}>默认地址</span>
) : (
<div className={styles['addressList-item-actions']}>
<Button
type="text"
size="small"
onClick={(e) => handleSetDefaultItem(e, item.value)}
>
设为默认地址
</Button>
</div>
)}
</div>
<div className={styles['addressList-item-right']}>
<div className={styles['addressList-item-actions']}>
<Button
type="text"
size="small"
onClick={(e) => handleEdit(e, item.value)}
>
编辑
</Button>
<Button
type="text"
size="small"
onClick={(e) => handleDelete(e, item.value)}
>
删除
</Button>
</div>
</div>
</div>
))}
</Radio.Group>
</div>
);
};
export default AddressRadioGroup;
/*
* @Author: XieZhiXiong
* @Date: 2021-08-05 14:54:18
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-08-05 14:54:19
* @Description:
*/
import React from 'react';
import { connect } from '@formily/antd';
import AddressRadioGroup from '../AddressRadioGroup';
const AddressRadioGroupFormilyItem = connect()((props) => {
const {
dataSource,
value,
onChange,
addressType,
...rest
} = props;
return (
<div style={{ flex: 1 }}>
<AddressRadioGroup
addressType={addressType}
value={value}
onChange={onChange}
{...rest}
/>
</div>
);
});
export default AddressRadioGroupFormilyItem;
@import '~antd/es/style/themes/default.less';
.address-select {
display: flex;
align-items: center;
&-input {
flex: 1;
}
&-action {
margin-left: @margin-md;
}
}
.label-required {
font-size: 12px;
color: #909399;
&::after {
margin-left: 8px;
font-size: 12px;
font-family: SimSun, sans-serif;
color: #ff4d4f;
content: '*';
}
}
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-08-05 10:28:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-08-05 18:37:33
* @Description: 地址选择 FormItem
*/
import React, { useState, useEffect, useMemo } from 'react';
import { Select, Button, Drawer, Divider } from 'antd';
import { PublicApi } from '@/services/api';
import {
createAsyncFormActions,
FormEffectHooks,
} from '@formily/antd';
import { DatePicker } from '@formily/antd-components';
import { IRequestSuccess } from '@/index';
import { useLinkEnumEffect } from '@/components/NiceForm/linkages/linkEnum';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import NiceForm from '@/components/NiceForm';
import { schema } from './schema';
import { AddressItemType, AddressValueType } from './components/AddressRadioGroup';
import AddressRadioGroup from './components/AddressRadioGroupFormilyItem';
import styles from './index.less';
const formActions = createAsyncFormActions();
const {
onFormMount$,
onFieldValueChange$,
} = FormEffectHooks;
interface IProps {
/**
* 类型:1 收货地址 2 发货地址,默认 2
*/
addressType?: 1 | 2,
/**
* 值
*/
value?: AddressValueType,
/**
* 选择触发改变
*/
onChange?: (value: AddressValueType) => void,
/**
* 是否默认选择 默认地址,是的话会触发 onChange value为默认地址,默认为false
*/
isDefaultAddress?: boolean,
}
export type SubmitValuesType = {
/**
* 地址单选选中的值
*/
address?: AddressValueType,
/**
* 收件人名称 或 发货人名称
*/
name: string,
/**
* 省级id
*/
provinceId: number,
/**
* 市级id
*/
cityId: number,
/**
* 区级id
*/
areaId: number,
/**
* 详细地址
*/
detailed: string,
/**
* 邮编
*/
postalCode: string,
/**
* 区号
*/
telCode: string,
/**
* 手机号码
*/
phone: string,
/**
* 电话号码
*/
tel: string,
/**
* 是否是默认
*/
isDefault: boolean,
}
const AddressSelect: React.FC<IProps> = (props) => {
const {
addressType = 2,
value,
onChange,
isDefaultAddress = false,
} = props;
const [options, setOptions] = useState<{ label, value }[]>([]);
const [internalValue, setInternalValue] = useState<AddressValueType>();
const [visibleDrawer, setVisibleDrawer] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const triggerChange = (value: AddressValueType) => {
if (onChange) {
onChange(value);
}
};
const getAddressList = () => {
const fetchAction = addressType === 2 ? PublicApi.getLogisticsSelectListShipperAddress() : PublicApi.getLogisticsSelectListReceiverAddress();
fetchAction.then((res: IRequestSuccess<AddressItemType[]>) => {
if (res.code === 1000) {
const defaultItem = res.data?.find((item) => item.isDefault);
setOptions(res.data?.map((item) => ({
value: item.id,
label: `${item.shipperName || item.receiverName} ${item.fullAddress} ${item.phone}`
})));
if (isDefaultAddress && defaultItem) {
const { shipperName, receiverName, ...rest } = defaultItem;
triggerChange({
name: shipperName || receiverName,
...rest,
});
}
}
}).catch((err) => {
console.warn(err);
});
};
// 获取手机code
const fetchTelCode = async () => {
const { data, code } = await PublicApi.getManageCountryAreaGetTelCode();
if (code === 1000) {
return data;
}
return [];
};
useEffect(() => {
getAddressList();
}, []);
const handleVisibleDrawer = (flag?: boolean) => {
setVisibleDrawer(!!flag);
};
const handleSubmit = (values: SubmitValuesType) => {
console.log('values', values)
};
const useFields = (): any => (
useMemo(() => ({
AddressRadioGroup,
}), [])
);
const AddressLabel = (
<div className={styles['label-required']}>
收件地区
</div>
);
const handleAddAddress = () => {
formActions.setFieldState('ADDRESS_NEW', state => {
state.visible = !state.visible;
});
};
const AddButton = useMemo(() => {
return () => (
<div>
<Button onClick={handleAddAddress}>新增收货地址</Button>
<Divider style={{ marginBottom: 4 }} />
</div>
);
}, []);
return (
<>
<div className={styles['address-select']}>
<Select
options={options}
value={value?.id}
/>
<Button
onClick={() => handleVisibleDrawer(true)}
className={styles['address-select-action']}
>
管理
</Button>
</div>
<Drawer
title="更改收货地址信息"
width={800}
onClose={() => handleVisibleDrawer(false)}
visible={visibleDrawer}
footer={
<div
style={{
textAlign: 'right',
}}
>
<Button onClick={() => handleVisibleDrawer(false)} style={{ marginRight: 16 }}>
取 消
</Button>
<Button
onClick={() => formActions.submit()}
type="primary"
loading={submitLoading}
>
确 定
</Button>
</div>
}
destroyOnClose
>
<NiceForm
previewPlaceholder="' '"
components={{
AddButton,
}}
expressionScope={{
AddressLabel,
}}
fields={useFields()}
effects={($, { setFieldState }) => {
onFormMount$().subscribe(async () => {
const areaRes = await PublicApi.getManageAreaAll();
if (areaRes.code === 1000) {
const { data } = areaRes;
formActions.setFieldState('provinceId', targetState => {
targetState.originData = data;
targetState.props.enum = data.map(v => ({
label: v.name,
value: v.id,
}));
});
}
});
useLinkEnumEffect('areaResponses', result => result.map(v => ({
label: v.name,
value: v.id,
})));
useAsyncSelect('telCode', fetchTelCode);
}}
actions={formActions}
schema={schema}
onSubmit={values => handleSubmit(values)}
/>
</Drawer>
</>
);
};
export default AddressSelect;
/*
* @Author: XieZhiXiong
* @Date: 2021-08-05 14:02:46
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-08-05 18:34:01
* @Description:
*/
import { ISchema } from '@formily/antd';
import { PATTERN_MAPS } from '@/constants/regExp';
export const schema: ISchema = {
type: 'object',
properties: {
ADDRESS_LIST: {
type: 'object',
'x-component': 'FlagBox',
'x-component-props': {
title: '选择收货地址',
border: false,
},
properties: {
MEGA_LAYOUT_1: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
wrapperCol: 24,
},
properties: {
address: {
type: 'string',
'x-component': 'AddressRadioGroup',
'x-component-props': {},
'x-rules': [
{
required: true,
message: '请选择地址',
},
],
},
},
},
},
},
ADD_ACTION: {
type: 'object',
'x-component': 'AddButton',
},
ADDRESS_NEW: {
type: 'object',
'x-component': 'FlagBox',
'x-component-props': {
title: '填写收货信息',
border: false,
},
visible: false,
properties: {
MEGA_LAYOUT_2: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelCol: 4,
wrapperCol: 20,
labelAlign: 'left',
},
properties: {
name: {
type: 'string',
title: '收件人',
'x-component-props': {
placeholder: '请输入',
},
'x-rules': [
{
required: true,
message: '请输入收件人',
},
{
limitByte: true, // 自定义校验规则
maxByte: 10,
}
],
required: true,
},
MEGA_LAYOUT_2_1: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
label: '{{AddressLabel}}',
wrapperCol: 24,
},
required: true,
properties: {
MEGA_LAYOUT_2_1_1: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 3,
},
properties: {
provinceId: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '- 省 -',
},
'x-linkages': [
{
type: 'value:linkage',
condition: '{{ !!$self.value }}', // $value,不触发不知道咋回事
origin: 'provinceId',
target: 'cityId',
},
],
required: true,
},
cityId: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '- 市 -',
},
'x-linkages': [
{
type: 'value:linkage',
condition: '{{ !!$self.value }}', // $value,不触发不知道咋回事
origin: 'cityId',
target: 'areaId',
},
],
required: true,
},
areaId: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '- 县 / 区 -',
},
required: true,
},
},
},
},
},
detailed: {
type: 'string',
title: '详细地址',
'x-component-props': {
placeholder: '请输入详细地址(最长50个字符,25个汉字)',
},
'x-rules': [
{
required: true,
message: '请输入详细地址',
},
{
limitByte: true, // 自定义校验规则
maxByte: 50,
}
],
},
postalCode: {
type: 'string',
title: '邮编',
'x-component-props': {},
'x-rules': [
{
limitByte: true, // 自定义校验规则
maxByte: 16,
}
],
},
MEGA_LAYOUT_2_2: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
label: '手机号码',
wrapperCol: 24,
},
properties: {
MEGA_LAYOUT2_1: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
},
properties: {
telCode: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '请选择',
},
required: true,
},
phone: {
type: 'string',
required: true,
'x-mega-props': {
span: 3,
},
'x-component-props': {
placeholder: '请输入你的手机号码',
maxLength: 11,
},
'x-rules': [
{
pattern: PATTERN_MAPS.phone,
message: '请输入正确格式的手机号',
},
],
},
},
},
},
},
tel: {
type: 'string',
title: '电话号码',
'x-component-props': {},
'x-rules': [
{
limitByte: true, // 自定义校验规则
maxByte: 16,
}
],
},
isDefault: {
type: 'boolean',
title: '是否默认',
'x-component': 'Switch',
},
},
},
},
},
},
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-08-05 11:26:43
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-08-05 11:30:21
* @Description:
*/
import React from 'react';
import { connect } from '@formily/antd';
import AddressSelect from '@/components/AddressSelect';
const CustomAddressSelect = connect()((props) => {
const {
dataSource,
value,
onChange,
addressType,
...rest
} = props;
return (
<div style={{ flex: 1 }}>
<AddressSelect
addressType={addressType}
value={value}
onChange={onChange}
{...rest}
/>
</div>
);
});
export default CustomAddressSelect;
......@@ -36,6 +36,7 @@ import AreaSelect from './components/AreaSelect';
import CustomSelect from './components/CustomSelect';
import CheckboxGroup from './components/CheckboxGroup';
import CustomRadioGroup from './components/CustomRadioGroup';
import CustomAddressSelect from './components/CustomAddressSelect';
import { useLinkComponentProps } from './linkages/linkComponentProps';
import Loading from '../Loading';
import MultAddress from './components/MultAddress';
......@@ -129,6 +130,7 @@ export const componentExport = {
CustomSelect,
CheckboxGroup,
CustomRadioGroup,
CustomAddressSelect,
Switch,
}
const NiceForm: React.FC<NiceFormProps> = props => {
......
......@@ -18,11 +18,13 @@ const RowLayout = styled(props => <Row justify='end' {...props}/>)`
const FlagBox = styled(props => <div {...props}/>)`
.flag-box-title {
padding-left: ${themeConfig['@padding-xs']};
margin-bottom: ${themeConfig['@margin-lg']};
line-height: ${themeConfig['@font-size-lg']};
font-size: ${themeConfig['@font-size-lg']};
font-weight: 500;
}
.flag-box-title.border {
padding-left: ${themeConfig['@padding-xs']};
border-left: 2px solid ${themeConfig['@primary-color']};
}
`
......@@ -111,12 +113,16 @@ registerVirtualBox('LeftRightLayout', (_props) => {
registerVirtualBox('FlagBox', (_props) => {
const { children, props } = _props;
const title = props['x-component-props'] ? props['x-component-props'].title : '';
const border = props['x-component-props'] ? props['x-component-props'].border || true : true;
const wrapProps = props['x-component-props'] ? props['x-component-props'].wrapProps : {};
const titleCls = cx('flag-box-title', { 'border': border });
return (
<FlagBox
{...wrapProps}
>
<div className="flag-box-title">
<div className={titleCls}>
{title}
</div>
<div>
......
......@@ -6,7 +6,7 @@ import ProLayout, {
getMenuData,
getPageTitle
} from '@ant-design/pro-layout';
import React, { useState, useEffect, useLayoutEffect } from 'react';
import React, { useState, useEffect, useLayoutEffect, useMemo } from 'react';
import { Link, useIntl, Helmet } from 'umi';
import RightContent from './components/RightContent';
import { GlobalConfig } from '@/global/config';
......@@ -149,7 +149,7 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
const prolayoutStyle = isHome
? {
minHeight: '100vh',
minWidth: '1280px'
minWidth: '1280px',
}
: {}
......@@ -162,7 +162,7 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
// formatMessage={formatMessage}
menuHeaderRender={(logoDom, titleDom) => (
<Link to="/">
{logoDom}
{/* {logoDom} */}
{titleDom}
</Link>
)}
......@@ -182,7 +182,7 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
changeOpenKeys={(keys: string[]) => setOpenKeys(keys)}
/>}
footerRender={() => defaultFooterDom}
rightContentRender={() => <RightContent />}
rightContentRender={() => <RightContent isHome={isHome} />}
{...props}
{...settings}
>
......
......@@ -91,7 +91,9 @@ const MenuSlider: React.FC<MenuSliderProps> = (props) => {
return <>
<OuterSider {...props} />
<Sider theme="light" className="menu_sider" collapsed={props.collapseState}>
<div className={styles.logo}><img src={GlobalConfig.global.siteInfo.logo} /></div>
<Link to={`/`} className={styles.logo}>
<img src={GlobalConfig.global.siteInfo.logo} />
</Link>
<div className={styles.menuTitle}>
{menuRouter?.name}
</div>
......
import { Tooltip, Badge } from 'antd';
import { BellOutlined, CustomerServiceOutlined } from '@ant-design/icons';
import React, { useCallback, useRef, useLayoutEffect, useState, useEffect } from 'react';
import React, { useCallback, useRef, useLayoutEffect, useState, useEffect, useMemo } from 'react';
import Avatar from './AvatarDropdown';
import SelectLang from './SelectLang';
import Location from './Location';
......@@ -12,6 +12,7 @@ import { getAuth } from '@/utils/auth';
import { getCookie } from '@/utils/cookie'
import { notificationChatRoom } from '@/utils/im'
import { SOCKET_URL, PLATFORM_DOMAIN } from '@/constants';
import { GlobalConfig } from '@/global/config';
import { usePurchaseBidStore } from '@/store/purchaseBid';
......@@ -38,8 +39,8 @@ type WsMessage = {
timestamp: number
}
const GlobalHeaderRight: React.FC<{ SiteStore?: any }> = (props) => {
const { SiteStore: { currentLayoutInfo } } = props;
const GlobalHeaderRight: React.FC<{ SiteStore?: any, isHome: boolean }> = (props) => {
const { SiteStore: { currentLayoutInfo }, isHome } = props;
const [message, setMessage] = useState<number>(0);
const className = styles.right;
......@@ -73,7 +74,7 @@ const GlobalHeaderRight: React.FC<{ SiteStore?: any }> = (props) => {
if (data.action === 'msg_no_read_message') {
setMessage(+data.data);
}
};
ws.current.onclose = (e) => {
console.log("关闭连接")
......@@ -82,7 +83,7 @@ const GlobalHeaderRight: React.FC<{ SiteStore?: any }> = (props) => {
console.log("socket 出错")
}
}
}, [ws]);
}, [ws, userInfo]);
useEffect(() => {
webSocketInit();
......@@ -99,34 +100,52 @@ const GlobalHeaderRight: React.FC<{ SiteStore?: any }> = (props) => {
window.location.href = PLATFORM_DOMAIN
}
}
const cacheStyle = useMemo(() => {
return {
isHome: { marginLeft: '-40px' },
iamge: { height: "30px", marginRight: '12px' }
}
}, [])
return (
<div className={className}>
<span style={{ color: 'rgba(0, 0, 0, 0.85)', cursor: "pointer" }} onClick={handleBackMall}>返回商城</span>
<Roles />
{/* <Location /> */}
<SelectLang />
<Tooltip title="消息">
<Link
to="/memberCenter/systemSetting/message"
className={styles.action}
>
<Badge count={message} size={"small"}>
<BellOutlined />
</Badge>
<div>
<Link to={"/memberCenter/home"} className={styles.container} style={isHome ? cacheStyle.isHome : {}}>
{
isHome && (
<img src={GlobalConfig.global.siteInfo.logo} style={cacheStyle.iamge} />
)
}
<span>{GlobalConfig.global.siteInfo.name}</span>
</Link>
</Tooltip>
{/* <Tooltip title="服务">
<a
target="_blank"
href=""
rel="noopener noreferrer"
className={styles.action}
>
<CustomerServiceOutlined />
</a>
</Tooltip> */}
<Avatar />
</div>
<div className={styles.rightContent}>
<span style={{ color: 'rgba(0, 0, 0, 0.85)', cursor: "pointer" }} onClick={handleBackMall}>返回商城</span>
<Roles />
{/* <Location /> */}
<SelectLang />
<Tooltip title="消息">
<Link
to="/memberCenter/systemSetting/message"
className={styles.action}
>
<Badge count={message} size={"small"}>
<BellOutlined />
</Badge>
</Link>
</Tooltip>
{/* <Tooltip title="服务">
<a
target="_blank"
href=""
rel="noopener noreferrer"
className={styles.action}
>
<CustomerServiceOutlined />
</a>
</Tooltip> */}
<Avatar />
</div>
</div>
);
};
......
......@@ -14,12 +14,32 @@
.right {
display: flex;
float: right;
flex-direction: row;
align-items: center;
width: 100%;
// float: right;
height: @layout-header-height;
margin-left: auto;
overflow: hidden;
// overflow: hidden;
font-size: 12px;
padding: 0 16px;
position: relative;
justify-content: space-between;
.container {
font-size: 16px;
display: flex;
flex-direction: row;
align-items: center;
color: #000;
}
.rightContent {
display: flex;
flex-direction: row;
align-items: center;
}
.action {
display: flex;
......
......@@ -463,14 +463,30 @@ export const addSchema = (orderType: number): ISchema => {
},
],
},
// // 退货发货地址
// shippingAddress: {
// title: '退货发货地址',
// type: 'string',
// visible: false,
// 'x-component': 'AddressFormItem',
// 'x-component-props': {
// dataSource: [],
// },
// 'x-rules': [
// {
// required: true,
// message: '请选择退货发货地址',
// },
// ],
// },
// 退货发货地址
shippingAddress: {
title: '退货发货地址',
type: 'string',
visible: false,
'x-component': 'AddressFormItem',
'x-component': 'CustomAddressSelect',
'x-component-props': {
dataSource: [],
isDefaultAddress: true,
},
'x-rules': [
{
......
......@@ -198,26 +198,27 @@ const Details = (props: any) => {
}
/* 提交表单 */
const submitExamine = async () => {
let flag = false;
ListData.every((item => {
if (item.associatedDataId && item.associatedMaterielNo) {
flag = true;
if (type === 'Sign' && contractText.isUseElectronicContract == 1) {
console.log(signatureLogId)
let res = await PublicApi.getContractSignatureGetHandSignatureUrl({ signatureLogId, });
if (res.code == 1000) {
console.log(res);
window.open(res.data.url)
}
}))
if (!flag) {
message.info('请先关联报价商品');
} else {
if (type === 'Sign' && contractText.isUseElectronicContract == 1) {
console.log(signatureLogId)
let res = await PublicApi.getContractSignatureGetHandSignatureUrl({ signatureLogId: 98 });
if (res.code == 1000) {
console.log(res);
window.open(res.data.url)
}
} else {
setIsModalVisible(!Visible)
}
setIsModalVisible(!Visible)
}
// let flag = false;
// ListData.every((item => {
// if (item.associatedDataId && item.associatedMaterielNo) {
// flag = true;
// }
// }))
// if (!flag) {
// message.info('请先关联报价商品');
// } else {
// }
}
const handleIsAllMemberChange = (v: any) => {
......
......@@ -128,6 +128,7 @@ const addList = () => {
// 甲方不同意签订合同都可以修改
return (
<div>
<span style={{ color: '#00B37A', cursor: 'pointer', marginRight: 10 }} onClick={() => submit(record.id)}>提交</span>
{
record.innerStatus == '1' || record.outerStatus == '1' || record.outerStatus == '3' || record.outerStatus == '5' ? <span style={{ color: '#00B37A', cursor: 'pointer', marginRight: 10 }} onClick={() => edit(record)}>修改</span> : ''
}
......@@ -141,12 +142,12 @@ const addList = () => {
cancelText="否"
>
<Button
style={{ marginRight: 10 }}
// style={{ margin: 10 }}
type="link"
>删除</Button>
</Popconfirm>
}
<span style={{ color: '#00B37A', cursor: 'pointer', marginRight: 10 }} onClick={() => submit(record.id)}>提交</span>
</div >
)
}
......
......@@ -136,14 +136,13 @@ const FormList = (props: any) => {
bidCount: sourceType == '1' ? item.awardTaxProbability * item.purchaseCount / 100 : sourceType == '2' ? item.awardTenderRatio * item.inviteTenderMateriel.count / 100 : item.purchaseCount,
bidAmount: sourceType == '1' ? item.awardTaxProbability * item.purchaseCount / 100 * item.taxUnitPrice : sourceType == '2' ? item.awardTenderRatio * item.inviteTenderMateriel.count / 100 * item.price : item.price,
// productBrand
associatedType: _filter(sourceType, item, ['', 'productAttributeJson', '', '']).split('-')[1],
associatedBrand: _filter(sourceType, item, ['', 'productBrand', '', '']),
associatedDataId: _filter(sourceType, item, ['', 'productId', 'commoditySkuId']), // 关联商品id
associatedMaterielNo: _filter(sourceType, item, ['', 'number', 'commodityAttribute']), // 关联物料编号
associatedGoods: _filter(sourceType, item, ['', 'productAttributeJson', 'commodityAttribute', '']), //关联
associatedMaterielNo: _filter(sourceType, item, ['', 'number', 'commodityCode']), // 关联物料编号
associatedMaterielName: _filter(sourceType, item, ['', 'productName', 'commodityName']), // 关联商品名称
associatedGoods: _filter(sourceType, item, ['', 'productAttributeJson', 'commodityBrand']), //关联品牌
// associatedMaterielName: sourceType == '1' ? item.productName : sourceType == '2' ? item.commodityName : '',
// associatedGoods: sourceType == '1' ? item.productAttributeJson : sourceType == '2' ? item.commodityBrand : '',// 关联品牌
associatedType: _filter(sourceType, item, ['', 'productAttributeJson', 'commodityCategory', '']).split('-')[1], //规格型号
associatedCategory: _filter(sourceType, item, ['', 'productAttributeJson', 'commodityCategory', '']), // 关联商品品类
associatedBrand: _filter(sourceType, item, ['', 'productBrand', 'commodityBrand', '']),// 关联品牌
rowId: index,
}
})
......@@ -358,7 +357,7 @@ const FormList = (props: any) => {
</div>
<div className={styles.text}>
<p>规格:{record.associatedGoods}</p>
<p>品类:{record.associatedType}</p>
<p>品类:{record.associatedCategory}</p>
</div>
<div className={styles.text}>
<p>品牌:{record.associatedBrand}</p>
......
......@@ -292,10 +292,10 @@ const Details = (props: any) => {
</div>
<div className={style.text}>
<p>商品编号:{record.associatedMaterielNo}</p>
<p className={style.nowrap}>商品名称:{record.associatedGoods}</p>
<p className={style.nowrap}>商品名称:{record.associatedMaterielName}</p>
</div>
<div className={style.text}>
<p>规格型号:{record.associatedType}</p>
<p>规格型号:{record.associatedGoods}</p>
<p>品类:{record.associatedCategory}</p>
</div>
<div className={style.text}>
......
......@@ -16,6 +16,7 @@ import Icon, { QuestionCircleOutlined } from '@ant-design/icons';
import { ReactComponent as DefaultAvatar } from '@/assets/imgs/default_avatar.svg';
import UploadFiles from '@/components/UploadFiles/UploadFiles'
import { UploadChangeParam } from 'antd/lib/upload/interface'
import { GlobalConfig } from '@/global/config';
interface Iprops {}
......@@ -74,7 +75,7 @@ const UserCenter: React.FC<Iprops> = (props) => {
<div className={styles.header}>
<div className={styles.infos}>
<div className={styles.hi}>
{`Hi, ${userAuth?.name}! 欢迎来到数商云瓴犀业务中台能力中心`}
{`Hi, ${userAuth?.name}! 欢迎来到${GlobalConfig.global.siteInfo.name}`}
</div>
<div className={styles.date}>
{today.format('YYYY年MM月DD日')} 星期{WEEKDAYS[today.day()]}
......
......@@ -38,6 +38,10 @@ export type ValueType = {
* 审核原因
*/
reason: string,
/**
* 上级id
*/
upperRelationId: number,
}
interface IProps {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment