{ "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "pkg": { "name": "dashboard", "version": "1.0.0", "private": true, "scripts": { "dev": "umi dev", "build": "umi build", "postinstall": "umi setup", "setup": "umi setup", "start": "npm run dev" }, "dependencies": { "@ant-design/charts": "^2.6.7", "@ant-design/icons": "^5.2.6", "@ant-design/plots": "^2.6.8", "@antv/g6": "^5.0.51", "@antv/l7": "^2.25.2", "@antv/l7-react": "^2.4.3", "antd": "^5.12.2", "axios": "^1.13.6", "moment": "^2.30.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-responsive": "^10.0.1", "recharts": "^3.8.0", "umi": "^4.0.0" }, "devDependencies": { "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "msw": "^2.12.13", "typescript": "^5.9.3" } }, "pkgPath": "D:\\trae_projects\\makemd\\makemd\\dashboard\\package.json", "plugins": { "./node_modules/@umijs/core/dist/service/servicePlugin": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "preset", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/core/dist/service/servicePlugin.js", "id": "./node_modules/@umijs/core/dist/service/servicePlugin", "key": "servicePlugin", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "@umijs/preset-umi": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "preset", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/index.js", "id": "@umijs/preset-umi", "key": "umi", "config": {}, "time": { "hooks": {}, "register": 21 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/registerMethods": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/registerMethods.js", "id": "./node_modules/@umijs/preset-umi/dist/registerMethods", "key": "registerMethods", "config": {}, "time": { "hooks": { "onStart": [ 0 ] }, "register": 5 }, "enableBy": "register" }, "@umijs/did-you-know": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/did-you-know/dist/plugin.js", "id": "@umijs/did-you-know", "key": "umijsDidYouKnow", "config": {}, "time": { "hooks": { "onStart": [ 3 ] }, "register": 3 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/404/404": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/404/404.js", "id": "./node_modules/@umijs/preset-umi/dist/features/404/404", "key": "404", "config": {}, "time": { "hooks": { "modifyRoutes": [ 0 ] }, "register": 0 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/aiDev/aiDev": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/aiDev/aiDev.js", "id": "./node_modules/@umijs/preset-umi/dist/features/aiDev/aiDev", "key": "aiDev", "config": {}, "time": { "hooks": {}, "register": 4 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/appData/appData": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/appData/appData.js", "id": "./node_modules/@umijs/preset-umi/dist/features/appData/appData", "key": "appData", "config": {}, "time": { "hooks": { "modifyAppData": [ 25 ] }, "register": 37 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/appData/umiInfo": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/appData/umiInfo.js", "id": "./node_modules/@umijs/preset-umi/dist/features/appData/umiInfo", "key": "umiInfo", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/check/check": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/check/check.js", "id": "./node_modules/@umijs/preset-umi/dist/features/check/check", "key": "check", "config": {}, "time": { "hooks": { "onCheckConfig": [ 0 ], "onCheck": [ 0 ] }, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/check/babel722": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/check/babel722.js", "id": "./node_modules/@umijs/preset-umi/dist/features/check/babel722", "key": "babel722", "config": {}, "time": { "hooks": { "onCheck": [ 1 ] }, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/codeSplitting/codeSplitting": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/codeSplitting/codeSplitting.js", "id": "./node_modules/@umijs/preset-umi/dist/features/codeSplitting/codeSplitting", "key": "codeSplitting", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/configPlugins/configPlugins": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/configPlugins/configPlugins.js", "id": "./node_modules/@umijs/preset-umi/dist/features/configPlugins/configPlugins", "key": "configPlugins", "config": {}, "time": { "hooks": { "modifyConfig": [ 0 ] }, "register": 16 }, "enableBy": "register" }, "virtual: config-title": { "id": "virtual: config-title", "key": "title", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-styles": { "id": "virtual: config-styles", "key": "styles", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-scripts": { "id": "virtual: config-scripts", "key": "scripts", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-routes": { "id": "virtual: config-routes", "key": "routes", "config": { "onChange": "regenerateTmpFiles" }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-routeLoader": { "id": "virtual: config-routeLoader", "key": "routeLoader", "config": { "default": { "moduleType": "esm" } }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-reactRouter5Compat": { "id": "virtual: config-reactRouter5Compat", "key": "reactRouter5Compat", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-presets": { "id": "virtual: config-presets", "key": "presets", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-plugins": { "id": "virtual: config-plugins", "key": "plugins", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-npmClient": { "id": "virtual: config-npmClient", "key": "npmClient", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-mountElementId": { "id": "virtual: config-mountElementId", "key": "mountElementId", "config": { "default": "root" }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-metas": { "id": "virtual: config-metas", "key": "metas", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-links": { "id": "virtual: config-links", "key": "links", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-historyWithQuery": { "id": "virtual: config-historyWithQuery", "key": "historyWithQuery", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-history": { "id": "virtual: config-history", "key": "history", "config": { "default": { "type": "browser" } }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-headScripts": { "id": "virtual: config-headScripts", "key": "headScripts", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-esbuildMinifyIIFE": { "id": "virtual: config-esbuildMinifyIIFE", "key": "esbuildMinifyIIFE", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-conventionRoutes": { "id": "virtual: config-conventionRoutes", "key": "conventionRoutes", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-conventionLayout": { "id": "virtual: config-conventionLayout", "key": "conventionLayout", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-base": { "id": "virtual: config-base", "key": "base", "config": { "default": "/" }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-analyze": { "id": "virtual: config-analyze", "key": "analyze", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-writeToDisk": { "id": "virtual: config-writeToDisk", "key": "writeToDisk", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-transformRuntime": { "id": "virtual: config-transformRuntime", "key": "transformRuntime", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-theme": { "id": "virtual: config-theme", "key": "theme", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-targets": { "id": "virtual: config-targets", "key": "targets", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-svgr": { "id": "virtual: config-svgr", "key": "svgr", "config": { "default": {} }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-svgo": { "id": "virtual: config-svgo", "key": "svgo", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-stylusLoader": { "id": "virtual: config-stylusLoader", "key": "stylusLoader", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-styleLoader": { "id": "virtual: config-styleLoader", "key": "styleLoader", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-srcTranspilerOptions": { "id": "virtual: config-srcTranspilerOptions", "key": "srcTranspilerOptions", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-srcTranspiler": { "id": "virtual: config-srcTranspiler", "key": "srcTranspiler", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-sassLoader": { "id": "virtual: config-sassLoader", "key": "sassLoader", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-runtimePublicPath": { "id": "virtual: config-runtimePublicPath", "key": "runtimePublicPath", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-purgeCSS": { "id": "virtual: config-purgeCSS", "key": "purgeCSS", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-publicPath": { "id": "virtual: config-publicPath", "key": "publicPath", "config": { "default": "/" }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-proxy": { "id": "virtual: config-proxy", "key": "proxy", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-postcssLoader": { "id": "virtual: config-postcssLoader", "key": "postcssLoader", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-outputPath": { "id": "virtual: config-outputPath", "key": "outputPath", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-normalCSSLoaderModules": { "id": "virtual: config-normalCSSLoaderModules", "key": "normalCSSLoaderModules", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-mfsu": { "id": "virtual: config-mfsu", "key": "mfsu", "config": { "default": { "strategy": "eager" } }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-mdx": { "id": "virtual: config-mdx", "key": "mdx", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-manifest": { "id": "virtual: config-manifest", "key": "manifest", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-lessLoader": { "id": "virtual: config-lessLoader", "key": "lessLoader", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-jsMinifierOptions": { "id": "virtual: config-jsMinifierOptions", "key": "jsMinifierOptions", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-jsMinifier": { "id": "virtual: config-jsMinifier", "key": "jsMinifier", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-inlineLimit": { "id": "virtual: config-inlineLimit", "key": "inlineLimit", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-ignoreMomentLocale": { "id": "virtual: config-ignoreMomentLocale", "key": "ignoreMomentLocale", "config": { "default": true }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-https": { "id": "virtual: config-https", "key": "https", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-hash": { "id": "virtual: config-hash", "key": "hash", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-forkTSChecker": { "id": "virtual: config-forkTSChecker", "key": "forkTSChecker", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-fastRefresh": { "id": "virtual: config-fastRefresh", "key": "fastRefresh", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-extraPostCSSPlugins": { "id": "virtual: config-extraPostCSSPlugins", "key": "extraPostCSSPlugins", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-extraBabelPresets": { "id": "virtual: config-extraBabelPresets", "key": "extraBabelPresets", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-extraBabelPlugins": { "id": "virtual: config-extraBabelPlugins", "key": "extraBabelPlugins", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-extraBabelIncludes": { "id": "virtual: config-extraBabelIncludes", "key": "extraBabelIncludes", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-externals": { "id": "virtual: config-externals", "key": "externals", "config": { "default": {} }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-esm": { "id": "virtual: config-esm", "key": "esm", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-devtool": { "id": "virtual: config-devtool", "key": "devtool", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-depTranspiler": { "id": "virtual: config-depTranspiler", "key": "depTranspiler", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-define": { "id": "virtual: config-define", "key": "define", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-deadCode": { "id": "virtual: config-deadCode", "key": "deadCode", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-cssPublicPath": { "id": "virtual: config-cssPublicPath", "key": "cssPublicPath", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-cssMinifierOptions": { "id": "virtual: config-cssMinifierOptions", "key": "cssMinifierOptions", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-cssMinifier": { "id": "virtual: config-cssMinifier", "key": "cssMinifier", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-cssLoaderModules": { "id": "virtual: config-cssLoaderModules", "key": "cssLoaderModules", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-cssLoader": { "id": "virtual: config-cssLoader", "key": "cssLoader", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-copy": { "id": "virtual: config-copy", "key": "copy", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-checkDepCssModules": { "id": "virtual: config-checkDepCssModules", "key": "checkDepCssModules", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-chainWebpack": { "id": "virtual: config-chainWebpack", "key": "chainWebpack", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-cacheDirectoryPath": { "id": "virtual: config-cacheDirectoryPath", "key": "cacheDirectoryPath", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-babelLoaderCustomize": { "id": "virtual: config-babelLoaderCustomize", "key": "babelLoaderCustomize", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-autoprefixer": { "id": "virtual: config-autoprefixer", "key": "autoprefixer", "config": {}, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-autoCSSModules": { "id": "virtual: config-autoCSSModules", "key": "autoCSSModules", "config": { "default": true }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "virtual: config-alias": { "id": "virtual: config-alias", "key": "alias", "config": { "default": { "umi": "@@/exports", "react": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\react", "react-dom": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\react-dom", "react-router": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\react-router", "react-router-dom": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\react-router-dom" } }, "type": "plugin", "enableBy": "register", "time": { "hooks": {}, "register": 0 } }, "./node_modules/@umijs/preset-umi/dist/features/crossorigin/crossorigin": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/crossorigin/crossorigin.js", "id": "./node_modules/@umijs/preset-umi/dist/features/crossorigin/crossorigin", "key": "crossorigin", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/depsOnDemand/depsOnDemand": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/depsOnDemand/depsOnDemand.js", "id": "./node_modules/@umijs/preset-umi/dist/features/depsOnDemand/depsOnDemand", "key": "depsOnDemand", "config": {}, "time": { "hooks": { "onStart": [ 1 ] }, "register": 2 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/devTool/devTool": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/devTool/devTool.js", "id": "./node_modules/@umijs/preset-umi/dist/features/devTool/devTool", "key": "devTool", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/esbuildHelperChecker/esbuildHelperChecker": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/esbuildHelperChecker/esbuildHelperChecker.js", "id": "./node_modules/@umijs/preset-umi/dist/features/esbuildHelperChecker/esbuildHelperChecker", "key": "esbuildHelperChecker", "config": {}, "time": { "hooks": {}, "register": 128 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/esmi/esmi": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/esmi/esmi.js", "id": "./node_modules/@umijs/preset-umi/dist/features/esmi/esmi", "key": "esmi", "config": {}, "time": { "hooks": {}, "register": 83 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/exportStatic/exportStatic": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/exportStatic/exportStatic.js", "id": "./node_modules/@umijs/preset-umi/dist/features/exportStatic/exportStatic", "key": "exportStatic", "config": {}, "time": { "hooks": {}, "register": 37 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/favicons/favicons": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/favicons/favicons.js", "id": "./node_modules/@umijs/preset-umi/dist/features/favicons/favicons", "key": "favicons", "config": {}, "time": { "hooks": { "modifyAppData": [ 0 ] }, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/helmet/helmet": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/helmet/helmet.js", "id": "./node_modules/@umijs/preset-umi/dist/features/helmet/helmet", "key": "helmet", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/icons/icons": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/icons/icons.js", "id": "./node_modules/@umijs/preset-umi/dist/features/icons/icons", "key": "icons", "config": {}, "time": { "hooks": {}, "register": 7 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/mock/mock": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/mock/mock.js", "id": "./node_modules/@umijs/preset-umi/dist/features/mock/mock", "key": "mock", "config": {}, "time": { "hooks": {}, "register": 72 } }, "./node_modules/@umijs/preset-umi/dist/features/mpa/mpa": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/mpa/mpa.js", "id": "./node_modules/@umijs/preset-umi/dist/features/mpa/mpa", "key": "mpa", "config": {}, "time": { "hooks": {}, "register": 3 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/okam/okam": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/okam/okam.js", "id": "./node_modules/@umijs/preset-umi/dist/features/okam/okam", "key": "okam", "config": {}, "time": { "hooks": {}, "register": 2 } }, "./node_modules/@umijs/preset-umi/dist/features/overrides/overrides": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/overrides/overrides.js", "id": "./node_modules/@umijs/preset-umi/dist/features/overrides/overrides", "key": "overrides", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/phantomDependency/phantomDependency": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/phantomDependency/phantomDependency.js", "id": "./node_modules/@umijs/preset-umi/dist/features/phantomDependency/phantomDependency", "key": "phantomDependency", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/polyfill/polyfill": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/polyfill/polyfill.js", "id": "./node_modules/@umijs/preset-umi/dist/features/polyfill/polyfill", "key": "polyfill", "config": {}, "time": { "hooks": { "modifyConfig": [ 1 ] }, "register": 5 } }, "./node_modules/@umijs/preset-umi/dist/features/polyfill/publicPathPolyfill": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/polyfill/publicPathPolyfill.js", "id": "./node_modules/@umijs/preset-umi/dist/features/polyfill/publicPathPolyfill", "key": "publicPathPolyfill", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/prepare/prepare": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/prepare/prepare.js", "id": "./node_modules/@umijs/preset-umi/dist/features/prepare/prepare", "key": "prepare", "config": {}, "time": { "hooks": {}, "register": 15 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/routePrefetch/routePrefetch": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/routePrefetch/routePrefetch.js", "id": "./node_modules/@umijs/preset-umi/dist/features/routePrefetch/routePrefetch", "key": "routePrefetch", "config": {}, "time": { "hooks": {}, "register": 3 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/stagewise/stagewise": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/stagewise/stagewise.js", "id": "./node_modules/@umijs/preset-umi/dist/features/stagewise/stagewise", "key": "stagewise", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/terminal/terminal": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/terminal/terminal.js", "id": "./node_modules/@umijs/preset-umi/dist/features/terminal/terminal", "key": "terminal", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/tmpFiles/tmpFiles": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/tmpFiles/tmpFiles.js", "id": "./node_modules/@umijs/preset-umi/dist/features/tmpFiles/tmpFiles", "key": "tmpFiles", "config": {}, "time": { "hooks": {}, "register": 11 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/clientLoader/clientLoader": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/clientLoader/clientLoader.js", "id": "./node_modules/@umijs/preset-umi/dist/features/clientLoader/clientLoader", "key": "clientLoader", "config": {}, "time": { "hooks": {}, "register": 3 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/routeProps/routeProps": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/routeProps/routeProps.js", "id": "./node_modules/@umijs/preset-umi/dist/features/routeProps/routeProps", "key": "routeProps", "config": {}, "time": { "hooks": {}, "register": 1 } }, "./node_modules/@umijs/preset-umi/dist/features/ssr/ssr": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/ssr/ssr.js", "id": "./node_modules/@umijs/preset-umi/dist/features/ssr/ssr", "key": "ssr", "config": {}, "time": { "hooks": {}, "register": 9 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/tmpFiles/configTypes": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/tmpFiles/configTypes.js", "id": "./node_modules/@umijs/preset-umi/dist/features/tmpFiles/configTypes", "key": "configTypes", "config": {}, "time": { "hooks": {}, "register": 6 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/transform/transform": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/transform/transform.js", "id": "./node_modules/@umijs/preset-umi/dist/features/transform/transform", "key": "transform", "config": {}, "time": { "hooks": {}, "register": 25 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/lowImport/lowImport": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/lowImport/lowImport.js", "id": "./node_modules/@umijs/preset-umi/dist/features/lowImport/lowImport", "key": "lowImport", "config": {}, "time": { "hooks": {}, "register": 6 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/vite/vite": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/vite/vite.js", "id": "./node_modules/@umijs/preset-umi/dist/features/vite/vite", "key": "vite", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/apiRoute/apiRoute": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/apiRoute/apiRoute.js", "id": "./node_modules/@umijs/preset-umi/dist/features/apiRoute/apiRoute", "key": "apiRoute", "config": {}, "time": { "hooks": {}, "register": 17 } }, "./node_modules/@umijs/preset-umi/dist/features/monorepo/redirect": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/monorepo/redirect.js", "id": "./node_modules/@umijs/preset-umi/dist/features/monorepo/redirect", "key": "monorepoRedirect", "config": {}, "time": { "hooks": {}, "register": 75 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/test/test": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/test/test.js", "id": "./node_modules/@umijs/preset-umi/dist/features/test/test", "key": "test", "config": {}, "time": { "hooks": {}, "register": 4 } }, "./node_modules/@umijs/preset-umi/dist/features/clickToComponent/clickToComponent": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/clickToComponent/clickToComponent.js", "id": "./node_modules/@umijs/preset-umi/dist/features/clickToComponent/clickToComponent", "key": "clickToComponent", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/legacy/legacy": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/legacy/legacy.js", "id": "./node_modules/@umijs/preset-umi/dist/features/legacy/legacy", "key": "legacy", "config": {}, "time": { "hooks": {}, "register": 4 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/classPropertiesLoose/classPropertiesLoose": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/classPropertiesLoose/classPropertiesLoose.js", "id": "./node_modules/@umijs/preset-umi/dist/features/classPropertiesLoose/classPropertiesLoose", "key": "classPropertiesLoose", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/webpack/webpack": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/webpack/webpack.js", "id": "./node_modules/@umijs/preset-umi/dist/features/webpack/webpack", "key": "preset-umi:webpack", "config": {}, "time": { "hooks": {}, "register": 2 } }, "./node_modules/@umijs/preset-umi/dist/features/swc/swc": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/swc/swc.js", "id": "./node_modules/@umijs/preset-umi/dist/features/swc/swc", "key": "swc", "config": {}, "time": { "hooks": { "addOnDemandDeps": [ 0 ] }, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/features/ui/ui": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/ui/ui.js", "id": "./node_modules/@umijs/preset-umi/dist/features/ui/ui", "key": "ui", "config": {}, "time": { "hooks": {}, "register": 8 } }, "./node_modules/@umijs/preset-umi/dist/features/mako/mako": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/mako/mako.js", "id": "./node_modules/@umijs/preset-umi/dist/features/mako/mako", "key": "mako", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/utoopack/utoopack": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/utoopack/utoopack.js", "id": "./node_modules/@umijs/preset-umi/dist/features/utoopack/utoopack", "key": "utoopack", "config": {}, "time": { "hooks": {}, "register": 3 } }, "./node_modules/@umijs/preset-umi/dist/features/hmrGuardian/hmrGuardian": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/hmrGuardian/hmrGuardian.js", "id": "./node_modules/@umijs/preset-umi/dist/features/hmrGuardian/hmrGuardian", "key": "hmrGuardian", "config": {}, "time": { "hooks": {}, "register": 5 } }, "./node_modules/@umijs/preset-umi/dist/features/routePreloadOnLoad/routePreloadOnLoad": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/routePreloadOnLoad/routePreloadOnLoad.js", "id": "./node_modules/@umijs/preset-umi/dist/features/routePreloadOnLoad/routePreloadOnLoad", "key": "routePreloadOnLoad", "config": {}, "time": { "hooks": {}, "register": 61 } }, "./node_modules/@umijs/preset-umi/dist/features/forget/forget": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/forget/forget.js", "id": "./node_modules/@umijs/preset-umi/dist/features/forget/forget", "key": "forget", "config": {}, "time": { "hooks": {}, "register": 3 }, "enableBy": "config" }, "./node_modules/@umijs/preset-umi/dist/features/bundler/bundler": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/features/bundler/bundler.js", "id": "./node_modules/@umijs/preset-umi/dist/features/bundler/bundler", "key": "preset-umi:bundler", "config": {}, "time": { "hooks": {}, "register": 5 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/build": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/build.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/build", "key": "build", "config": {}, "time": { "hooks": {}, "register": 9 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/config/config": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/config/config.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/config/config", "key": "config", "config": {}, "time": { "hooks": {}, "register": 78 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/dev/dev": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/dev/dev.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/dev/dev", "key": "dev", "config": {}, "time": { "hooks": {}, "register": 144 } }, "./node_modules/@umijs/preset-umi/dist/commands/help": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/help.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/help", "key": "help", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/lint": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/lint.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/lint", "key": "lint", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/setup": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/setup.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/setup", "key": "setup", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/deadcode": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/deadcode.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/deadcode", "key": "deadcode", "config": {}, "time": { "hooks": {}, "register": 3 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/version": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/version.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/version", "key": "version", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/page": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/page.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/page", "key": "generator:page", "config": {}, "time": { "hooks": {}, "register": 4 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/prettier": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/prettier.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/prettier", "key": "generator:prettier", "config": {}, "time": { "hooks": {}, "register": 3 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/tsconfig": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/tsconfig.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/tsconfig", "key": "generator:tsconfig", "config": {}, "time": { "hooks": {}, "register": 3 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/jest": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/jest.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/jest", "key": "generator:jest", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/tailwindcss": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/tailwindcss.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/tailwindcss", "key": "generator:tailwindcss", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/dva": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/dva.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/dva", "key": "generator:dva", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/component": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/component.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/component", "key": "generator:component", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/mock": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/mock.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/mock", "key": "generator:mock", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/cypress": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/cypress.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/cypress", "key": "generator:cypress", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/api": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/api.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/api", "key": "generator:api", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/generators/precommit": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/generators/precommit.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/generators/precommit", "key": "generator:precommit", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/plugin": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/plugin.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/plugin", "key": "command:plugin", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/verify-commit": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/verify-commit.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/verify-commit", "key": "verifyCommit", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/preview": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/preview.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/preview", "key": "preview", "config": {}, "time": { "hooks": {}, "register": 40 }, "enableBy": "register" }, "./node_modules/@umijs/preset-umi/dist/commands/mfsu/mfsu": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/preset-umi/dist/commands/mfsu/mfsu.js", "id": "./node_modules/@umijs/preset-umi/dist/commands/mfsu/mfsu", "key": "mfsu-cli", "config": {}, "time": { "hooks": {}, "register": 2 }, "enableBy": "register" }, "@umijs/plugin-run": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/plugin-run/dist/index.js", "id": "@umijs/plugin-run", "key": "run", "config": {}, "time": { "hooks": {}, "register": 7 }, "enableBy": "register" }, "./node_modules/@umijs/core/dist/service/generatePlugin": { "cwd": "D:\\trae_projects\\makemd\\makemd\\dashboard", "type": "plugin", "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/core/dist/service/generatePlugin.js", "id": "./node_modules/@umijs/core/dist/service/generatePlugin", "key": "generatePlugin", "config": {}, "time": { "hooks": {}, "register": 1 }, "enableBy": "register" } }, "presets": [], "name": "setup", "args": { "_": [] }, "userConfig": { "routes": [ { "path": "/", "component": "@/pages/Homepage", "layout": false }, { "path": "/pricing", "component": "@/pages/Pricing", "layout": false }, { "path": "/case-study", "component": "@/pages/CaseStudy", "layout": false }, { "path": "/case-study/:id", "component": "@/pages/CaseStudy", "layout": false }, { "path": "/auth", "layout": false, "routes": [ { "path": "login", "component": "@/pages/Auth/LoginPage" }, { "path": "register", "component": "@/pages/Auth/RegisterPage" } ] }, { "path": "/dashboard", "layout": "@/layouts/index", "routes": [ { "path": "", "component": "@/pages/OperationAgent" }, { "path": "operation-agent", "component": "@/pages/OperationAgent" } ] } ], "fastRefresh": true }, "mainConfigFile": "D:\\trae_projects\\makemd\\makemd\\dashboard\\.umirc.ts", "config": { "routeLoader": { "moduleType": "esm" }, "mountElementId": "root", "history": { "type": "browser" }, "base": "/", "svgr": {}, "publicPath": "/", "mfsu": { "strategy": "eager" }, "ignoreMomentLocale": true, "externals": {}, "autoCSSModules": true, "alias": { "umi": "@@/exports", "react": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\react", "react-dom": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\react-dom", "react-router": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\react-router", "react-router-dom": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\react-router-dom", "@": "D:/trae_projects/makemd/makemd/dashboard/src", "@@": "D:/trae_projects/makemd/makemd/dashboard/src/.umi", "regenerator-runtime": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\regenerator-runtime" }, "routes": [ { "path": "/", "component": "@/pages/Homepage", "layout": false }, { "path": "/pricing", "component": "@/pages/Pricing", "layout": false }, { "path": "/case-study", "component": "@/pages/CaseStudy", "layout": false }, { "path": "/case-study/:id", "component": "@/pages/CaseStudy", "layout": false }, { "path": "/auth", "layout": false, "routes": [ { "path": "login", "component": "@/pages/Auth/LoginPage" }, { "path": "register", "component": "@/pages/Auth/RegisterPage" } ] }, { "path": "/dashboard", "layout": "@/layouts/index", "routes": [ { "path": "", "component": "@/pages/OperationAgent" }, { "path": "operation-agent", "component": "@/pages/OperationAgent" } ] } ], "fastRefresh": true, "targets": { "chrome": 80 } }, "routes": { "1": { "path": "/", "layout": false, "file": "@/pages/Homepage.tsx", "id": "1", "absPath": "/", "__content": "import React, { useState, useEffect } from 'react';\nimport { Link, useNavigate } from 'umi';\nimport { Button, Typography, Row, Col, Card, Divider } from 'antd';\nimport { ArrowRightOutlined, CheckCircleOutlined, MenuOutlined, XOutlined, TwitterOutlined, LinkedinOutlined, GithubOutlined } from '@ant-design/icons';\nimport Navbar from '@/components/Navbar';\n\nconst { Title, Paragraph, Text } = Typography;\n\nconst Homepage: React.FC = () => {\n const navigate = useNavigate();\n const [isScrolled, setIsScrolled] = useState(false);\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n\n useEffect(() => {\n const handleScroll = () => {\n setIsScrolled(window.scrollY > 50);\n };\n window.addEventListener('scroll', handleScroll);\n return () => window.removeEventListener('scroll', handleScroll);\n }, []);\n\n const features = [\n {\n title: '智能选品系统',\n description: '基于AI的商品推荐,自动识别高潜力商品,提升选品效率',\n },\n {\n title: 'AI动态定价',\n description: '实时市场分析,优化定价策略,最大化利润',\n },\n {\n title: '自动上架系统',\n description: '一键批量上架,节省人工成本,提高运营效率',\n },\n {\n title: '跨平台套利',\n description: '发现价格差异,实现利润最大化,降低运营风险',\n },\n {\n title: 'AI店铺托管',\n description: '24/7智能运营,解放人力,提升店铺表现',\n },\n {\n title: '多商户管理',\n description: '集中管理多店铺,数据一目了然,简化管理流程',\n },\n ];\n\n const stats = [\n { title: '平均提升', value: '30%', suffix: '运营效率' },\n { title: '平均提升', value: '25%', suffix: '利润率' },\n { title: '支持商户', value: '1000+', suffix: '同时在线' },\n ];\n\n return (\n
\n \n\n {/* 英雄区 */}\n
\n {/* 背景装饰 */}\n
\n {/* 网格背景 */}\n
\n
\n \n \n
\n AI驱动 · 智能运营\n
\n \n 重新定义跨境电商\n \n \n 利用人工智能和自动化技术,帮助您实现从选品到运营的全流程智能化,提升效率,降低成本,实现业务增长\n \n
\n \n \n
\n \n \n
\n
\n \"智能电商平台\"\n
\n \n \n
\n
\n\n {/* 核心功能区 */}\n
\n {/* 背景装饰 */}\n
\n
\n
\n
\n 核心功能\n
\n 全方位跨境电商解决方案\n \n 我们提供从选品到运营的完整解决方案,帮助您实现业务增长和利润最大化\n \n
\n \n {features.map((feature, index) => (\n \n \n
\n {feature.title.charAt(0)}\n
\n {feature.title}\n {feature.description}\n \n
\n \n ))}\n
\n
\n
\n\n {/* 价值主张区 */}\n
\n {/* 背景装饰 */}\n
\n
\n \n \n
\n
\n \"业务增长\"\n
\n \n \n
\n 为什么选择我们\n
\n 为什么选择 Crawlful Hub\n
\n
\n
\n \n
\n
\n

AI驱动决策

\n

基于人工智能的数据分析和预测,帮助您做出更明智的业务决策

\n
\n
\n
\n
\n \n
\n
\n

全流程自动化

\n

从选品到上架,从定价到运营,全流程自动化管理,节省人力成本

\n
\n
\n
\n
\n \n
\n
\n

多平台整合

\n

支持主流电商平台,一站式管理多店铺,提高运营效率

\n
\n
\n
\n
\n \n
\n
\n

专业团队支持

\n

7x24小时技术支持,专业团队为您保驾护航,确保业务稳定运行

\n
\n
\n
\n \n \n
\n
\n\n {/* 成功案例区 */}\n
\n {/* 背景装饰 */}\n
\n
\n
\n
\n 成功案例\n
\n 我们的客户成功故事\n \n 看看我们的客户如何使用 Crawlful Hub 实现业务增长\n \n
\n \n \n \n
\n \"成功案例1\"\n
\n
\n 跨境电商\n
\n
\n
\n
\n 某跨境电商企业\n 通过智能选品和动态定价,3个月内销售额提升45%\n \n
\n
\n \n \n \n
\n \"成功案例2\"\n
\n
\n 品牌零售\n
\n
\n
\n
\n 某品牌零售商\n 利用AI店铺托管,运营成本降低30%,效率提升50%\n \n
\n
\n \n \n \n
\n \"成功案例3\"\n
\n
\n 多渠道运营\n
\n
\n
\n
\n 某多渠道卖家\n 通过跨平台套利,6个月内利润率提升35%\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n {/* 行动召唤区 */}\n
\n {/* 背景装饰 */}\n
\n {/* 网格背景 */}\n
\n
\n
\n
\n 立即开始\n
\n 准备好开始您的电商增长之旅了吗?\n \n 立即注册,享受14天免费试用,体验AI驱动的跨境电商解决方案,开启您的业务增长之路\n \n \n
\n 无需信用卡 · 14天免费试用 · 随时取消\n
\n
\n
\n
\n\n {/* 页脚 */}\n \n
\n );\n};\n\nexport default Homepage;", "__isJSFile": true, "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Homepage.tsx" }, "2": { "path": "/pricing", "layout": false, "file": "@/pages/Pricing.tsx", "id": "2", "absPath": "/pricing", "__content": "import React, { useState } from 'react';\nimport { Link, useNavigate } from 'umi';\nimport { Card, Button, Typography, Divider, Radio, Row, Col, Tag, Alert } from 'antd';\nimport { CheckCircleOutlined, CloseCircleOutlined, ArrowRightOutlined, DollarOutlined, UsersOutlined, ShieldOutlined, BarChartOutlined, ZapOutlined, GlobeOutlined, StarOutlined } from '@ant-design/icons';\nimport Navbar from '@/components/Navbar';\n\nconst { Title, Paragraph, Text } = Typography;\n\nconst Pricing: React.FC = () => {\n const navigate = useNavigate();\n const [billingCycle, setBillingCycle] = useState<'monthly' | 'yearly'>('monthly');\n\n const plans = [\n {\n name: '免费版',\n price: 0,\n billing: '永久免费',\n features: [\n '基础功能',\n '最多1个店铺',\n '500条商品数据',\n '邮件支持',\n '基础报表',\n '手动操作',\n ],\n cta: '开始免费使用',\n popular: false,\n buttonType: 'primary',\n onClick: () => navigate('/auth/register'),\n },\n {\n name: '专业版',\n price: billingCycle === 'monthly' ? 999 : 9990,\n billing: billingCycle === 'monthly' ? '每月' : '每年',\n features: [\n '所有核心功能',\n '最多10个店铺',\n '5000条商品数据',\n '优先邮件支持',\n '高级报表',\n 'AI智能选品',\n '自动上架',\n '动态定价',\n '跨平台套利',\n ],\n cta: '选择专业版',\n popular: true,\n buttonType: 'primary',\n onClick: () => navigate('/checkout?plan=professional'),\n },\n {\n name: '企业版',\n price: 0,\n billing: '定制',\n features: [\n '完整功能',\n '无限店铺',\n '无限商品数据',\n '24/7专属支持',\n '定制化报表',\n 'AI店铺托管',\n '定制化开发',\n 'API接入',\n '专属客户经理',\n ],\n cta: '联系销售',\n popular: false,\n buttonType: 'default',\n onClick: () => navigate('/contact'),\n },\n ];\n\n const compareFeatures = [\n { feature: '核心功能', free: true, professional: true, enterprise: true },\n { feature: '店铺数量', free: '1个', professional: '10个', enterprise: '无限' },\n { feature: '商品数据', free: '500条', professional: '5000条', enterprise: '无限' },\n { feature: 'AI智能选品', free: false, professional: true, enterprise: true },\n { feature: '自动上架', free: false, professional: true, enterprise: true },\n { feature: '动态定价', free: false, professional: true, enterprise: true },\n { feature: '跨平台套利', free: false, professional: true, enterprise: true },\n { feature: 'AI店铺托管', free: false, professional: false, enterprise: true },\n { feature: '技术支持', free: '邮件', professional: '优先邮件', enterprise: '24/7专属' },\n { feature: '定制化开发', free: false, professional: false, enterprise: true },\n { feature: 'API接入', free: false, professional: false, enterprise: true },\n ];\n\n return (\n
\n \n {/* 页面头部 */}\n
\n
\n 选择适合您的方案\n \n 无论您是个人卖家还是大型企业,我们都有适合您的解决方案\n \n
\n 月付\n setBillingCycle(e.target.value)}>\n 月付\n 年付 省16%\n \n 年付\n
\n
\n
\n\n {/* 定价方案 */}\n
\n
\n \n {plans.map((plan, index) => (\n \n \n {plan.popular && (\n
\n 推荐\n
\n )}\n
\n {plan.name}\n
\n \n {plan.price}\n /{plan.billing === '永久免费' ? '' : plan.billing === '每月' ? '月' : '年'}\n
\n {plan.billing === '永久免费' && (\n {plan.billing}\n )}\n
\n \n
\n {plan.features.map((feature, idx) => (\n
\n \n {feature}\n
\n ))}\n
\n \n
\n \n ))}\n
\n
\n
\n\n {/* 功能对比 */}\n
\n
\n 功能对比\n
\n
\n
功能
\n
免费版
\n
专业版
\n
企业版
\n
\n {compareFeatures.map((item, index) => (\n
\n
{item.feature}
\n
\n {typeof item.free === 'boolean' ? (\n item.free ? \n : \n \n ) : (\n {item.free}\n )}\n
\n
\n {typeof item.professional === 'boolean' ? (\n item.professional ? \n : \n \n ) : (\n {item.professional}\n )}\n
\n
\n {typeof item.enterprise === 'boolean' ? (\n item.enterprise ? \n : \n \n ) : (\n {item.enterprise}\n )}\n
\n
\n ))}\n
\n
\n
\n\n {/* 常见问题 */}\n
\n
\n 常见问题\n \n \n \n 如何选择适合我的方案?\n \n 根据您的店铺数量、商品数据量和功能需求来选择。如果您是个人卖家或刚刚起步,免费版是个不错的选择。如果您有多个店铺需要管理,专业版会更适合您。如果您是大型企业,需要定制化解决方案,建议选择企业版。\n \n \n \n 可以随时升级或降级方案吗?\n \n 是的,您可以随时升级或降级您的方案。升级会立即生效,降级会在下一个 billing cycle 开始时生效。\n \n \n \n 如何取消订阅?\n \n 您可以在账户设置中取消订阅。取消后,您的服务会持续到当前 billing cycle 结束,之后不会再收费。\n \n \n \n \n \n 年付和月付有什么区别?\n \n 年付可以享受16%的折扣,相当于免费使用2个月。其他功能和服务都是一样的。\n \n \n \n 提供发票吗?\n \n 是的,我们会为所有付费用户提供正规发票。您可以在账户设置中下载发票。\n \n \n \n 有试用期吗?\n \n 是的,专业版和企业版都提供14天的免费试用期。试用期内您可以体验所有功能,无需信用卡。\n \n \n \n \n
\n
\n\n {/* 行动召唤 */}\n
\n
\n 准备好开始了吗?\n 选择适合您的方案,开始您的电商增长之旅\n \n
\n
\n\n \n
\n );\n};\n\nexport default Pricing;", "__isJSFile": true, "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Pricing.tsx" }, "3": { "path": "/case-study", "layout": false, "file": "@/pages/CaseStudy.tsx", "id": "3", "absPath": "/case-study", "__content": "import React, { useState } from 'react';\nimport { Link, useNavigate } from 'umi';\nimport { Card, Button, Typography, Row, Col, Tag, Carousel, Pagination } from 'antd';\nimport { ArrowRightOutlined, CheckCircleOutlined, DollarOutlined, BarChartOutlined, ZapOutlined, GlobeOutlined, StarOutlined, UserOutlined, CompanyOutlined, TrendingUpOutlined } from '@ant-design/icons';\nimport Navbar from '@/components/Navbar';\n\nconst { Title, Paragraph, Text } = Typography;\n\nconst CaseStudy: React.FC = () => {\n const navigate = useNavigate();\n const [activeCategory, setActiveCategory] = useState('all');\n const [currentPage, setCurrentPage] = useState(1);\n\n const caseStudies = [\n {\n id: 1,\n title: '中小商户案例:月销售额提升45%',\n category: 'small',\n company: '广州某跨境电商公司',\n industry: '电子产品',\n challenge: '手动选品效率低,定价策略单一,运营成本高',\n solution: '使用智能选品系统和AI动态定价,实现自动化运营',\n results: [\n '月销售额提升45%',\n '运营成本降低30%',\n '选品效率提升60%',\n ],\n testimonial: '\"Crawlful Hub帮助我们实现了店铺的自动化运营,节省了大量人力成本,销售额提升了40%。\"',\n author: '张总',\n position: 'CEO',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n {\n id: 2,\n title: '大型企业案例:多店铺管理效率提升60%',\n category: 'enterprise',\n company: '深圳某品牌电商',\n industry: '服装行业',\n challenge: '多店铺管理复杂,数据分散,难以统一运营',\n solution: '使用多店铺管理系统,实现数据集中管理和统一运营',\n results: [\n '管理效率提升60%',\n '数据处理时间减少70%',\n '运营成本降低25%',\n ],\n testimonial: '\"多店铺管理功能让我们能够集中管理所有店铺,数据一目了然,大大提高了管理效率。\"',\n author: '李经理',\n position: '运营总监',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n {\n id: 3,\n title: '跨境电商案例:利润率提升30%',\n category: 'crossborder',\n company: '杭州某跨境电商平台',\n industry: '家居用品',\n challenge: '跨平台价格差异难以把握,利润空间小',\n solution: '使用跨平台套利系统,发现价格差异,优化定价策略',\n results: [\n '利润率提升30%',\n '价格优化效率提升80%',\n '市场竞争力增强',\n ],\n testimonial: '\"跨平台套利系统帮助我们发现了很多价格差异,利润率提高了30%,市场竞争力大大增强。\"',\n author: '王女士',\n position: '业务经理',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n {\n id: 4,\n title: '新手卖家案例:快速启动电商业务',\n category: 'small',\n company: '上海某个人卖家',\n industry: '美妆产品',\n challenge: '缺乏电商运营经验,选品困难,运营成本高',\n solution: '使用智能选品系统和自动上架功能,快速启动业务',\n results: [\n '业务启动时间缩短50%',\n '选品准确率提升70%',\n '首月销售额达到预期目标',\n ],\n testimonial: '\"作为新手卖家,Crawlful Hub帮助我快速启动了电商业务,选品和上架都变得非常简单。\"',\n author: '陈先生',\n position: '个人卖家',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n {\n id: 5,\n title: '传统企业转型案例:线上销售额占比提升至60%',\n category: 'enterprise',\n company: '北京某传统制造企业',\n industry: '机械设备',\n challenge: '线上业务占比低,数字化转型困难',\n solution: '使用全功能电商管理系统,实现线上线下一体化运营',\n results: [\n '线上销售额占比提升至60%',\n '客户获取成本降低40%',\n '品牌知名度提升',\n ],\n testimonial: '\"Crawlful Hub帮助我们成功实现了数字化转型,线上销售额占比从10%提升到了60%。\"',\n author: '赵总',\n position: '总经理',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n {\n id: 6,\n title: '多平台运营案例:管理效率提升70%',\n category: 'crossborder',\n company: '厦门某跨境电商公司',\n industry: '玩具产品',\n challenge: '多平台运营管理复杂,数据不同步,运营效率低',\n solution: '使用多平台集成管理系统,实现数据同步和统一运营',\n results: [\n '管理效率提升70%',\n '数据同步时间减少90%',\n '运营成本降低35%',\n ],\n testimonial: '\"多平台集成管理系统让我们能够统一管理所有平台的店铺,效率大大提升。\"',\n author: '刘经理',\n position: '运营主管',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n ];\n\n const filteredCases = activeCategory === 'all' \n ? caseStudies \n : caseStudies.filter(caseStudy => caseStudy.category === activeCategory);\n\n const itemsPerPage = 3;\n const totalPages = Math.ceil(filteredCases.length / itemsPerPage);\n const currentCases = filteredCases.slice(\n (currentPage - 1) * itemsPerPage,\n currentPage * itemsPerPage\n );\n\n const categories = [\n { value: 'all', label: '全部案例' },\n { value: 'small', label: '中小商户' },\n { value: 'enterprise', label: '大型企业' },\n { value: 'crossborder', label: '跨境电商' },\n ];\n\n return (\n
\n \n {/* 页面头部 */}\n
\n
\n 成功案例\n \n 看看我们如何帮助客户实现业务增长\n \n
\n
\n\n {/* 分类筛选 */}\n
\n
\n
\n {categories.map(category => (\n {\n setActiveCategory(category.value);\n setCurrentPage(1);\n }}\n >\n {category.label}\n \n ))}\n
\n
\n
\n\n {/* 案例列表 */}\n
\n
\n \n {currentCases.map(caseStudy => (\n \n \n
\n {caseStudy.title}\n
\n
\n
\n {caseStudy.industry}\n {caseStudy.company}\n
\n {caseStudy.title}\n \n 挑战:{caseStudy.challenge}\n \n \n 解决方案:{caseStudy.solution}\n \n
\n 成果:\n
    \n {caseStudy.results.map((result, index) => (\n
  • \n \n {result}\n
  • \n ))}\n
\n
\n
\n
\n \n \n \n \n \n {caseStudy.testimonial}\n
\n
\n \n
\n {caseStudy.author}\n {caseStudy.position}\n
\n
\n
\n \n
\n
\n \n ))}\n
\n \n {/* 分页 */}\n {totalPages > 1 && (\n
\n \n
\n )}\n
\n
\n\n {/* 客户评价轮播 */}\n
\n
\n 客户评价\n \n {caseStudies.map(caseStudy => (\n
\n \n
\n {[1, 2, 3, 4, 5].map(star => (\n \n ))}\n
\n {caseStudy.testimonial}\n
\n \n
\n {caseStudy.author}\n {caseStudy.position},{caseStudy.company}\n
\n
\n
\n
\n ))}\n
\n
\n
\n\n {/* 行动召唤 */}\n
\n
\n 准备好实现您的业务增长了吗?\n 加入我们的成功客户行列,开始您的电商增长之旅\n \n
\n
\n\n \n
\n );\n};\n\nexport default CaseStudy;", "__isJSFile": true, "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/CaseStudy.tsx" }, "4": { "path": "/case-study/:id", "layout": false, "file": "@/pages/CaseStudy.tsx", "id": "4", "absPath": "/case-study/:id", "__content": "import React, { useState } from 'react';\nimport { Link, useNavigate } from 'umi';\nimport { Card, Button, Typography, Row, Col, Tag, Carousel, Pagination } from 'antd';\nimport { ArrowRightOutlined, CheckCircleOutlined, DollarOutlined, BarChartOutlined, ZapOutlined, GlobeOutlined, StarOutlined, UserOutlined, CompanyOutlined, TrendingUpOutlined } from '@ant-design/icons';\nimport Navbar from '@/components/Navbar';\n\nconst { Title, Paragraph, Text } = Typography;\n\nconst CaseStudy: React.FC = () => {\n const navigate = useNavigate();\n const [activeCategory, setActiveCategory] = useState('all');\n const [currentPage, setCurrentPage] = useState(1);\n\n const caseStudies = [\n {\n id: 1,\n title: '中小商户案例:月销售额提升45%',\n category: 'small',\n company: '广州某跨境电商公司',\n industry: '电子产品',\n challenge: '手动选品效率低,定价策略单一,运营成本高',\n solution: '使用智能选品系统和AI动态定价,实现自动化运营',\n results: [\n '月销售额提升45%',\n '运营成本降低30%',\n '选品效率提升60%',\n ],\n testimonial: '\"Crawlful Hub帮助我们实现了店铺的自动化运营,节省了大量人力成本,销售额提升了40%。\"',\n author: '张总',\n position: 'CEO',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n {\n id: 2,\n title: '大型企业案例:多店铺管理效率提升60%',\n category: 'enterprise',\n company: '深圳某品牌电商',\n industry: '服装行业',\n challenge: '多店铺管理复杂,数据分散,难以统一运营',\n solution: '使用多店铺管理系统,实现数据集中管理和统一运营',\n results: [\n '管理效率提升60%',\n '数据处理时间减少70%',\n '运营成本降低25%',\n ],\n testimonial: '\"多店铺管理功能让我们能够集中管理所有店铺,数据一目了然,大大提高了管理效率。\"',\n author: '李经理',\n position: '运营总监',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n {\n id: 3,\n title: '跨境电商案例:利润率提升30%',\n category: 'crossborder',\n company: '杭州某跨境电商平台',\n industry: '家居用品',\n challenge: '跨平台价格差异难以把握,利润空间小',\n solution: '使用跨平台套利系统,发现价格差异,优化定价策略',\n results: [\n '利润率提升30%',\n '价格优化效率提升80%',\n '市场竞争力增强',\n ],\n testimonial: '\"跨平台套利系统帮助我们发现了很多价格差异,利润率提高了30%,市场竞争力大大增强。\"',\n author: '王女士',\n position: '业务经理',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n {\n id: 4,\n title: '新手卖家案例:快速启动电商业务',\n category: 'small',\n company: '上海某个人卖家',\n industry: '美妆产品',\n challenge: '缺乏电商运营经验,选品困难,运营成本高',\n solution: '使用智能选品系统和自动上架功能,快速启动业务',\n results: [\n '业务启动时间缩短50%',\n '选品准确率提升70%',\n '首月销售额达到预期目标',\n ],\n testimonial: '\"作为新手卖家,Crawlful Hub帮助我快速启动了电商业务,选品和上架都变得非常简单。\"',\n author: '陈先生',\n position: '个人卖家',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n {\n id: 5,\n title: '传统企业转型案例:线上销售额占比提升至60%',\n category: 'enterprise',\n company: '北京某传统制造企业',\n industry: '机械设备',\n challenge: '线上业务占比低,数字化转型困难',\n solution: '使用全功能电商管理系统,实现线上线下一体化运营',\n results: [\n '线上销售额占比提升至60%',\n '客户获取成本降低40%',\n '品牌知名度提升',\n ],\n testimonial: '\"Crawlful Hub帮助我们成功实现了数字化转型,线上销售额占比从10%提升到了60%。\"',\n author: '赵总',\n position: '总经理',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n {\n id: 6,\n title: '多平台运营案例:管理效率提升70%',\n category: 'crossborder',\n company: '厦门某跨境电商公司',\n industry: '玩具产品',\n challenge: '多平台运营管理复杂,数据不同步,运营效率低',\n solution: '使用多平台集成管理系统,实现数据同步和统一运营',\n results: [\n '管理效率提升70%',\n '数据同步时间减少90%',\n '运营成本降低35%',\n ],\n testimonial: '\"多平台集成管理系统让我们能够统一管理所有平台的店铺,效率大大提升。\"',\n author: '刘经理',\n position: '运营主管',\n image: 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27600%27 height=%27400%27 viewBox=%270 0 600 400%27%3E%3Crect width=%27600%27 height=%27400%27 fill=%27%23f0f2f5%27/%3E%3Ctext x=%2750%25%27 y=%2750%25%27 dominant-baseline=%27middle%27 text-anchor=%27middle%27 font-family=%27Arial%27 font-size=%2716%27 fill=%27%231890ff%27%3E成功案例展示%3C/text%3E%3C/svg%3E',\n },\n ];\n\n const filteredCases = activeCategory === 'all' \n ? caseStudies \n : caseStudies.filter(caseStudy => caseStudy.category === activeCategory);\n\n const itemsPerPage = 3;\n const totalPages = Math.ceil(filteredCases.length / itemsPerPage);\n const currentCases = filteredCases.slice(\n (currentPage - 1) * itemsPerPage,\n currentPage * itemsPerPage\n );\n\n const categories = [\n { value: 'all', label: '全部案例' },\n { value: 'small', label: '中小商户' },\n { value: 'enterprise', label: '大型企业' },\n { value: 'crossborder', label: '跨境电商' },\n ];\n\n return (\n
\n \n {/* 页面头部 */}\n
\n
\n 成功案例\n \n 看看我们如何帮助客户实现业务增长\n \n
\n
\n\n {/* 分类筛选 */}\n
\n
\n
\n {categories.map(category => (\n {\n setActiveCategory(category.value);\n setCurrentPage(1);\n }}\n >\n {category.label}\n \n ))}\n
\n
\n
\n\n {/* 案例列表 */}\n
\n
\n \n {currentCases.map(caseStudy => (\n \n \n
\n {caseStudy.title}\n
\n
\n
\n {caseStudy.industry}\n {caseStudy.company}\n
\n {caseStudy.title}\n \n 挑战:{caseStudy.challenge}\n \n \n 解决方案:{caseStudy.solution}\n \n
\n 成果:\n
    \n {caseStudy.results.map((result, index) => (\n
  • \n \n {result}\n
  • \n ))}\n
\n
\n
\n
\n \n \n \n \n \n {caseStudy.testimonial}\n
\n
\n \n
\n {caseStudy.author}\n {caseStudy.position}\n
\n
\n
\n \n
\n
\n \n ))}\n
\n \n {/* 分页 */}\n {totalPages > 1 && (\n
\n \n
\n )}\n
\n
\n\n {/* 客户评价轮播 */}\n
\n
\n 客户评价\n \n {caseStudies.map(caseStudy => (\n
\n \n
\n {[1, 2, 3, 4, 5].map(star => (\n \n ))}\n
\n {caseStudy.testimonial}\n
\n \n
\n {caseStudy.author}\n {caseStudy.position},{caseStudy.company}\n
\n
\n
\n
\n ))}\n
\n
\n
\n\n {/* 行动召唤 */}\n
\n
\n 准备好实现您的业务增长了吗?\n 加入我们的成功客户行列,开始您的电商增长之旅\n \n
\n
\n\n \n
\n );\n};\n\nexport default CaseStudy;", "__isJSFile": true, "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/CaseStudy.tsx" }, "5": { "path": "/auth", "layout": false, "id": "5", "absPath": "/auth" }, "6": { "path": "login", "file": "@/pages/Auth/LoginPage.tsx", "parentId": "5", "id": "6", "absPath": "/auth/login", "__content": "import React, { useState } from 'react';\nimport { useNavigate } from 'umi';\nimport {\n Card,\n Form,\n Input,\n Button,\n Checkbox,\n Space,\n Divider,\n Typography,\n Alert,\n message,\n Row,\n Col,\n Image,\n} from 'antd';\nimport {\n UserOutlined,\n LockOutlined,\n SafetyOutlined,\n EyeInvisibleOutlined,\n EyeTwoTone,\n LoginOutlined,\n GoogleOutlined,\n GithubOutlined,\n} from '@ant-design/icons';\n\nconst { Title, Text, Link } = Typography;\n\ninterface LoginFormValues {\n username: string;\n password: string;\n remember: boolean;\n captcha?: string;\n}\n\nexport const LoginPage: React.FC = () => {\n const [form] = Form.useForm();\n const [loading, setLoading] = useState(false);\n const [loginError, setLoginError] = useState(null);\n const [captchaCode, setCaptchaCode] = useState('');\n const navigate = useNavigate();\n\n const generateCaptcha = () => {\n const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';\n let result = '';\n for (let i = 0; i < 4; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n setCaptchaCode(result);\n };\n\n React.useEffect(() => {\n generateCaptcha();\n }, []);\n\n const handleLogin = async (values: LoginFormValues) => {\n setLoading(true);\n setLoginError(null);\n\n try {\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n if (values.captcha?.toUpperCase() !== captchaCode) {\n setLoginError('Invalid verification code');\n generateCaptcha();\n setLoading(false);\n return;\n }\n\n message.success('Login successful! Redirecting...');\n setTimeout(() => {\n navigate('/dashboard');\n }, 1000);\n } catch (error) {\n setLoginError('Login failed. Please check your credentials.');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n
\n \n \n
\n \n Crawlful Hub\n \n \n Your all-in-one cross-border e-commerce management platform\n \n \n
✓ Multi-platform integration
\n
✓ Automated operations
\n
✓ Real-time analytics
\n
✓ Compliance management
\n
\n
\n \n\n \n \n
\n Welcome Back\n Sign in to your account\n
\n\n {loginError && (\n setLoginError(null)}\n />\n )}\n\n \n \n }\n placeholder=\"Username or Email\"\n size=\"large\"\n />\n \n\n \n }\n placeholder=\"Password\"\n size=\"large\"\n iconRender={visible => (visible ? : )}\n />\n \n\n \n \n \n \n }\n placeholder=\"Verification Code\"\n size=\"large\"\n maxLength={4}\n />\n \n \n \n \n {captchaCode}\n
\n \n \n \n\n \n \n \n \n Remember me\n \n \n \n Forgot password?\n \n \n \n\n \n }\n >\n Sign In\n \n \n\n Or continue with\n\n \n \n \n \n\n
\n \n Don't have an account? Sign up\n \n
\n \n \n \n \n \n );\n};\n\nexport default LoginPage;\n", "__isJSFile": true, "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Auth/LoginPage.tsx" }, "7": { "path": "register", "file": "@/pages/Auth/RegisterPage.tsx", "parentId": "5", "id": "7", "absPath": "/auth/register", "__content": "import React, { useState } from 'react';\nimport {\n Card,\n Form,\n Input,\n Button,\n Checkbox,\n Space,\n Divider,\n Typography,\n Alert,\n message,\n Steps,\n Row,\n Col,\n Select,\n} from 'antd';\nimport {\n UserOutlined,\n LockOutlined,\n MailOutlined,\n SafetyOutlined,\n EyeInvisibleOutlined,\n EyeTwoTone,\n UserAddOutlined,\n CheckCircleOutlined,\n ArrowLeftOutlined,\n ArrowRightOutlined,\n BankOutlined,\n PhoneOutlined,\n} from '@ant-design/icons';\n\nconst { Title, Text, Link } = Typography;\nconst { Step } = Steps;\nconst { Option } = Select;\n\ninterface RegisterFormValues {\n username: string;\n email: string;\n password: string;\n confirmPassword: string;\n companyName: string;\n phone: string;\n businessType: string;\n agreeTerms: boolean;\n captcha: string;\n}\n\nexport const RegisterPage: React.FC = () => {\n const [form] = Form.useForm();\n const [currentStep, setCurrentStep] = useState(0);\n const [loading, setLoading] = useState(false);\n const [registerError, setRegisterError] = useState(null);\n const [captchaCode, setCaptchaCode] = useState('');\n const [registrationComplete, setRegistrationComplete] = useState(false);\n\n const generateCaptcha = () => {\n const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';\n let result = '';\n for (let i = 0; i < 4; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n setCaptchaCode(result);\n };\n\n React.useEffect(() => {\n generateCaptcha();\n }, []);\n\n const steps = [\n { title: 'Account', description: 'Basic info' },\n { title: 'Business', description: 'Company details' },\n { title: 'Verify', description: 'Confirmation' },\n ];\n\n const nextStep = async () => {\n try {\n if (currentStep === 0) {\n await form.validateFields(['username', 'email', 'password', 'confirmPassword']);\n } else if (currentStep === 1) {\n await form.validateFields(['companyName', 'phone', 'businessType']);\n }\n setCurrentStep(currentStep + 1);\n } catch (error) {\n // Validation failed\n }\n };\n\n const prevStep = () => {\n setCurrentStep(currentStep - 1);\n };\n\n const handleRegister = async (values: RegisterFormValues) => {\n setLoading(true);\n setRegisterError(null);\n\n try {\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n if (values.captcha?.toUpperCase() !== captchaCode) {\n setRegisterError('Invalid verification code');\n generateCaptcha();\n setLoading(false);\n return;\n }\n\n setRegistrationComplete(true);\n message.success('Registration successful!');\n } catch (error) {\n setRegisterError('Registration failed. Please try again.');\n } finally {\n setLoading(false);\n }\n };\n\n if (registrationComplete) {\n return (\n
\n \n \n Registration Complete!\n \n Your account has been created successfully. Please check your email to verify your account.\n \n \n \n
\n );\n }\n\n return (\n
\n \n
\n Create Account\n Join Crawlful Hub today\n
\n\n \n {steps.map(step => (\n \n ))}\n \n\n {registerError && (\n setRegisterError(null)}\n />\n )}\n\n \n {currentStep === 0 && (\n <>\n \n }\n placeholder=\"Username\"\n size=\"large\"\n />\n \n\n \n }\n placeholder=\"Email\"\n size=\"large\"\n />\n \n\n \n }\n placeholder=\"Password\"\n size=\"large\"\n iconRender={visible => (visible ? : )}\n />\n \n\n ({\n validator(_, value) {\n if (!value || getFieldValue('password') === value) {\n return Promise.resolve();\n }\n return Promise.reject(new Error('Passwords do not match'));\n },\n }),\n ]}\n >\n }\n placeholder=\"Confirm Password\"\n size=\"large\"\n iconRender={visible => (visible ? : )}\n />\n \n \n )}\n\n {currentStep === 1 && (\n <>\n \n }\n placeholder=\"Company Name\"\n size=\"large\"\n />\n \n\n \n }\n placeholder=\"Phone Number\"\n size=\"large\"\n />\n \n\n \n \n \n \n )}\n\n {currentStep === 2 && (\n <>\n \n \n \n }\n placeholder=\"Verification Code\"\n size=\"large\"\n maxLength={4}\n />\n \n \n \n {captchaCode}\n
\n \n \n \n\n \n value ? Promise.resolve() : Promise.reject(new Error('Please agree to terms')),\n },\n ]}\n >\n \n I agree to the Terms of Service and{' '}\n Privacy Policy\n \n \n \n )}\n\n \n \n \n {currentStep > 0 && (\n \n )}\n \n \n {currentStep < 2 ? (\n \n ) : (\n }\n >\n Create Account\n \n )}\n \n \n \n \n\n \n\n
\n \n Already have an account? Sign in\n \n
\n \n \n );\n};\n\nexport default RegisterPage;\n", "__isJSFile": true, "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Auth/RegisterPage.tsx" }, "8": { "path": "/dashboard", "layout": "@/layouts/index", "parentId": "@@/global-layout", "id": "8", "absPath": "/dashboard" }, "9": { "path": "", "file": "@/pages/OperationAgent.tsx", "parentId": "8", "id": "9", "absPath": "/dashboard", "__content": "import React, { useState, useEffect } from 'react';\nimport { Button, Table, Form, Input, Select, Modal, message, Card, Tabs, Space, Tag, Divider, Alert } from 'antd';\nimport { PlusOutlined, SyncOutlined, EditOutlined, DeleteOutlined, CheckOutlined, CloseOutlined, LoadingOutlined } from '@ant-design/icons';\nimport { operationAgentService, Store, StoreBindingData } from '../services/operationAgentService';\n\nconst { Option } = Select;\nconst { TabPane } = Tabs;\nconst { TextArea } = Input;\n\nconst platforms = [\n { value: 'amazon', label: 'Amazon' },\n { value: 'shopee', label: 'Shopee' },\n { value: 'aliexpress', label: 'AliExpress' },\n { value: 'tiktok', label: 'TikTok' },\n { value: 'ebay', label: 'Ebay' },\n { value: 'lazada', label: 'Lazada' },\n { value: 'wish', label: 'Wish' },\n { value: 'shein', label: 'Shein' },\n { value: 'jd_worldwide', label: 'JD Worldwide' },\n { value: 'walmart', label: 'Walmart' },\n { value: 'etsy', label: 'Etsy' },\n { value: 'target', label: 'Target' },\n { value: 'newegg', label: 'Newegg' },\n { value: 'cdiscount', label: 'Cdiscount' },\n { value: 'allegro', label: 'Allegro' },\n { value: 'otto', label: 'Otto' },\n { value: 'rakuten', label: 'Rakuten' },\n { value: 'qoo10', label: 'Qoo10' },\n];\n\nconst statusMap = {\n active: { color: 'green', text: '活跃' },\n inactive: { color: 'red', text: '停用' },\n pending: { color: 'orange', text: '待处理' },\n suspended: { color: 'gray', text: '暂停' },\n};\n\nconst OperationAgent: React.FC = () => {\n const [stores, setStores] = useState([]);\n const [loading, setLoading] = useState(false);\n const [bindingModalVisible, setBindingModalVisible] = useState(false);\n const [currentStore, setCurrentStore] = useState(null);\n const [merchantId, setMerchantId] = useState('merchant-1'); // 默认商户ID\n const [form] = Form.useForm();\n\n // 加载店铺列表\n const loadStores = async () => {\n setLoading(true);\n try {\n const data = await operationAgentService.getStores(merchantId);\n setStores(data);\n } catch (error) {\n message.error('加载店铺失败');\n console.error(error);\n } finally {\n setLoading(false);\n }\n };\n\n // 初始加载\n useEffect(() => {\n loadStores();\n }, [merchantId]);\n\n // 绑定店铺\n const handleBindStore = async (values: any) => {\n setLoading(true);\n try {\n const bindingData: StoreBindingData = {\n merchantId: values.merchantId,\n platform: values.platform,\n platformShopId: values.platformShopId,\n name: values.name,\n description: values.description,\n authInfo: {\n ...(values.platform === 'amazon' && {\n accessKey: values.accessKey,\n secretKey: values.secretKey,\n sellerId: values.sellerId,\n marketplaceId: values.marketplaceId,\n }),\n ...(values.platform === 'shopee' && {\n partnerId: values.partnerId,\n partnerKey: values.partnerKey,\n shopId: values.shopId,\n }),\n ...(values.platform === 'aliexpress' && {\n appKey: values.appKey,\n appSecret: values.appSecret,\n accessToken: values.accessToken,\n }),\n ...(values.platform === 'tiktok' && {\n appId: values.appId,\n appSecret: values.appSecret,\n accessToken: values.accessToken,\n }),\n ...(values.platform === 'ebay' && {\n clientId: values.clientId,\n clientSecret: values.clientSecret,\n refreshToken: values.refreshToken,\n }),\n ...(values.platform && !['amazon', 'shopee', 'aliexpress', 'tiktok', 'ebay'].includes(values.platform) && {\n apiKey: values.apiKey,\n apiSecret: values.apiSecret,\n }),\n },\n };\n\n await operationAgentService.bindStore(bindingData);\n message.success('店铺绑定成功');\n setBindingModalVisible(false);\n form.resetFields();\n loadStores();\n } catch (error) {\n message.error('店铺绑定失败');\n console.error(error);\n } finally {\n setLoading(false);\n }\n };\n\n // 同步商品\n const handleSyncProducts = async (storeId: string) => {\n setLoading(true);\n try {\n const result = await operationAgentService.syncProducts(storeId);\n if (result.success) {\n message.success(`商品同步成功,共 ${result.count} 个商品`);\n } else {\n message.error('商品同步失败');\n }\n } catch (error) {\n message.error('商品同步失败');\n console.error(error);\n } finally {\n setLoading(false);\n }\n };\n\n // 同步订单\n const handleSyncOrders = async (storeId: string) => {\n setLoading(true);\n try {\n const result = await operationAgentService.syncOrders(storeId);\n if (result.success) {\n message.success(`订单同步成功,共 ${result.count} 个订单`);\n } else {\n message.error('订单同步失败');\n }\n } catch (error) {\n message.error('订单同步失败');\n console.error(error);\n } finally {\n setLoading(false);\n }\n };\n\n // 停用店铺\n const handleDeactivateStore = async (storeId: string) => {\n setLoading(true);\n try {\n await operationAgentService.deactivateStore(storeId);\n message.success('店铺已停用');\n loadStores();\n } catch (error) {\n message.error('停用店铺失败');\n console.error(error);\n } finally {\n setLoading(false);\n }\n };\n\n // 重新激活店铺\n const handleReactivateStore = async (storeId: string) => {\n setLoading(true);\n try {\n await operationAgentService.reactivateStore(storeId);\n message.success('店铺已重新激活');\n loadStores();\n } catch (error) {\n message.error('激活店铺失败');\n console.error(error);\n } finally {\n setLoading(false);\n }\n };\n\n // 查看店铺详情\n const handleViewStore = async (storeId: string) => {\n setLoading(true);\n try {\n const store = await operationAgentService.getStore(storeId);\n setCurrentStore(store);\n } catch (error) {\n message.error('获取店铺详情失败');\n console.error(error);\n } finally {\n setLoading(false);\n }\n };\n\n // 渲染平台特定的授权信息表单\n const renderAuthInfoForm = (platform: string) => {\n switch (platform) {\n case 'amazon':\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n case 'shopee':\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n );\n case 'aliexpress':\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n );\n case 'tiktok':\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n );\n case 'ebay':\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n );\n default:\n return (\n <>\n \n \n \n \n \n \n \n );\n }\n };\n\n return (\n
\n } onClick={() => setBindingModalVisible(true)}>绑定店铺}>\n \n\n
setMerchantId(values.merchantId)} style={{ marginBottom: '20px' }}>\n \n \n \n \n \n \n
\n\n {\n const platformInfo = platforms.find(p => p.value === platform);\n return platformInfo ? platformInfo.label : platform;\n },\n },\n {\n title: '平台店铺ID',\n dataIndex: 'platformShopId',\n key: 'platformShopId',\n },\n {\n title: '状态',\n dataIndex: 'status',\n key: 'status',\n render: (status: string) => {\n const statusInfo = statusMap[status as keyof typeof statusMap];\n return statusInfo ? (\n {statusInfo.text}\n ) : (\n {status}\n );\n },\n },\n {\n title: '创建时间',\n dataIndex: 'created_at',\n key: 'created_at',\n },\n {\n title: '操作',\n key: 'action',\n render: (_: any, record: Store) => (\n \n \n \n {record.status === 'active' ? (\n \n ) : (\n \n )}\n \n ),\n },\n ]}\n />\n
\n\n {/* 绑定店铺模态框 */}\n setBindingModalVisible(false)}\n footer={null}\n >\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n