{
  "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",
      "test": "jest",
      "test:watch": "jest --watch",
      "test:coverage": "jest --coverage",
      "test:services": "jest src/services/__tests__",
      "test:product": "jest src/services/__tests__/productManagementDataSource.test.ts",
      "test:order": "jest src/services/__tests__/orderManagementDataSource.test.ts"
    },
    "dependencies": {
      "@ant-design/charts": "^2.6.7",
      "@ant-design/icons": "^5.6.1",
      "@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": {
      "@testing-library/jest-dom": "^6.9.1",
      "@testing-library/react": "^16.3.2",
      "@testing-library/user-event": "^14.6.1",
      "@types/jest": "^30.0.0",
      "@types/react": "^18.2.0",
      "@types/react-dom": "^18.2.0",
      "babel-jest": "^29.7.0",
      "jest": "^30.3.0",
      "jest-environment-jsdom": "^30.3.0",
      "msw": "^2.12.13",
      "ts-jest": "^29.4.6",
      "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": 2
      },
      "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": 30
      },
      "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": [
            52
          ]
        },
        "register": 7
      },
      "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,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "register": 1
      },
      "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": {
          "onDevCompileDone": [
            70,
            17,
            63,
            8,
            13,
            13,
            6,
            9,
            9,
            9,
            9,
            8,
            5,
            7,
            5,
            13,
            36,
            6,
            11,
            4,
            13,
            13,
            6,
            17,
            9,
            16,
            5,
            8,
            4,
            3,
            12,
            15,
            7,
            9
          ]
        },
        "register": 2
      },
      "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": [
            95
          ],
          "onGenerateFiles": [
            51,
            35,
            51,
            31,
            49,
            89,
            57,
            68,
            37,
            61,
            64,
            85,
            36,
            76,
            59,
            85,
            41,
            51,
            67,
            45,
            54,
            41,
            290,
            62,
            63,
            53,
            72,
            71,
            90,
            42,
            56,
            42,
            69,
            36,
            36,
            68,
            77,
            37,
            38,
            44,
            52,
            62,
            63,
            42,
            108,
            68,
            66,
            40,
            62,
            55,
            111,
            50,
            59,
            85,
            78,
            92,
            53,
            212,
            81,
            48,
            95,
            82,
            100,
            80,
            58,
            73,
            64,
            66,
            45,
            83,
            63,
            52,
            56,
            43
          ]
        },
        "register": 44
      },
      "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": {
          "addEntryCode": [
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "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,
            0
          ],
          "onCheck": [
            0
          ],
          "onPrepareBuildSuccess": [
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0
          ],
          "onCheckCode": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "register": 2
      },
      "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": [
            0
          ]
        },
        "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,
            0
          ]
        },
        "register": 14
      },
      "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": 0
      },
      "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": {
          "addBeforeMiddlewares": [
            14
          ]
        },
        "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": 217
      },
      "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": 113
      },
      "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": 34
      },
      "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": [
            1
          ],
          "addBeforeMiddlewares": [
            0
          ],
          "modifyHTMLFavicon": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            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": {
          "onGenerateFiles": [
            7,
            1,
            2,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            4,
            1,
            0,
            3,
            1,
            1,
            2,
            1,
            5,
            1,
            2,
            6,
            1,
            1,
            1,
            3,
            3,
            2,
            4,
            1,
            2,
            1,
            2,
            1,
            3,
            1,
            1,
            1,
            3,
            4,
            1,
            2,
            2,
            2,
            1,
            1,
            1,
            1,
            2,
            1,
            1,
            0,
            10,
            4,
            2,
            3,
            1,
            1,
            2,
            1,
            2,
            5,
            1,
            1,
            1,
            4,
            1,
            1,
            7,
            4,
            1,
            1,
            1
          ],
          "addRuntimePlugin": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "register": 2
      },
      "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": 2
      },
      "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": {
          "onStart": [
            6
          ],
          "addBeforeMiddlewares": [
            3
          ]
        },
        "register": 51
      }
    },
    "./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": 6
      },
      "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": {
          "onGenerateFiles": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "addEntryImports": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "register": 0
      },
      "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": [
            2,
            0
          ],
          "onGenerateFiles": [
            277,
            47,
            106,
            41,
            81,
            121,
            64,
            63,
            54,
            61,
            46,
            68,
            36,
            72,
            68,
            34,
            61,
            60,
            39,
            54,
            65,
            65,
            171,
            46,
            44,
            45,
            60,
            73,
            33,
            45,
            34,
            54,
            37,
            32,
            42,
            51,
            48,
            44,
            26,
            84,
            36,
            67,
            62,
            43,
            36,
            130,
            50,
            40,
            45,
            41,
            52,
            37,
            27,
            60,
            46,
            68,
            52,
            150,
            50,
            52,
            50,
            89,
            39,
            51,
            77,
            38,
            55,
            39,
            35,
            33,
            52,
            48,
            42,
            52
          ],
          "addPolyfillImports": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "register": 12
      }
    },
    "./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": {
          "addPolyfillImports": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "register": 3
      },
      "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": {
          "onGenerateFiles": [
            597,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "register": 4
      },
      "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": 0
      },
      "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": {
          "onGenerateFiles": [
            0,
            1,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            1,
            1,
            0,
            1,
            1,
            0,
            0,
            1,
            28,
            0,
            0,
            1,
            1,
            0,
            5,
            0,
            0,
            0,
            0,
            1,
            1,
            0,
            1,
            2,
            0,
            0,
            1,
            1,
            1,
            1,
            1,
            6,
            0,
            1,
            1,
            0,
            1,
            1,
            1,
            0,
            0,
            1,
            1,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            0,
            0,
            1,
            0,
            1,
            1
          ],
          "addBeforeMiddlewares": [
            0
          ]
        },
        "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": {
          "onGenerateFiles": [
            37,
            9,
            123,
            2,
            96,
            3,
            112,
            2,
            101,
            18,
            176,
            10,
            97,
            6,
            97,
            4,
            110,
            2,
            122,
            5,
            302,
            3,
            147,
            2,
            93,
            2,
            206,
            1,
            118,
            3,
            96,
            2,
            100,
            2,
            191,
            18,
            125,
            2,
            106,
            3,
            105,
            1,
            246,
            1,
            372,
            1,
            171,
            2,
            110,
            2,
            80,
            1,
            151,
            2,
            110,
            2,
            115,
            2,
            79,
            1,
            84,
            3,
            89,
            2,
            83,
            2,
            74,
            1,
            163,
            23,
            160,
            1,
            77,
            2,
            106,
            2,
            53,
            1,
            113,
            2,
            71,
            2,
            83,
            2,
            104,
            2,
            106,
            2,
            92,
            2,
            163,
            2,
            86,
            2,
            67,
            1,
            325,
            2,
            67,
            1,
            209,
            2,
            77,
            11,
            126,
            3,
            59,
            2,
            122,
            3,
            137,
            2,
            124,
            5,
            203,
            3,
            87,
            2,
            86,
            1,
            73,
            2,
            131,
            1,
            128,
            1,
            109,
            3,
            84,
            1,
            109,
            2,
            211,
            2,
            119,
            1,
            85,
            1,
            99,
            1,
            118,
            2,
            103,
            2,
            138,
            1,
            104,
            1
          ]
        },
        "register": 13
      },
      "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": 4
      },
      "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": 13
      },
      "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": {
          "onGenerateFiles": [
            1435,
            20,
            31,
            138,
            49,
            96,
            21,
            24,
            12,
            14,
            19,
            39,
            25,
            12,
            17,
            20,
            20,
            57,
            13,
            21,
            17,
            12,
            147,
            23,
            16,
            12,
            26,
            14,
            13,
            9,
            10,
            20,
            12,
            8,
            15,
            11,
            14,
            11,
            7,
            18,
            12,
            18,
            16,
            22,
            7,
            43,
            12,
            8,
            42,
            8,
            26,
            11,
            22,
            7,
            12,
            29,
            18,
            51,
            39,
            20,
            10,
            19,
            40,
            27,
            17,
            13,
            17,
            11,
            14,
            9,
            26,
            20,
            10,
            10
          ]
        },
        "register": 9
      },
      "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": {
          "addBeforeBabelPresets": [
            1
          ]
        },
        "register": 8
      },
      "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": 2
      },
      "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": 11
      }
    },
    "./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": 53
      },
      "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": {
          "onGenerateFiles": [
            10,
            1,
            1,
            1,
            2,
            5,
            2,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            2,
            2,
            1,
            1,
            1,
            2,
            2,
            1,
            2,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            2,
            2,
            1,
            1,
            1,
            1,
            4,
            1,
            1,
            1,
            0,
            1,
            3,
            0,
            4,
            0,
            1,
            2,
            1,
            0,
            6,
            3,
            2,
            4,
            0,
            1,
            1,
            2,
            2,
            1,
            1,
            1,
            1,
            1,
            0,
            0,
            1,
            1,
            1,
            1
          ]
        },
        "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": 1
      },
      "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": 3
      },
      "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": 1
      }
    },
    "./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": 2
      },
      "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": 7
      }
    },
    "./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": {
          "addHTMLHeadScripts": [
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "register": 48
      }
    },
    "./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": 2
      },
      "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": {
          "modifyUniBundler": [
            2282
          ]
        },
        "register": 4
      },
      "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": 85
      },
      "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": {
          "modifyAppData": [
            33
          ]
        },
        "register": 100
      }
    },
    "./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": 1
      },
      "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": 4
      },
      "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": 2
      },
      "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": 2
      },
      "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": 1
      },
      "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": 1
      },
      "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": 1
      },
      "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": 4
      },
      "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": 1
      },
      "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": 2
      },
      "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": 1
      },
      "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": 1
      },
      "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": 1
      },
      "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": 44
      },
      "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": 3
      },
      "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": "dev",
  "args": {
    "_": []
  },
  "userConfig": {
    "define": {
      "process.env.REACT_APP_USE_MOCK": "false",
      "process.env.REACT_APP_API_BASE_URL": "http://localhost:3001",
      "process.env.REACT_APP_REDUX_DEVTOOLS": "true",
      "process.env.REACT_APP_MSW_DEBUG": "true"
    },
    "routes": [
      {
        "path": "/",
        "component": "@/pages/Auth/LoginPage",
        "exact": true
      },
      {
        "path": "/home",
        "component": "@/pages/Homepage",
        "exact": true
      },
      {
        "path": "/test-route",
        "component": "@/pages/TestRoute"
      },
      {
        "path": "/dashboard",
        "component": "@/layouts/index",
        "routes": [
          {
            "path": "/dashboard",
            "component": "@/pages/DashboardPage"
          },
          {
            "path": "/dashboard/ai-action-task-manager",
            "component": "@/pages/AIActionTaskManager"
          },
          {
            "path": "/dashboard/ai-suggestion",
            "component": "@/pages/AISuggestionPage"
          },
          {
            "path": "/dashboard/human-approval",
            "component": "@/pages/HumanApprovalPage"
          },
          {
            "path": "/dashboard/client-management",
            "component": "@/pages/ClientManagement"
          },
          {
            "path": "/dashboard/execution-results",
            "component": "@/pages/ExecutionResults"
          },
          {
            "path": "/dashboard/ai-decision-log",
            "component": "@/pages/AIDecisionLog/index"
          },
          {
            "path": "/dashboard/strategy-marketplace",
            "component": "@/pages/StrategyMarketplace/index"
          },
          {
            "path": "/dashboard/auto-product-selection",
            "component": "@/pages/AutoProductSelection/index"
          },
          {
            "path": "/dashboard/auto-execution",
            "component": "@/pages/AutoExecution/index"
          },
          {
            "path": "/dashboard/operation-agent",
            "component": "@/pages/OperationAgentEnhanced"
          },
          {
            "path": "/dashboard/operation-agent-enhanced",
            "component": "@/pages/OperationAgentEnhanced"
          },
          {
            "path": "/dashboard/auto-pilot",
            "component": "@/pages/AutoPilot/index"
          },
          {
            "path": "/dashboard/task-center",
            "component": "@/pages/TaskCenter/index"
          },
          {
            "path": "/dashboard/product",
            "component": "@/pages/Product/index"
          },
          {
            "path": "/dashboard/product/publish",
            "component": "@/pages/Product/ProductPublishForm"
          },
          {
            "path": "/dashboard/product/ai-pricing",
            "component": "@/pages/Product/AIPricing/index"
          },
          {
            "path": "/dashboard/product/profit-monitor",
            "component": "@/pages/Product/ProfitMonitor/index"
          },
          {
            "path": "/dashboard/inventory",
            "component": "@/pages/Inventory/index"
          },
          {
            "path": "/dashboard/inventory/warehouses",
            "component": "@/pages/Inventory/Warehouses"
          },
          {
            "path": "/dashboard/orders",
            "component": "@/pages/Orders/index"
          },
          {
            "path": "/dashboard/orders/exception",
            "component": "@/pages/Orders/ExceptionOrder"
          },
          {
            "path": "/dashboard/after-sales",
            "component": "@/pages/AfterSales/index"
          },
          {
            "path": "/dashboard/after-sales/refund",
            "component": "@/pages/AfterSales/RefundProcess"
          },
          {
            "path": "/dashboard/logistics",
            "component": "@/pages/Logistics/index"
          },
          {
            "path": "/dashboard/logistics/freight-calc",
            "component": "@/pages/Logistics/FreightCalc"
          },
          {
            "path": "/dashboard/finance",
            "component": "@/pages/Finance/index"
          },
          {
            "path": "/dashboard/finance/transactions",
            "component": "@/pages/Finance/Transactions"
          },
          {
            "path": "/dashboard/finance/reconciliation",
            "component": "@/pages/Finance/Reconciliation"
          },
          {
            "path": "/dashboard/user-asset",
            "component": "@/pages/UserAsset/UserAssets"
          },
          {
            "path": "/dashboard/ad",
            "component": "@/pages/Ad/index"
          },
          {
            "path": "/dashboard/marketing/competitors",
            "component": "@/pages/Marketing/Competitors"
          },
          {
            "path": "/dashboard/dynamic-pricing",
            "component": "@/pages/DynamicPricing/index"
          },
          {
            "path": "/dashboard/ab-test",
            "component": "@/pages/ABTest/ABTestConfig"
          },
          {
            "path": "/dashboard/analytics",
            "component": "@/pages/Analytics/index"
          },
          {
            "path": "/dashboard/reports",
            "component": "@/pages/Reports/index"
          },
          {
            "path": "/dashboard/multi-shop-report",
            "component": "@/pages/MultiShopReport/index"
          },
          {
            "path": "/dashboard/leaderboard",
            "component": "@/pages/Leaderboard/index"
          },
          {
            "path": "/dashboard/merchant",
            "component": "@/pages/Merchant/index"
          },
          {
            "path": "/dashboard/b2b",
            "component": "@/pages/B2B/index"
          },
          {
            "path": "/dashboard/b2b/batch-order",
            "component": "@/pages/B2B/BatchOrder"
          },
          {
            "path": "/dashboard/b2b/enterprise-quote",
            "component": "@/pages/B2B/EnterpriseQuote"
          },
          {
            "path": "/dashboard/b2b/contract-manage",
            "component": "@/pages/B2B/ContractManage"
          },
          {
            "path": "/dashboard/procurement",
            "component": "@/pages/Procurement/index"
          },
          {
            "path": "/dashboard/suppliers",
            "component": "@/pages/Suppliers/index"
          },
          {
            "path": "/dashboard/warehouse",
            "component": "@/pages/Warehouse/index"
          },
          {
            "path": "/dashboard/independent-site",
            "component": "@/pages/IndependentSite/index"
          },
          {
            "path": "/dashboard/independent-site/create",
            "component": "@/pages/IndependentSite/IndependentSiteCreate"
          },
          {
            "path": "/dashboard/independent-site/templates",
            "component": "@/pages/IndependentSite/SiteTemplates"
          },
          {
            "path": "/dashboard/independent-site/analytics",
            "component": "@/pages/IndependentSite/IndependentSiteAnalytics"
          },
          {
            "path": "/dashboard/independent-site/orders",
            "component": "@/pages/IndependentSite/IndependentSiteOrder"
          },
          {
            "path": "/dashboard/independent-site/products",
            "component": "@/pages/IndependentSite/IndependentSiteProduct"
          },
          {
            "path": "/dashboard/independent-site/domains",
            "component": "@/pages/IndependentSite/DomainManagement"
          },
          {
            "path": "/dashboard/blacklist",
            "component": "@/pages/Blacklist/index"
          },
          {
            "path": "/dashboard/compliance",
            "component": "@/pages/Compliance/index"
          },
          {
            "path": "/dashboard/audit",
            "component": "@/pages/Audit/index"
          },
          {
            "path": "/dashboard/operation-logs",
            "component": "@/pages/OperationLogs/index"
          },
          {
            "path": "/dashboard/governance",
            "component": "@/pages/Governance/index"
          },
          {
            "path": "/dashboard/sovereignty",
            "component": "@/pages/Sovereignty/index"
          },
          {
            "path": "/dashboard/compliance/certificates",
            "component": "@/pages/Compliance/CertificateManage"
          },
          {
            "path": "/dashboard/settings",
            "component": "@/pages/Settings/index"
          },
          {
            "path": "/dashboard/settings/platform-auth",
            "component": "@/pages/Settings/PlatformAuth"
          },
          {
            "path": "/dashboard/settings/service-manager",
            "component": "@/pages/Settings/ServiceManager"
          },
          {
            "path": "/dashboard/user",
            "component": "@/pages/User/index"
          },
          {
            "path": "/dashboard/role",
            "component": "@/pages/Role/index"
          }
        ]
      },
      {
        "path": "/auth/login",
        "component": "@/pages/Auth/LoginPage"
      },
      {
        "path": "/auth/register",
        "component": "@/pages/Auth/RegisterPage"
      },
      {
        "path": "/auth/reset-password",
        "component": "@/pages/Auth/ResetPasswordPage"
      }
    ],
    "fastRefresh": true,
    "esbuildMinifyIIFE": 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"
    },
    "define": {
      "process.env.REACT_APP_USE_MOCK": "false",
      "process.env.REACT_APP_API_BASE_URL": "http://localhost:3001",
      "process.env.REACT_APP_REDUX_DEVTOOLS": "true",
      "process.env.REACT_APP_MSW_DEBUG": "true"
    },
    "routes": [
      {
        "path": "/",
        "component": "@/pages/Auth/LoginPage",
        "exact": true
      },
      {
        "path": "/home",
        "component": "@/pages/Homepage",
        "exact": true
      },
      {
        "path": "/test-route",
        "component": "@/pages/TestRoute"
      },
      {
        "path": "/dashboard",
        "component": "@/layouts/index",
        "routes": [
          {
            "path": "/dashboard",
            "component": "@/pages/DashboardPage"
          },
          {
            "path": "/dashboard/ai-action-task-manager",
            "component": "@/pages/AIActionTaskManager"
          },
          {
            "path": "/dashboard/ai-suggestion",
            "component": "@/pages/AISuggestionPage"
          },
          {
            "path": "/dashboard/human-approval",
            "component": "@/pages/HumanApprovalPage"
          },
          {
            "path": "/dashboard/client-management",
            "component": "@/pages/ClientManagement"
          },
          {
            "path": "/dashboard/execution-results",
            "component": "@/pages/ExecutionResults"
          },
          {
            "path": "/dashboard/ai-decision-log",
            "component": "@/pages/AIDecisionLog/index"
          },
          {
            "path": "/dashboard/strategy-marketplace",
            "component": "@/pages/StrategyMarketplace/index"
          },
          {
            "path": "/dashboard/auto-product-selection",
            "component": "@/pages/AutoProductSelection/index"
          },
          {
            "path": "/dashboard/auto-execution",
            "component": "@/pages/AutoExecution/index"
          },
          {
            "path": "/dashboard/operation-agent",
            "component": "@/pages/OperationAgentEnhanced"
          },
          {
            "path": "/dashboard/operation-agent-enhanced",
            "component": "@/pages/OperationAgentEnhanced"
          },
          {
            "path": "/dashboard/auto-pilot",
            "component": "@/pages/AutoPilot/index"
          },
          {
            "path": "/dashboard/task-center",
            "component": "@/pages/TaskCenter/index"
          },
          {
            "path": "/dashboard/product",
            "component": "@/pages/Product/index"
          },
          {
            "path": "/dashboard/product/publish",
            "component": "@/pages/Product/ProductPublishForm"
          },
          {
            "path": "/dashboard/product/ai-pricing",
            "component": "@/pages/Product/AIPricing/index"
          },
          {
            "path": "/dashboard/product/profit-monitor",
            "component": "@/pages/Product/ProfitMonitor/index"
          },
          {
            "path": "/dashboard/inventory",
            "component": "@/pages/Inventory/index"
          },
          {
            "path": "/dashboard/inventory/warehouses",
            "component": "@/pages/Inventory/Warehouses"
          },
          {
            "path": "/dashboard/orders",
            "component": "@/pages/Orders/index"
          },
          {
            "path": "/dashboard/orders/exception",
            "component": "@/pages/Orders/ExceptionOrder"
          },
          {
            "path": "/dashboard/after-sales",
            "component": "@/pages/AfterSales/index"
          },
          {
            "path": "/dashboard/after-sales/refund",
            "component": "@/pages/AfterSales/RefundProcess"
          },
          {
            "path": "/dashboard/logistics",
            "component": "@/pages/Logistics/index"
          },
          {
            "path": "/dashboard/logistics/freight-calc",
            "component": "@/pages/Logistics/FreightCalc"
          },
          {
            "path": "/dashboard/finance",
            "component": "@/pages/Finance/index"
          },
          {
            "path": "/dashboard/finance/transactions",
            "component": "@/pages/Finance/Transactions"
          },
          {
            "path": "/dashboard/finance/reconciliation",
            "component": "@/pages/Finance/Reconciliation"
          },
          {
            "path": "/dashboard/user-asset",
            "component": "@/pages/UserAsset/UserAssets"
          },
          {
            "path": "/dashboard/ad",
            "component": "@/pages/Ad/index"
          },
          {
            "path": "/dashboard/marketing/competitors",
            "component": "@/pages/Marketing/Competitors"
          },
          {
            "path": "/dashboard/dynamic-pricing",
            "component": "@/pages/DynamicPricing/index"
          },
          {
            "path": "/dashboard/ab-test",
            "component": "@/pages/ABTest/ABTestConfig"
          },
          {
            "path": "/dashboard/analytics",
            "component": "@/pages/Analytics/index"
          },
          {
            "path": "/dashboard/reports",
            "component": "@/pages/Reports/index"
          },
          {
            "path": "/dashboard/multi-shop-report",
            "component": "@/pages/MultiShopReport/index"
          },
          {
            "path": "/dashboard/leaderboard",
            "component": "@/pages/Leaderboard/index"
          },
          {
            "path": "/dashboard/merchant",
            "component": "@/pages/Merchant/index"
          },
          {
            "path": "/dashboard/b2b",
            "component": "@/pages/B2B/index"
          },
          {
            "path": "/dashboard/b2b/batch-order",
            "component": "@/pages/B2B/BatchOrder"
          },
          {
            "path": "/dashboard/b2b/enterprise-quote",
            "component": "@/pages/B2B/EnterpriseQuote"
          },
          {
            "path": "/dashboard/b2b/contract-manage",
            "component": "@/pages/B2B/ContractManage"
          },
          {
            "path": "/dashboard/procurement",
            "component": "@/pages/Procurement/index"
          },
          {
            "path": "/dashboard/suppliers",
            "component": "@/pages/Suppliers/index"
          },
          {
            "path": "/dashboard/warehouse",
            "component": "@/pages/Warehouse/index"
          },
          {
            "path": "/dashboard/independent-site",
            "component": "@/pages/IndependentSite/index"
          },
          {
            "path": "/dashboard/independent-site/create",
            "component": "@/pages/IndependentSite/IndependentSiteCreate"
          },
          {
            "path": "/dashboard/independent-site/templates",
            "component": "@/pages/IndependentSite/SiteTemplates"
          },
          {
            "path": "/dashboard/independent-site/analytics",
            "component": "@/pages/IndependentSite/IndependentSiteAnalytics"
          },
          {
            "path": "/dashboard/independent-site/orders",
            "component": "@/pages/IndependentSite/IndependentSiteOrder"
          },
          {
            "path": "/dashboard/independent-site/products",
            "component": "@/pages/IndependentSite/IndependentSiteProduct"
          },
          {
            "path": "/dashboard/independent-site/domains",
            "component": "@/pages/IndependentSite/DomainManagement"
          },
          {
            "path": "/dashboard/blacklist",
            "component": "@/pages/Blacklist/index"
          },
          {
            "path": "/dashboard/compliance",
            "component": "@/pages/Compliance/index"
          },
          {
            "path": "/dashboard/audit",
            "component": "@/pages/Audit/index"
          },
          {
            "path": "/dashboard/operation-logs",
            "component": "@/pages/OperationLogs/index"
          },
          {
            "path": "/dashboard/governance",
            "component": "@/pages/Governance/index"
          },
          {
            "path": "/dashboard/sovereignty",
            "component": "@/pages/Sovereignty/index"
          },
          {
            "path": "/dashboard/compliance/certificates",
            "component": "@/pages/Compliance/CertificateManage"
          },
          {
            "path": "/dashboard/settings",
            "component": "@/pages/Settings/index"
          },
          {
            "path": "/dashboard/settings/platform-auth",
            "component": "@/pages/Settings/PlatformAuth"
          },
          {
            "path": "/dashboard/settings/service-manager",
            "component": "@/pages/Settings/ServiceManager"
          },
          {
            "path": "/dashboard/user",
            "component": "@/pages/User/index"
          },
          {
            "path": "/dashboard/role",
            "component": "@/pages/Role/index"
          }
        ]
      },
      {
        "path": "/auth/login",
        "component": "@/pages/Auth/LoginPage"
      },
      {
        "path": "/auth/register",
        "component": "@/pages/Auth/RegisterPage"
      },
      {
        "path": "/auth/reset-password",
        "component": "@/pages/Auth/ResetPasswordPage"
      }
    ],
    "fastRefresh": true,
    "esbuildMinifyIIFE": true,
    "targets": {
      "chrome": 80
    }
  },
  "routes": {
    "1": {
      "path": "/",
      "exact": true,
      "file": "@/pages/Auth/LoginPage.tsx",
      "parentId": "@@/global-layout",
      "id": "1",
      "absPath": "/",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Form,\r\n  Input,\r\n  Button,\r\n  Checkbox,\r\n  Space,\r\n  Divider,\r\n  Typography,\r\n  Alert,\r\n  message,\r\n  Row,\r\n  Col,\r\n  UserOutlined,\r\n  LockOutlined,\r\n  SafetyOutlined,\r\n  EyeInvisibleOutlined,\r\n  EyeTwoTone,\r\n  LoginOutlined,\r\n  GoogleOutlined,\r\n  GithubOutlined,\r\n  Title,\r\n  Text,\r\n  Link,\r\n  useNavigate,\r\n  FC,\r\n} from '@/imports';\r\nimport { useLocale } from '@/contexts/LocaleContext';\r\n\r\ninterface LoginFormValues {\r\n  username: string;\r\n  password: string;\r\n  remember: boolean;\r\n  captcha?: string;\r\n}\r\n\r\nconst LoginPage: FC = () => {\r\n  const [form] = Form.useForm();\r\n  const [loading, setLoading] = useState(false);\r\n  const [loginError, setLoginError] = useState<string | null>(null);\r\n  const [captchaCode, setCaptchaCode] = useState('');\r\n  const navigate = useNavigate();\r\n  const { t } = useLocale();\r\n\r\n  const generateCaptcha = () => {\r\n    const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';\r\n    let result = '';\r\n    for (let i = 0; i < 4; i++) {\r\n      result += chars.charAt(Math.floor(Math.random() * chars.length));\r\n    }\r\n    setCaptchaCode(result);\r\n  };\r\n\r\n  useEffect(() => {\r\n    generateCaptcha();\r\n  }, []);\r\n\r\n  const handleLogin = async (values: LoginFormValues) => {\r\n    setLoading(true);\r\n    setLoginError(null);\r\n\r\n    try {\r\n      if (values.captcha?.toUpperCase() !== captchaCode) {\r\n        setLoginError(t('login.invalidCaptcha'));\r\n        generateCaptcha();\r\n        setLoading(false);\r\n        return;\r\n      }\r\n\r\n      const response = await fetch('http://localhost:3001/api/v1/auth/login', {\r\n        method: 'POST',\r\n        headers: {\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n          username: values.username,\r\n          password: values.password,\r\n        }),\r\n      });\r\n\r\n      const result = await response.json();\r\n\r\n      if (!result.success) {\r\n        setLoginError(result.error || t('login.loginFailed'));\r\n        generateCaptcha();\r\n        setLoading(false);\r\n        return;\r\n      }\r\n\r\n      localStorage.setItem('token', result.data.token);\r\n      localStorage.setItem('refreshToken', result.data.refreshToken);\r\n      localStorage.setItem('userId', result.data.user.id);\r\n      localStorage.setItem('username', result.data.user.username);\r\n      localStorage.setItem('roleCode', result.data.user.role);\r\n      localStorage.setItem('tenantId', result.data.user.tenantId);\r\n      localStorage.setItem('shopId', result.data.user.shopId);\r\n\r\n      message.success(t('login.loginSuccess'));\r\n      setTimeout(() => {\r\n        navigate('/dashboard');\r\n      }, 1000);\r\n    } catch (error) {\r\n      console.error('Login error:', error);\r\n      setLoginError(t('login.loginFailed'));\r\n      generateCaptcha();\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div style={{\r\n      minHeight: '100vh',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n      padding: 24,\r\n    }}>\r\n      <Row gutter={[48, 0]} align=\"middle\" style={{ maxWidth: 1000, width: '100%' }}>\r\n        <Col xs={0} md={12}>\r\n          <div style={{ color: 'white', paddingRight: 48 }}>\r\n            <Title level={1} style={{ color: 'white', marginBottom: 24 }}>\r\n              {t('app.name')}\r\n            </Title>\r\n            <Text style={{ color: 'rgba(255,255,255,0.9)', fontSize: 18, display: 'block', marginBottom: 32 }}>\r\n              {t('app.title')}\r\n            </Text>\r\n            <Space direction=\"vertical\" size=\"large\" style={{ color: 'rgba(255,255,255,0.8)' }}>\r\n              <div>✓ {t('nav.products')}</div>\r\n              <div>✓ {t('nav.orders')}</div>\r\n              <div>✓ {t('nav.analytics')}</div>\r\n              <div>✓ {t('nav.finance')}</div>\r\n            </Space>\r\n          </div>\r\n        </Col>\r\n\r\n        <Col xs={24} md={12}>\r\n          <Card\r\n            style={{\r\n              borderRadius: 16,\r\n              boxShadow: '0 20px 60px rgba(0,0,0,0.3)',\r\n            }}\r\n            bodyStyle={{ padding: 40 }}\r\n          >\r\n            <div style={{ textAlign: 'center', marginBottom: 32 }}>\r\n              <Title level={3}>\r\n                {t('login.title')}\r\n              </Title>\r\n              <Text type=\"secondary\">\r\n                {t('login.subtitle')}\r\n              </Text>\r\n            </div>\r\n\r\n            {loginError && (\r\n              <Alert\r\n                message={loginError}\r\n                type=\"error\"\r\n                showIcon\r\n                style={{ marginBottom: 24 }}\r\n                closable\r\n                onClose={() => setLoginError(null)}\r\n              />\r\n            )}\r\n\r\n            <Form\r\n              form={form}\r\n              layout=\"vertical\"\r\n              onFinish={handleLogin}\r\n              initialValues={{ remember: true }}\r\n            >\r\n              <Form.Item\r\n                name=\"username\"\r\n                rules={[\r\n                  { required: true, message: t('common.required') },\r\n                  { min: 3, message: 'Username must be at least 3 characters' },\r\n                ]}\r\n              >\r\n                <Input\r\n                  prefix={<UserOutlined style={{ color: '#bfbfbf' }} />}\r\n                  placeholder={t('login.username')}\r\n                  size=\"large\"\r\n                />\r\n              </Form.Item>\r\n\r\n              <Form.Item\r\n                name=\"password\"\r\n                rules={[\r\n                  { required: true, message: t('common.required') },\r\n                  { min: 6, message: 'Password must be at least 6 characters' },\r\n                ]}\r\n              >\r\n                <Input.Password\r\n                  prefix={<LockOutlined style={{ color: '#bfbfbf' }} />}\r\n                  placeholder={t('login.password')}\r\n                  size=\"large\"\r\n                  iconRender={visible => (visible ? <EyeTwoTone /> : <EyeInvisibleOutlined />)}\r\n                />\r\n              </Form.Item>\r\n\r\n              <Form.Item>\r\n                <Row gutter={8} align=\"middle\">\r\n                  <Col flex=\"auto\">\r\n                    <Form.Item\r\n                      name=\"captcha\"\r\n                      noStyle\r\n                      rules={[{ required: true, message: t('common.required') }]}\r\n                    >\r\n                      <Input\r\n                        prefix={<SafetyOutlined style={{ color: '#bfbfbf' }} />}\r\n                        placeholder={t('login.verificationCode')}\r\n                        size=\"large\"\r\n                        maxLength={4}\r\n                      />\r\n                    </Form.Item>\r\n                  </Col>\r\n                  <Col>\r\n                    <div\r\n                      onClick={generateCaptcha}\r\n                      style={{\r\n                        width: 100,\r\n                        height: 40,\r\n                        background: '#f0f2f5',\r\n                        display: 'flex',\r\n                        alignItems: 'center',\r\n                        justifyContent: 'center',\r\n                        fontFamily: 'monospace',\r\n                        fontSize: 20,\r\n                        letterSpacing: 4,\r\n                        cursor: 'pointer',\r\n                        userSelect: 'none',\r\n                        borderRadius: 4,\r\n                        color: '#1890ff',\r\n                        fontWeight: 'bold',\r\n                      }}\r\n                    >\r\n                      {captchaCode}\r\n                    </div>\r\n                  </Col>\r\n                </Row>\r\n              </Form.Item>\r\n\r\n              <Form.Item>\r\n                <Row justify=\"space-between\" align=\"middle\">\r\n                  <Col>\r\n                    <Form.Item name=\"remember\" valuePropName=\"checked\" noStyle>\r\n                      <Checkbox>\r\n                        {t('login.remember')}\r\n                      </Checkbox>\r\n                    </Form.Item>\r\n                  </Col>\r\n                  <Col>\r\n                    <Link to=\"/auth/reset-password\">\r\n                      {t('login.forgot')}\r\n                    </Link>\r\n                  </Col>\r\n                </Row>\r\n              </Form.Item>\r\n\r\n              <Form.Item>\r\n                <Button\r\n                  type=\"primary\"\r\n                  htmlType=\"submit\"\r\n                  size=\"large\"\r\n                  block\r\n                  loading={loading}\r\n                  icon={<LoginOutlined />}\r\n                >\r\n                  {t('login.submit')}\r\n                </Button>\r\n              </Form.Item>\r\n\r\n              <Divider>\r\n                {t('login.orContinueWith')}\r\n              </Divider>\r\n\r\n              <Space style={{ width: '100%', justifyContent: 'center' }}>\r\n                <Button icon={<GoogleOutlined />} size=\"large\">\r\n                  Google\r\n                </Button>\r\n                <Button icon={<GithubOutlined />} size=\"large\">\r\n                  GitHub\r\n                </Button>\r\n              </Space>\r\n\r\n              <div style={{ textAlign: 'center', marginTop: 24 }}>\r\n                <Text type=\"secondary\">\r\n                  {t('login.noAccount')} {' '}\r\n                  <Link to=\"/auth/register\">\r\n                    {t('login.signup')}\r\n                  </Link>\r\n                </Text>\r\n              </div>\r\n            </Form>\r\n          </Card>\r\n        </Col>\r\n      </Row>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default LoginPage;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Auth/LoginPage.tsx"
    },
    "2": {
      "path": "/home",
      "exact": true,
      "file": "@/pages/Homepage.tsx",
      "parentId": "@@/global-layout",
      "id": "2",
      "absPath": "/home",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Link,\r\n  useNavigate,\r\n  useLocation,\r\n  Button,\r\n  Typography,\r\n  Row,\r\n  Col,\r\n  Card,\r\n  Divider,\r\n  ArrowRightOutlined,\r\n  CheckCircleOutlined,\r\n  MenuOutlined,\r\n  XOutlined,\r\n  TwitterOutlined,\r\n  LinkedinOutlined,\r\n  GithubOutlined,\r\n  Title,\r\n  Paragraph,\r\n  Text,\r\n  FC,\r\n} from '@/imports';\r\nimport Navbar from '@/components/Navbar';\r\n\r\nconst Homepage: FC = () => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [isScrolled, setIsScrolled] = useState(false);\r\n  const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\r\n\r\n  if (location.pathname !== '/') {\r\n    return null;\r\n  }\r\n\r\n  useEffect(() => {\r\n    const handleScroll = () => {\r\n      setIsScrolled(window.scrollY > 50);\r\n    };\r\n    window.addEventListener('scroll', handleScroll);\r\n    return () => window.removeEventListener('scroll', handleScroll);\r\n  }, []);\r\n\r\n  const features = [\r\n    {\r\n      title: '智能选品系统',\r\n      description: '基于AI的商品推荐，自动识别高潜力商品，提升选品效率'\r\n    },\r\n    {\r\n      title: 'AI动态定价',\r\n      description: '实时市场分析，优化定价策略，最大化利润'\r\n    },\r\n    {\r\n      title: '自动上架系统',\r\n      description: '一键批量上架，节省人工成本，提高运营效率'\r\n    },\r\n    {\r\n      title: '跨平台套利',\r\n      description: '发现价格差异，实现利润最大化，降低运营风险'\r\n    },\r\n    {\r\n      title: 'AI店铺托管',\r\n      description: '24/7智能运营，解放人力，提升店铺表现'\r\n    },\r\n    {\r\n      title: '多商户管理',\r\n      description: '集中管理多店铺，数据一目了然，简化管理流程'\r\n    },\r\n  ];\r\n\r\n  const stats = [\r\n    { title: '平均提升', value: '30%', suffix: '运营效率' },\r\n    { title: '平均提升', value: '25%', suffix: '利润率' },\r\n    { title: '支持商户', value: '1000+', suffix: '同时在线' },\r\n  ];\r\n\r\n  return (\r\n    <div className=\"homepage\" style={{ \r\n      fontFamily: '-apple-system, BlinkMacSystemFont, \\'Segoe UI\\', Roboto, \\'Helvetica Neue\\', Arial, sans-serif',\r\n      overflowX: 'hidden'\r\n    }}>\r\n      <Navbar />\r\n\r\n      {/* 英雄区 */}\r\n      <section className=\"hero\" style={{ \r\n        padding: '180px 0 120px', \r\n        background: 'linear-gradient(135deg, #0a192f 0%, #172a45 100%)',\r\n        position: 'relative',\r\n        overflow: 'hidden'\r\n      }}>\r\n        {/* 背景装饰 */}\r\n        <div style={{\r\n          position: 'absolute',\r\n          top: 0,\r\n          left: 0,\r\n          right: 0,\r\n          bottom: 0,\r\n          backgroundImage: 'radial-gradient(circle at 25% 25%, rgba(24, 144, 255, 0.15) 0%, transparent 50%), radial-gradient(circle at 75% 75%, rgba(54, 207, 201, 0.15) 0%, transparent 50%)',\r\n          zIndex: 1\r\n        }} />\r\n        {/* 网格背景 */}\r\n        <div style={{\r\n          position: 'absolute',\r\n          top: 0,\r\n          left: 0,\r\n          right: 0,\r\n          bottom: 0,\r\n          backgroundImage: 'linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px)',\r\n          backgroundSize: '40px 40px',\r\n          zIndex: 1\r\n        }} />\r\n        <div className=\"container\" style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 20px', position: 'relative', zIndex: 2 }}>\r\n          <Row align=\"middle\" gutter={[48, 48]}>\r\n            <Col xs={24} md={12} style={{ textAlign: 'left' }}>\r\n              <div style={{ \r\n                display: 'inline-block', \r\n                background: 'rgba(24, 144, 255, 0.15)', \r\n                color: '#1890ff', \r\n                padding: '10px 20px', \r\n                borderRadius: '25px', \r\n                fontSize: '14px', \r\n                fontWeight: '600',\r\n                marginBottom: '32px',\r\n                boxShadow: '0 4px 12px rgba(24, 144, 255, 0.15)'\r\n              }}>\r\n                AI驱动 · 智能运营\r\n              </div>\r\n              <Title level={1} style={{ \r\n                color: '#fff', \r\n                marginBottom: '32px', \r\n                fontSize: '56px', \r\n                fontWeight: 'bold',\r\n                lineHeight: '1.1'\r\n              }}>\r\n                重新定义跨境电商\r\n              </Title>\r\n              <Paragraph style={{ \r\n                color: 'rgba(255, 255, 255, 0.8)', \r\n                marginBottom: '48px', \r\n                fontSize: '20px',\r\n                lineHeight: '1.6'\r\n              }}>\r\n                利用人工智能和自动化技术，帮助您实现从选品到运营的全流程智能化，提升效率，降低成本，实现业务增长\r\n              </Paragraph>\r\n              <div style={{ display: 'flex', gap: '16px', flexWrap: 'wrap' }}>\r\n                <Button \r\n                  type=\"primary\" \r\n                  size=\"large\" \r\n                  onClick={() => navigate('/auth/register')}\r\n                  style={{\r\n                    padding: '16px 40px', \r\n                    fontSize: '18px',\r\n                    borderRadius: '30px',\r\n                    boxShadow: '0 8px 24px rgba(24, 144, 255, 0.4)',\r\n                    transition: 'all 0.3s ease'\r\n                    }}\r\n                >\r\n                  免费注册\r\n                </Button>\r\n                <Button \r\n                  size=\"large\" \r\n                  onClick={() => navigate('/pricing')}\r\n                  style={{\r\n                    padding: '16px 40px', \r\n                    fontSize: '18px',\r\n                    borderRadius: '30px',\r\n                    background: 'rgba(255, 255, 255, 0.1)',\r\n                    color: '#fff',\r\n                    border: '1px solid rgba(255, 255, 255, 0.3)',\r\n                    transition: 'all 0.3s ease'\r\n                    }}\r\n                >\r\n                  了解更多\r\n                </Button>\r\n              </div>\r\n            </Col>\r\n            <Col xs={24} md={12}>\r\n              <div style={{ \r\n                textAlign: 'center',\r\n                position: 'relative',\r\n                perspective: '1000px'\r\n              }}>\r\n                <div style={{\r\n                  position: 'absolute',\r\n                  top: '-30px',\r\n                  left: '-30px',\r\n                  right: '-30px',\r\n                  bottom: '-30px',\r\n                  background: 'linear-gradient(45deg, #1890ff, #36cfc9)',\r\n                  borderRadius: '20px',\r\n                  filter: 'blur(60px)',\r\n                  opacity: 0.7,\r\n                  zIndex: -1,\r\n                  animation: 'pulse 3s ease-in-out infinite'\r\n                }} />\r\n                <img \r\n                  src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='800' height='450' viewBox='0 0 800 450'%3E%3Crect width='800' height='450' fill='%231890ff'/%3E%3Ctext x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' font-family='Arial' font-size='24' fill='white'%3E智能电商平台%3C/text%3E%3C/svg%3E\" \r\n                  alt=\"智能电商平台\" \r\n                  style={{ \r\n                    maxWidth: '100%', \r\n                    borderRadius: '16px', \r\n                    boxShadow: '0 20px 60px rgba(0, 0, 0, 0.4)',\r\n                    transition: 'all 0.3s ease',\r\n                    transformStyle: 'preserve-3d'\r\n                    }}\r\n                />\r\n              </div>\r\n            </Col>\r\n          </Row>\r\n        </div>\r\n      </section>\r\n\r\n      {/* 核心功能区 */}\r\n      <section className=\"features\" style={{ \r\n        padding: '140px 0', \r\n        background: '#fafafa',\r\n        position: 'relative'\r\n      }}>\r\n        {/* 背景装饰 */}\r\n        <div style={{\r\n          position: 'absolute',\r\n          top: 0,\r\n          right: 0,\r\n          width: '50%',\r\n          height: '100%',\r\n          backgroundImage: 'radial-gradient(circle at 100% 50%, rgba(24, 144, 255, 0.05) 0%, transparent 50%)',\r\n          zIndex: 1\r\n        }} />\r\n        <div className=\"container\" style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 20px', position: 'relative', zIndex: 2 }}>\r\n          <div style={{ textAlign: 'center', marginBottom: '96px' }}>\r\n            <div style={{ \r\n              display: 'inline-block', \r\n              background: 'rgba(24, 144, 255, 0.1)', \r\n              color: '#1890ff', \r\n              padding: '10px 20px', \r\n              borderRadius: '25px', \r\n              fontSize: '14px', \r\n              fontWeight: '600',\r\n              marginBottom: '32px',\r\n              boxShadow: '0 4px 12px rgba(24, 144, 255, 0.15)'\r\n            }}>\r\n              核心功能\r\n            </div>\r\n            <Title level={2} style={{ \r\n              fontSize: '48px', \r\n              fontWeight: 'bold', \r\n              marginBottom: '24px', \r\n              color: '#333',\r\n              lineHeight: '1.1'\r\n            }}>全方位跨境电商解决方案</Title>\r\n            <Paragraph style={{ \r\n              fontSize: '20px', \r\n              color: '#666', \r\n              maxWidth: '800px', \r\n              margin: '0 auto',\r\n              lineHeight: '1.6'\r\n            }}>\r\n              我们提供从选品到运营的完整解决方案，帮助您实现业务增长和利润最大化\r\n            </Paragraph>\r\n          </div>\r\n          <Row gutter={[48, 48]}>\r\n            {features.map((feature, index) => (\r\n              <Col key={index} xs={24} sm={12} md={8}>\r\n                <Card \r\n                  hoverable \r\n                  style={{ \r\n                    borderRadius: '16px', \r\n                    overflow: 'hidden', \r\n                    transition: 'all 0.4s ease',\r\n                    border: '1px solid #e8e8e8',\r\n                    boxShadow: '0 8px 24px rgba(0, 0, 0, 0.08)',\r\n                    height: '100%'\r\n                    }}\r\n                >\r\n                  <div style={{ marginBottom: '32px', paddingTop: '32px' }}>\r\n                    <span style={{ \r\n                      display: 'inline-flex', \r\n                      width: '84px', \r\n                      height: '84px', \r\n                      alignItems: 'center',\r\n                      justifyContent: 'center',\r\n                      fontSize: '32px', \r\n                      fontWeight: 'bold', \r\n                      background: 'linear-gradient(135deg, #1890ff 0%, #36cfc9 100%)', \r\n                      color: '#fff', \r\n                      borderRadius: '20px',\r\n                      boxShadow: '0 6px 20px rgba(24, 144, 255, 0.4)',\r\n                      transition: 'all 0.3s ease'\r\n                      }}>{feature.title.charAt(0)}</span>\r\n                  </div>\r\n                  <Title level={4} style={{ \r\n                    marginBottom: '20px',\r\n                    color: '#333',\r\n                    fontWeight: 'bold',\r\n                    fontSize: '20px'\r\n                  }}>{feature.title}</Title>\r\n                  <Paragraph style={{ \r\n                    marginBottom: '32px',\r\n                    color: '#666',\r\n                    lineHeight: '1.6',\r\n                    fontSize: '16px'\r\n                  }}>{feature.description}</Paragraph>\r\n                  <Button \r\n                    type=\"text\" \r\n                    style={{\r\n                      color: '#1890ff',\r\n                      fontWeight: '600',\r\n                      display: 'flex',\r\n                      alignItems: 'center',\r\n                      gap: '10px',\r\n                      transition: 'all 0.3s ease',\r\n                      fontSize: '16px'\r\n                      }}\r\n                  >\r\n                    了解更多 <ArrowRightOutlined />\r\n                  </Button>\r\n                </Card>\r\n              </Col>\r\n            ))}\r\n          </Row>\r\n        </div>\r\n      </section>\r\n\r\n      {/* 价值主张区 */}\r\n      <section className=\"value-proposition\" style={{ \r\n        padding: '140px 0', \r\n        background: '#fff',\r\n        position: 'relative'\r\n      }}>\r\n        {/* 背景装饰 */}\r\n        <div style={{\r\n          position: 'absolute',\r\n          top: 0,\r\n          left: 0,\r\n          width: '50%',\r\n          height: '100%',\r\n          backgroundImage: 'radial-gradient(circle at 0% 50%, rgba(24, 144, 255, 0.05) 0%, transparent 50%)',\r\n          zIndex: 1\r\n        }} />\r\n        <div className=\"container\" style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 20px', position: 'relative', zIndex: 2 }}>\r\n          <Row align=\"middle\" gutter={[64, 64]}>\r\n            <Col xs={24} md={12}>\r\n              <div style={{ \r\n                textAlign: 'center',\r\n                position: 'relative',\r\n                perspective: '1000px'\r\n              }}>\r\n                <div style={{\r\n                  position: 'absolute',\r\n                  top: '-30px',\r\n                  left: '-30px',\r\n                  right: '-30px',\r\n                  bottom: '-30px',\r\n                  background: 'linear-gradient(45deg, #1890ff, #36cfc9)',\r\n                  borderRadius: '20px',\r\n                  filter: 'blur(80px)',\r\n                  opacity: 0.15,\r\n                  zIndex: -1\r\n                }} />\r\n                <img \r\n                  src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='800' height='450' viewBox='0 0 800 450'%3E%3Crect width='800' height='450' fill='%2336cfc9'/%3E%3Ctext x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' font-family='Arial' font-size='24' fill='white'%3E业务增长%3C/text%3E%3C/svg%3E\" \r\n                  alt=\"业务增长\" \r\n                  style={{ \r\n                    maxWidth: '100%', \r\n                    borderRadius: '16px', \r\n                    boxShadow: '0 20px 60px rgba(0, 0, 0, 0.15)',\r\n                    transition: 'all 0.4s ease',\r\n                    transformStyle: 'preserve-3d'\r\n                    }}\r\n                />\r\n              </div>\r\n            </Col>\r\n            <Col xs={24} md={12}>\r\n              <div style={{ \r\n                display: 'inline-block', \r\n                background: 'rgba(24, 144, 255, 0.1)', \r\n                color: '#1890ff', \r\n                padding: '10px 20px', \r\n                borderRadius: '25px', \r\n                fontSize: '14px', \r\n                fontWeight: '600',\r\n                marginBottom: '32px',\r\n                boxShadow: '0 4px 12px rgba(24, 144, 255, 0.15)'\r\n              }}>\r\n                为什么选择我们\r\n              </div>\r\n              <Title level={2} style={{ \r\n                fontSize: '44px',\r\n                fontWeight: 'bold',\r\n                marginBottom: '36px', \r\n                color: '#333',\r\n                lineHeight: '1.1'\r\n              }}>为什么选择 Crawlful Hub</Title>\r\n              <div style={{ marginBottom: '48px' }}>\r\n                <div style={{ \r\n                  display: 'flex', \r\n                  alignItems: 'flex-start', \r\n                  marginBottom: '32px', \r\n                  gap: '24px',\r\n                  padding: '24px',\r\n                  background: '#fafafa',\r\n                  borderRadius: '16px',\r\n                  transition: 'all 0.4s ease'\r\n                  }}>\r\n                  <div style={{\r\n                    width: '56px',\r\n                    height: '56px',\r\n                    borderRadius: '14px',\r\n                    background: 'linear-gradient(135deg, #1890ff 0%, #36cfc9 100%)',\r\n                    display: 'flex',\r\n                    alignItems: 'center',\r\n                    justifyContent: 'center',\r\n                    flexShrink: 0,\r\n                    boxShadow: '0 4px 16px rgba(24, 144, 255, 0.3)'\r\n                  }}>\r\n                    <CheckCircleOutlined style={{ color: '#fff', fontSize: '28px' }} />\r\n                  </div>\r\n                  <div>\r\n                    <h3 style={{ \r\n                      marginBottom: '12px', \r\n                      color: '#333',\r\n                      fontSize: '20px',\r\n                      fontWeight: 'bold'\r\n                    }}>AI驱动决策</h3>\r\n                    <p style={{ \r\n                      color: '#666', \r\n                      margin: 0,\r\n                      lineHeight: '1.6',\r\n                      fontSize: '16px'\r\n                    }}>基于人工智能的数据分析和预测，帮助您做出更明智的业务决策</p>\r\n                  </div>\r\n                </div>\r\n                <div style={{ \r\n                  display: 'flex', \r\n                  alignItems: 'flex-start', \r\n                  marginBottom: '32px', \r\n                  gap: '24px',\r\n                  padding: '24px',\r\n                  background: '#fafafa',\r\n                  borderRadius: '16px',\r\n                  transition: 'all 0.4s ease'\r\n                  }}>\r\n                  <div style={{\r\n                    width: '56px',\r\n                    height: '56px',\r\n                    borderRadius: '14px',\r\n                    background: 'linear-gradient(135deg, #1890ff 0%, #36cfc9 100%)',\r\n                    display: 'flex',\r\n                    alignItems: 'center',\r\n                    justifyContent: 'center',\r\n                    flexShrink: 0,\r\n                    boxShadow: '0 4px 16px rgba(24, 144, 255, 0.3)'\r\n                  }}>\r\n                    <CheckCircleOutlined style={{ color: '#fff', fontSize: '28px' }} />\r\n                  </div>\r\n                  <div>\r\n                    <h3 style={{ \r\n                      marginBottom: '12px', \r\n                      color: '#333',\r\n                      fontSize: '20px',\r\n                      fontWeight: 'bold'\r\n                    }}>全流程自动化</h3>\r\n                    <p style={{ \r\n                      color: '#666', \r\n                      margin: 0,\r\n                      lineHeight: '1.6',\r\n                      fontSize: '16px'\r\n                    }}>从选品到上架，从定价到运营，全流程自动化管理，节省人力成本</p>\r\n                  </div>\r\n                </div>\r\n                <div style={{ \r\n                  display: 'flex', \r\n                  alignItems: 'flex-start', \r\n                  marginBottom: '32px', \r\n                  gap: '24px',\r\n                  padding: '24px',\r\n                  background: '#fafafa',\r\n                  borderRadius: '16px',\r\n                  transition: 'all 0.4s ease'\r\n                  }}>\r\n                  <div style={{\r\n                    width: '56px',\r\n                    height: '56px',\r\n                    borderRadius: '14px',\r\n                    background: 'linear-gradient(135deg, #1890ff 0%, #36cfc9 100%)',\r\n                    display: 'flex',\r\n                    alignItems: 'center',\r\n                    justifyContent: 'center',\r\n                    flexShrink: 0,\r\n                    boxShadow: '0 4px 16px rgba(24, 144, 255, 0.3)'\r\n                  }}>\r\n                    <CheckCircleOutlined style={{ color: '#fff', fontSize: '28px' }} />\r\n                  </div>\r\n                  <div>\r\n                    <h3 style={{ \r\n                      marginBottom: '12px', \r\n                      color: '#333',\r\n                      fontSize: '20px',\r\n                      fontWeight: 'bold'\r\n                    }}>多平台整合</h3>\r\n                    <p style={{ \r\n                      color: '#666', \r\n                      margin: 0,\r\n                      lineHeight: '1.6',\r\n                      fontSize: '16px'\r\n                    }}>支持主流电商平台，一站式管理多店铺，提高运营效率</p>\r\n                  </div>\r\n                </div>\r\n                <div style={{ \r\n                  display: 'flex', \r\n                  alignItems: 'flex-start', \r\n                  marginBottom: '32px', \r\n                  gap: '24px',\r\n                  padding: '24px',\r\n                  background: '#fafafa',\r\n                  borderRadius: '16px',\r\n                  transition: 'all 0.4s ease'\r\n                  }}>\r\n                  <div style={{\r\n                    width: '56px',\r\n                    height: '56px',\r\n                    borderRadius: '14px',\r\n                    background: 'linear-gradient(135deg, #1890ff 0%, #36cfc9 100%)',\r\n                    display: 'flex',\r\n                    alignItems: 'center',\r\n                    justifyContent: 'center',\r\n                    flexShrink: 0,\r\n                    boxShadow: '0 4px 16px rgba(24, 144, 255, 0.3)'\r\n                  }}>\r\n                    <CheckCircleOutlined style={{ color: '#fff', fontSize: '28px' }} />\r\n                  </div>\r\n                  <div>\r\n                    <h3 style={{ \r\n                      marginBottom: '12px', \r\n                      color: '#333',\r\n                      fontSize: '20px',\r\n                      fontWeight: 'bold'\r\n                    }}>专业团队支持</h3>\r\n                    <p style={{ \r\n                      color: '#666', \r\n                      margin: 0,\r\n                      lineHeight: '1.6',\r\n                      fontSize: '16px'\r\n                    }}>7x24小时技术支持，专业团队为您保驾护航，确保业务稳定运行</p>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            </Col>\r\n          </Row>\r\n        </div>\r\n      </section>\r\n\r\n      {/* 成功案例区 */}\r\n      <section className=\"case-studies\" style={{ \r\n        padding: '140px 0', \r\n        background: '#fafafa',\r\n        position: 'relative'\r\n      }}>\r\n        {/* 背景装饰 */}\r\n        <div style={{\r\n          position: 'absolute',\r\n          top: 0,\r\n          right: 0,\r\n          width: '50%',\r\n          height: '100%',\r\n          backgroundImage: 'radial-gradient(circle at 100% 50%, rgba(24, 144, 255, 0.05) 0%, transparent 50%)',\r\n          zIndex: 1\r\n        }} />\r\n        <div className=\"container\" style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 20px', position: 'relative', zIndex: 2 }}>\r\n          <div style={{ textAlign: 'center', marginBottom: '96px' }}>\r\n            <div style={{ \r\n              display: 'inline-block', \r\n              background: 'rgba(24, 144, 255, 0.1)', \r\n              color: '#1890ff', \r\n              padding: '10px 20px', \r\n              borderRadius: '25px', \r\n              fontSize: '14px', \r\n              fontWeight: '600',\r\n              marginBottom: '32px',\r\n              boxShadow: '0 4px 12px rgba(24, 144, 255, 0.15)'\r\n            }}>\r\n              成功案例\r\n            </div>\r\n            <Title level={2} style={{ \r\n              fontSize: '48px', \r\n              fontWeight: 'bold', \r\n              marginBottom: '24px', \r\n              color: '#333',\r\n              lineHeight: '1.1'\r\n            }}>我们的客户成功故事</Title>\r\n            <Paragraph style={{ \r\n              fontSize: '20px', \r\n              color: '#666', \r\n              maxWidth: '800px', \r\n              margin: '0 auto',\r\n              lineHeight: '1.6'\r\n            }}>\r\n              看看我们的客户如何使用 Crawlful Hub 实现业务增长\r\n            </Paragraph>\r\n          </div>\r\n          <Row gutter={[48, 48]}>\r\n            <Col xs={24} md={8}>\r\n              <Card \r\n                hoverable \r\n                style={{ \r\n                  borderRadius: '20px', \r\n                  overflow: 'hidden', \r\n                  transition: 'all 0.4s ease',\r\n                  border: '1px solid #e8e8e8',\r\n                  boxShadow: '0 12px 32px rgba(0, 0, 0, 0.1)',\r\n                  height: '100%'\r\n                  }}\r\n              >\r\n                <div style={{ \r\n                  marginBottom: '0',\r\n                  position: 'relative',\r\n                  overflow: 'hidden',\r\n                  height: '280px'\r\n                }}>\r\n                  <img \r\n                    src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='800' height='800' viewBox='0 0 800 800'%3E%3Crect width='800' height='800' fill='%231890ff'/%3E%3Ctext x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' font-family='Arial' font-size='24' fill='white'%3E成功案例1%3C/text%3E%3C/svg%3E\" \r\n                    alt=\"成功案例1\" \r\n                    style={{ \r\n                      width: '100%', \r\n                      height: '100%', \r\n                      objectFit: 'cover',\r\n                      transition: 'all 0.4s ease'\r\n                      }}\r\n                  />\r\n                  <div style={{\r\n                    position: 'absolute',\r\n                    bottom: 0,\r\n                    left: 0,\r\n                    right: 0,\r\n                    background: 'linear-gradient(transparent, rgba(0, 0, 0, 0.8))',\r\n                    padding: '24px',\r\n                    color: '#fff'\r\n                  }}>\r\n                    <div style={{ \r\n                      display: 'inline-block', \r\n                      background: 'rgba(255, 255, 255, 0.25)', \r\n                      color: '#fff', \r\n                      padding: '6px 16px', \r\n                      borderRadius: '16px', \r\n                      fontSize: '12px', \r\n                      fontWeight: '600',\r\n                      marginBottom: '12px'\r\n                    }}>\r\n                      跨境电商\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n                <div style={{ padding: '36px' }}>\r\n                  <Title level={4} style={{ \r\n                    marginBottom: '20px',\r\n                    color: '#333',\r\n                    fontWeight: 'bold',\r\n                    fontSize: '20px'\r\n                  }}>某跨境电商企业</Title>\r\n                  <Paragraph style={{ \r\n                    marginBottom: '32px',\r\n                    color: '#666',\r\n                    lineHeight: '1.6',\r\n                    fontSize: '16px'\r\n                  }}>通过智能选品和动态定价，3个月内销售额提升45%</Paragraph>\r\n                  <Button \r\n                    type=\"text\" \r\n                    onClick={() => navigate('/case-study/1')}\r\n                    style={{\r\n                      color: '#1890ff',\r\n                      fontWeight: '600',\r\n                      display: 'flex',\r\n                      alignItems: 'center',\r\n                      gap: '10px',\r\n                      transition: 'all 0.3s ease',\r\n                      fontSize: '16px'\r\n                      }}\r\n                  >\r\n                    查看详情 <ArrowRightOutlined />\r\n                  </Button>\r\n                </div>\r\n              </Card>\r\n            </Col>\r\n            <Col xs={24} md={8}>\r\n              <Card \r\n                hoverable \r\n                style={{ \r\n                  borderRadius: '20px', \r\n                  overflow: 'hidden', \r\n                  transition: 'all 0.4s ease',\r\n                  border: '1px solid #e8e8e8',\r\n                  boxShadow: '0 12px 32px rgba(0, 0, 0, 0.1)',\r\n                  height: '100%'\r\n                  }}\r\n              >\r\n                <div style={{ \r\n                  marginBottom: '0',\r\n                  position: 'relative',\r\n                  overflow: 'hidden',\r\n                  height: '280px'\r\n                }}>\r\n                  <img \r\n                    src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='800' height='800' viewBox='0 0 800 800'%3E%3Crect width='800' height='800' fill='%2336cfc9'/%3E%3Ctext x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' font-family='Arial' font-size='24' fill='white'%3E成功案例2%3C/text%3E%3C/svg%3E\" \r\n                    alt=\"成功案例2\" \r\n                    style={{ \r\n                      width: '100%', \r\n                      height: '100%', \r\n                      objectFit: 'cover',\r\n                      transition: 'all 0.4s ease'\r\n                      }}\r\n                  />\r\n                  <div style={{\r\n                    position: 'absolute',\r\n                    bottom: 0,\r\n                    left: 0,\r\n                    right: 0,\r\n                    background: 'linear-gradient(transparent, rgba(0, 0, 0, 0.8))',\r\n                    padding: '24px',\r\n                    color: '#fff'\r\n                  }}>\r\n                    <div style={{ \r\n                      display: 'inline-block', \r\n                      background: 'rgba(255, 255, 255, 0.25)', \r\n                      color: '#fff', \r\n                      padding: '6px 16px', \r\n                      borderRadius: '16px', \r\n                      fontSize: '12px', \r\n                      fontWeight: '600',\r\n                      marginBottom: '12px'\r\n                    }}>\r\n                      品牌零售\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n                <div style={{ padding: '36px' }}>\r\n                  <Title level={4} style={{ \r\n                    marginBottom: '20px',\r\n                    color: '#333',\r\n                    fontWeight: 'bold',\r\n                    fontSize: '20px'\r\n                  }}>某品牌零售商</Title>\r\n                  <Paragraph style={{ \r\n                    marginBottom: '32px',\r\n                    color: '#666',\r\n                    lineHeight: '1.6',\r\n                    fontSize: '16px'\r\n                  }}>利用AI店铺托管，运营成本降低30%，效率提升50%</Paragraph>\r\n                  <Button \r\n                    type=\"text\" \r\n                    onClick={() => navigate('/case-study/2')}\r\n                    style={{\r\n                      color: '#1890ff',\r\n                      fontWeight: '600',\r\n                      display: 'flex',\r\n                      alignItems: 'center',\r\n                      gap: '10px',\r\n                      transition: 'all 0.3s ease',\r\n                      fontSize: '16px'\r\n                      }}\r\n                  >\r\n                    查看详情 <ArrowRightOutlined />\r\n                  </Button>\r\n                </div>\r\n              </Card>\r\n            </Col>\r\n            <Col xs={24} md={8}>\r\n              <Card \r\n                hoverable \r\n                style={{ \r\n                  borderRadius: '20px', \r\n                  overflow: 'hidden', \r\n                  transition: 'all 0.4s ease',\r\n                  border: '1px solid #e8e8e8',\r\n                  boxShadow: '0 12px 32px rgba(0, 0, 0, 0.1)',\r\n                  height: '100%'\r\n                  }}\r\n              >\r\n                <div style={{ \r\n                  marginBottom: '0',\r\n                  position: 'relative',\r\n                  overflow: 'hidden',\r\n                  height: '280px'\r\n                }}>\r\n                  <img \r\n                    src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='800' height='800' viewBox='0 0 800 800'%3E%3Crect width='800' height='800' fill='%23722ed1'/%3E%3Ctext x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' font-family='Arial' font-size='24' fill='white'%3E成功案例3%3C/text%3E%3C/svg%3E\" \r\n                    alt=\"成功案例3\" \r\n                    style={{ \r\n                      width: '100%', \r\n                      height: '100%', \r\n                      objectFit: 'cover',\r\n                      transition: 'all 0.4s ease'\r\n                      }}\r\n                  />\r\n                  <div style={{\r\n                    position: 'absolute',\r\n                    bottom: 0,\r\n                    left: 0,\r\n                    right: 0,\r\n                    background: 'linear-gradient(transparent, rgba(0, 0, 0, 0.8))',\r\n                    padding: '24px',\r\n                    color: '#fff'\r\n                  }}>\r\n                    <div style={{ \r\n                      display: 'inline-block', \r\n                      background: 'rgba(255, 255, 255, 0.25)', \r\n                      color: '#fff', \r\n                      padding: '6px 16px', \r\n                      borderRadius: '16px', \r\n                      fontSize: '12px', \r\n                      fontWeight: '600',\r\n                      marginBottom: '12px'\r\n                    }}>\r\n                      多渠道运营\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n                <div style={{ padding: '36px' }}>\r\n                  <Title level={4} style={{ \r\n                    marginBottom: '20px',\r\n                    color: '#333',\r\n                    fontWeight: 'bold',\r\n                    fontSize: '20px'\r\n                  }}>某多渠道卖家</Title>\r\n                  <Paragraph style={{ \r\n                    marginBottom: '32px',\r\n                    color: '#666',\r\n                    lineHeight: '1.6',\r\n                    fontSize: '16px'\r\n                  }}>通过跨平台套利，6个月内利润率提升35%</Paragraph>\r\n                  <Button \r\n                    type=\"text\" \r\n                    onClick={() => navigate('/case-study/3')}\r\n                    style={{\r\n                      color: '#1890ff',\r\n                      fontWeight: '600',\r\n                      display: 'flex',\r\n                      alignItems: 'center',\r\n                      gap: '10px',\r\n                      transition: 'all 0.3s ease',\r\n                      fontSize: '16px'\r\n                      }}\r\n                  >\r\n                    查看详情 <ArrowRightOutlined />\r\n                  </Button>\r\n                </div>\r\n              </Card>\r\n            </Col>\r\n          </Row>\r\n          <div style={{ textAlign: 'center', marginTop: '72px' }}>\r\n            <Button \r\n              type=\"primary\" \r\n              onClick={() => navigate('/case-study')}\r\n              style={{\r\n                padding: '16px 40px', \r\n                fontSize: '18px',\r\n                borderRadius: '30px',\r\n                boxShadow: '0 6px 18px rgba(24, 144, 255, 0.4)',\r\n                transition: 'all 0.3s ease'\r\n                }}\r\n            >\r\n              查看更多案例\r\n            </Button>\r\n          </div>\r\n        </div>\r\n      </section>\r\n\r\n      {/* 行动召唤区 */}\r\n      <section className=\"cta\" style={{ \r\n        padding: '160px 0', \r\n        background: 'linear-gradient(135deg, #0a192f 0%, #172a45 100%)', \r\n        color: '#fff', \r\n        textAlign: 'center',\r\n        position: 'relative',\r\n        overflow: 'hidden'\r\n      }}>\r\n        {/* 背景装饰 */}\r\n        <div style={{\r\n          position: 'absolute',\r\n          top: 0,\r\n          left: 0,\r\n          right: 0,\r\n          bottom: 0,\r\n          backgroundImage: 'radial-gradient(circle at 25% 25%, rgba(24, 144, 255, 0.15) 0%, transparent 50%), radial-gradient(circle at 75% 75%, rgba(54, 207, 201, 0.15) 0%, transparent 50%)',\r\n          zIndex: 1\r\n        }} />\r\n        {/* 网格背景 */}\r\n        <div style={{\r\n          position: 'absolute',\r\n          top: 0,\r\n          left: 0,\r\n          right: 0,\r\n          bottom: 0,\r\n          backgroundImage: 'linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px)',\r\n          backgroundSize: '40px 40px',\r\n          zIndex: 1\r\n        }} />\r\n        <div className=\"container\" style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 20px', position: 'relative', zIndex: 2 }}>\r\n          <div style={{ maxWidth: '800px', margin: '0 auto' }}>\r\n            <div style={{ \r\n              display: 'inline-block', \r\n              background: 'rgba(24, 144, 255, 0.15)', \r\n              color: '#1890ff', \r\n              padding: '10px 20px', \r\n              borderRadius: '25px', \r\n              fontSize: '14px', \r\n              fontWeight: '600',\r\n              marginBottom: '32px',\r\n              boxShadow: '0 4px 12px rgba(24, 144, 255, 0.2)'\r\n            }}>\r\n              立即开始\r\n            </div>\r\n            <Title level={2} style={{ \r\n              color: '#fff', \r\n              marginBottom: '32px',\r\n              fontSize: '48px',\r\n              fontWeight: 'bold',\r\n              lineHeight: '1.1'\r\n            }}>准备好开始您的电商增长之旅了吗？</Title>\r\n            <Paragraph style={{ \r\n              color: 'rgba(255, 255, 255, 0.8)', \r\n              marginBottom: '64px', \r\n              fontSize: '22px',\r\n              lineHeight: '1.6'\r\n            }}>\r\n              立即注册，享受14天免费试用，体验AI驱动的跨境电商解决方案，开启您的业务增长之路\r\n            </Paragraph>\r\n            <Button \r\n              type=\"primary\" \r\n              size=\"large\" \r\n              onClick={() => navigate('/auth/register')}\r\n              style={{\r\n                padding: '18px 56px', \r\n                fontSize: '20px',\r\n                borderRadius: '35px',\r\n                boxShadow: '0 8px 24px rgba(24, 144, 255, 0.4)',\r\n                transition: 'all 0.3s ease'\r\n                }}\r\n            >\r\n              免费注册\r\n            </Button>\r\n            <div style={{ marginTop: '32px', color: 'rgba(255, 255, 255, 0.6)', fontSize: '16px' }}>\r\n              无需信用卡 · 14天免费试用 · 随时取消\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </section>\r\n\r\n      {/* 页脚 */}\r\n      <footer style={{ \r\n        padding: '120px 0 80px', \r\n        background: '#0a192f', \r\n        color: '#fff',\r\n        position: 'relative',\r\n        overflow: 'hidden'\r\n      }}>\r\n        {/* 背景装饰 */}\r\n        <div style={{\r\n          position: 'absolute',\r\n          top: 0,\r\n          left: 0,\r\n          right: 0,\r\n          bottom: 0,\r\n          backgroundImage: 'radial-gradient(circle at 50% 50%, rgba(24, 144, 255, 0.05) 0%, transparent 70%)',\r\n          zIndex: 1\r\n        }} />\r\n        <div className=\"container\" style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 20px', position: 'relative', zIndex: 2 }}>\r\n          <Row gutter={[48, 48]}>\r\n            <Col xs={24} md={6}>\r\n              <div style={{ \r\n                fontSize: '32px', \r\n                fontWeight: 'bold', \r\n                marginBottom: '28px',\r\n                color: '#1890ff',\r\n                letterSpacing: '1px'\r\n              }}>Crawlful Hub</div>\r\n              <Paragraph style={{ \r\n                color: 'rgba(255, 255, 255, 0.6)', \r\n                marginBottom: '36px',\r\n                lineHeight: '1.6',\r\n                fontSize: '16px'\r\n              }}>\r\n                智能驱动跨境电商增长，为您的业务提供全方位解决方案\r\n              </Paragraph>\r\n              <div style={{ display: 'flex', gap: '16px' }}>\r\n                <a href=\"#\" style={{ \r\n                  display: 'inline-flex', \r\n                  alignItems: 'center', \r\n                  justifyContent: 'center',\r\n                  width: '48px',\r\n                  height: '48px',\r\n                  borderRadius: '50%',\r\n                  background: 'rgba(255, 255, 255, 0.08)',\r\n                  color: 'rgba(255, 255, 255, 0.6)',\r\n                  transition: 'all 0.3s ease'\r\n                  }}>\r\n                  <TwitterOutlined />\r\n                </a>\r\n                <a href=\"#\" style={{ \r\n                  display: 'inline-flex', \r\n                  alignItems: 'center', \r\n                  justifyContent: 'center',\r\n                  width: '48px',\r\n                  height: '48px',\r\n                  borderRadius: '50%',\r\n                  background: 'rgba(255, 255, 255, 0.08)',\r\n                  color: 'rgba(255, 255, 255, 0.6)',\r\n                  transition: 'all 0.3s ease'\r\n                  }}>\r\n                  <LinkedinOutlined />\r\n                </a>\r\n                <a href=\"#\" style={{ \r\n                  display: 'inline-flex', \r\n                  alignItems: 'center', \r\n                  justifyContent: 'center',\r\n                  width: '48px',\r\n                  height: '48px',\r\n                  borderRadius: '50%',\r\n                  background: 'rgba(255, 255, 255, 0.08)',\r\n                  color: 'rgba(255, 255, 255, 0.6)',\r\n                  transition: 'all 0.3s ease'\r\n                  }}>\r\n                  <GithubOutlined />\r\n                </a>\r\n              </div>\r\n            </Col>\r\n            <Col xs={24} md={6}>\r\n              <h3 style={{ \r\n                fontSize: '20px', \r\n                fontWeight: 'bold', \r\n                marginBottom: '28px', \r\n                color: '#fff',\r\n                letterSpacing: '0.5px'\r\n              }}>产品</h3>\r\n              <ul style={{ listStyle: 'none', padding: 0, margin: 0 }}>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/pricing\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>定价方案</Link></li>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/case-study\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>成功案例</Link></li>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>功能介绍</Link></li>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>API文档</Link></li>\r\n              </ul>\r\n            </Col>\r\n            <Col xs={24} md={6}>\r\n              <h3 style={{ \r\n                fontSize: '20px', \r\n                fontWeight: 'bold', \r\n                marginBottom: '28px', \r\n                color: '#fff',\r\n                letterSpacing: '0.5px'\r\n              }}>公司</h3>\r\n              <ul style={{ listStyle: 'none', padding: 0, margin: 0 }}>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>关于我们</Link></li>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>联系我们</Link></li>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>招贤纳士</Link></li>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>新闻资讯</Link></li>\r\n              </ul>\r\n            </Col>\r\n            <Col xs={24} md={6}>\r\n              <h3 style={{ \r\n                fontSize: '20px', \r\n                fontWeight: 'bold', \r\n                marginBottom: '28px', \r\n                color: '#fff',\r\n                letterSpacing: '0.5px'\r\n              }}>支持</h3>\r\n              <ul style={{ listStyle: 'none', padding: 0, margin: 0 }}>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>帮助中心</Link></li>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>常见问题</Link></li>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>联系支持</Link></li>\r\n                <li style={{ marginBottom: '20px' }}><Link to=\"/\" style={{ \r\n                  color: 'rgba(255, 255, 255, 0.6)', \r\n                  transition: 'all 0.3s ease',\r\n                  textDecoration: 'none',\r\n                  fontSize: '16px'\r\n                  }}>API文档</Link></li>\r\n              </ul>\r\n            </Col>\r\n          </Row>\r\n          <Divider style={{ \r\n            backgroundColor: 'rgba(255, 255, 255, 0.1)', \r\n            margin: '80px 0 40px',\r\n            height: '1px'\r\n          }} />\r\n          <div style={{ textAlign: 'center', color: 'rgba(255, 255, 255, 0.4)', fontSize: '14px' }}>\r\n            <div style={{ marginBottom: '16px' }}>\r\n              <Link to=\"/\" style={{ \r\n                color: 'rgba(255, 255, 255, 0.4)', \r\n                transition: 'color 0.3s ease',\r\n                textDecoration: 'none',\r\n                margin: '0 16px'\r\n                }}>隐私政策</Link>\r\n              <Link to=\"/\" style={{ \r\n                color: 'rgba(255, 255, 255, 0.4)', \r\n                transition: 'color 0.3s ease',\r\n                textDecoration: 'none',\r\n                margin: '0 16px'\r\n                }}>服务条款</Link>\r\n              <Link to=\"/\" style={{ \r\n                color: 'rgba(255, 255, 255, 0.4)', \r\n                transition: 'color 0.3s ease',\r\n                textDecoration: 'none',\r\n                margin: '0 16px'\r\n                }}>Cookie政策</Link>\r\n            </div>\r\n            © 2025 Crawlful Hub. All rights reserved.\r\n          </div>\r\n        </div>\r\n      </footer>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Homepage;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Homepage.tsx"
    },
    "3": {
      "path": "/test-route",
      "file": "@/pages/TestRoute.tsx",
      "parentId": "@@/global-layout",
      "id": "3",
      "absPath": "/test-route",
      "__content": "import { FC } from '@/imports';\n\nconst TestRoute: FC = () => {\n  return (\n    <div>\n      <h1>Test Route</h1>\n      <p>This is a test page to check if routing works.</p>\n    </div>\n  );\n};\n\nexport default TestRoute;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/TestRoute.tsx"
    },
    "4": {
      "path": "/dashboard",
      "parentId": "@@/global-layout",
      "id": "4",
      "absPath": "/dashboard"
    },
    "5": {
      "path": "/dashboard",
      "file": "@/pages/DashboardPage.tsx",
      "parentId": "4",
      "id": "5",
      "absPath": "/dashboard",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Row,\n  Col,\n  DatePicker,\n  Statistic,\n  Button,\n  Select,\n  message,\n  ArrowUpOutlined,\n  ArrowDownOutlined,\n  ReloadOutlined,\n  DownloadOutlined,\n  SettingOutlined,\n  DollarOutlined,\n  OrderedListOutlined,\n  LineChartOutlined,\n  ShoppingOutlined,\n  RechartsArea,\n  AreaChart,\n  CartesianGrid,\n  ResponsiveContainer,\n  RechartsTooltip,\n  XAxis,\n  YAxis,\n  RangePicker,\n  Option,\n  Table,\n  Typography,\n  dashboardDataSource,\n  FC,\n} from '@/imports';\nimport { useLocale } from '../contexts/LocaleContext';\n\nconst DashboardPage: FC = () => {\n  const [timeRange, setTimeRange] = useState<any>(null);\n  const [shop, setShop] = useState<string>('all');\n  const [kpiData, setKpiData] = useState<any[]>([]);\n  const [trendData, setTrendData] = useState<any[]>([]);\n  const [topProducts, setTopProducts] = useState<any[]>([]);\n  const [recentOrders, setRecentOrders] = useState<any[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [productsLoading, setProductsLoading] = useState(false);\n  const [ordersLoading, setOrdersLoading] = useState(false);\n  const { t } = useLocale();\n\n  useEffect(() => {\n    loadDashboardData();\n    loadTopProducts();\n    loadRecentOrders();\n  }, [shop, timeRange]);\n\n  const loadDashboardData = async () => {\n    setLoading(true);\n    try {\n      const response = await dashboardDataSource.getDashboardData({\n        shop,\n        startDate: timeRange?.[0]?.format('YYYY-MM-DD'),\n        endDate: timeRange?.[1]?.format('YYYY-MM-DD'),\n      });\n      \n      // 为KPI数据添加图标\n      const kpiDataWithIcons = response.kpiData.map((kpi, index) => {\n        const icons = [\n          <DollarOutlined key=\"dollar\" />,\n          <OrderedListOutlined key=\"orders\" />,\n          <LineChartOutlined key=\"conversion\" />,\n          <ShoppingOutlined key=\"avg\" />,\n        ];\n        return {\n          ...kpi,\n          title: t(`dashboard.${['totalSales', 'orders', 'conversion', 'avgOrderValue'][index]}`),\n          icon: icons[index],\n        };\n      });\n      \n      setKpiData(kpiDataWithIcons);\n      setTrendData(response.trendData);\n    } catch (error) {\n      console.error('Failed to load dashboard data:', error);\n      message.error(t('common.error'));\n      // 错误时使用默认数据\n      setKpiData([\n        {\n          title: t('dashboard.totalSales'),\n          value: '¥128,500',\n          change: 12.5,\n          status: 'up',\n          icon: <DollarOutlined />,\n        },\n        {\n          title: t('dashboard.orders'),\n          value: '2,850',\n          change: 8.2,\n          status: 'up',\n          icon: <OrderedListOutlined />,\n        },\n        {\n          title: t('dashboard.conversion'),\n          value: '4.8%',\n          change: -1.2,\n          status: 'down',\n          icon: <LineChartOutlined />,\n        },\n        {\n          title: t('dashboard.avgOrderValue'),\n          value: '¥45.1',\n          change: 3.5,\n          status: 'up',\n          icon: <ShoppingOutlined />,\n        },\n      ]);\n      setTrendData([\n        { date: '1/1', sales: 12000, orders: 350 },\n        { date: '1/2', sales: 15000, orders: 420 },\n        { date: '1/3', sales: 18000, orders: 480 },\n        { date: '1/4', sales: 16000, orders: 430 },\n        { date: '1/5', sales: 20000, orders: 520 },\n        { date: '1/6', sales: 22000, orders: 550 },\n        { date: '1/7', sales: 25000, orders: 600 },\n      ]);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const loadTopProducts = async () => {\n    setProductsLoading(true);\n    try {\n      const products = await dashboardDataSource.getTopProducts(5);\n      setTopProducts(products);\n    } catch (error) {\n      console.error('Failed to load top products:', error);\n      setTopProducts([]);\n    } finally {\n      setProductsLoading(false);\n    }\n  };\n\n  const loadRecentOrders = async () => {\n    setOrdersLoading(true);\n    try {\n      const orders = await dashboardDataSource.getRecentOrders(5);\n      setRecentOrders(orders);\n    } catch (error) {\n      console.error('Failed to load recent orders:', error);\n      setRecentOrders([]);\n    } finally {\n      setOrdersLoading(false);\n    }\n  };\n\n  const handleTimeRangeChange = (dates: any) => {\n    setTimeRange(dates);\n  };\n\n  const handleShopChange = (value: string) => {\n    setShop(value);\n  };\n\n  const handleRefresh = () => {\n    loadDashboardData();\n    loadTopProducts();\n    loadRecentOrders();\n  };\n\n  const handleExport = async () => {\n    try {\n      await dashboardDataSource.getDashboardData({\n        shop,\n        startDate: timeRange?.[0]?.format('YYYY-MM-DD'),\n        endDate: timeRange?.[1]?.format('YYYY-MM-DD'),\n        export: true,\n      });\n      message.success(t('common.success'));\n    } catch (error) {\n      console.error('Failed to export report:', error);\n      message.error(t('common.error'));\n    }\n  };\n\n  const productColumns = [\n    {\n      title: t('dashboard.productName'),\n      dataIndex: 'name',\n      key: 'name',\n    },\n    {\n      title: t('dashboard.sales'),\n      dataIndex: 'sales',\n      key: 'sales',\n      render: (text: number) => `¥${text.toLocaleString()}`,\n    },\n    {\n      title: t('dashboard.quantity'),\n      dataIndex: 'quantity',\n      key: 'quantity',\n    },\n  ];\n\n  const orderColumns = [\n    {\n      title: t('dashboard.orderId'),\n      dataIndex: 'id',\n      key: 'id',\n    },\n    {\n      title: t('dashboard.customer'),\n      dataIndex: 'customer',\n      key: 'customer',\n    },\n    {\n      title: t('dashboard.amount'),\n      dataIndex: 'amount',\n      key: 'amount',\n      render: (text: number) => `¥${text.toLocaleString()}`,\n    },\n    {\n      title: t('dashboard.status'),\n      dataIndex: 'status',\n      key: 'status',\n    },\n    {\n      title: t('dashboard.date'),\n      dataIndex: 'date',\n      key: 'date',\n    },\n  ];\n\n  return (\n    <div className=\"dashboard-page\">\n      <div className=\"page-header\" style={{ marginBottom: 24, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n        <h1>\n          {t('dashboard.title')}\n        </h1>\n        <div style={{ display: 'flex', gap: 16, alignItems: 'center' }}>\n          <Select \n            value={shop} \n            style={{ width: 150 }} \n            onChange={handleShopChange}\n          >\n            <Option value=\"all\">\n              {t('dashboard.allShops')}\n            </Option>\n            <Option value=\"shop1\">Shop 1</Option>\n            <Option value=\"shop2\">Shop 2</Option>\n          </Select>\n          <RangePicker onChange={handleTimeRangeChange} />\n          <Button icon={<ReloadOutlined />} onClick={handleRefresh}>\n            {t('dashboard.refresh')}\n          </Button>\n          <Button icon={<DownloadOutlined />} onClick={handleExport}>\n            {t('dashboard.export')}\n          </Button>\n          <Button icon={<SettingOutlined />}>\n            {t('dashboard.customize')}\n          </Button>\n        </div>\n      </div>\n\n      <Row gutter={[16, 16]} style={{ marginBottom: 24 }}>\n        {kpiData.map((kpi, index) => (\n          <Col span={6} key={index}>\n            <Card>\n              <Statistic\n                title={kpi.title}\n                value={kpi.value}\n                prefix={kpi.icon}\n                suffix={\n                  <span style={{ color: kpi.status === 'up' ? '#52c41a' : '#f5222d' }}>\n                    {kpi.status === 'up' ? <ArrowUpOutlined /> : <ArrowDownOutlined />}\n                    {Math.abs(kpi.change)}%\n                  </span>\n                }\n              />\n            </Card>\n          </Col>\n        ))}\n      </Row>\n\n      <Card \n        title={t('dashboard.salesTrend')} \n        style={{ marginBottom: 24 }} \n        loading={loading}\n      >\n        <div style={{ height: 400 }}>\n          <ResponsiveContainer width=\"100%\" height=\"100%\">\n            <AreaChart\n              data={trendData}\n              margin={{ top: 10, right: 30, left: 0, bottom: 0 }}\n            >\n              <CartesianGrid strokeDasharray=\"3 3\" />\n              <XAxis dataKey=\"date\" />\n              <YAxis yAxisId=\"left\" />\n              <YAxis yAxisId=\"right\" orientation=\"right\" />\n              <RechartsTooltip />\n              <RechartsArea yAxisId=\"left\" type=\"monotone\" dataKey=\"sales\" stroke=\"#1890ff\" fill=\"#e6f7ff\" />\n              <RechartsArea yAxisId=\"right\" type=\"monotone\" dataKey=\"orders\" stroke=\"#52c41a\" fill=\"#f6ffed\" />\n            </AreaChart>\n          </ResponsiveContainer>\n        </div>\n      </Card>\n\n      <Row gutter={[16, 16]}>\n        <Col span={12}>\n          <Card title={t('dashboard.topProducts')} loading={productsLoading}>\n            {topProducts.length > 0 ? (\n              <Table \n                columns={productColumns} \n                dataSource={topProducts} \n                rowKey=\"id\" \n                pagination={false}\n                size=\"small\"\n              />\n            ) : (\n              <div style={{ height: 300, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n                <p>{t('common.noData')}</p>\n              </div>\n            )}\n          </Card>\n        </Col>\n        <Col span={12}>\n          <Card title={t('dashboard.recentOrders')} loading={ordersLoading}>\n            {recentOrders.length > 0 ? (\n              <Table \n                columns={orderColumns} \n                dataSource={recentOrders} \n                rowKey=\"id\" \n                pagination={false}\n                size=\"small\"\n              />\n            ) : (\n              <div style={{ height: 300, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n                <p>{t('common.noData')}</p>\n              </div>\n            )}\n          </Card>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nexport default DashboardPage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/DashboardPage.tsx"
    },
    "6": {
      "path": "/dashboard/ai-action-task-manager",
      "file": "@/pages/AIActionTaskManager.tsx",
      "parentId": "4",
      "id": "6",
      "absPath": "/dashboard/ai-action-task-manager",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Tag,\n  Button,\n  Space,\n  Modal,\n  Form,\n  Input,\n  Select,\n  DatePicker,\n  message,\n  Tooltip,\n  Row,\n  Col,\n  Statistic,\n  Badge,\n  Dropdown,\n  Menu,\n  Tabs,\n  Progress,\n  Alert,\n  Descriptions,\n  Timeline,\n  InputNumber,\n  Switch,\n  Steps,\n  PlayCircleOutlined,\n  PauseCircleOutlined,\n  StopOutlined,\n  ReloadOutlined,\n  SearchOutlined,\n  FilterOutlined,\n  CheckCircleOutlined,\n  ClockCircleOutlined,\n  SyncOutlined,\n  WarningOutlined,\n  MoreOutlined,\n  EyeOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  PlusOutlined,\n  SettingOutlined,\n  RocketOutlined,\n  ThunderboltOutlined,\n  FileTextOutlined,\n  BarChartOutlined,\n  UserOutlined,\n  RobotOutlined,\n  ArrowRightOutlined,\n  aiActionTaskDataSource,\n  Option,\n  RangePicker,\n  Step,\n  FC,\n} from '@/imports';\nimport type { AITask } from '@/services/aiActionTaskDataSource';\nimport type { ColumnsType } from 'antd/es/table';\n\nconst ACTION_TYPE_MAP: Record<string, { color: string; text: string; icon: React.ReactNode }> = {\n  PRICING_OPTIMIZATION: { color: 'blue', text: 'Pricing Optimization', icon: <BarChartOutlined /> },\n  ORDER_PROCESSING: { color: 'green', text: 'Order Processing', icon: <FileTextOutlined /> },\n  INVENTORY_MANAGEMENT: { color: 'purple', text: 'Inventory Management', icon: <RocketOutlined /> },\n  MARKETING_CAMPAIGN: { color: 'orange', text: 'Marketing Campaign', icon: <ThunderboltOutlined /> },\n  PRODUCT_OPTIMIZATION: { color: 'cyan', text: 'Product Optimization', icon: <SettingOutlined /> },\n  CUSTOM: { color: 'default', text: 'Custom Action', icon: <SettingOutlined /> },\n};\n\nconst TASK_STATUS_MAP: Record<string, { color: string; text: string; icon: React.ReactNode }> = {\n  PENDING: { color: 'default', text: 'Pending', icon: <ClockCircleOutlined /> },\n  AI_ANALYZING: { color: 'processing', text: 'AI Analyzing', icon: <RobotOutlined /> },\n  PENDING_REVIEW: { color: 'warning', text: 'Pending Review', icon: <UserOutlined /> },\n  APPROVED: { color: 'success', text: 'Approved', icon: <CheckCircleOutlined /> },\n  REJECTED: { color: 'error', text: 'Rejected', icon: <StopOutlined /> },\n  AI_EXECUTING: { color: 'processing', text: 'AI Executing', icon: <RobotOutlined /> },\n  COMPLETED: { color: 'success', text: 'Completed', icon: <CheckCircleOutlined /> },\n  FAILED: { color: 'error', text: 'Failed', icon: <WarningOutlined /> },\n};\n\nconst PRIORITY_MAP: Record<string, { color: string; text: string }> = {\n  LOW: { color: 'default', text: 'Low' },\n  MEDIUM: { color: 'blue', text: 'Medium' },\n  HIGH: { color: 'orange', text: 'High' },\n  URGENT: { color: 'red', text: 'Urgent' },\n};\n\nconst AIActionTaskManager: React.FC = () => {\n  const [loading, setLoading] = useState(false);\n  const [tasks, setTasks] = useState<AITask[]>([]);\n  const [selectedTask, setSelectedTask] = useState<AITask | null>(null);\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\n  const [createModalVisible, setCreateModalVisible] = useState(false);\n  const [editModalVisible, setEditModalVisible] = useState(false);\n  const [activeTab, setActiveTab] = useState('all');\n  const [searchText, setSearchText] = useState('');\n  const [filterStatus, setFilterStatus] = useState<string>('');\n  const [filterType, setFilterType] = useState<string>('');\n  const [filterPriority, setFilterPriority] = useState<string>('');\n  const [stats, setStats] = useState({\n    total: 0,\n    pending: 0,\n    analyzing: 0,\n    pendingReview: 0,\n    approved: 0,\n    rejected: 0,\n    executing: 0,\n    completed: 0,\n    failed: 0,\n  });\n  const [createForm] = Form.useForm();\n  const [editForm] = Form.useForm();\n\n  useEffect(() => {\n    fetchTasks();\n    const interval = setInterval(fetchTasks, 5000);\n    return () => clearInterval(interval);\n  }, [activeTab, searchText, filterType, filterPriority]);\n\n  const fetchTasks = async () => {\n    setLoading(true);\n    try {\n      const [tasks, stats] = await Promise.all([\n        aiActionTaskDataSource.fetchTasks({\n          status: activeTab !== 'all' ? activeTab : undefined,\n          search: searchText || undefined,\n          actionType: filterType || undefined,\n          priority: filterPriority || undefined,\n        }),\n        aiActionTaskDataSource.getTaskStats(),\n      ]);\n      setTasks(tasks);\n      setStats(stats);\n    } catch (error) {\n      message.error('Failed to load tasks');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const calculateStats = (taskList: AITask[]) => {\n    setStats({\n      total: taskList.length,\n      pending: taskList.filter((t) => t.status === 'PENDING').length,\n      analyzing: taskList.filter((t) => t.status === 'AI_ANALYZING').length,\n      pendingReview: taskList.filter((t) => t.status === 'PENDING_REVIEW').length,\n      approved: taskList.filter((t) => t.status === 'APPROVED').length,\n      rejected: taskList.filter((t) => t.status === 'REJECTED').length,\n      executing: taskList.filter((t) => t.status === 'AI_EXECUTING').length,\n      completed: taskList.filter((t) => t.status === 'COMPLETED').length,\n      failed: taskList.filter((t) => t.status === 'FAILED').length,\n    });\n  };\n\n  const handleViewDetail = (task: AITask) => {\n    setSelectedTask(task);\n    setDetailModalVisible(true);\n  };\n\n  const handleStart = async (taskId: string) => {\n    setLoading(true);\n    try {\n      await aiActionTaskDataSource.startTask(taskId);\n      message.success('Task started successfully');\n      fetchTasks();\n    } catch (error) {\n      message.error('Failed to start task');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handlePause = async (taskId: string) => {\n    setLoading(true);\n    try {\n      await aiActionTaskDataSource.pauseTask(taskId);\n      message.success('Task paused successfully');\n      fetchTasks();\n    } catch (error) {\n      message.error('Failed to pause task');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleStop = async (taskId: string) => {\n    setLoading(true);\n    try {\n      await aiActionTaskDataSource.stopTask(taskId);\n      message.success('Task stopped successfully');\n      fetchTasks();\n    } catch (error) {\n      message.error('Failed to stop task');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleRetry = async (taskId: string) => {\n    setLoading(true);\n    try {\n      await aiActionTaskDataSource.retryTask(taskId);\n      message.success('Task retry initiated');\n      fetchTasks();\n    } catch (error) {\n      message.error('Failed to retry task');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleDelete = async (taskId: string) => {\n    setLoading(true);\n    try {\n      await aiActionTaskDataSource.deleteTask(taskId);\n      message.success('Task deleted successfully');\n      fetchTasks();\n    } catch (error) {\n      message.error('Failed to delete task');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleApprove = async (taskId: string) => {\n    setLoading(true);\n    try {\n      await aiActionTaskDataSource.approveTask(taskId);\n      message.success('Task approved successfully');\n      fetchTasks();\n    } catch (error) {\n      message.error('Failed to approve task');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleReject = async (taskId: string) => {\n    setLoading(true);\n    try {\n      await aiActionTaskDataSource.rejectTask(taskId);\n      message.success('Task rejected successfully');\n      fetchTasks();\n    } catch (error) {\n      message.error('Failed to reject task');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleCreate = () => {\n    createForm.resetFields();\n    setCreateModalVisible(true);\n  };\n\n  const handleCreateSubmit = async () => {\n    try {\n      const values = await createForm.validateFields();\n      await aiActionTaskDataSource.createTask({\n        name: values.name,\n        actionType: values.actionType,\n        priority: values.priority,\n        estimatedDuration: values.estimatedDuration,\n        maxRetries: values.maxRetries,\n        shopId: 'SHOP_001',\n        shopName: 'Amazon US Store',\n        createdBy: 'admin',\n      });\n      message.success('Task created successfully');\n      setCreateModalVisible(false);\n      fetchTasks();\n    } catch (error) {\n      message.error('Failed to create task');\n    }\n  };\n\n  const handleEdit = (task: AITask) => {\n    setSelectedTask(task);\n    editForm.setFieldsValue({\n      name: task.name,\n      actionType: task.actionType,\n      priority: task.priority,\n      maxRetries: task.maxRetries,\n    });\n    setEditModalVisible(true);\n  };\n\n  const handleEditSubmit = async () => {\n    try {\n      const values = await editForm.validateFields();\n      if (selectedTask) {\n        await aiActionTaskDataSource.updateTask(selectedTask.id, {\n          name: values.name,\n          actionType: values.actionType,\n          priority: values.priority,\n          maxRetries: values.maxRetries,\n        });\n        message.success('Task updated successfully');\n        setEditModalVisible(false);\n        fetchTasks();\n      }\n    } catch (error) {\n      message.error('Failed to update task');\n    }\n  };\n\n  const handleSearch = (value: string) => {\n    setSearchText(value);\n  };\n\n  const handleFilter = (field: string, value: string) => {\n    if (field === 'status') setFilterStatus(value);\n    if (field === 'type') setFilterType(value);\n    if (field === 'priority') setFilterPriority(value);\n  };\n\n  const getFilteredTasks = () => {\n    return tasks;\n  };\n\n  const columns: ColumnsType<AITask> = [\n    {\n      title: 'Task ID',\n      dataIndex: 'taskId',\n      key: 'taskId',\n      width: 140,\n      render: (text: string, record) => (\n        <a onClick={() => handleViewDetail(record)}>{text}</a>\n      ),\n    },\n    {\n      title: 'Name',\n      dataIndex: 'name',\n      key: 'name',\n      width: 200,\n    },\n    {\n      title: 'Action Type',\n      dataIndex: 'actionType',\n      key: 'actionType',\n      width: 150,\n      filters: Object.keys(ACTION_TYPE_MAP).map((key) => ({\n        text: ACTION_TYPE_MAP[key].text,\n        value: key,\n      })),\n      render: (type: string) => {\n        const config = ACTION_TYPE_MAP[type];\n        return <Tag icon={config.icon} color={config.color}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: 'Status',\n      dataIndex: 'status',\n      key: 'status',\n      width: 130,\n      filters: Object.keys(TASK_STATUS_MAP).map((key) => ({\n        text: TASK_STATUS_MAP[key].text,\n        value: key,\n      })),\n      render: (status: string) => {\n        const config = TASK_STATUS_MAP[status];\n        return <Tag icon={config.icon} color={config.color}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: 'Priority',\n      dataIndex: 'priority',\n      key: 'priority',\n      width: 90,\n      filters: Object.keys(PRIORITY_MAP).map((key) => ({\n        text: PRIORITY_MAP[key].text,\n        value: key,\n      })),\n      render: (priority: string) => {\n        const config = PRIORITY_MAP[priority];\n        return <Tag color={config.color}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: 'Progress',\n      dataIndex: 'progress',\n      key: 'progress',\n      width: 150,\n      render: (progress: number, record) => (\n        <Progress\n          percent={progress}\n          status={record.status === 'FAILED' ? 'exception' : record.status === 'COMPLETED' ? 'success' : 'active'}\n          size=\"small\"\n        />\n      ),\n    },\n    {\n      title: 'Shop',\n      dataIndex: 'shopName',\n      key: 'shopName',\n      width: 150,\n    },\n    {\n      title: 'Created',\n      dataIndex: 'createdAt',\n      key: 'createdAt',\n      width: 160,\n    },\n    {\n      title: 'Actions',\n      key: 'action',\n      width: 250,\n      fixed: 'right',\n      render: (_, record) => (\n        <Space size=\"small\">\n          <Tooltip title=\"View Details\">\n            <Button type=\"link\" icon={<EyeOutlined />} onClick={() => handleViewDetail(record)} />\n          </Tooltip>\n          {record.status === 'PENDING' && (\n            <Tooltip title=\"Start Task\">\n              <Button type=\"link\" icon={<PlayCircleOutlined />} onClick={() => record.taskId && handleStart(record.taskId)} />\n            </Tooltip>\n          )}\n          {record.status === 'AI_ANALYZING' && (\n            <Tooltip title=\"Stop Task\">\n              <Button type=\"link\" danger icon={<StopOutlined />} onClick={() => record.taskId && handleStop(record.taskId)} />\n            </Tooltip>\n          )}\n          {record.status === 'PENDING_REVIEW' && (\n            <>\n              <Tooltip title=\"Approve\">\n                <Button type=\"link\" icon={<CheckCircleOutlined />} onClick={() => record.taskId && handleApprove(record.taskId)} />\n              </Tooltip>\n              <Tooltip title=\"Reject\">\n                <Button type=\"link\" danger icon={<StopOutlined />} onClick={() => record.taskId && handleReject(record.taskId)} />\n              </Tooltip>\n            </>\n          )}\n          {record.status === 'AI_EXECUTING' && (\n            <Tooltip title=\"Stop Task\">\n              <Button type=\"link\" danger icon={<StopOutlined />} onClick={() => record.taskId && handleStop(record.taskId)} />\n            </Tooltip>\n          )}\n          {record.status === 'FAILED' && (record.retryCount || 0) < (record.maxRetries || 0) && (\n            <Tooltip title=\"Retry Task\">\n              <Button type=\"link\" icon={<ReloadOutlined />} onClick={() => record.taskId && handleRetry(record.taskId)} />\n            </Tooltip>\n          )}\n          <Tooltip title=\"Edit Task\">\n            <Button type=\"link\" icon={<EditOutlined />} onClick={() => handleEdit(record)} />\n          </Tooltip>\n          <Dropdown\n            overlay={\n              <Menu>\n                <Menu.Item key=\"delete\" danger onClick={() => record.taskId && handleDelete(record.taskId)}>\n                  Delete Task\n                </Menu.Item>\n              </Menu>\n            }\n          >\n            <Button type=\"link\" icon={<MoreOutlined />} />\n          </Dropdown>\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"ai-action-task-manager\">\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={4}>\n          <Card>\n            <Statistic title=\"Total Tasks\" value={stats.total} />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"Pending\"\n              value={stats.pending}\n              valueStyle={{ color: '#faad14' }}\n              prefix={<ClockCircleOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"Analyzing\"\n              value={stats.analyzing}\n              valueStyle={{ color: '#1890ff' }}\n              prefix={<RobotOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"Pending Review\"\n              value={stats.pendingReview}\n              valueStyle={{ color: '#fa8c16' }}\n              prefix={<UserOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"Executing\"\n              value={stats.executing}\n              valueStyle={{ color: '#1890ff' }}\n              prefix={<RobotOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleCreate} block>\n              Create Task\n            </Button>\n          </Card>\n        </Col>\n      </Row>\n\n      <Card\n        title=\"AI Action Task Manager\"\n        extra={\n          <Space size=\"middle\">\n            <Input.Search\n              placeholder=\"Search tasks...\"\n              onSearch={handleSearch}\n              style={{ width: 200 }}\n            />\n            <Select\n              placeholder=\"Filter by status\"\n              style={{ width: 120 }}\n              onChange={(value) => handleFilter('status', value)}\n            >\n              <Option value=\"\">All</Option>\n              {Object.keys(TASK_STATUS_MAP).map((key) => (\n                <Option key={key} value={key}>{TASK_STATUS_MAP[key].text}</Option>\n              ))}\n            </Select>\n            <Select\n              placeholder=\"Filter by type\"\n              style={{ width: 150 }}\n              onChange={(value) => handleFilter('type', value)}\n            >\n              <Option value=\"\">All</Option>\n              {Object.keys(ACTION_TYPE_MAP).map((key) => (\n                <Option key={key} value={key}>{ACTION_TYPE_MAP[key].text}</Option>\n              ))}\n            </Select>\n            <Select\n              placeholder=\"Filter by priority\"\n              style={{ width: 100 }}\n              onChange={(value) => handleFilter('priority', value)}\n            >\n              <Option value=\"\">All</Option>\n              {Object.keys(PRIORITY_MAP).map((key) => (\n                <Option key={key} value={key}>{PRIORITY_MAP[key].text}</Option>\n              ))}\n            </Select>\n          </Space>\n        }\n      >\n        <Tabs \n          activeKey={activeTab} \n          onChange={setActiveTab}\n          items={[\n            { label: 'All', key: 'all' },\n            { label: 'Pending', key: 'PENDING' },\n            { label: 'Analyzing', key: 'AI_ANALYZING' },\n            { label: 'Pending Review', key: 'PENDING_REVIEW' },\n            { label: 'Executing', key: 'AI_EXECUTING' },\n            { label: 'Completed', key: 'COMPLETED' },\n            { label: 'Failed', key: 'FAILED' },\n          ]}\n        />\n\n        <Table\n          columns={columns}\n          dataSource={getFilteredTasks()}\n          rowKey=\"id\"\n          loading={loading}\n          pagination={{ pageSize: 10 }}\n        />\n      </Card>\n\n      <Modal\n        title=\"Task Details\"\n        open={detailModalVisible}\n        onCancel={() => setDetailModalVisible(false)}\n        footer={[\n          <Button key=\"close\" onClick={() => setDetailModalVisible(false)}>\n            Close\n          </Button>,\n        ]}\n        width={800}\n      >\n        {selectedTask && (\n          <div>\n            <Descriptions title=\"Task Information\" bordered>\n              <Descriptions.Item label=\"Task ID\">{selectedTask.taskId}</Descriptions.Item>\n              <Descriptions.Item label=\"Name\">{selectedTask.name}</Descriptions.Item>\n              <Descriptions.Item label=\"Action Type\">\n                <Tag color={ACTION_TYPE_MAP[selectedTask.actionType]?.color}>\n                  {ACTION_TYPE_MAP[selectedTask.actionType]?.text}\n                </Tag>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"Status\">\n                <Tag color={TASK_STATUS_MAP[selectedTask.status]?.color}>\n                  {TASK_STATUS_MAP[selectedTask.status]?.text}\n                </Tag>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"Priority\">\n                <Tag color={PRIORITY_MAP[selectedTask.priority]?.color}>\n                  {PRIORITY_MAP[selectedTask.priority]?.text}\n                </Tag>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"Progress\">\n                <Progress percent={selectedTask.progress} size=\"small\" />\n              </Descriptions.Item>\n              <Descriptions.Item label=\"Shop\">{selectedTask.shopName}</Descriptions.Item>\n              <Descriptions.Item label=\"Created By\">{selectedTask.createdBy}</Descriptions.Item>\n              <Descriptions.Item label=\"Created At\" span={3}>{selectedTask.createdAt}</Descriptions.Item>\n              {selectedTask.startedAt && (\n                <Descriptions.Item label=\"Started At\" span={3}>{selectedTask.startedAt}</Descriptions.Item>\n              )}\n              {selectedTask.completedAt && (\n                <Descriptions.Item label=\"Completed At\" span={3}>{selectedTask.completedAt}</Descriptions.Item>\n              )}\n              <Descriptions.Item label=\"Estimated Duration\" span={1}>{selectedTask.estimatedDuration} minutes</Descriptions.Item>\n              {selectedTask.actualDuration && (\n                <Descriptions.Item label=\"Actual Duration\" span={2}>{selectedTask.actualDuration} minutes</Descriptions.Item>\n              )}\n              <Descriptions.Item label=\"Retry Count\" span={1}>{selectedTask.retryCount}/{selectedTask.maxRetries}</Descriptions.Item>\n              {selectedTask.errorMessage && (\n                <Descriptions.Item label=\"Error Message\" span={3}>\n                  <Alert message={selectedTask.errorMessage} type=\"error\" showIcon />\n                </Descriptions.Item>\n              )}\n            </Descriptions>\n\n            {selectedTask.aiSuggestion && (\n              <div style={{ marginTop: 20 }}>\n                <h3>AI Suggestion</h3>\n                <Card>\n                  {Object.entries(selectedTask.aiSuggestion).map(([key, value]) => (\n                    <p key={key}>\n                      <strong>{key}:</strong> {typeof value === 'object' ? JSON.stringify(value) : String(value)}\n                    </p>\n                  ))}\n                </Card>\n              </div>\n            )}\n\n            {selectedTask.executionResult && (\n              <div style={{ marginTop: 20 }}>\n                <h3>Execution Result</h3>\n                <Card>\n                  {Object.entries(selectedTask.executionResult).map(([key, value]) => (\n                    <p key={key}>\n                      <strong>{key}:</strong> {typeof value === 'object' ? JSON.stringify(value) : String(value)}\n                    </p>\n                  ))}\n                </Card>\n              </div>\n            )}\n\n            <div style={{ marginTop: 20 }}>\n              <h3>Task Timeline</h3>\n              <Timeline>\n                <Timeline.Item>Task created at {selectedTask.createdAt}</Timeline.Item>\n                {selectedTask.startedAt && (\n                  <Timeline.Item>Task started at {selectedTask.startedAt}</Timeline.Item>\n                )}\n                {selectedTask.status === 'COMPLETED' && selectedTask.completedAt && (\n                  <Timeline.Item color=\"green\">Task completed at {selectedTask.completedAt}</Timeline.Item>\n                )}\n                {selectedTask.status === 'FAILED' && (\n                  <Timeline.Item color=\"red\">Task failed</Timeline.Item>\n                )}\n              </Timeline>\n            </div>\n          </div>\n        )}\n      </Modal>\n\n      <Modal\n        title=\"Create Task\"\n        open={createModalVisible}\n        onCancel={() => setCreateModalVisible(false)}\n        onOk={handleCreateSubmit}\n      >\n        <Form form={createForm} layout=\"vertical\">\n          <Form.Item\n            name=\"name\"\n            label=\"Task Name\"\n            rules={[{ required: true, message: 'Please enter task name' }]}\n          >\n            <Input placeholder=\"Enter task name\" />\n          </Form.Item>\n          <Form.Item\n            name=\"actionType\"\n            label=\"Action Type\"\n            rules={[{ required: true, message: 'Please select action type' }]}\n          >\n            <Select placeholder=\"Select action type\">\n              {Object.keys(ACTION_TYPE_MAP).map((key) => (\n                <Option key={key} value={key}>{ACTION_TYPE_MAP[key].text}</Option>\n              ))}\n            </Select>\n          </Form.Item>\n          <Form.Item\n            name=\"priority\"\n            label=\"Priority\"\n            rules={[{ required: true, message: 'Please select priority' }]}\n          >\n            <Select placeholder=\"Select priority\">\n              {Object.keys(PRIORITY_MAP).map((key) => (\n                <Option key={key} value={key}>{PRIORITY_MAP[key].text}</Option>\n              ))}\n            </Select>\n          </Form.Item>\n          <Form.Item\n            name=\"maxRetries\"\n            label=\"Max Retries\"\n            rules={[{ required: true, message: 'Please enter max retries' }]}\n          >\n            <InputNumber min={0} max={10} defaultValue={3} />\n          </Form.Item>\n          <Form.Item\n            name=\"estimatedDuration\"\n            label=\"Estimated Duration (minutes)\"\n            rules={[{ required: true, message: 'Please enter estimated duration' }]}\n          >\n            <InputNumber min={1} defaultValue={30} />\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"Edit Task\"\n        open={editModalVisible}\n        onCancel={() => setEditModalVisible(false)}\n        onOk={handleEditSubmit}\n      >\n        <Form form={editForm} layout=\"vertical\">\n          <Form.Item\n            name=\"name\"\n            label=\"Task Name\"\n            rules={[{ required: true, message: 'Please enter task name' }]}\n          >\n            <Input placeholder=\"Enter task name\" />\n          </Form.Item>\n          <Form.Item\n            name=\"actionType\"\n            label=\"Action Type\"\n            rules={[{ required: true, message: 'Please select action type' }]}\n          >\n            <Select placeholder=\"Select action type\">\n              {Object.keys(ACTION_TYPE_MAP).map((key) => (\n                <Option key={key} value={key}>{ACTION_TYPE_MAP[key].text}</Option>\n              ))}\n            </Select>\n          </Form.Item>\n          <Form.Item\n            name=\"priority\"\n            label=\"Priority\"\n            rules={[{ required: true, message: 'Please select priority' }]}\n          >\n            <Select placeholder=\"Select priority\">\n              {Object.keys(PRIORITY_MAP).map((key) => (\n                <Option key={key} value={key}>{PRIORITY_MAP[key].text}</Option>\n              ))}\n            </Select>\n          </Form.Item>\n          <Form.Item\n            name=\"maxRetries\"\n            label=\"Max Retries\"\n            rules={[{ required: true, message: 'Please enter max retries' }]}\n          >\n            <InputNumber min={0} max={10} />\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default AIActionTaskManager;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/AIActionTaskManager.tsx"
    },
    "7": {
      "path": "/dashboard/ai-suggestion",
      "file": "@/pages/AISuggestionPage.tsx",
      "parentId": "4",
      "id": "7",
      "absPath": "/dashboard/ai-suggestion",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Button,\n  Space,\n  message,\n  Row,\n  Col,\n  Select,\n  Input,\n  Tag,\n  Badge,\n  RobotOutlined,\n  ReloadOutlined,\n  FilterOutlined,\n  SearchOutlined,\n  PlusOutlined,\n  aiSuggestionDataSource,\n  Option,\n  FC,\n} from '@/imports';\nimport type { AISuggestion } from '../services/aiSuggestionDataSource';\nimport AISuggestionDisplay from '../components/ai-suggestion/AISuggestionDisplay';\n\nconst AISuggestionPage: FC = () => {\n  const [suggestions, setSuggestions] = useState<AISuggestion[]>([]);\n  const [selectedSuggestion, setSelectedSuggestion] = useState<AISuggestion | null>(null);\n  const [filterType, setFilterType] = useState<string>('');\n  const [filterPriority, setFilterPriority] = useState<string>('');\n  const [searchText, setSearchText] = useState<string>('');\n  const [loading, setLoading] = useState(false);\n\n  useEffect(() => {\n    fetchSuggestions();\n  }, [filterType, filterPriority, searchText]);\n\n  const fetchSuggestions = async () => {\n    setLoading(true);\n    try {\n      const data = await aiSuggestionDataSource.fetchSuggestions({\n        type: filterType || undefined,\n        priority: filterPriority || undefined,\n        search: searchText || undefined,\n      });\n      setSuggestions(data);\n      if (data.length > 0 && !selectedSuggestion) {\n        setSelectedSuggestion(data[0]);\n      }\n    } catch (error) {\n      message.error('Failed to load suggestions');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleApprove = async () => {\n    if (selectedSuggestion) {\n      setLoading(true);\n      try {\n        await aiSuggestionDataSource.approveSuggestion(selectedSuggestion.id);\n        message.success('Suggestion approved!');\n        fetchSuggestions();\n      } catch (error) {\n        message.error('Failed to approve suggestion');\n      } finally {\n        setLoading(false);\n      }\n    }\n  };\n\n  const handleReject = async () => {\n    if (selectedSuggestion) {\n      setLoading(true);\n      try {\n        await aiSuggestionDataSource.rejectSuggestion(selectedSuggestion.id);\n        message.error('Suggestion rejected!');\n        fetchSuggestions();\n      } catch (error) {\n        message.error('Failed to reject suggestion');\n      } finally {\n        setLoading(false);\n      }\n    }\n  };\n\n  const handleModify = () => {\n    message.info('Modify suggestion clicked!');\n  };\n\n  const handleSelectSuggestion = (suggestion: AISuggestion) => {\n    setSelectedSuggestion(suggestion);\n  };\n\n  const handleSearch = (value: string) => {\n    setSearchText(value);\n  };\n\n  const handleFilter = (field: string, value: string) => {\n    if (field === 'type') setFilterType(value);\n    if (field === 'priority') setFilterPriority(value);\n  };\n\n  const getFilteredSuggestions = () => {\n    return suggestions;\n  };\n\n  return (\n    <div className=\"ai-suggestion-page\">\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={16}>\n          <Card\n            title={\n              <Space size=\"middle\">\n                <RobotOutlined style={{ color: '#1890ff' }} />\n                <span>AI Suggestions</span>\n              </Space>\n            }\n            extra={\n              <Button icon={<ReloadOutlined />}>\n                Refresh\n              </Button>\n            }\n          >\n            <Row gutter={16} style={{ marginBottom: 16 }}>\n              <Col span={8}>\n                <Input\n                  placeholder=\"Search suggestions\"\n                  prefix={<SearchOutlined />}\n                  value={searchText}\n                  onChange={(e) => handleSearch(e.target.value)}\n                  allowClear\n                />\n              </Col>\n              <Col span={6}>\n                <Select\n                  placeholder=\"Filter by type\"\n                  value={filterType}\n                  onChange={(value) => handleFilter('type', value)}\n                  allowClear\n                  style={{ width: '100%' }}\n                >\n                  <Option value=\"Pricing Optimization\">Pricing Optimization</Option>\n                  <Option value=\"Inventory Management\">Inventory Management</Option>\n                  <Option value=\"Marketing Campaign\">Marketing Campaign</Option>\n                </Select>\n              </Col>\n              <Col span={6}>\n                <Select\n                  placeholder=\"Filter by priority\"\n                  value={filterPriority}\n                  onChange={(value) => handleFilter('priority', value)}\n                  allowClear\n                  style={{ width: '100%' }}\n                >\n                  <Option value=\"low\">Low</Option>\n                  <Option value=\"medium\">Medium</Option>\n                  <Option value=\"high\">High</Option>\n                  <Option value=\"urgent\">Urgent</Option>\n                </Select>\n              </Col>\n              <Col span={4}>\n                <Button type=\"primary\" icon={<PlusOutlined />} block>\n                  New Suggestion\n                </Button>\n              </Col>\n            </Row>\n            <div style={{ maxHeight: 600, overflowY: 'auto' }}>\n              {getFilteredSuggestions().map((suggestion) => (\n                <Card\n                  key={suggestion.id}\n                  onClick={() => handleSelectSuggestion(suggestion)}\n                  style={{\n                    marginBottom: 16,\n                    cursor: 'pointer',\n                    border: selectedSuggestion?.id === suggestion.id ? '2px solid #1890ff' : '1px solid #f0f0f0',\n                  }}\n                >\n                  <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n                    <Space size=\"middle\">\n                      <Tag color={suggestion.type === 'Pricing Optimization' ? 'blue' : suggestion.type === 'Inventory Management' ? 'green' : 'orange'}>\n                        {suggestion.type}\n                      </Tag>\n                      <Badge\n                        status={suggestion.priority === 'urgent' ? 'error' : suggestion.priority === 'high' ? 'warning' : 'default'}\n                        text={suggestion.priority}\n                      />\n                    </Space>\n                    <Space size=\"middle\">\n                      <Tag color=\"default\">Confidence: {suggestion.confidence}%</Tag>\n                    </Space>\n                  </div>\n                  <h3 style={{ marginTop: 8, marginBottom: 4 }}>{suggestion.title}</h3>\n                  <p style={{ marginBottom: 8, color: '#666' }}>{suggestion.description.substring(0, 100)}...</p>\n                  <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n                    <Space size=\"small\">\n                      {suggestion.dataSources.map((source) => (\n                        <Tag key={source}>{source}</Tag>\n                      ))}\n                    </Space>\n                    <span style={{ fontSize: 12, color: '#999' }}>{suggestion.updatedAt}</span>\n                  </div>\n                </Card>\n              ))}\n            </div>\n          </Card>\n        </Col>\n        <Col span={8}>\n          {selectedSuggestion && (\n            <AISuggestionDisplay\n              suggestion={selectedSuggestion}\n              onApprove={handleApprove}\n              onReject={handleReject}\n              onModify={handleModify}\n            />\n          )}\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nexport default AISuggestionPage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/AISuggestionPage.tsx"
    },
    "8": {
      "path": "/dashboard/human-approval",
      "file": "@/pages/HumanApprovalPage.tsx",
      "parentId": "4",
      "id": "8",
      "absPath": "/dashboard/human-approval",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Tag,\n  Button,\n  Space,\n  Modal,\n  message,\n  Row,\n  Col,\n  Input,\n  Select,\n  Badge,\n  Tabs,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  EyeOutlined,\n  ClockCircleOutlined,\n  SearchOutlined,\n  FilterOutlined,\n  ReloadOutlined,\n  humanApprovalDataSource,\n  Option,\n  FC,\n} from '@/imports';\nimport type { Task } from '../services/humanApprovalDataSource';\nimport HumanApprovalForm from '../components/human-approval/HumanApprovalForm';\nimport AISuggestionDisplay from '../components/ai-suggestion/AISuggestionDisplay';\n\nconst ACTION_TYPE_MAP: Record<string, { color: string; text: string }> = {\n  PRICING_OPTIMIZATION: { color: 'blue', text: 'Pricing Optimization' },\n  ORDER_PROCESSING: { color: 'green', text: 'Order Processing' },\n  INVENTORY_MANAGEMENT: { color: 'purple', text: 'Inventory Management' },\n  MARKETING_CAMPAIGN: { color: 'orange', text: 'Marketing Campaign' },\n  PRODUCT_OPTIMIZATION: { color: 'cyan', text: 'Product Optimization' },\n  CUSTOM: { color: 'default', text: 'Custom Action' },\n};\n\nconst TASK_STATUS_MAP: Record<string, { color: string; text: string }> = {\n  PENDING: { color: 'default', text: 'Pending' },\n  AI_ANALYZING: { color: 'processing', text: 'AI Analyzing' },\n  PENDING_REVIEW: { color: 'warning', text: 'Pending Review' },\n  APPROVED: { color: 'success', text: 'Approved' },\n  REJECTED: { color: 'error', text: 'Rejected' },\n  AI_EXECUTING: { color: 'processing', text: 'AI Executing' },\n  COMPLETED: { color: 'success', text: 'Completed' },\n  FAILED: { color: 'error', text: 'Failed' },\n};\n\nconst PRIORITY_MAP: Record<string, { color: string; text: string }> = {\n  LOW: { color: 'default', text: 'Low' },\n  MEDIUM: { color: 'blue', text: 'Medium' },\n  HIGH: { color: 'orange', text: 'High' },\n  URGENT: { color: 'red', text: 'Urgent' },\n};\n\nconst HumanApprovalPage: FC = () => {\n  const [tasks, setTasks] = useState<Task[]>([]);\n  const [selectedTask, setSelectedTask] = useState<Task | null>(null);\n  const [approvalModalVisible, setApprovalModalVisible] = useState(false);\n  const [suggestionModalVisible, setSuggestionModalVisible] = useState(false);\n  const [loading, setLoading] = useState(false);\n  const [searchText, setSearchText] = useState('');\n  const [filterType, setFilterType] = useState<string>('');\n  const [filterPriority, setFilterPriority] = useState<string>('');\n  const [activeTab, setActiveTab] = useState('pending');\n\n  useEffect(() => {\n    fetchTasks();\n  }, []);\n\n  const fetchTasks = async () => {\n    setLoading(true);\n    try {\n      const tasks = await humanApprovalDataSource.fetchTasks({\n        status: activeTab === 'pending' ? 'PENDING_REVIEW' : \n                activeTab === 'approved' ? 'APPROVED' : \n                activeTab === 'rejected' ? 'REJECTED' : undefined,\n        actionType: filterType || undefined,\n        priority: filterPriority || undefined,\n        search: searchText || undefined,\n      });\n      setTasks(tasks);\n    } catch (error) {\n      message.error('Failed to load tasks');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleApprove = async (formData: any) => {\n    setLoading(true);\n    try {\n      if (selectedTask) {\n        await humanApprovalDataSource.approveTask(selectedTask.id, formData);\n        message.success('Task approved successfully');\n        setApprovalModalVisible(false);\n        fetchTasks();\n      }\n    } catch (error) {\n      message.error('Failed to approve task');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleReject = async (reason: string) => {\n    setLoading(true);\n    try {\n      if (selectedTask) {\n        await humanApprovalDataSource.rejectTask(selectedTask.id, reason);\n        message.success('Task rejected successfully');\n        setApprovalModalVisible(false);\n        fetchTasks();\n      }\n    } catch (error) {\n      message.error('Failed to reject task');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleModify = async (modifiedData: any) => {\n    setLoading(true);\n    try {\n      if (selectedTask) {\n        await humanApprovalDataSource.modifyTask(selectedTask.id, modifiedData);\n        message.success('Task modified and approved successfully');\n        setApprovalModalVisible(false);\n        fetchTasks();\n      }\n    } catch (error) {\n      message.error('Failed to modify task');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleViewSuggestion = (task: Task) => {\n    setSelectedTask(task);\n    setSuggestionModalVisible(true);\n  };\n\n  const handleApproveTask = (task: Task) => {\n    setSelectedTask(task);\n    setApprovalModalVisible(true);\n  };\n\n  const handleSearch = (value: string) => {\n    setSearchText(value);\n  };\n\n  const handleFilter = (field: string, value: string) => {\n    if (field === 'type') setFilterType(value);\n    if (field === 'priority') setFilterPriority(value);\n  };\n\n  const getFilteredTasks = () => {\n    let filtered = tasks;\n\n    if (activeTab === 'pending') {\n      filtered = filtered.filter((t) => t.status === 'PENDING_REVIEW');\n    } else if (activeTab === 'approved') {\n      filtered = filtered.filter((t) => t.status === 'APPROVED');\n    } else if (activeTab === 'rejected') {\n      filtered = filtered.filter((t) => t.status === 'REJECTED');\n    }\n\n    if (searchText) {\n      filtered = filtered.filter(\n        (t) =>\n          (t.taskId || '').toLowerCase().includes(searchText.toLowerCase()) ||\n          t.name.toLowerCase().includes(searchText.toLowerCase())\n      );\n    }\n\n    if (filterType) {\n      filtered = filtered.filter((t) => t.actionType === filterType);\n    }\n\n    if (filterPriority) {\n      filtered = filtered.filter((t) => t.priority === filterPriority);\n    }\n\n    return filtered;\n  };\n\n  const columns = [\n    {\n      title: 'Task ID',\n      dataIndex: 'taskId',\n      key: 'taskId',\n      width: 140,\n    },\n    {\n      title: 'Name',\n      dataIndex: 'name',\n      key: 'name',\n      width: 200,\n    },\n    {\n      title: 'Action Type',\n      dataIndex: 'actionType',\n      key: 'actionType',\n      width: 150,\n      filters: Object.keys(ACTION_TYPE_MAP).map((key) => ({\n        text: ACTION_TYPE_MAP[key].text,\n        value: key,\n      })),\n      render: (type: string) => {\n        const config = ACTION_TYPE_MAP[type];\n        return <Tag color={config.color}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: 'Status',\n      dataIndex: 'status',\n      key: 'status',\n      width: 130,\n      filters: Object.keys(TASK_STATUS_MAP).map((key) => ({\n        text: TASK_STATUS_MAP[key].text,\n        value: key,\n      })),\n      render: (status: string) => {\n        const config = TASK_STATUS_MAP[status];\n        return <Tag color={config.color}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: 'Priority',\n      dataIndex: 'priority',\n      key: 'priority',\n      width: 90,\n      filters: Object.keys(PRIORITY_MAP).map((key) => ({\n        text: PRIORITY_MAP[key].text,\n        value: key,\n      })),\n      render: (priority: string) => {\n        const config = PRIORITY_MAP[priority];\n        return <Tag color={config.color}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: 'Shop',\n      dataIndex: 'shopName',\n      key: 'shopName',\n      width: 150,\n    },\n    {\n      title: 'Created',\n      dataIndex: 'createdAt',\n      key: 'createdAt',\n      width: 160,\n    },\n    {\n      title: 'Actions',\n      key: 'action',\n      width: 200,\n      render: (_: any, record: any) => (\n        <Space size=\"small\">\n          <Button\n            type=\"link\"\n            icon={<EyeOutlined />}\n            onClick={() => handleViewSuggestion(record)}\n          >\n            View Suggestion\n          </Button>\n          {record.status === 'PENDING_REVIEW' && (\n            <Button\n              type=\"primary\"\n              icon={<CheckCircleOutlined />}\n              onClick={() => handleApproveTask(record)}\n            >\n              Approve\n            </Button>\n          )}\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"human-approval-page\">\n      <Card\n        title={\n          <Space size=\"middle\">\n            <ClockCircleOutlined style={{ color: '#1890ff' }} />\n            <span>Human Approval Center</span>\n          </Space>\n        }\n        extra={\n          <Button icon={<ReloadOutlined />} onClick={fetchTasks}>\n            Refresh\n          </Button>\n        }\n      >\n        <Tabs activeKey={activeTab} onChange={setActiveTab}>\n          <Tabs.TabPane tab=\"Pending Review\" key=\"pending\" />\n          <Tabs.TabPane tab=\"Approved\" key=\"approved\" />\n          <Tabs.TabPane tab=\"Rejected\" key=\"rejected\" />\n        </Tabs>\n\n        <Card size=\"small\" style={{ marginBottom: 16, marginTop: 16 }}>\n          <Row gutter={16}>\n            <Col span={8}>\n              <Input\n                placeholder=\"Search tasks\"\n                prefix={<SearchOutlined />}\n                value={searchText}\n                onChange={(e) => handleSearch(e.target.value)}\n                allowClear\n              />\n            </Col>\n            <Col span={6}>\n              <Select\n                placeholder=\"Filter by type\"\n                value={filterType}\n                onChange={(value) => handleFilter('type', value)}\n                allowClear\n                style={{ width: '100%' }}\n              >\n                {Object.keys(ACTION_TYPE_MAP).map((key) => (\n                  <Option key={key} value={key}>\n                    {ACTION_TYPE_MAP[key].text}\n                  </Option>\n                ))}\n              </Select>\n            </Col>\n            <Col span={6}>\n              <Select\n                placeholder=\"Filter by priority\"\n                value={filterPriority}\n                onChange={(value) => handleFilter('priority', value)}\n                allowClear\n                style={{ width: '100%' }}\n              >\n                {Object.keys(PRIORITY_MAP).map((key) => (\n                  <Option key={key} value={key}>\n                    {PRIORITY_MAP[key].text}\n                  </Option>\n                ))}\n              </Select>\n            </Col>\n          </Row>\n        </Card>\n\n        <Table\n          columns={columns}\n          dataSource={getFilteredTasks()}\n          rowKey=\"id\"\n          loading={loading}\n          scroll={{ x: 1400 }}\n          pagination={{\n            showSizeChanger: true,\n            showTotal: (total) => `Total ${total} tasks`,\n          }}\n        />\n      </Card>\n\n      <Modal\n        title=\"AI Suggestion Details\"\n        open={suggestionModalVisible}\n        onCancel={() => setSuggestionModalVisible(false)}\n        footer={[\n          <Button key=\"close\" onClick={() => setSuggestionModalVisible(false)}>\n            Close\n          </Button>,\n        ]}\n        width={800}\n      >\n        {selectedTask?.aiSuggestion && (\n          <AISuggestionDisplay\n            suggestion={{\n              id: selectedTask.id,\n              type: selectedTask.actionType,\n              title: selectedTask.aiSuggestion.title,\n              description: selectedTask.aiSuggestion.description,\n              confidence: 85,\n              priority: selectedTask.priority.toLowerCase() as 'low' | 'medium' | 'high' | 'urgent',\n              dataSources: ['AI Model', 'Historical Data', 'Market Trends'],\n              reasoning: [\n                'Based on historical sales data',\n                'Analyzed competitor pricing',\n                'Considered market trends',\n                'Evaluated profit margins',\n              ],\n              expectedImpact: {\n                metric: 'Sales Volume',\n                value: 15,\n                unit: '%',\n                direction: 'positive',\n              },\n              createdAt: selectedTask.createdAt,\n              updatedAt: selectedTask.createdAt,\n            }}\n            showActions={false}\n          />\n        )}\n      </Modal>\n\n      <Modal\n        title=\"Approve Task\"\n        open={approvalModalVisible}\n        onCancel={() => setApprovalModalVisible(false)}\n        footer={null}\n        width={800}\n      >\n        {selectedTask?.aiSuggestion && (\n          <HumanApprovalForm\n            taskId={selectedTask.taskId}\n            aiSuggestion={selectedTask.aiSuggestion}\n            onApprove={handleApprove}\n            onReject={handleReject}\n            onModify={handleModify}\n            loading={loading}\n          />\n        )}\n      </Modal>\n    </div>\n  );\n};\n\nexport default HumanApprovalPage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/HumanApprovalPage.tsx"
    },
    "9": {
      "path": "/dashboard/client-management",
      "file": "@/pages/ClientManagement.tsx",
      "parentId": "4",
      "id": "9",
      "absPath": "/dashboard/client-management",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Tag,\n  Button,\n  Space,\n  Modal,\n  Form,\n  Input,\n  Select,\n  InputNumber,\n  message,\n  Row,\n  Col,\n  Badge,\n  Tabs,\n  Tree,\n  Checkbox,\n  Radio,\n  Slider,\n  Progress,\n  Descriptions,\n  Timeline,\n  Tooltip,\n  Popconfirm,\n  PlusOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  DisconnectOutlined,\n  ReloadOutlined,\n  EyeOutlined,\n  SettingOutlined,\n  AlertOutlined,\n  GroupOutlined,\n  HomeOutlined,\n  MonitorOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  ClockCircleOutlined,\n  clientDataSource,\n  Option,\n  FC,\n} from '@/imports';\nimport type { Client, ClientGroup } from '../services/clientDataSource';\n\nconst ClientManagement: FC = () => {\n  const [clients, setClients] = useState<Client[]>([]);\n  const [groups, setGroups] = useState<ClientGroup[]>([]);\n  const [selectedClient, setSelectedClient] = useState<Client | null>(null);\n  const [selectedGroup, setSelectedGroup] = useState<ClientGroup | null>(null);\n  const [connectModalVisible, setConnectModalVisible] = useState(false);\n  const [editModalVisible, setEditModalVisible] = useState(false);\n  const [groupModalVisible, setGroupModalVisible] = useState(false);\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\n  const [monitoringModalVisible, setMonitoringModalVisible] = useState(false);\n  const [loading, setLoading] = useState(false);\n  const [activeTab, setActiveTab] = useState('all');\n  const [selectedGroupId, setSelectedGroupId] = useState('all');\n  const [connectForm] = Form.useForm();\n  const [editForm] = Form.useForm();\n  const [groupForm] = Form.useForm();\n\n  useEffect(() => {\n    fetchClients();\n    fetchGroups();\n    const interval = setInterval(fetchClients, 5000);\n    return () => clearInterval(interval);\n  }, []);\n\n  const fetchClients = async () => {\n    try {\n      const clientList = await clientDataSource.fetchClients();\n      setClients(clientList);\n    } catch (error) {\n      message.error('Failed to load clients');\n    }\n  };\n\n  const fetchGroups = async () => {\n    try {\n      const groupList = await clientDataSource.fetchGroups();\n      setGroups(groupList);\n    } catch (error) {\n      message.error('Failed to load groups');\n    }\n  };\n\n  const handleConnect = async () => {\n    try {\n      const values = await connectForm.validateFields();\n      setLoading(true);\n      await clientDataSource.connectClient(\n        values.host,\n        values.port,\n        values.name,\n        values.groupId,\n        values.description\n      );\n      message.success('Client connected successfully');\n      setConnectModalVisible(false);\n      connectForm.resetFields();\n      fetchClients();\n      fetchGroups();\n    } catch (error) {\n      message.error('Failed to connect to client');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleDisconnect = async (clientId: string) => {\n    try {\n      await clientDataSource.disconnectClient(clientId);\n      message.success('Client disconnected successfully');\n      fetchClients();\n      fetchGroups();\n    } catch (error) {\n      message.error('Failed to disconnect client');\n    }\n  };\n\n  const handleEdit = (client: Client) => {\n    setSelectedClient(client);\n    editForm.setFieldsValue({\n      name: client.name,\n      host: client.host,\n      port: client.port,\n      groupId: client.groupId,\n      tags: client.tags,\n      description: client.description,\n    });\n    setEditModalVisible(true);\n  };\n\n  const handleEditSubmit = async () => {\n    try {\n      const values = await editForm.validateFields();\n      if (selectedClient) {\n        await clientDataSource.updateClient(selectedClient.id, values);\n        setEditModalVisible(false);\n        message.success('Client updated successfully');\n        fetchClients();\n        fetchGroups();\n      }\n    } catch (error) {\n      message.error('Failed to update client');\n    }\n  };\n\n  const handleCreateGroup = async () => {\n    try {\n      const values = await groupForm.validateFields();\n      await clientDataSource.createGroup({\n        name: values.name,\n        description: values.description,\n        color: values.color,\n      });\n      setGroupModalVisible(false);\n      groupForm.resetFields();\n      message.success('Group created successfully');\n      fetchGroups();\n    } catch (error) {\n      message.error('Failed to create group');\n    }\n  };\n\n  const handleViewDetail = (client: Client) => {\n    setSelectedClient(client);\n    setDetailModalVisible(true);\n  };\n\n  const handleViewMonitoring = (client: Client) => {\n    setSelectedClient(client);\n    setMonitoringModalVisible(true);\n  };\n\n  const getStatusIcon = (status: string) => {\n    switch (status) {\n      case 'connected':\n        return <CheckCircleOutlined style={{ color: '#52c41a' }} />;\n      case 'disconnected':\n        return <CloseCircleOutlined style={{ color: '#ff4d4f' }} />;\n      case 'error':\n        return <AlertOutlined style={{ color: '#faad14' }} />;\n      default:\n        return <ClockCircleOutlined style={{ color: '#1890ff' }} />;\n    }\n  };\n\n  const getFilteredClients = () => {\n    let filtered = clients;\n\n    if (activeTab !== 'all') {\n      filtered = filtered.filter((c) => c.status === activeTab);\n    }\n\n    if (selectedGroupId !== 'all') {\n      filtered = filtered.filter((c) => c.groupId === selectedGroupId);\n    }\n\n    return filtered;\n  };\n\n  const columns = [\n    {\n      title: 'Name',\n      dataIndex: 'name',\n      key: 'name',\n      render: (text: string, record: Client) => (\n        <Space size=\"middle\">\n          {getStatusIcon(record.status)}\n          <span>{text}</span>\n        </Space>\n      ),\n    },\n    {\n      title: 'Host:Port',\n      dataIndex: 'host',\n      key: 'host',\n      render: (host: string, record: Client) => `${host}:${record.port}`,\n    },\n    {\n      title: 'Status',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => {\n        let color = 'default';\n        switch (status) {\n          case 'connected':\n            color = 'success';\n            break;\n          case 'disconnected':\n            color = 'error';\n            break;\n          case 'error':\n            color = 'warning';\n            break;\n        }\n        return <Tag color={color}>{status}</Tag>;\n      },\n    },\n    {\n      title: 'Group',\n      dataIndex: 'groupId',\n      key: 'groupId',\n      render: (groupId: string) => {\n        const group = groups.find(g => g.id === groupId);\n        return group ? <Tag color={group.color}>{group.name}</Tag> : <Tag color=\"default\">Ungrouped</Tag>;\n      },\n    },\n    {\n      title: 'Last Seen',\n      dataIndex: 'lastSeen',\n      key: 'lastSeen',\n      render: (lastSeen: Date) => new Date(lastSeen).toLocaleString(),\n    },\n    {\n      title: 'Performance',\n      dataIndex: 'performance',\n      key: 'performance',\n      render: (performance: any) => (\n        <Space direction=\"vertical\">\n          <div>\n            <span>CPU: {performance?.cpu?.toFixed(1)}%</span>\n            <Progress percent={performance?.cpu || 0} size=\"small\" />\n          </div>\n          <div>\n            <span>Memory: {performance?.memory?.toFixed(1)}%</span>\n            <Progress percent={performance?.memory || 0} size=\"small\" />\n          </div>\n        </Space>\n      ),\n    },\n    {\n      title: 'Actions',\n      key: 'action',\n      render: (_: any, record: Client) => (\n        <Space size=\"small\">\n          <Tooltip title=\"View Details\">\n            <Button type=\"link\" icon={<EyeOutlined />} onClick={() => handleViewDetail(record)} />\n          </Tooltip>\n          <Tooltip title=\"View Monitoring\">\n            <Button type=\"link\" icon={<MonitorOutlined />} onClick={() => handleViewMonitoring(record)} />\n          </Tooltip>\n          {record.status === 'disconnected' && (\n            <Tooltip title=\"Connect\">\n              <Button type=\"link\" icon={<PlusOutlined />} onClick={() => setConnectModalVisible(true)} />\n            </Tooltip>\n          )}\n          {record.status === 'connected' && (\n            <Popconfirm\n              title=\"Are you sure to disconnect this client?\"\n              onConfirm={() => handleDisconnect(record.id)}\n              okText=\"Yes\"\n              cancelText=\"No\"\n            >\n              <Tooltip title=\"Disconnect\">\n                <Button type=\"link\" danger icon={<DisconnectOutlined />} />\n              </Tooltip>\n            </Popconfirm>\n          )}\n          <Tooltip title=\"Edit\">\n            <Button type=\"link\" icon={<EditOutlined />} onClick={() => handleEdit(record)} />\n          </Tooltip>\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"client-management\">\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={12}>\n          <Card\n            title={\n              <Space size=\"middle\">\n                <HomeOutlined style={{ color: '#1890ff' }} />\n                <span>Client Management</span>\n              </Space>\n            }\n            extra={\n              <Space>\n                <Button icon={<ReloadOutlined />} onClick={fetchClients}>\n                  Refresh\n                </Button>\n                <Button type=\"primary\" icon={<PlusOutlined />} onClick={() => setConnectModalVisible(true)}>\n                  Connect Client\n                </Button>\n              </Space>\n            }\n          >\n            <Tabs activeKey={activeTab} onChange={setActiveTab}>\n              <Tabs.TabPane tab=\"All Clients\" key=\"all\" />\n              <Tabs.TabPane tab=\"Connected\" key=\"connected\" />\n              <Tabs.TabPane tab=\"Disconnected\" key=\"disconnected\" />\n              <Tabs.TabPane tab=\"Error\" key=\"error\" />\n            </Tabs>\n\n            <Card size=\"small\" style={{ marginBottom: 16, marginTop: 16 }}>\n              <Row gutter={16}>\n                <Col span={8}>\n                  <Select\n                    placeholder=\"Filter by group\"\n                    value={selectedGroupId}\n                    onChange={setSelectedGroupId}\n                    style={{ width: '100%' }}\n                  >\n                    <Option value=\"all\">All Groups</Option>\n                    {groups.map((group) => (\n                      <Option key={group.id} value={group.id}>\n                        {group.name}\n                      </Option>\n                    ))}\n                  </Select>\n                </Col>\n                <Col span={8}>\n                  <Button icon={<GroupOutlined />} onClick={() => setGroupModalVisible(true)}>\n                    Manage Groups\n                  </Button>\n                </Col>\n              </Row>\n            </Card>\n\n            <Table\n              columns={columns}\n              dataSource={getFilteredClients()}\n              rowKey=\"id\"\n              loading={loading}\n              scroll={{ x: 1400 }}\n              pagination={{\n                showSizeChanger: true,\n                showTotal: (total) => `Total ${total} clients`,\n              }}\n            />\n          </Card>\n        </Col>\n        <Col span={12}>\n          <Card\n            title={\n              <Space size=\"middle\">\n                <GroupOutlined style={{ color: '#1890ff' }} />\n                <span>Client Groups</span>\n              </Space>\n            }\n          >\n            <Tree\n              defaultExpandAll\n              treeData={[\n                {\n                  title: 'All Clients',\n                  key: 'all',\n                  children: groups.map((group) => ({\n                    title: (\n                      <Space size=\"middle\">\n                        <Tag color={group.color}>{group.name}</Tag>\n                        <span style={{ fontSize: 12, color: '#999' }}>{group.clientIds.length} clients</span>\n                      </Space>\n                    ),\n                    key: group.id,\n                    children: clients\n                      .filter((c) => c.groupId === group.id)\n                      .map((c) => ({\n                        title: (\n                          <Space size=\"middle\">\n                            {getStatusIcon(c.status)}\n                            <span>{c.name}</span>\n                            <Tag color={c.status === 'connected' ? 'success' : 'error'}>{c.status}</Tag>\n                          </Space>\n                        ),\n                        key: c.id,\n                      })),\n                  })),\n                },\n              ]}\n              onSelect={(selectedKeys) => {\n                if (selectedKeys.length > 0) {\n                  setSelectedGroupId(String(selectedKeys[0]));\n                }\n              }}\n            />\n          </Card>\n        </Col>\n      </Row>\n\n      <Modal\n        title=\"Connect to Client\"\n        open={connectModalVisible}\n        onOk={handleConnect}\n        onCancel={() => setConnectModalVisible(false)}\n        loading={loading}\n      >\n        <Form form={connectForm} layout=\"vertical\">\n          <Form.Item\n            name=\"name\"\n            label=\"Client Name\"\n            rules={[{ required: true, message: 'Please enter client name' }]}\n          >\n            <Input placeholder=\"Enter client name\" />\n          </Form.Item>\n          <Form.Item\n            name=\"host\"\n            label=\"Host\"\n            rules={[{ required: true, message: 'Please enter host' }]}\n          >\n            <Input placeholder=\"Enter host (e.g., localhost)\" />\n          </Form.Item>\n          <Form.Item\n            name=\"port\"\n            label=\"Port\"\n            rules={[{ required: true, message: 'Please enter port' }]}\n          >\n            <InputNumber min={1} max={65535} style={{ width: '100%' }} />\n          </Form.Item>\n          <Form.Item\n            name=\"groupId\"\n            label=\"Group\"\n          >\n            <Select placeholder=\"Select group\">\n              <Option value=\"\">Ungrouped</Option>\n              {groups.map((group) => (\n                <Option key={group.id} value={group.id}>\n                  {group.name}\n                </Option>\n              ))}\n            </Select>\n          </Form.Item>\n          <Form.Item\n            name=\"description\"\n            label=\"Description\"\n          >\n            <Input.TextArea rows={3} placeholder=\"Enter description\" />\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"Edit Client\"\n        open={editModalVisible}\n        onOk={handleEditSubmit}\n        onCancel={() => setEditModalVisible(false)}\n      >\n        <Form form={editForm} layout=\"vertical\">\n          <Form.Item\n            name=\"name\"\n            label=\"Client Name\"\n            rules={[{ required: true, message: 'Please enter client name' }]}\n          >\n            <Input placeholder=\"Enter client name\" />\n          </Form.Item>\n          <Form.Item\n            name=\"host\"\n            label=\"Host\"\n            rules={[{ required: true, message: 'Please enter host' }]}\n          >\n            <Input placeholder=\"Enter host (e.g., localhost)\" />\n          </Form.Item>\n          <Form.Item\n            name=\"port\"\n            label=\"Port\"\n            rules={[{ required: true, message: 'Please enter port' }]}\n          >\n            <InputNumber min={1} max={65535} style={{ width: '100%' }} />\n          </Form.Item>\n          <Form.Item\n            name=\"groupId\"\n            label=\"Group\"\n          >\n            <Select placeholder=\"Select group\">\n              <Option value=\"\">Ungrouped</Option>\n              {groups.map((group) => (\n                <Option key={group.id} value={group.id}>\n                  {group.name}\n                </Option>\n              ))}\n            </Select>\n          </Form.Item>\n          <Form.Item\n            name=\"tags\"\n            label=\"Tags\"\n          >\n            <Select mode=\"tags\" placeholder=\"Enter tags\" style={{ width: '100%' }} />\n          </Form.Item>\n          <Form.Item\n            name=\"description\"\n            label=\"Description\"\n          >\n            <Input.TextArea rows={3} placeholder=\"Enter description\" />\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"Manage Groups\"\n        open={groupModalVisible}\n        onOk={handleCreateGroup}\n        onCancel={() => setGroupModalVisible(false)}\n      >\n        <Form form={groupForm} layout=\"vertical\">\n          <Form.Item\n            name=\"name\"\n            label=\"Group Name\"\n            rules={[{ required: true, message: 'Please enter group name' }]}\n          >\n            <Input placeholder=\"Enter group name\" />\n          </Form.Item>\n          <Form.Item\n            name=\"description\"\n            label=\"Description\"\n          >\n            <Input.TextArea rows={3} placeholder=\"Enter description\" />\n          </Form.Item>\n          <Form.Item\n            name=\"color\"\n            label=\"Color\"\n            rules={[{ required: true, message: 'Please select color' }]}\n          >\n            <Select placeholder=\"Select color\">\n              <Option value=\"#1890ff\">Blue</Option>\n              <Option value=\"#52c41a\">Green</Option>\n              <Option value=\"#faad14\">Orange</Option>\n              <Option value=\"#ff4d4f\">Red</Option>\n              <Option value=\"#722ed1\">Purple</Option>\n            </Select>\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"Client Details\"\n        open={detailModalVisible}\n        onCancel={() => setDetailModalVisible(false)}\n        footer={[\n          <Button key=\"close\" onClick={() => setDetailModalVisible(false)}>\n            Close\n          </Button>,\n        ]}\n        width={800}\n      >\n        {selectedClient && (\n          <>\n            <Descriptions column={2} bordered>\n              <Descriptions.Item label=\"Name\">{selectedClient.name}</Descriptions.Item>\n              <Descriptions.Item label=\"Host:Port\">{selectedClient.host}:{selectedClient.port}</Descriptions.Item>\n              <Descriptions.Item label=\"Status\">\n                <Tag color={selectedClient.status === 'connected' ? 'success' : selectedClient.status === 'error' ? 'warning' : 'error'}>\n                  {selectedClient.status}\n                </Tag>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"Last Seen\">{new Date(selectedClient.lastSeen).toLocaleString()}</Descriptions.Item>\n              <Descriptions.Item label=\"Group\">\n                {selectedClient.groupId ? (\n                  <Tag color={groups.find(g => g.id === selectedClient.groupId)?.color || 'default'}>\n                    {groups.find(g => g.id === selectedClient.groupId)?.name || 'Unknown'}\n                  </Tag>\n                ) : (\n                  <Tag color=\"default\">Ungrouped</Tag>\n                )}\n              </Descriptions.Item>\n              <Descriptions.Item label=\"Description\">{selectedClient.description || '-'}</Descriptions.Item>\n            </Descriptions>\n\n            <Card title=\"Performance\" style={{ marginTop: 16 }}>\n              <Row gutter={16}>\n                <Col span={8}>\n                  <Card size=\"small\">\n                    <div style={{ textAlign: 'center' }}>\n                      <h4>CPU</h4>\n                      <Progress percent={selectedClient.performance?.cpu || 0} status=\"active\" />\n                      <p>{selectedClient.performance?.cpu?.toFixed(1)}%</p>\n                    </div>\n                  </Card>\n                </Col>\n                <Col span={8}>\n                  <Card size=\"small\">\n                    <div style={{ textAlign: 'center' }}>\n                      <h4>Memory</h4>\n                      <Progress percent={selectedClient.performance?.memory || 0} status=\"active\" />\n                      <p>{selectedClient.performance?.memory?.toFixed(1)}%</p>\n                    </div>\n                  </Card>\n                </Col>\n                <Col span={8}>\n                  <Card size=\"small\">\n                    <div style={{ textAlign: 'center' }}>\n                      <h4>Network</h4>\n                      <Progress percent={selectedClient.performance?.network || 0} status=\"active\" />\n                      <p>{selectedClient.performance?.network?.toFixed(1)}%</p>\n                    </div>\n                  </Card>\n                </Col>\n              </Row>\n            </Card>\n\n            <Card title=\"History\" style={{ marginTop: 16 }}>\n              <Timeline>\n                {selectedClient.history?.map((item, index) => (\n                  <Timeline.Item key={index} color={item.status === 'connected' ? 'green' : 'red'}>\n                    <div>\n                      <p>{item.message}</p>\n                      <p style={{ fontSize: 12, color: '#999' }}>{new Date(item.timestamp).toLocaleString()}</p>\n                    </div>\n                  </Timeline.Item>\n                ))}\n              </Timeline>\n            </Card>\n          </>\n        )}\n      </Modal>\n\n      <Modal\n        title=\"Client Monitoring\"\n        open={monitoringModalVisible}\n        onCancel={() => setMonitoringModalVisible(false)}\n        footer={[\n          <Button key=\"close\" onClick={() => setMonitoringModalVisible(false)}>\n            Close\n          </Button>,\n        ]}\n        width={800}\n      >\n        {selectedClient && (\n          <Card>\n            <div style={{ textAlign: 'center', marginBottom: 24 }}>\n              <h3>{selectedClient.name}</h3>\n              <p>{selectedClient.host}:{selectedClient.port}</p>\n              <Tag color={selectedClient.status === 'connected' ? 'success' : 'error'}>\n                {selectedClient.status}\n              </Tag>\n            </div>\n\n            <div style={{ height: 400, marginBottom: 24 }}>\n              {/* 这里可以添加实时监控图表 */}\n              <div style={{ height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center', backgroundColor: '#f5f5f5' }}>\n                <p>Real-time monitoring chart would appear here</p>\n              </div>\n            </div>\n\n            <Row gutter={16}>\n              <Col span={8}>\n                <Card size=\"small\" title=\"CPU Usage\">\n                  <Progress percent={selectedClient.performance?.cpu || 0} status=\"active\" />\n                  <p style={{ marginTop: 8, textAlign: 'center' }}>{selectedClient.performance?.cpu?.toFixed(1)}%</p>\n                </Card>\n              </Col>\n              <Col span={8}>\n                <Card size=\"small\" title=\"Memory Usage\">\n                  <Progress percent={selectedClient.performance?.memory || 0} status=\"active\" />\n                  <p style={{ marginTop: 8, textAlign: 'center' }}>{selectedClient.performance?.memory?.toFixed(1)}%</p>\n                </Card>\n              </Col>\n              <Col span={8}>\n                <Card size=\"small\" title=\"Network Usage\">\n                  <Progress percent={selectedClient.performance?.network || 0} status=\"active\" />\n                  <p style={{ marginTop: 8, textAlign: 'center' }}>{selectedClient.performance?.network?.toFixed(1)}%</p>\n                </Card>\n              </Col>\n            </Row>\n          </Card>\n        )}\n      </Modal>\n    </div>\n  );\n};\n\nexport default ClientManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/ClientManagement.tsx"
    },
    "10": {
      "path": "/dashboard/execution-results",
      "file": "@/pages/ExecutionResults.tsx",
      "parentId": "4",
      "id": "10",
      "absPath": "/dashboard/execution-results",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Tag,\n  Button,\n  Space,\n  Modal,\n  Descriptions,\n  Timeline,\n  Badge,\n  Tabs,\n  Select,\n  Input,\n  DatePicker,\n  message,\n  Row,\n  Col,\n  Statistic,\n  Progress,\n  Alert,\n  Tooltip,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  ClockCircleOutlined,\n  EyeOutlined,\n  ReloadOutlined,\n  DownloadOutlined,\n  FilterOutlined,\n  SearchOutlined,\n  CalendarOutlined,\n  BarChartOutlined,\n  InfoCircleOutlined,\n  executionResultDataSource,\n  Option,\n  RangePicker,\n  FC,\n} from '@/imports';\nimport type { ExecutionResult, StatData } from '../services/executionResultDataSource';\nimport dayjs from 'dayjs';\n\nconst ExecutionResults: FC = () => {\n  const [results, setResults] = useState<ExecutionResult[]>([]);\n  const [selectedResult, setSelectedResult] = useState<ExecutionResult | null>(null);\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\n  const [loading, setLoading] = useState(false);\n  const [filters, setFilters] = useState({\n    status: 'all',\n    actionType: 'all',\n    dateRange: null as any,\n    search: '',\n  });\n  const [stats, setStats] = useState<StatData>({\n    total: 0,\n    success: 0,\n    failed: 0,\n    inProgress: 0,\n    successRate: 0,\n    avgDuration: 0,\n  });\n\n  useEffect(() => {\n    fetchResults();\n  }, [filters]);\n\n  const fetchResults = async () => {\n    setLoading(true);\n    try {\n      const results = await executionResultDataSource.fetchResults({\n        status: filters.status !== 'all' ? filters.status : undefined,\n        actionType: filters.actionType !== 'all' ? filters.actionType : undefined,\n        startDate: filters.dateRange ? filters.dateRange[0].format('YYYY-MM-DD') : undefined,\n        endDate: filters.dateRange ? filters.dateRange[1].format('YYYY-MM-DD') : undefined,\n        search: filters.search || undefined,\n      });\n      setResults(results);\n      calculateStats(results);\n    } catch (error) {\n      message.error('Failed to load execution results');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const calculateStats = (results: ExecutionResult[]) => {\n    const total = results.length;\n    const success = results.filter(r => r.status === 'success').length;\n    const failed = results.filter(r => r.status === 'failed').length;\n    const inProgress = results.filter(r => r.status === 'in_progress').length;\n    const successRate = total > 0 ? (success / total) * 100 : 0;\n    const completedResults = results.filter(r => r.duration);\n    const avgDuration = completedResults.length > 0\n      ? completedResults.reduce((sum, r) => sum + (r.duration || 0), 0) / completedResults.length\n      : 0;\n\n    setStats({\n      total,\n      success,\n      failed,\n      inProgress,\n      successRate,\n      avgDuration,\n    });\n  };\n\n  const handleViewDetail = (result: ExecutionResult) => {\n    setSelectedResult(result);\n    setDetailModalVisible(true);\n  };\n\n  const getStatusIcon = (status: string) => {\n    switch (status) {\n      case 'success':\n        return <CheckCircleOutlined style={{ color: '#52c41a' }} />;\n      case 'failed':\n        return <CloseCircleOutlined style={{ color: '#ff4d4f' }} />;\n      case 'in_progress':\n        return <ClockCircleOutlined style={{ color: '#1890ff' }} />;\n      case 'pending':\n        return <ClockCircleOutlined style={{ color: '#faad14' }} />;\n      default:\n        return null;\n    }\n  };\n\n  const getStatusTag = (status: string) => {\n    let color = 'default';\n    switch (status) {\n      case 'success':\n        color = 'success';\n        break;\n      case 'failed':\n        color = 'error';\n        break;\n      case 'in_progress':\n        color = 'processing';\n        break;\n      case 'pending':\n        color = 'warning';\n        break;\n    }\n    return <Tag color={color}>{status}</Tag>;\n  };\n\n  const getLogLevelBadge = (level: 'info' | 'warn' | 'error') => {\n    let status: 'success' | 'default' | 'error' | 'processing' | 'warning' = 'default';\n    switch (level) {\n      case 'info':\n        status = 'success';\n        break;\n      case 'warn':\n        status = 'warning';\n        break;\n      case 'error':\n        status = 'error';\n        break;\n    }\n    return <Badge status={status} text={level} />;\n  };\n\n  const filteredResults = results.filter(result => {\n    if (filters.status !== 'all' && result.status !== filters.status) {\n      return false;\n    }\n    if (filters.actionType !== 'all' && result.actionType !== filters.actionType) {\n      return false;\n    }\n    if (filters.search && !(\n      result.taskId.includes(filters.search) ||\n      result.actionType.includes(filters.search) ||\n      result.clientId.includes(filters.search) ||\n      result.metadata.platform.includes(filters.search)\n    )) {\n      return false;\n    }\n    if (filters.dateRange) {\n      const startDate = filters.dateRange[0].startOf('day').valueOf();\n      const endDate = filters.dateRange[1].endOf('day').valueOf();\n      const resultTime = result.startTime.getTime();\n      if (resultTime < startDate || resultTime > endDate) {\n        return false;\n      }\n    }\n    return true;\n  });\n\n  const columns = [\n    {\n      title: 'Task ID',\n      dataIndex: 'taskId',\n      key: 'taskId',\n    },\n    {\n      title: 'Action Type',\n      dataIndex: 'actionType',\n      key: 'actionType',\n      render: (actionType: string) => (\n        <Tag>{actionType}</Tag>\n      ),\n    },\n    {\n      title: 'Status',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => (\n        <Space size=\"middle\">\n          {getStatusIcon(status)}\n          {getStatusTag(status)}\n        </Space>\n      ),\n    },\n    {\n      title: 'Start Time',\n      dataIndex: 'startTime',\n      key: 'startTime',\n      render: (startTime: Date) => new Date(startTime).toLocaleString(),\n    },\n    {\n      title: 'Duration',\n      dataIndex: 'duration',\n      key: 'duration',\n      render: (duration: number) => duration ? `${duration}s` : 'N/A',\n    },\n    {\n      title: 'Client',\n      dataIndex: 'clientId',\n      key: 'clientId',\n    },\n    {\n      title: 'Platform',\n      dataIndex: 'metadata',\n      key: 'platform',\n      render: (metadata: any) => metadata.platform,\n    },\n    {\n      title: 'Result',\n      dataIndex: 'result',\n      key: 'result',\n      render: (result: { message: string }) => (\n        <Tooltip title={result.message}>\n          <span>{result.message.length > 20 ? result.message.substring(0, 20) + '...' : result.message}</span>\n        </Tooltip>\n      ),\n    },\n    {\n      title: 'Actions',\n      key: 'action',\n      render: (_: any, record: ExecutionResult) => (\n        <Space size=\"small\">\n          <Button type=\"link\" icon={<EyeOutlined />} onClick={() => handleViewDetail(record)}>\n            View\n          </Button>\n          <Button type=\"link\" icon={<DownloadOutlined />}>\n            Export\n          </Button>\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"execution-results\">\n      <Card\n        title={\n          <Space size=\"middle\">\n            <BarChartOutlined style={{ color: '#1890ff' }} />\n            <span>Execution Results</span>\n          </Space>\n        }\n        extra={\n          <Button icon={<ReloadOutlined />} onClick={fetchResults} loading={loading}>\n            Refresh\n          </Button>\n        }\n      >\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={6}>\n            <Card size=\"small\">\n              <Statistic\n                title=\"Total Executions\"\n                value={stats.total}\n                prefix={<InfoCircleOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={6}>\n            <Card size=\"small\">\n              <Statistic\n                title=\"Success Rate\"\n                value={stats.successRate.toFixed(1)}\n                suffix=\"%\"\n                prefix={<CheckCircleOutlined style={{ color: '#52c41a' }} />}\n              />\n            </Card>\n          </Col>\n          <Col span={6}>\n            <Card size=\"small\">\n              <Statistic\n                title=\"Avg. Duration\"\n                value={stats.avgDuration.toFixed(1)}\n                suffix=\"s\"\n                prefix={<ClockCircleOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={6}>\n            <Card size=\"small\">\n              <Space direction=\"vertical\" style={{ width: '100%' }}>\n                <div>Success: <Tag color=\"success\">{stats.success}</Tag></div>\n                <div>Failed: <Tag color=\"error\">{stats.failed}</Tag></div>\n                <div>In Progress: <Tag color=\"processing\">{stats.inProgress}</Tag></div>\n              </Space>\n            </Card>\n          </Col>\n        </Row>\n\n        <Card size=\"small\" style={{ marginBottom: 16 }}>\n          <Row gutter={16}>\n            <Col span={6}>\n              <Select\n                placeholder=\"Filter by status\"\n                style={{ width: '100%' }}\n                value={filters.status}\n                onChange={(value) => setFilters({ ...filters, status: value })}\n              >\n                <Option value=\"all\">All Statuses</Option>\n                <Option value=\"success\">Success</Option>\n                <Option value=\"failed\">Failed</Option>\n                <Option value=\"in_progress\">In Progress</Option>\n                <Option value=\"pending\">Pending</Option>\n              </Select>\n            </Col>\n            <Col span={6}>\n              <Select\n                placeholder=\"Filter by action type\"\n                style={{ width: '100%' }}\n                value={filters.actionType}\n                onChange={(value) => setFilters({ ...filters, actionType: value })}\n              >\n                <Option value=\"all\">All Action Types</Option>\n                <Option value=\"price_update\">Price Update</Option>\n                <Option value=\"inventory_sync\">Inventory Sync</Option>\n                <Option value=\"order_processing\">Order Processing</Option>\n              </Select>\n            </Col>\n            <Col span={6}>\n              <RangePicker\n                style={{ width: '100%' }}\n                onChange={(dates) => setFilters({ ...filters, dateRange: dates })}\n                placeholder={['Start Date', 'End Date']}\n              />\n            </Col>\n            <Col span={6}>\n              <Input\n                placeholder=\"Search (task ID, action type, client, platform)\"\n                prefix={<SearchOutlined />}\n                value={filters.search}\n                onChange={(e) => setFilters({ ...filters, search: e.target.value })}\n              />\n            </Col>\n          </Row>\n        </Card>\n\n        <Table\n          columns={columns}\n          dataSource={filteredResults}\n          rowKey=\"id\"\n          loading={loading}\n          scroll={{ x: 1400 }}\n          pagination={{\n            showSizeChanger: true,\n            showTotal: (total) => `Total ${total} executions`,\n          }}\n        />\n      </Card>\n\n      <Modal\n        title=\"Execution Detail\"\n        open={detailModalVisible}\n        onCancel={() => setDetailModalVisible(false)}\n        footer={[\n          <Button key=\"close\" onClick={() => setDetailModalVisible(false)}>\n            Close\n          </Button>,\n        ]}\n        width={800}\n      >\n        {selectedResult && (\n          <>\n            <Descriptions column={2} bordered>\n              <Descriptions.Item label=\"Task ID\">{selectedResult.taskId}</Descriptions.Item>\n              <Descriptions.Item label=\"Action Type\">{selectedResult.actionType}</Descriptions.Item>\n              <Descriptions.Item label=\"Status\">\n                <Space size=\"middle\">\n                  {getStatusIcon(selectedResult.status)}\n                  {getStatusTag(selectedResult.status)}\n                </Space>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"Client\">{selectedResult.clientId}</Descriptions.Item>\n              <Descriptions.Item label=\"Start Time\">{new Date(selectedResult.startTime).toLocaleString()}</Descriptions.Item>\n              <Descriptions.Item label=\"End Time\">\n                {selectedResult.endTime ? new Date(selectedResult.endTime).toLocaleString() : 'N/A'}\n              </Descriptions.Item>\n              <Descriptions.Item label=\"Duration\">\n                {selectedResult.duration ? `${selectedResult.duration} seconds` : 'N/A'}\n              </Descriptions.Item>\n              <Descriptions.Item label=\"Platform\">{selectedResult.metadata.platform}</Descriptions.Item>\n              <Descriptions.Item label=\"User ID\">{selectedResult.metadata.userId}</Descriptions.Item>\n              <Descriptions.Item label=\"Attempt\">{selectedResult.metadata.attempt}</Descriptions.Item>\n              <Descriptions.Item label=\"Correlation ID\" span={2}>\n                {selectedResult.metadata.correlationId}\n              </Descriptions.Item>\n            </Descriptions>\n\n            <Card title=\"Execution Result\" style={{ marginTop: 16 }}>\n              <Alert\n                message={selectedResult.result.success ? 'Success' : 'Failed'}\n                description={selectedResult.result.message}\n                type={selectedResult.result.success ? 'success' : 'error'}\n                showIcon\n              />\n              {selectedResult.result.error && (\n                <Alert\n                  message=\"Error Details\"\n                  description={selectedResult.result.error}\n                  type=\"error\"\n                  style={{ marginTop: 16 }}\n                />\n              )}\n              {selectedResult.result.data && (\n                <Card size=\"small\" title=\"Result Data\" style={{ marginTop: 16 }}>\n                  <pre style={{ whiteSpace: 'pre-wrap' }}>\n                    {JSON.stringify(selectedResult.result.data, null, 2)}\n                  </pre>\n                </Card>\n              )}\n            </Card>\n\n            <Card title=\"Execution Logs\" style={{ marginTop: 16 }}>\n              <Timeline>\n                {selectedResult.logs.map((log, index) => (\n                  <Timeline.Item key={index} color={log.level === 'error' ? 'red' : log.level === 'warn' ? 'orange' : 'blue'}>\n                    <div>\n                      <Space size=\"middle\">\n                        {getLogLevelBadge(log.level)}\n                        <span>{new Date(log.timestamp).toLocaleString()}</span>\n                      </Space>\n                      <p style={{ marginTop: 8 }}>{log.message}</p>\n                    </div>\n                  </Timeline.Item>\n                ))}\n              </Timeline>\n            </Card>\n          </>\n        )}\n      </Modal>\n    </div>\n  );\n};\n\nexport default ExecutionResults;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/ExecutionResults.tsx"
    },
    "11": {
      "path": "/dashboard/ai-decision-log",
      "file": "@/pages/AIDecisionLog/index.tsx",
      "parentId": "4",
      "id": "11",
      "absPath": "/dashboard/ai-decision-log",
      "__content": "/**\n * [FE-AILOG-001] AI决策日志页面\n * 全链路追溯AI决策过程，支持查询、统计、链路追踪\n * AI注意: 此页面用于展示AI决策日志，支持决策追溯和分析\n */\n\nimport {\n  useState,\n  useEffect,\n  useCallback,\n  Card,\n  Table,\n  Tag,\n  Space,\n  Button,\n  DatePicker,\n  Select,\n  Input,\n  Row,\n  Col,\n  Statistic,\n  Tooltip,\n  Drawer,\n  Timeline,\n  Descriptions,\n  Badge,\n  Spin,\n  message,\n  Typography,\n  Tabs,\n  SearchOutlined,\n  ReloadOutlined,\n  EyeOutlined,\n  LinkOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  ExclamationCircleOutlined,\n  ClockCircleOutlined,\n  BarChartOutlined,\n  LineChartOutlined,\n  Line,\n  Pie,\n  RangePicker,\n  Option,\n  Search,\n  Title,\n  Text,\n  FC,\n} from '@/imports';\nimport moment from 'moment';\n\nconst DECISION_TYPES = [\n  { value: 'PRICING', label: '定价决策', color: 'blue' },\n  { value: 'INVENTORY', label: '库存决策', color: 'cyan' },\n  { value: 'AD_OPTIMIZE', label: '广告优化', color: 'purple' },\n  { value: 'PRODUCT_SELECT', label: '选品决策', color: 'green' },\n  { value: 'LOGISTICS', label: '物流决策', color: 'orange' },\n  { value: 'RISK_CONTROL', label: '风控决策', color: 'red' },\n  { value: 'CUSTOMER_SERVICE', label: '客服决策', color: 'pink' },\n  { value: 'SETTLEMENT', label: '结算决策', color: 'gold' },\n  { value: 'OTHER', label: '其他', color: 'default' },\n];\n\n// 决策状态\nconst DECISION_STATUS = {\n  PENDING: { label: '待执行', color: 'default', icon: <ClockCircleOutlined /> },\n  EXECUTING: { label: '执行中', color: 'processing', icon: <ClockCircleOutlined /> },\n  SUCCESS: { label: '成功', color: 'success', icon: <CheckCircleOutlined /> },\n  FAILED: { label: '失败', color: 'error', icon: <CloseCircleOutlined /> },\n  REJECTED: { label: '已拒绝', color: 'warning', icon: <ExclamationCircleOutlined /> },\n  ROLLED_BACK: { label: '已回滚', color: 'default', icon: <ExclamationCircleOutlined /> },\n};\n\n// 模拟数据\nconst MOCK_LOGS = [\n  {\n    id: 'ADL-1710851200000-abc123',\n    tenant_id: 'tenant-001',\n    shop_id: 'shop-001',\n    task_id: 'TASK-001',\n    trace_id: 'TRACE-1710851200000-xyz789',\n    decision_type: 'PRICING',\n    business_type: 'TOC',\n    status: 'SUCCESS',\n    input_data: {\n      context: { product_id: 'P001', current_price: 99.99, competitor_price: 89.99 },\n      parameters: { min_margin: 0.2, max_discount: 0.1 },\n      constraints: { max_price: 120, min_price: 80 },\n    },\n    output_data: {\n      decision: '降价至89.99',\n      confidence: 0.92,\n      reasoning: '竞争对手价格较低，建议降价保持竞争力',\n      alternatives: [\n        { option: '维持原价', score: 0.65 },\n        { option: '降价至89.99', score: 0.92 },\n        { option: '降价至85.99', score: 0.78 },\n      ],\n      expected_result: { sales_increase: 0.15, margin_impact: -0.05 },\n    },\n    execution_result: {\n      success: true,\n      actual_result: { new_price: 89.99, sales_change: 0.18 },\n      deviation: 0.03,\n      execution_time: 1.2,\n    },\n    created_at: '2026-03-20T10:00:00Z',\n    updated_at: '2026-03-20T10:01:30Z',\n    executed_at: '2026-03-20T10:00:05Z',\n    completed_at: '2026-03-20T10:01:30Z',\n  },\n  {\n    id: 'ADL-1710851300000-def456',\n    tenant_id: 'tenant-001',\n    shop_id: 'shop-001',\n    task_id: 'TASK-002',\n    trace_id: 'TRACE-1710851300000-uvw456',\n    decision_type: 'INVENTORY',\n    business_type: 'TOB',\n    status: 'SUCCESS',\n    input_data: {\n      context: { sku_id: 'SKU-001', current_stock: 50, sales_velocity: 10 },\n      parameters: { safety_stock: 20, lead_time: 7 },\n      constraints: { max_order: 500, budget: 10000 },\n    },\n    output_data: {\n      decision: '补货200件',\n      confidence: 0.88,\n      reasoning: '库存低于安全库存，建议补货',\n      alternatives: [\n        { option: '不补货', score: 0.45 },\n        { option: '补货100件', score: 0.72 },\n        { option: '补货200件', score: 0.88 },\n      ],\n      expected_result: { stock_days: 25, cost: 8000 },\n    },\n    execution_result: {\n      success: true,\n      actual_result: { ordered: 200, cost: 8000 },\n      deviation: 0,\n      execution_time: 2.5,\n    },\n    created_at: '2026-03-20T09:30:00Z',\n    updated_at: '2026-03-20T09:32:00Z',\n    executed_at: '2026-03-20T09:30:10Z',\n    completed_at: '2026-03-20T09:32:00Z',\n  },\n  {\n    id: 'ADL-1710851400000-ghi789',\n    tenant_id: 'tenant-001',\n    shop_id: 'shop-002',\n    task_id: 'TASK-003',\n    trace_id: 'TRACE-1710851400000-rst123',\n    decision_type: 'AD_OPTIMIZE',\n    business_type: 'TOC',\n    status: 'FAILED',\n    input_data: {\n      context: { campaign_id: 'CAMP-001', current_bid: 2.5, ctr: 0.03 },\n      parameters: { target_cpa: 50, max_bid: 5 },\n      constraints: { daily_budget: 500 },\n    },\n    output_data: {\n      decision: '提高出价至3.0',\n      confidence: 0.75,\n      reasoning: 'CTR低于预期，建议提高出价',\n      alternatives: [\n        { option: '维持出价', score: 0.55 },\n        { option: '提高出价至3.0', score: 0.75 },\n      ],\n      expected_result: { ctr_improvement: 0.02, cost_increase: 0.2 },\n    },\n    execution_result: {\n      success: false,\n      actual_result: {},\n      deviation: 0,\n      execution_time: 0.8,\n      error_message: 'API调用失败，平台返回错误',\n    },\n    created_at: '2026-03-20T09:00:00Z',\n    updated_at: '2026-03-20T09:01:00Z',\n    executed_at: '2026-03-20T09:00:05Z',\n    completed_at: '2026-03-20T09:01:00Z',\n  },\n  {\n    id: 'ADL-1710851500000-jkl012',\n    tenant_id: 'tenant-001',\n    shop_id: 'shop-001',\n    task_id: 'TASK-004',\n    trace_id: 'TRACE-1710851500000-mno345',\n    decision_type: 'PRODUCT_SELECT',\n    business_type: 'TOC',\n    status: 'REJECTED',\n    input_data: {\n      context: { category: '电子产品', price_range: [50, 100] },\n      parameters: { min_roi: 0.3, min_rating: 4.5 },\n      constraints: { max_competition: 'MEDIUM' },\n    },\n    output_data: {\n      decision: '选择商品P-NEW-001',\n      confidence: 0.85,\n      reasoning: 'ROI预期30%，评分4.6，符合选品标准',\n      alternatives: [\n        { option: '选择商品P-NEW-002', score: 0.78 },\n        { option: '选择商品P-NEW-001', score: 0.85 },\n      ],\n      expected_result: { roi: 0.32, sales_potential: 'HIGH' },\n    },\n    human_intervention: {\n      operator_id: 'USER-001',\n      operator_name: '张三',\n      action: 'REJECT',\n      comment: '该供应商历史质量不稳定，暂不选品',\n      timestamp: '2026-03-20T08:45:00Z',\n    },\n    created_at: '2026-03-20T08:30:00Z',\n    updated_at: '2026-03-20T08:45:00Z',\n    executed_at: '2026-03-20T08:30:05Z',\n    completed_at: '2026-03-20T08:45:00Z',\n  },\n  {\n    id: 'ADL-1710851600000-mno345',\n    tenant_id: 'tenant-001',\n    shop_id: 'shop-002',\n    task_id: 'TASK-005',\n    trace_id: 'TRACE-1710851600000-pqr678',\n    decision_type: 'RISK_CONTROL',\n    business_type: 'TOB',\n    status: 'SUCCESS',\n    input_data: {\n      context: { order_id: 'ORDER-001', amount: 50000, customer_history: 'GOOD' },\n      parameters: { risk_threshold: 0.3 },\n      constraints: { max_single_order: 100000 },\n    },\n    output_data: {\n      decision: '通过审核',\n      confidence: 0.95,\n      reasoning: '客户历史良好，金额在限额内',\n      alternatives: [\n        { option: '拒绝订单', score: 0.15 },\n        { option: '人工审核', score: 0.45 },\n        { option: '通过审核', score: 0.95 },\n      ],\n      expected_result: { risk_score: 0.1 },\n    },\n    execution_result: {\n      success: true,\n      actual_result: { approved: true, risk_score: 0.1 },\n      deviation: 0,\n      execution_time: 0.5,\n    },\n    created_at: '2026-03-20T08:00:00Z',\n    updated_at: '2026-03-20T08:00:30Z',\n    executed_at: '2026-03-20T08:00:05Z',\n    completed_at: '2026-03-20T08:00:30Z',\n  },\n];\n\n// 模拟统计数据\nconst MOCK_STATISTICS = {\n  total_count: 156,\n  success_count: 128,\n  failed_count: 18,\n  rejected_count: 10,\n  success_rate: 82,\n  avg_execution_time: 1.85,\n  by_type: {\n    PRICING: { count: 45, success_rate: 88 },\n    INVENTORY: { count: 38, success_rate: 92 },\n    AD_OPTIMIZE: { count: 32, success_rate: 75 },\n    PRODUCT_SELECT: { count: 28, success_rate: 78 },\n    LOGISTICS: { count: 8, success_rate: 95 },\n    RISK_CONTROL: { count: 5, success_rate: 100 },\n  },\n  by_day: [\n    { date: '2026-03-15', count: 20, success_count: 16 },\n    { date: '2026-03-16', count: 25, success_count: 21 },\n    { date: '2026-03-17', count: 30, success_count: 25 },\n    { date: '2026-03-18', count: 28, success_count: 23 },\n    { date: '2026-03-19', count: 32, success_count: 26 },\n    { date: '2026-03-20', count: 21, success_count: 17 },\n  ],\n};\n\nconst AIDecisionLogPage: FC = () => {\n  const [logs, setLogs] = useState<any[]>([]);\n  const [statistics, setStatistics] = useState<any>(null);\n  const [loading, setLoading] = useState(false);\n  const [detailVisible, setDetailVisible] = useState(false);\n  const [selectedLog, setSelectedLog] = useState<any>(null);\n  const [traceVisible, setTraceVisible] = useState(false);\n  const [traceData, setTraceData] = useState<any>(null);\n  const [filters, setFilters] = useState<{\n    decision_type: string | undefined;\n    status: string | undefined;\n    date_range: [any, any] | null;\n    search: string;\n  }>({\n    decision_type: undefined,\n    status: undefined,\n    date_range: null,\n    search: '',\n  });\n  const [pagination, setPagination] = useState({\n    current: 1,\n    pageSize: 10,\n    total: 0,\n  });\n\n  const handleShowTrace = (record: any) => {\n    const mockTraceData = {\n      traceId: record.trace_id,\n      taskId: record.task_id,\n      startTime: record.created_at,\n      endTime: record.completed_at,\n      duration: record.execution_result?.execution_time || 0,\n      spans: [\n        {\n          id: 'span-1',\n          name: '接收决策请求',\n          service: 'API Gateway',\n          startTime: record.created_at,\n          duration: 0.1,\n          status: 'success',\n        },\n        {\n          id: 'span-2',\n          name: '数据预处理',\n          service: 'Data Processor',\n          startTime: record.executed_at,\n          duration: 0.2,\n          status: 'success',\n        },\n        {\n          id: 'span-3',\n          name: 'AI模型推理',\n          service: 'AI Engine',\n          startTime: record.executed_at,\n          duration: record.execution_result?.execution_time * 0.6 || 0.5,\n          status: 'success',\n        },\n        {\n          id: 'span-4',\n          name: '决策执行',\n          service: 'Decision Executor',\n          startTime: record.executed_at,\n          duration: record.execution_result?.execution_time * 0.3 || 0.3,\n          status: record.execution_result?.success ? 'success' : 'error',\n        },\n        {\n          id: 'span-5',\n          name: '结果记录',\n          service: 'Logger',\n          startTime: record.completed_at,\n          duration: 0.1,\n          status: 'success',\n        },\n      ],\n      events: [\n        { time: record.created_at, event: '决策请求接收', level: 'info' },\n        { time: record.executed_at, event: '开始执行', level: 'info' },\n        { time: record.completed_at, event: record.execution_result?.success ? '执行成功' : '执行失败', level: record.execution_result?.success ? 'success' : 'error' },\n      ],\n    };\n    setTraceData(mockTraceData);\n    setTraceVisible(true);\n  };\n\n  const fetchData = useCallback(async () => {\n    setLoading(true);\n    try {\n      // 模拟API调用\n      await new Promise(resolve => setTimeout(resolve, 500));\n      setLogs(MOCK_LOGS);\n      setStatistics(MOCK_STATISTICS);\n      setPagination(prev => ({ ...prev, total: MOCK_LOGS.length }));\n    } catch (error) {\n      message.error('加载数据失败');\n    } finally {\n      setLoading(false);\n    }\n  }, []);\n\n  useEffect(() => {\n    fetchData();\n  }, [fetchData]);\n\n  // 表格列定义\n  const columns = [\n    {\n      title: '决策ID',\n      dataIndex: 'id',\n      key: 'id',\n      width: 200,\n      render: (id: string) => (\n        <Text copyable={{ text: id }} style={{ fontFamily: 'monospace' }}>\n          {id.substring(0, 20)}...\n        </Text>\n      ),\n    },\n    {\n      title: '决策类型',\n      dataIndex: 'decision_type',\n      key: 'decision_type',\n      width: 120,\n      render: (type: string) => {\n        const config = DECISION_TYPES.find(t => t.value === type);\n        return <Tag color={config?.color}>{config?.label || type}</Tag>;\n      },\n    },\n    {\n      title: '业务类型',\n      dataIndex: 'business_type',\n      key: 'business_type',\n      width: 100,\n      render: (type: string) => (\n        <Tag color={type === 'TOC' ? 'blue' : 'purple'}>\n          {type === 'TOC' ? 'B2C' : 'B2B'}\n        </Tag>\n      ),\n    },\n    {\n      title: '决策内容',\n      dataIndex: 'output_data',\n      key: 'decision',\n      render: (data: any) => (\n        <Tooltip title={data?.reasoning}>\n          <Text ellipsis style={{ maxWidth: 200 }}>\n            {data?.decision}\n          </Text>\n        </Tooltip>\n      ),\n    },\n    {\n      title: '置信度',\n      dataIndex: 'output_data',\n      key: 'confidence',\n      width: 100,\n      render: (data: any) => (\n        <Badge\n          count={`${Math.round((data?.confidence || 0) * 100)}%`}\n          style={{\n            backgroundColor: (data?.confidence || 0) >= 0.9 ? '#52c41a' :\n              (data?.confidence || 0) >= 0.7 ? '#faad14' : '#f5222d',\n          }}\n        />\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      width: 120,\n      render: (status: keyof typeof DECISION_STATUS) => {\n        const config = DECISION_STATUS[status];\n        return (\n          <Tag icon={config.icon} color={config.color}>\n            {config.label}\n          </Tag>\n        );\n      },\n    },\n    {\n      title: '执行时间',\n      dataIndex: 'execution_result',\n      key: 'execution_time',\n      width: 100,\n      render: (result: any) => result ? `${result.execution_time}s` : '-',\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'created_at',\n      key: 'created_at',\n      width: 180,\n      render: (time: string) => moment(time).format('YYYY-MM-DD HH:mm:ss'),\n    },\n    {\n      title: '操作',\n      key: 'action',\n      width: 150,\n      fixed: 'right' as const,\n      render: (_: any, record: any) => (\n        <Space>\n          <Button\n            type=\"primary\"\n            size=\"small\"\n            icon={<EyeOutlined />}\n            onClick={() => {\n              setSelectedLog(record);\n              setDetailVisible(true);\n            }}\n          >\n            详情\n          </Button>\n          <Tooltip title=\"查看链路\">\n            <Button\n              size=\"small\"\n              icon={<LinkOutlined />}\n              onClick={() => handleShowTrace(record)}\n            />\n          </Tooltip>\n        </Space>\n      ),\n    },\n  ];\n\n  // 趋势图配置\n  const trendConfig = {\n    data: statistics?.by_day || [],\n    xField: 'date',\n    yField: 'count',\n    seriesField: 'type',\n    smooth: true,\n    point: {\n      size: 4,\n      shape: 'circle',\n    },\n    lineStyle: {\n      lineWidth: 2,\n    },\n    tooltip: {\n      showMarkers: true,\n    },\n    legend: {\n      position: 'top',\n    },\n  };\n\n  // 类型分布图配置\n  const typePieConfig = {\n    data: statistics ? Object.entries(statistics.by_type).map(([type, data]: [string, any]) => ({\n      type: DECISION_TYPES.find(t => t.value === type)?.label || type,\n      value: data.count,\n    })) : [],\n    angleField: 'value',\n    colorField: 'type',\n    radius: 0.8,\n    label: {\n      type: 'outer',\n      content: '{name} {percentage}',\n    },\n    legend: {\n      position: 'right',\n    },\n  };\n\n  return (\n    <div style={{ padding: 24 }}>\n      <Title level={2}>AI决策日志</Title>\n      <Text type=\"secondary\">全链路追溯AI决策过程，支持决策分析和审计</Text>\n\n      {/* 统计卡片 */}\n      <Row gutter={16} style={{ marginTop: 24, marginBottom: 24 }}>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"总决策数\"\n              value={statistics?.total_count || 0}\n              prefix={<BarChartOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"成功数\"\n              value={statistics?.success_count || 0}\n              valueStyle={{ color: '#3f8600' }}\n              prefix={<CheckCircleOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"失败数\"\n              value={statistics?.failed_count || 0}\n              valueStyle={{ color: '#cf1322' }}\n              prefix={<CloseCircleOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"拒绝数\"\n              value={statistics?.rejected_count || 0}\n              valueStyle={{ color: '#faad14' }}\n              prefix={<ExclamationCircleOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"成功率\"\n              value={statistics?.success_rate || 0}\n              suffix=\"%\"\n              valueStyle={{ color: '#3f8600' }}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"平均执行时间\"\n              value={statistics?.avg_execution_time || 0}\n              suffix=\"s\"\n              prefix={<ClockCircleOutlined />}\n            />\n          </Card>\n        </Col>\n      </Row>\n\n      {/* 图表区域 */}\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={16}>\n          <Card title=\"决策趋势\" extra={<LineChartOutlined />}>\n            {statistics ? (\n              <Line {...trendConfig} />\n            ) : (\n              <Spin />\n            )}\n          </Card>\n        </Col>\n        <Col span={8}>\n          <Card title=\"决策类型分布\">\n            {statistics ? (\n              <Pie {...typePieConfig} />\n            ) : (\n              <Spin />\n            )}\n          </Card>\n        </Col>\n      </Row>\n\n      {/* 筛选区域 */}\n      <Card style={{ marginBottom: 24 }}>\n        <Space wrap>\n          <Select\n            placeholder=\"决策类型\"\n            style={{ width: 150 }}\n            allowClear\n            value={filters.decision_type}\n            onChange={value => setFilters(prev => ({ ...prev, decision_type: value }))}\n          >\n            {DECISION_TYPES.map(type => (\n              <Option key={type.value} value={type.value}>{type.label}</Option>\n            ))}\n          </Select>\n          <Select\n            placeholder=\"状态\"\n            style={{ width: 120 }}\n            allowClear\n            value={filters.status}\n            onChange={value => setFilters(prev => ({ ...prev, status: value }))}\n          >\n            {Object.entries(DECISION_STATUS).map(([key, config]) => (\n              <Option key={key} value={key}>{config.label}</Option>\n            ))}\n          </Select>\n          <RangePicker\n            value={filters.date_range}\n            onChange={dates => setFilters(prev => ({ ...prev, date_range: dates }))}\n          />\n          <Search\n            placeholder=\"搜索决策ID/TraceID\"\n            style={{ width: 250 }}\n            value={filters.search}\n            onChange={e => setFilters(prev => ({ ...prev, search: e.target.value }))}\n          />\n          <Button type=\"primary\" icon={<SearchOutlined />} onClick={fetchData}>\n            查询\n          </Button>\n          <Button icon={<ReloadOutlined />} onClick={fetchData}>\n            刷新\n          </Button>\n        </Space>\n      </Card>\n\n      {/* 表格 */}\n      <Card>\n        <Table\n          columns={columns}\n          dataSource={logs}\n          rowKey=\"id\"\n          loading={loading}\n          pagination={{\n            ...pagination,\n            showSizeChanger: true,\n            showQuickJumper: true,\n            showTotal: total => `共 ${total} 条记录`,\n          }}\n          onChange={(pag) => setPagination({\n            current: pag.current || 1,\n            pageSize: pag.pageSize || 10,\n            total: pag.total || 0,\n          })}\n          scroll={{ x: 1500 }}\n        />\n      </Card>\n\n      {/* 详情抽屉 */}\n      <Drawer\n        title=\"决策详情\"\n        width={800}\n        open={detailVisible}\n        onClose={() => setDetailVisible(false)}\n      >\n        {selectedLog && (\n          <Tabs \n            defaultActiveKey=\"basic\"\n            items={[\n              { key: 'basic', label: '基本信息', children: (\n                <>\n                  <Descriptions bordered column={2}>\n                    <Descriptions.Item label=\"决策ID\">{selectedLog.id}</Descriptions.Item>\n                    <Descriptions.Item label=\"Trace ID\">{selectedLog.trace_id}</Descriptions.Item>\n                    <Descriptions.Item label=\"决策类型\">\n                      {DECISION_TYPES.find(t => t.value === selectedLog.decision_type)?.label}\n                    </Descriptions.Item>\n                    <Descriptions.Item label=\"业务类型\">\n                      {selectedLog.business_type === 'TOC' ? 'B2C' : 'B2B'}\n                    </Descriptions.Item>\n                    <Descriptions.Item label=\"状态\">\n                      <Tag color={DECISION_STATUS[selectedLog.status as keyof typeof DECISION_STATUS].color}>\n                        {DECISION_STATUS[selectedLog.status as keyof typeof DECISION_STATUS].label}\n                      </Tag>\n                    </Descriptions.Item>\n                    <Descriptions.Item label=\"置信度\">\n                      {Math.round(selectedLog.output_data?.confidence * 100)}%\n                    </Descriptions.Item>\n                    <Descriptions.Item label=\"创建时间\">\n                      {moment(selectedLog.created_at).format('YYYY-MM-DD HH:mm:ss')}\n                    </Descriptions.Item>\n                    <Descriptions.Item label=\"完成时间\">\n                      {selectedLog.completed_at \n                        ? moment(selectedLog.completed_at).format('YYYY-MM-DD HH:mm:ss')\n                        : '-'}\n                    </Descriptions.Item>\n                  </Descriptions>\n\n                  <Title level={5} style={{ marginTop: 24 }}>决策结果</Title>\n                  <Card>\n                    <Text strong>{selectedLog.output_data?.decision}</Text>\n                    <br />\n                    <Text type=\"secondary\">{selectedLog.output_data?.reasoning}</Text>\n                  </Card>\n                </>\n              )},\n              { key: 'input', label: '输入参数', children: (\n                <>\n                  <Card title=\"上下文\">\n                    <pre>{JSON.stringify(selectedLog.input_data?.context, null, 2)}</pre>\n                  </Card>\n                  <Card title=\"参数\" style={{ marginTop: 16 }}>\n                    <pre>{JSON.stringify(selectedLog.input_data?.parameters, null, 2)}</pre>\n                  </Card>\n                  <Card title=\"约束条件\" style={{ marginTop: 16 }}>\n                    <pre>{JSON.stringify(selectedLog.input_data?.constraints, null, 2)}</pre>\n                  </Card>\n                </>\n              )},\n              { key: 'alternatives', label: '决策选项', children: (\n                <Timeline>\n                  {selectedLog.output_data?.alternatives?.map((alt: any, index: number) => (\n                    <Timeline.Item key={index}>\n                      <Text strong>{alt.option}</Text>\n                      <br />\n                      <Text type=\"secondary\">评分: {Math.round(alt.score * 100)}%</Text>\n                    </Timeline.Item>\n                  ))}\n                </Timeline>\n              )},\n              { key: 'execution', label: '执行结果', children: (\n                selectedLog.execution_result ? (\n                  <>\n                    <Descriptions bordered column={1}>\n                      <Descriptions.Item label=\"执行成功\">\n                        {selectedLog.execution_result.success ? (\n                          <Tag color=\"success\">是</Tag>\n                        ) : (\n                          <Tag color=\"error\">否</Tag>\n                        )}\n                      </Descriptions.Item>\n                      <Descriptions.Item label=\"执行时间\">\n                        {selectedLog.execution_result.execution_time}s\n                      </Descriptions.Item>\n                      <Descriptions.Item label=\"偏差\">\n                        {Math.round(selectedLog.execution_result.deviation * 100)}%\n                      </Descriptions.Item>\n                      {selectedLog.execution_result.error_message && (\n                        <Descriptions.Item label=\"错误信息\">\n                          <Text type=\"danger\">{selectedLog.execution_result.error_message}</Text>\n                        </Descriptions.Item>\n                      )}\n                    </Descriptions>\n                    <Card title=\"实际结果\" style={{ marginTop: 16 }}>\n                      <pre>{JSON.stringify(selectedLog.execution_result.actual_result, null, 2)}</pre>\n                    </Card>\n                  </>\n                ) : (\n                  <Text type=\"secondary\">暂无执行结果</Text>\n                )\n              )},\n              ...(selectedLog.human_intervention ? [{\n                key: 'intervention',\n                label: '人工干预',\n                children: (\n                  <Descriptions bordered column={1}>\n                    <Descriptions.Item label=\"操作人\">\n                      {selectedLog.human_intervention.operator_name}\n                    </Descriptions.Item>\n                    <Descriptions.Item label=\"操作类型\">\n                      <Tag color=\"blue\">{selectedLog.human_intervention.action}</Tag>\n                    </Descriptions.Item>\n                    <Descriptions.Item label=\"备注\">\n                      {selectedLog.human_intervention.comment}\n                    </Descriptions.Item>\n                    <Descriptions.Item label=\"操作时间\">\n                      {moment(selectedLog.human_intervention.timestamp).format('YYYY-MM-DD HH:mm:ss')}\n                    </Descriptions.Item>\n                  </Descriptions>\n                )\n              }] : []),\n            ]}\n          />\n        )}\n      </Drawer>\n\n      <Drawer\n        title=\"链路追踪\"\n        width={900}\n        open={traceVisible}\n        onClose={() => setTraceVisible(false)}\n      >\n        {traceData && (\n          <div>\n            <Descriptions bordered column={2} style={{ marginBottom: 24 }}>\n              <Descriptions.Item label=\"Trace ID\">\n                <Text copyable style={{ fontFamily: 'monospace' }}>{traceData.traceId}</Text>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"Task ID\">{traceData.taskId}</Descriptions.Item>\n              <Descriptions.Item label=\"开始时间\">\n                {moment(traceData.startTime).format('YYYY-MM-DD HH:mm:ss.SSS')}\n              </Descriptions.Item>\n              <Descriptions.Item label=\"结束时间\">\n                {moment(traceData.endTime).format('YYYY-MM-DD HH:mm:ss.SSS')}\n              </Descriptions.Item>\n              <Descriptions.Item label=\"总耗时\" span={2}>\n                <Tag color=\"blue\">{traceData.duration}s</Tag>\n              </Descriptions.Item>\n            </Descriptions>\n\n            <Card title=\"调用链路\" style={{ marginBottom: 24 }}>\n              <Timeline>\n                {traceData.spans.map((span: any, index: number) => (\n                  <Timeline.Item\n                    key={span.id}\n                    color={span.status === 'success' ? 'green' : 'red'}\n                    dot={\n                      span.status === 'success' ? (\n                        <CheckCircleOutlined style={{ fontSize: 16 }} />\n                      ) : (\n                        <CloseCircleOutlined style={{ fontSize: 16 }} />\n                      )\n                    }\n                  >\n                    <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n                      <div>\n                        <Text strong>{span.name}</Text>\n                        <br />\n                        <Text type=\"secondary\" style={{ fontSize: 12 }}>\n                          服务: {span.service}\n                        </Text>\n                      </div>\n                      <Tag color={span.status === 'success' ? 'success' : 'error'}>\n                        {span.duration}s\n                      </Tag>\n                    </div>\n                  </Timeline.Item>\n                ))}\n              </Timeline>\n            </Card>\n\n            <Card title=\"事件日志\">\n              <Table\n                dataSource={traceData.events}\n                rowKey={(record: any) => `${record.time}-${record.event}`}\n                pagination={false}\n                size=\"small\"\n                columns={[\n                  {\n                    title: '时间',\n                    dataIndex: 'time',\n                    key: 'time',\n                    width: 200,\n                    render: (time: string) => moment(time).format('HH:mm:ss.SSS'),\n                  },\n                  {\n                    title: '事件',\n                    dataIndex: 'event',\n                    key: 'event',\n                  },\n                  {\n                    title: '级别',\n                    dataIndex: 'level',\n                    key: 'level',\n                    width: 100,\n                    render: (level: string) => (\n                      <Tag color={level === 'success' ? 'success' : level === 'error' ? 'error' : 'default'}>\n                        {level.toUpperCase()}\n                      </Tag>\n                    ),\n                  },\n                ]}\n              />\n            </Card>\n          </div>\n        )}\n      </Drawer>\n    </div>\n  );\n};\n\nexport default AIDecisionLogPage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/AIDecisionLog/index.tsx"
    },
    "12": {
      "path": "/dashboard/strategy-marketplace",
      "file": "@/pages/StrategyMarketplace/index.tsx",
      "parentId": "4",
      "id": "12",
      "absPath": "/dashboard/strategy-marketplace",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Tabs,\n  Table,\n  Tag,\n  Statistic,\n  Row,\n  Col,\n  Spin,\n  message,\n  Select,\n  Button,\n  Tooltip,\n  Badge,\n  Input,\n  Modal,\n  Progress,\n  Rate,\n  Empty,\n  Typography,\n  Space,\n  Divider,\n  ShopOutlined,\n  ThunderboltOutlined,\n  FireOutlined,\n  StarOutlined,\n  SearchOutlined,\n  RocketOutlined,\n  DollarOutlined,\n  PercentageOutlined,\n  BarChartOutlined,\n  SettingOutlined,\n  PlayCircleOutlined,\n  PauseCircleOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  BulbOutlined,\n  TagOutlined,\n  Option,\n  Search,\n  Title,\n  Text,\n  Paragraph,\n  FC,\n} from '@/imports';\nimport type { ColumnsType } from 'antd/es/table';\n\ninterface Strategy {\n  id: string;\n  name: string;\n  description: string;\n  category: 'PRICING' | 'ADVERTISING' | 'PRODUCT_SELECTION' | 'INVENTORY' | 'LOGISTICS' | 'MARKETING';\n  risk_level: 'LOW' | 'MEDIUM' | 'HIGH';\n  price: number;\n  billing_type: 'FREE' | 'ONE_TIME' | 'SUBSCRIPTION' | 'USAGE_BASED';\n  avg_roi: number;\n  usage_count: number;\n  success_rate: number;\n  tags: string[];\n  is_active: boolean;\n  is_featured: boolean;\n}\n\ninterface MerchantStrategy {\n  id: string;\n  strategy_id: string;\n  status: 'ACTIVE' | 'PAUSED' | 'COMPLETED' | 'FAILED';\n  roi_achieved: number;\n  revenue_generated: number;\n  activated_at: string;\n  strategy: Strategy;\n}\n\ninterface Recommendation {\n  strategy: Strategy;\n  score: number;\n  reasons: string[];\n  expectedRoi: number;\n  confidence: number;\n  priority: 'HIGH' | 'MEDIUM' | 'LOW';\n}\n\nconst categoryColors: Record<string, string> = {\n  PRICING: 'blue',\n  ADVERTISING: 'orange',\n  PRODUCT_SELECTION: 'green',\n  INVENTORY: 'purple',\n  LOGISTICS: 'cyan',\n  MARKETING: 'magenta'\n};\n\nconst categoryIcons: Record<string, React.ReactNode> = {\n  PRICING: <DollarOutlined />,\n  ADVERTISING: <ThunderboltOutlined />,\n  PRODUCT_SELECTION: <ShopOutlined />,\n  INVENTORY: <BarChartOutlined />,\n  LOGISTICS: <RocketOutlined />,\n  MARKETING: <BulbOutlined />\n};\n\nconst riskColors: Record<string, string> = {\n  LOW: 'success',\n  MEDIUM: 'warning',\n  HIGH: 'error'\n};\n\nconst StrategyMarketplacePage: FC = () => {\n  const [loading, setLoading] = useState(true);\n  const [activeTab, setActiveTab] = useState('marketplace');\n  const [categoryFilter, setCategoryFilter] = useState<string>('all');\n  const [searchQuery, setSearchQuery] = useState('');\n  const [strategies, setStrategies] = useState<Strategy[]>([]);\n  const [featuredStrategies, setFeaturedStrategies] = useState<Strategy[]>([]);\n  const [trendingStrategies, setTrendingStrategies] = useState<Strategy[]>([]);\n  const [recommendations, setRecommendations] = useState<Recommendation[]>([]);\n  const [myStrategies, setMyStrategies] = useState<MerchantStrategy[]>([]);\n  const [selectedStrategy, setSelectedStrategy] = useState<Strategy | null>(null);\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\n\n  useEffect(() => {\n    fetchInitialData();\n  }, []);\n\n  const fetchInitialData = async () => {\n    setLoading(true);\n    try {\n      const [strategiesRes, featuredRes, trendingRes, recommendationsRes, myStrategiesRes] = await Promise.all([\n        fetch('/api/v1/strategy/strategies?isActive=true').then(r => r.json()),\n        fetch('/api/v1/strategy/strategies/featured').then(r => r.json()),\n        fetch('/api/v1/strategy/strategies/trending').then(r => r.json()),\n        fetch('/api/v1/strategy/recommendations').then(r => r.json()),\n        fetch('/api/v1/strategy/my-strategies').then(r => r.json())\n      ]);\n\n      if (strategiesRes.success) setStrategies(strategiesRes.data);\n      if (featuredRes.success) setFeaturedStrategies(featuredRes.data);\n      if (trendingRes.success) setTrendingStrategies(trendingRes.data);\n      if (recommendationsRes.success) setRecommendations(recommendationsRes.data);\n      if (myStrategiesRes.success) setMyStrategies(myStrategiesRes.data);\n    } catch (error) {\n      message.error('Failed to load strategies');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleSearch = async (value: string) => {\n    if (!value.trim()) {\n      fetchInitialData();\n      return;\n    }\n\n    setLoading(true);\n    try {\n      const res = await fetch(`/api/v1/strategy/strategies/search?q=${encodeURIComponent(value)}`);\n      const data = await res.json();\n      if (data.success) {\n        setStrategies(data.data);\n        setActiveTab('marketplace');\n      }\n    } catch (error) {\n      message.error('Search failed');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleActivateStrategy = async (strategyId: string, config?: Record<string, any>) => {\n    try {\n      const res = await fetch(`/api/v1/strategy/strategies/${strategyId}/activate`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ config })\n      });\n      const data = await res.json();\n\n      if (data.success) {\n        message.success('Strategy activated successfully!');\n        fetchInitialData();\n        setDetailModalVisible(false);\n      } else {\n        message.error(data.message || 'Failed to activate strategy');\n      }\n    } catch (error) {\n      message.error('Failed to activate strategy');\n    }\n  };\n\n  const handlePauseStrategy = async (merchantStrategyId: string) => {\n    try {\n      const res = await fetch(`/api/v1/strategy/my-strategies/${merchantStrategyId}/pause`, {\n        method: 'POST'\n      });\n      const data = await res.json();\n\n      if (data.success) {\n        message.success('Strategy paused');\n        fetchInitialData();\n      } else {\n        message.error(data.message || 'Failed to pause strategy');\n      }\n    } catch (error) {\n      message.error('Failed to pause strategy');\n    }\n  };\n\n  const handleResumeStrategy = async (merchantStrategyId: string) => {\n    try {\n      const res = await fetch(`/api/v1/strategy/my-strategies/${merchantStrategyId}/resume`, {\n        method: 'POST'\n      });\n      const data = await res.json();\n\n      if (data.success) {\n        message.success('Strategy resumed');\n        fetchInitialData();\n      } else {\n        message.error(data.message || 'Failed to resume strategy');\n      }\n    } catch (error) {\n      message.error('Failed to resume strategy');\n    }\n  };\n\n  const showStrategyDetail = (strategy: Strategy) => {\n    setSelectedStrategy(strategy);\n    setDetailModalVisible(true);\n  };\n\n  const filteredStrategies = categoryFilter === 'all'\n    ? strategies\n    : strategies.filter(s => s.category === categoryFilter);\n\n  const renderStrategyCard = (strategy: Strategy, showActions: boolean = true) => (\n    <Card\n      hoverable\n      style={{ marginBottom: 16 }}\n      onClick={() => showStrategyDetail(strategy)}\n    >\n      <Row gutter={16} align=\"middle\">\n        <Col flex=\"auto\">\n          <Space direction=\"vertical\" size=\"small\" style={{ width: '100%' }}>\n            <Space>\n              <Text strong style={{ fontSize: 16 }}>{strategy.name}</Text>\n              {strategy.is_featured && <Tag icon={<StarOutlined />} color=\"gold\">Featured</Tag>}\n            </Space>\n            <Space>\n              <Tag color={categoryColors[strategy.category]} icon={categoryIcons[strategy.category]}>\n                {strategy.category.replace('_', ' ')}\n              </Tag>\n              <Tag color={riskColors[strategy.risk_level]}>{strategy.risk_level} Risk</Tag>\n              {strategy.price === 0 ? (\n                <Tag color=\"green\">FREE</Tag>\n              ) : (\n                <Tag color=\"blue\">${strategy.price.toFixed(2)}</Tag>\n              )}\n            </Space>\n            <Text type=\"secondary\" ellipsis style={{ maxWidth: 400 }}>\n              {strategy.description}\n            </Text>\n            <Space>\n              <Text type=\"secondary\">\n                <PercentageOutlined /> Avg ROI: {(strategy.avg_roi * 100).toFixed(1)}%\n              </Text>\n              <Divider type=\"vertical\" />\n              <Text type=\"secondary\">\n                <CheckCircleOutlined /> Success: {strategy.success_rate}%\n              </Text>\n              <Divider type=\"vertical\" />\n              <Text type=\"secondary\">\n                <BarChartOutlined /> Used: {strategy.usage_count}\n              </Text>\n            </Space>\n          </Space>\n        </Col>\n        {showActions && (\n          <Col>\n            <Button\n              type=\"primary\"\n              icon={<PlayCircleOutlined />}\n              onClick={(e) => {\n                e.stopPropagation();\n                handleActivateStrategy(strategy.id);\n              }}\n            >\n              Activate\n            </Button>\n          </Col>\n        )}\n      </Row>\n    </Card>\n  );\n\n  const renderRecommendationCard = (rec: Recommendation) => (\n    <Card\n      hoverable\n      style={{ marginBottom: 16 }}\n      onClick={() => showStrategyDetail(rec.strategy)}\n    >\n      <Row gutter={16} align=\"middle\">\n        <Col flex=\"auto\">\n          <Space direction=\"vertical\" size=\"small\" style={{ width: '100%' }}>\n            <Space>\n              <Text strong style={{ fontSize: 16 }}>{rec.strategy.name}</Text>\n              <Tag color={rec.priority === 'HIGH' ? 'red' : rec.priority === 'MEDIUM' ? 'orange' : 'blue'}>\n                {rec.priority} Priority\n              </Tag>\n              <Badge count={`Score: ${rec.score.toFixed(0)}`} style={{ backgroundColor: '#52c41a' }} />\n            </Space>\n            <Space wrap>\n              {rec.reasons.map((reason, idx) => (\n                <Tag key={idx} icon={<BulbOutlined />} color=\"processing\">{reason}</Tag>\n              ))}\n            </Space>\n            <Space>\n              <Text type=\"secondary\">\n                Expected ROI: <Text strong style={{ color: '#52c41a' }}>{(rec.expectedRoi * 100).toFixed(1)}%</Text>\n              </Text>\n              <Divider type=\"vertical\" />\n              <Text type=\"secondary\">\n                Confidence: <Progress percent={rec.confidence * 100} size=\"small\" style={{ width: 80, display: 'inline-block' }} />\n              </Text>\n            </Space>\n          </Space>\n        </Col>\n        <Col>\n          <Button\n            type=\"primary\"\n            icon={<PlayCircleOutlined />}\n            onClick={(e) => {\n              e.stopPropagation();\n              handleActivateStrategy(rec.strategy.id);\n            }}\n          >\n            Activate\n          </Button>\n        </Col>\n      </Row>\n    </Card>\n  );\n\n  const myStrategiesColumns: ColumnsType<MerchantStrategy> = [\n    {\n      title: 'Strategy',\n      dataIndex: ['strategy', 'name'],\n      key: 'name',\n      render: (name: string, record) => (\n        <Space>\n          <Tag color={categoryColors[record.strategy.category]} icon={categoryIcons[record.strategy.category]}>\n            {record.strategy.category.replace('_', ' ')}\n          </Tag>\n          <Text strong>{name}</Text>\n        </Space>\n      )\n    },\n    {\n      title: 'Status',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => {\n        const statusConfig: Record<string, { color: string; icon: React.ReactNode }> = {\n          ACTIVE: { color: 'success', icon: <CheckCircleOutlined /> },\n          PAUSED: { color: 'warning', icon: <PauseCircleOutlined /> },\n          COMPLETED: { color: 'processing', icon: <CheckCircleOutlined /> },\n          FAILED: { color: 'error', icon: <CloseCircleOutlined /> }\n        };\n        const config = statusConfig[status];\n        return <Tag color={config.color} icon={config.icon}>{status}</Tag>;\n      }\n    },\n    {\n      title: 'ROI Achieved',\n      dataIndex: 'roi_achieved',\n      key: 'roi',\n      render: (roi: number) => (\n        <Text style={{ color: roi > 0 ? '#52c41a' : '#ff4d4f' }}>\n          {(roi * 100).toFixed(1)}%\n        </Text>\n      )\n    },\n    {\n      title: 'Revenue Generated',\n      dataIndex: 'revenue_generated',\n      key: 'revenue',\n      render: (revenue: number) => `$${revenue.toFixed(2)}`\n    },\n    {\n      title: 'Activated',\n      dataIndex: 'activated_at',\n      key: 'activated_at',\n      render: (date: string) => new Date(date).toLocaleDateString()\n    },\n    {\n      title: 'Actions',\n      key: 'actions',\n      render: (_, record) => (\n        <Space>\n          {record.status === 'ACTIVE' && (\n            <Button\n              size=\"small\"\n              icon={<PauseCircleOutlined />}\n              onClick={() => handlePauseStrategy(record.id)}\n            >\n              Pause\n            </Button>\n          )}\n          {record.status === 'PAUSED' && (\n            <Button\n              size=\"small\"\n              type=\"primary\"\n              icon={<PlayCircleOutlined />}\n              onClick={() => handleResumeStrategy(record.id)}\n            >\n              Resume\n            </Button>\n          )}\n        </Space>\n      )\n    }\n  ];\n\n  const renderDetailModal = () => (\n    <Modal\n      title={\n        <Space>\n          {selectedStrategy?.name}\n          {selectedStrategy?.is_featured && <Tag icon={<StarOutlined />} color=\"gold\">Featured</Tag>}\n        </Space>\n      }\n      open={detailModalVisible}\n      onCancel={() => setDetailModalVisible(false)}\n      width={700}\n      footer={[\n        <Button key=\"cancel\" onClick={() => setDetailModalVisible(false)}>\n          Cancel\n        </Button>,\n        <Button\n          key=\"activate\"\n          type=\"primary\"\n          icon={<PlayCircleOutlined />}\n          onClick={() => handleActivateStrategy(selectedStrategy?.id || '')}\n        >\n          Activate Strategy\n        </Button>\n      ]}\n    >\n      {selectedStrategy && (\n        <Space direction=\"vertical\" size=\"large\" style={{ width: '100%' }}>\n          <Paragraph>{selectedStrategy.description}</Paragraph>\n\n          <Row gutter={16}>\n            <Col span={8}>\n              <Statistic\n                title=\"Average ROI\"\n                value={(selectedStrategy.avg_roi * 100).toFixed(1)}\n                suffix=\"%\"\n                valueStyle={{ color: '#52c41a' }}\n              />\n            </Col>\n            <Col span={8}>\n              <Statistic\n                title=\"Success Rate\"\n                value={selectedStrategy.success_rate}\n                suffix=\"%\"\n              />\n            </Col>\n            <Col span={8}>\n              <Statistic\n                title=\"Usage Count\"\n                value={selectedStrategy.usage_count}\n              />\n            </Col>\n          </Row>\n\n          <Divider />\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Text type=\"secondary\">Category: </Text>\n              <Tag color={categoryColors[selectedStrategy.category]} icon={categoryIcons[selectedStrategy.category]}>\n                {selectedStrategy.category.replace('_', ' ')}\n              </Tag>\n            </Col>\n            <Col span={12}>\n              <Text type=\"secondary\">Risk Level: </Text>\n              <Tag color={riskColors[selectedStrategy.risk_level]}>\n                {selectedStrategy.risk_level}\n              </Tag>\n            </Col>\n          </Row>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Text type=\"secondary\">Price: </Text>\n              {selectedStrategy.price === 0 ? (\n                <Tag color=\"green\">FREE</Tag>\n              ) : (\n                <Text strong>${selectedStrategy.price.toFixed(2)}</Text>\n              )}\n              <Text type=\"secondary\"> ({selectedStrategy.billing_type})</Text>\n            </Col>\n          </Row>\n\n          <Divider />\n\n          <div>\n            <Text type=\"secondary\">Tags: </Text>\n            <Space wrap style={{ marginTop: 8 }}>\n              {selectedStrategy.tags.map((tag, idx) => (\n                <Tag key={idx} icon={<TagOutlined />}>{tag}</Tag>\n              ))}\n            </Space>\n          </div>\n        </Space>\n      )}\n    </Modal>\n  );\n\n  if (loading) {\n    return (\n      <div style={{ textAlign: 'center', padding: '100px 0' }}>\n        <Spin size=\"large\" />\n      </div>\n    );\n  }\n\n  return (\n    <div style={{ padding: 24 }}>\n      <Row gutter={[16, 16]}>\n        <Col span={24}>\n          <Card>\n            <Row gutter={16} align=\"middle\">\n              <Col flex=\"auto\">\n                <Title level={3} style={{ margin: 0 }}>\n                  <ShopOutlined /> Strategy Marketplace\n                </Title>\n                <Text type=\"secondary\">\n                  Discover and activate AI-powered strategies to grow your business\n                </Text>\n              </Col>\n              <Col>\n                <Search\n                  placeholder=\"Search strategies...\"\n                  allowClear\n                  enterButton={<SearchOutlined />}\n                  style={{ width: 300 }}\n                  onSearch={handleSearch}\n                />\n              </Col>\n            </Row>\n          </Card>\n        </Col>\n\n        <Col span={24}>\n          <Tabs \n            activeKey={activeTab} \n            onChange={setActiveTab}\n            items={[\n              { key: 'marketplace', label: <span><ShopOutlined /> Marketplace</span>, children: (\n                <>\n                  <Row gutter={16}>\n                    <Col span={6}>\n                      <Select\n                        style={{ width: '100%', marginBottom: 16 }}\n                        value={categoryFilter}\n                        onChange={setCategoryFilter}\n                      >\n                        <Option value=\"all\">All Categories</Option>\n                        <Option value=\"PRICING\">Pricing</Option>\n                        <Option value=\"ADVERTISING\">Advertising</Option>\n                        <Option value=\"PRODUCT_SELECTION\">Product Selection</Option>\n                        <Option value=\"INVENTORY\">Inventory</Option>\n                        <Option value=\"LOGISTICS\">Logistics</Option>\n                        <Option value=\"MARKETING\">Marketing</Option>\n                      </Select>\n                    </Col>\n                  </Row>\n\n                  {filteredStrategies.length === 0 ? (\n                    <Empty description=\"No strategies found\" />\n                  ) : (\n                    filteredStrategies.map(strategy => renderStrategyCard(strategy))\n                  )}\n                </>\n              )},\n              { key: 'featured', label: <span><StarOutlined /> Featured</span>, children: (\n                featuredStrategies.length === 0 ? (\n                  <Empty description=\"No featured strategies\" />\n                ) : (\n                  featuredStrategies.map(strategy => renderStrategyCard(strategy))\n                )\n              )},\n              { key: 'trending', label: <span><FireOutlined /> Trending</span>, children: (\n                trendingStrategies.length === 0 ? (\n                  <Empty description=\"No trending strategies\" />\n                ) : (\n                  trendingStrategies.map(strategy => renderStrategyCard(strategy))\n                )\n              )},\n              { key: 'recommendations', label: <span><BulbOutlined /> Recommendations</span>, children: (\n                recommendations.length === 0 ? (\n                  <Empty description=\"No recommendations available\" />\n                ) : (\n                  recommendations.map(rec => renderRecommendationCard(rec))\n                )\n              )},\n              { key: 'my-strategies', label: <span><SettingOutlined /> My Strategies</span>, children: (\n                <Table\n                  columns={myStrategiesColumns}\n                  dataSource={myStrategies}\n                  rowKey=\"id\"\n                  pagination={{ pageSize: 10 }}\n                />\n              )},\n            ]}\n          />\n        </Col>\n      </Row>\n\n      {renderDetailModal()}\n    </div>\n  );\n};\n\nexport default StrategyMarketplacePage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/StrategyMarketplace/index.tsx"
    },
    "13": {
      "path": "/dashboard/auto-product-selection",
      "file": "@/pages/AutoProductSelection/index.tsx",
      "parentId": "4",
      "id": "13",
      "absPath": "/dashboard/auto-product-selection",
      "__content": "/**\n * [FE-SELECT001] 自动选品+自动上架系统前端页面\n * 使用DataSource抽象层获取数据，符合项目Mock规范\n * \n * @module pages/AutoProductSelection\n * @author AI-Frontend-33\n * @created 2026-03-20\n */\n\nimport {\n  useState,\n  useEffect,\n  useCallback,\n  Card,\n  Row,\n  Col,\n  Table,\n  Button,\n  Space,\n  Tag,\n  Input,\n  Select,\n  Slider,\n  Switch,\n  Form,\n  Modal,\n  Drawer,\n  message,\n  Tooltip,\n  Badge,\n  Tabs,\n  Alert,\n  Statistic,\n  Progress,\n  Typography,\n  Divider,\n  Popconfirm,\n  InputNumber,\n  DatePicker,\n  Checkbox,\n  Empty,\n  ShoppingOutlined,\n  DollarOutlined,\n  ThunderboltOutlined,\n  SettingOutlined,\n  PlayCircleOutlined,\n  PauseCircleOutlined,\n  ReloadOutlined,\n  CheckCircleOutlined,\n  ClockCircleOutlined,\n  ArrowUpOutlined,\n  ArrowDownOutlined,\n  FilterOutlined,\n  StarOutlined,\n  EyeOutlined,\n  DeleteOutlined,\n  SyncOutlined,\n  BarChartOutlined,\n  WarningOutlined,\n  FireOutlined,\n  RobotOutlined,\n  AlertOutlined,\n  InfoCircleOutlined,\n  PlusOutlined,\n  RiseOutlined,\n  Title,\n  Text,\n  Option,\n  FC,\n} from '@/imports';\nimport type { ColumnsType } from 'antd/es/table';\nimport moment from 'moment';\nimport {\n  productSelectionDataSource,\n  ProductPoolQueryParams,\n  SelectionRuleQueryParams,\n  ListingTaskQueryParams,\n} from '@/services/productSelectionDataSource';\nimport type {\n  ProductPool,\n  SelectionRule,\n  ListingTask,\n  AutoListingConfig,\n} from '@/mock/data/productSelection.mock';\n\nconst COMPETITION_CONFIG: { [key: string]: { color: string; text: string } } = {\n  LOW: { color: 'success', text: '低' },\n  MEDIUM: { color: 'warning', text: '中' },\n  HIGH: { color: 'error', text: '高' },\n};\n\nconst TREND_CONFIG = {\n  UP: { icon: <ArrowUpOutlined />, color: 'success', text: '上升' },\n  DOWN: { icon: <ArrowDownOutlined />, color: 'error', text: '下降' },\n  STABLE: { icon: <ClockCircleOutlined />, color: 'default', text: '稳定' },\n};\n\nconst AutoProductSelection: FC = () => {\n  const [activeTab, setActiveTab] = useState('pool');\n  const [loading, setLoading] = useState(false);\n  const [productPool, setProductPool] = useState<ProductPool[]>([]);\n  const [selectionRules, setSelectionRules] = useState<SelectionRule[]>([]);\n  const [listingTasks, setListingTasks] = useState<ListingTask[]>([]);\n  const [autoListingConfig, setAutoListingConfig] = useState<AutoListingConfig | null>(null);\n  const [categories, setCategories] = useState<string[]>([]);\n  const [platforms, setPlatforms] = useState<string[]>([]);\n  const [selectionStats, setSelectionStats] = useState<{\n    totalPool: number;\n    avgROI: number;\n    lowCompetition: number;\n    upTrend: number;\n  } | null>(null);\n  const [listingStats, setListingStats] = useState<{\n    totalTasks: number;\n    pendingTasks: number;\n    processingTasks: number;\n    completedTasks: number;\n    failedTasks: number;\n  } | null>(null);\n\n  const [ruleModalVisible, setRuleModalVisible] = useState(false);\n  const [configModalVisible, setConfigModalVisible] = useState(false);\n  const [selectedProduct, setSelectedProduct] = useState<ProductPool | null>(null);\n  const [productDetailVisible, setProductDetailVisible] = useState(false);\n  const [ruleForm] = Form.useForm();\n  const [configForm] = Form.useForm();\n\n  const [filters, setFilters] = useState({\n    keyword: '',\n    category: '',\n    minROI: 0,\n    maxROI: 100,\n    competitionLevel: '',\n    trend: '',\n  });\n\n  const fetchData = useCallback(async () => {\n    setLoading(true);\n    try {\n      const [pool, rules, tasks, config, cats, plats, selStats, listStats] = await Promise.all([\n        productSelectionDataSource.getProductPool(),\n        productSelectionDataSource.getSelectionRules(),\n        productSelectionDataSource.getListingTasks(),\n        productSelectionDataSource.getAutoListingConfig(),\n        productSelectionDataSource.getCategories(),\n        productSelectionDataSource.getPlatforms(),\n        productSelectionDataSource.getSelectionStats(),\n        productSelectionDataSource.getListingStats(),\n      ]);\n\n      setProductPool(pool);\n      setSelectionRules(rules);\n      setListingTasks(tasks);\n      setAutoListingConfig(config);\n      setCategories(cats);\n      setPlatforms(plats);\n      setSelectionStats(selStats);\n      setListingStats(listStats);\n    } catch (error) {\n      console.error('Failed to fetch data:', error);\n      message.error('数据加载失败');\n    } finally {\n      setLoading(false);\n    }\n  }, []);\n\n  useEffect(() => {\n    fetchData();\n  }, [fetchData]);\n\n  const handleRunSelection = async () => {\n    setLoading(true);\n    try {\n      await new Promise(resolve => setTimeout(resolve, 2000));\n      message.success('选品任务已启动，预计完成时间：10分钟');\n    } catch (error) {\n      message.error('选品任务启动失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleSelectProduct = (product: ProductPool) => {\n    setSelectedProduct(product);\n    setProductDetailVisible(true);\n  };\n\n  const handleAddToSelection = (productId: string) => {\n    message.success('商品已添加到选品列表');\n  };\n\n  const handleCreateRule = async () => {\n    try {\n      const values = await ruleForm.validateFields();\n      await productSelectionDataSource.createSelectionRule({\n        name: values.name,\n        description: values.description || '',\n        category: values.category,\n        criteria: {\n          min_roi: values.minROI,\n          max_roi: values.maxROI,\n          min_profit: values.minProfit,\n          max_price: values.maxPrice,\n          min_sales_volume: values.minSalesVolume,\n          max_competition_level: values.maxCompetitionLevel,\n          min_rating: values.minRating,\n          trend_filter: values.trendFilter,\n        },\n        enabled: true,\n      });\n      setRuleModalVisible(false);\n      ruleForm.resetFields();\n      message.success('选品规则创建成功');\n      fetchData();\n    } catch (error) {\n      message.error('请填写完整的规则信息');\n    }\n  };\n\n  const handleToggleRule = async (ruleId: string) => {\n    try {\n      await productSelectionDataSource.toggleSelectionRule(ruleId);\n      message.success('规则状态已更新');\n      fetchData();\n    } catch (error) {\n      message.error('操作失败');\n    }\n  };\n\n  const handleDeleteRule = async (ruleId: string) => {\n    try {\n      await productSelectionDataSource.deleteSelectionRule(ruleId);\n      message.success('规则已删除');\n      fetchData();\n    } catch (error) {\n      message.error('删除失败');\n    }\n  };\n\n  const handleRunRule = async (ruleId: string) => {\n    setLoading(true);\n    try {\n      const result = await productSelectionDataSource.executeSelectionRule(ruleId);\n      message.success(`规则执行完成，已选择 ${result.count} 个商品`);\n      fetchData();\n    } catch (error) {\n      message.error('规则执行失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleSaveConfig = async () => {\n    try {\n      const values = await configForm.validateFields();\n      await productSelectionDataSource.updateAutoListingConfig({\n        enabled: values.enabled,\n        batch_size: values.batchSize,\n        interval_hours: values.intervalHours,\n        target_platforms: values.targetPlatforms,\n        auto_pricing: values.autoPricing,\n        auto_inventory: values.autoInventory,\n        auto_description: values.autoDescription,\n        auto_images: values.autoImages,\n      });\n      setConfigModalVisible(false);\n      message.success('自动上架配置已保存');\n      fetchData();\n    } catch (error) {\n      message.error('请填写完整的配置信息');\n    }\n  };\n\n  const handleToggleAutoListing = async () => {\n    setLoading(true);\n    try {\n      const enabled = await productSelectionDataSource.toggleAutoListing();\n      message.success(enabled ? '自动上架已启动' : '自动上架已暂停');\n      fetchData();\n    } catch (error) {\n      message.error('操作失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleRetryListing = async (taskId: string) => {\n    setLoading(true);\n    try {\n      await productSelectionDataSource.retryListingTask(taskId);\n      message.success('上架任务已重新启动');\n      fetchData();\n    } catch (error) {\n      message.error('重试失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleDeleteListing = async (taskId: string) => {\n    try {\n      await productSelectionDataSource.deleteListingTask(taskId);\n      message.success('上架任务已删除');\n      fetchData();\n    } catch (error) {\n      message.error('删除失败');\n    }\n  };\n\n  const handleApplyFilters = async () => {\n    setLoading(true);\n    try {\n      const params: ProductPoolQueryParams = {};\n      if (filters.keyword) params.keyword = filters.keyword;\n      if (filters.category) params.category = filters.category;\n      if (filters.minROI > 0) params.min_roi = filters.minROI;\n      if (filters.maxROI < 100) params.max_roi = filters.maxROI;\n      if (filters.competitionLevel) params.competition_level = filters.competitionLevel;\n      if (filters.trend) params.trend = filters.trend;\n\n      const pool = await productSelectionDataSource.getProductPool(params);\n      setProductPool(pool);\n    } catch (error) {\n      message.error('筛选失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const poolColumns: ColumnsType<ProductPool> = [\n    {\n      title: '商品信息',\n      dataIndex: 'name',\n      key: 'name',\n      width: 300,\n      render: (text, record) => (\n        <Space>\n          <img src={record.image_url} alt={text} style={{ width: 60, height: 60, objectFit: 'cover', borderRadius: 4 }} />\n          <div>\n            <div style={{ fontWeight: 500 }}>{text}</div>\n            <Text type=\"secondary\" style={{ fontSize: 12 }}>SKU: {record.product_id}</Text>\n            <div>\n              {(record.tags || []).map(tag => (\n                <Tag key={tag} color=\"blue\" style={{ fontSize: 10 }}>{tag}</Tag>\n              ))}\n            </div>\n          </div>\n        </Space>\n      ),\n    },\n    {\n      title: '分类',\n      dataIndex: 'category',\n      key: 'category',\n      width: 120,\n    },\n    {\n      title: '价格/成本',\n      key: 'price',\n      width: 150,\n      render: (_, record) => (\n        <div>\n          <div>¥{(record.price ?? 0).toFixed(2)}</div>\n          <Text type=\"secondary\" style={{ fontSize: 12 }}>成本: ¥{(record.cost_price ?? 0).toFixed(2)}</Text>\n        </div>\n      ),\n    },\n    {\n      title: '利润/ROI',\n      key: 'profit',\n      width: 120,\n      render: (_, record) => (\n        <div>\n          <div style={{ color: '#52c41a', fontWeight: 500 }}>¥{(record.profit ?? 0).toFixed(2)}</div>\n          <Tag color=\"green\" style={{ fontSize: 11 }}>{record.roi.toFixed(0)}% ROI</Tag>\n        </div>\n      ),\n    },\n    {\n      title: '销量/评分',\n      key: 'sales',\n      width: 120,\n      render: (_, record) => (\n        <div>\n          <div>{(record.sales_volume ?? 0).toLocaleString()} 销量</div>\n          <Space>\n            <StarOutlined style={{ color: '#faad14', fontSize: 12 }} />\n            <Text style={{ fontSize: 12 }}>{record.rating} ({record.review_count})</Text>\n          </Space>\n        </div>\n      ),\n    },\n    {\n      title: '竞争/趋势',\n      key: 'competition',\n      width: 120,\n      render: (_, record) => (\n        <Space direction=\"vertical\" size={4}>\n          <Tag color={COMPETITION_CONFIG[record.competition_level].color}>\n            竞争: {COMPETITION_CONFIG[record.competition_level].text}\n          </Tag>\n          <Tag icon={TREND_CONFIG[record.trend].icon} color={TREND_CONFIG[record.trend].color}>\n            {TREND_CONFIG[record.trend].text}\n          </Tag>\n        </Space>\n      ),\n    },\n    {\n      title: '选品评分',\n      dataIndex: 'selection_score',\n      key: 'selection_score',\n      width: 100,\n      render: (score) => (\n        <Progress\n          type=\"circle\"\n          percent={score}\n          width={50}\n          strokeColor={score >= 90 ? '#52c41a' : score >= 80 ? '#faad14' : '#ff4d4f'}\n          format={percent => <span style={{ fontSize: 12 }}>{percent}</span>}\n        />\n      ),\n    },\n    {\n      title: '操作',\n      key: 'action',\n      width: 150,\n      fixed: 'right',\n      render: (_, record) => (\n        <Space size=\"small\">\n          <Tooltip title=\"查看详情\">\n            <Button type=\"link\" size=\"small\" icon={<EyeOutlined />} onClick={() => handleSelectProduct(record)} />\n          </Tooltip>\n          <Tooltip title=\"添加到选品\">\n            <Button type=\"link\" size=\"small\" icon={<ShoppingOutlined />} onClick={() => handleAddToSelection(record.id)} />\n          </Tooltip>\n        </Space>\n      ),\n    },\n  ];\n\n  const ruleColumns: ColumnsType<SelectionRule> = [\n    {\n      title: '规则名称',\n      dataIndex: 'name',\n      key: 'name',\n      width: 200,\n    },\n    {\n      title: '分类',\n      dataIndex: 'category',\n      key: 'category',\n      width: 150,\n      render: (categories: string[]) => (\n        <Space wrap>\n          {categories?.map(cat => <Tag key={cat}>{cat}</Tag>) || '-'}\n        </Space>\n      ),\n    },\n    {\n      title: 'ROI范围',\n      key: 'roi',\n      width: 120,\n      render: (_, record) => `${record.criteria?.min_roi ?? 0}% - ${record.criteria?.max_roi ?? 0}%`,\n    },\n    {\n      title: '利润要求',\n      dataIndex: 'min_profit',\n      key: 'min_profit',\n      width: 100,\n      render: (profit) => `≥ ¥${profit}`,\n    },\n    {\n      title: '竞争水平',\n      dataIndex: 'max_competition_level',\n      key: 'max_competition_level',\n      width: 100,\n      render: (level) => <Tag color={COMPETITION_CONFIG[level].color}>{COMPETITION_CONFIG[level].text}</Tag>,\n    },\n    {\n      title: '已选商品',\n      dataIndex: 'selected_count',\n      key: 'selected_count',\n      width: 100,\n      render: (count) => <Badge count={count} showZero style={{ backgroundColor: '#52c41a' }} />,\n    },\n    {\n      title: '状态',\n      dataIndex: 'enabled',\n      key: 'enabled',\n      width: 80,\n      render: (enabled) => (\n        <Tag color={enabled ? 'success' : 'default'}>{enabled ? '启用' : '禁用'}</Tag>\n      ),\n    },\n    {\n      title: '操作',\n      key: 'action',\n      width: 200,\n      fixed: 'right',\n      render: (_, record) => (\n        <Space size=\"small\">\n          <Tooltip title={record.enabled ? '禁用' : '启用'}>\n            <Button\n              type=\"link\"\n              size=\"small\"\n              icon={record.enabled ? <PauseCircleOutlined /> : <PlayCircleOutlined />}\n              onClick={() => handleToggleRule(record.id)}\n            />\n          </Tooltip>\n          <Tooltip title=\"立即执行\">\n            <Button\n              type=\"link\"\n              size=\"small\"\n              icon={<PlayCircleOutlined />}\n              onClick={() => handleRunRule(record.id)}\n            />\n          </Tooltip>\n          <Tooltip title=\"删除\">\n            <Popconfirm\n              title=\"确定要删除这个规则吗？\"\n              onConfirm={() => handleDeleteRule(record.id)}\n              okText=\"确定\"\n              cancelText=\"取消\"\n            >\n              <Button type=\"link\" size=\"small\" danger icon={<DeleteOutlined />} />\n            </Popconfirm>\n          </Tooltip>\n        </Space>\n      ),\n    },\n  ];\n\n  const taskColumns: ColumnsType<ListingTask> = [\n    {\n      title: '商品信息',\n      dataIndex: 'product_name',\n      key: 'product_name',\n      width: 200,\n    },\n    {\n      title: '目标平台',\n      dataIndex: 'target_platforms',\n      key: 'target_platforms',\n      width: 150,\n      render: (platforms: string[]) => (\n        <Space wrap>\n          {platforms.map(platform => <Tag key={platform}>{platform}</Tag>)}\n        </Space>\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      width: 100,\n      render: (status) => {\n        const statusConfig = {\n          PENDING: { color: 'default', text: '待处理' },\n          PROCESSING: { color: 'processing', text: '处理中' },\n          COMPLETED: { color: 'success', text: '已完成' },\n          FAILED: { color: 'error', text: '失败' },\n        };\n        const config = statusConfig[status as keyof typeof statusConfig];\n        return <Tag color={config.color}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: '进度',\n      dataIndex: 'progress',\n      key: 'progress',\n      width: 150,\n      render: (progress) => <Progress percent={progress} size=\"small\" />,\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'created_at',\n      key: 'created_at',\n      width: 150,\n    },\n    {\n      title: '操作',\n      key: 'action',\n      width: 150,\n      fixed: 'right',\n      render: (_, record) => (\n        <Space size=\"small\">\n          {record.status === 'FAILED' && (\n            <Tooltip title=\"重试\">\n              <Button type=\"link\" size=\"small\" icon={<ReloadOutlined />} onClick={() => handleRetryListing(record.id)} />\n            </Tooltip>\n          )}\n          <Popconfirm\n            title=\"确定要删除这个任务吗？\"\n            onConfirm={() => handleDeleteListing(record.id)}\n            okText=\"确定\"\n            cancelText=\"取消\"\n          >\n            <Button type=\"link\" size=\"small\" danger icon={<DeleteOutlined />} />\n          </Popconfirm>\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div style={{ padding: 24 }}>\n      <Row justify=\"space-between\" align=\"middle\" style={{ marginBottom: 24 }}>\n        <Col>\n          <Title level={4}>\n            <Space>\n              <RobotOutlined />\n              自动选品 + 自动上架系统\n            </Space>\n          </Title>\n          <Text type=\"secondary\">AI驱动的智能选品和自动化上架解决方案</Text>\n        </Col>\n        <Col>\n          <Space>\n            <Button icon={<SettingOutlined />} onClick={() => {\n              if (autoListingConfig) {\n                configForm.setFieldsValue({\n                  enabled: autoListingConfig.enabled,\n                  batchSize: autoListingConfig.batch_size,\n                  intervalHours: autoListingConfig.interval_hours,\n                  targetPlatforms: autoListingConfig.target_platforms,\n                  autoPricing: autoListingConfig.auto_pricing,\n                  autoInventory: autoListingConfig.auto_inventory,\n                  autoDescription: autoListingConfig.auto_description,\n                  autoImages: autoListingConfig.auto_images,\n                });\n              }\n              setConfigModalVisible(true);\n            }}>\n              配置\n            </Button>\n            <Button type=\"primary\" icon={<ThunderboltOutlined />} onClick={handleRunSelection} loading={loading}>\n              立即选品\n            </Button>\n          </Space>\n        </Col>\n      </Row>\n\n      <Alert\n        message=\"系统状态\"\n        description={\n          <Space>\n            <Badge status=\"processing\" text=\"自动选品运行中\" />\n            <Badge status={autoListingConfig?.enabled ? \"processing\" : \"default\"} text={autoListingConfig?.enabled ? \"自动上架运行中\" : \"自动上架已暂停\"} />\n            <Text type=\"secondary\">|</Text>\n            <Text>商品池: {productPool.length} 个</Text>\n            <Text>选品规则: {selectionRules.length} 条</Text>\n            <Text>上架任务: {listingTasks.length} 个</Text>\n          </Space>\n        }\n        type=\"info\"\n        showIcon\n        style={{ marginBottom: 24 }}\n      />\n\n      <Tabs \n        activeKey={activeTab} \n        onChange={setActiveTab}\n        items={[\n          { key: 'pool', label: <span><ShoppingOutlined /> 商品池</span>, children: (\n            <Card>\n              <Row gutter={[16, 16]} style={{ marginBottom: 24 }}>\n                <Col xs={24} sm={12} lg={6}>\n                  <Statistic\n                    title=\"商品总数\"\n                    value={selectionStats?.totalPool || 0}\n                    prefix={<ShoppingOutlined />}\n                    valueStyle={{ color: '#1890ff' }}\n                  />\n                </Col>\n                <Col xs={24} sm={12} lg={6}>\n                  <Statistic\n                    title=\"平均ROI\"\n                    value={selectionStats?.avgROI.toFixed(1) || 0}\n                    suffix=\"%\"\n                    prefix={<RiseOutlined />}\n                    valueStyle={{ color: '#52c41a' }}\n                  />\n                </Col>\n                <Col xs={24} sm={12} lg={6}>\n                  <Statistic\n                    title=\"低竞争商品\"\n                    value={selectionStats?.lowCompetition || 0}\n                    prefix={<FireOutlined />}\n                    valueStyle={{ color: '#faad14' }}\n                  />\n                </Col>\n                <Col xs={24} sm={12} lg={6}>\n                  <Statistic\n                    title=\"上升趋势商品\"\n                    value={selectionStats?.upTrend || 0}\n                    prefix={<ArrowUpOutlined />}\n                    valueStyle={{ color: '#52c41a' }}\n                  />\n                </Col>\n              </Row>\n\n              <Card size=\"small\" style={{ marginBottom: 16 }}>\n                <Row gutter={[16, 16]} align=\"middle\">\n                  <Col xs={24} sm={12} lg={4}>\n                    <Input\n                      placeholder=\"搜索商品名称\"\n                      prefix={<FilterOutlined />}\n                      value={filters.keyword}\n                      onChange={(e) => setFilters({ ...filters, keyword: e.target.value })}\n                    />\n                  </Col>\n                  <Col xs={24} sm={12} lg={3}>\n                    <Select\n                      placeholder=\"分类\"\n                      style={{ width: '100%' }}\n                      value={filters.category}\n                      onChange={(value) => setFilters({ ...filters, category: value })}\n                    >\n                      <Option value=\"\">全部</Option>\n                      {categories.map(cat => <Option key={cat} value={cat}>{cat}</Option>)}\n                    </Select>\n                  </Col>\n                  <Col xs={24} sm={12} lg={6}>\n                    <Space>\n                      <Text>ROI:</Text>\n                      <Slider\n                        range\n                        min={0}\n                        max={100}\n                        value={[filters.minROI, filters.maxROI]}\n                        onChange={(value) => setFilters({ ...filters, minROI: value[0], maxROI: value[1] })}\n                        style={{ width: 150 }}\n                      />\n                    </Space>\n                  </Col>\n                  <Col xs={24} sm={12} lg={3}>\n                    <Select\n                      placeholder=\"竞争水平\"\n                      style={{ width: '100%' }}\n                      value={filters.competitionLevel}\n                      onChange={(value) => setFilters({ ...filters, competitionLevel: value })}\n                    >\n                      <Option value=\"\">全部</Option>\n                      <Option value=\"LOW\">低</Option>\n                      <Option value=\"MEDIUM\">中</Option>\n                      <Option value=\"HIGH\">高</Option>\n                    </Select>\n                  </Col>\n                  <Col xs={24} sm={12} lg={3}>\n                    <Select\n                      placeholder=\"趋势\"\n                      style={{ width: '100%' }}\n                      value={filters.trend}\n                      onChange={(value) => setFilters({ ...filters, trend: value })}\n                    >\n                      <Option value=\"\">全部</Option>\n                      <Option value=\"UP\">上升</Option>\n                      <Option value=\"DOWN\">下降</Option>\n                      <Option value=\"STABLE\">稳定</Option>\n                    </Select>\n                  </Col>\n                  <Col xs={24} sm={12} lg={5}>\n                    <Button type=\"primary\" icon={<FilterOutlined />} block onClick={handleApplyFilters}>\n                      应用筛选\n                    </Button>\n                  </Col>\n                </Row>\n              </Card>\n\n              <Table\n                columns={poolColumns}\n                dataSource={productPool}\n                rowKey=\"id\"\n                loading={loading}\n                scroll={{ x: 1200 }}\n                pagination={{\n                  pageSize: 10,\n                  showSizeChanger: true,\n                  showQuickJumper: true,\n                  showTotal: (total) => `共 ${total} 个商品`,\n                }}\n              />\n            </Card>\n          )},\n          { key: 'rules', label: <span><BarChartOutlined /> 选品规则</span>, children: (\n            <Card>\n              <Row justify=\"space-between\" align=\"middle\" style={{ marginBottom: 16 }}>\n                <Col>\n                  <Title level={5}>选品规则管理</Title>\n                  <Text type=\"secondary\">配置自动选品规则，AI将根据规则自动筛选高潜力商品</Text>\n                </Col>\n                <Col>\n                  <Button type=\"primary\" icon={<PlusOutlined />} onClick={() => setRuleModalVisible(true)}>\n                    创建规则\n                  </Button>\n                </Col>\n              </Row>\n\n              <Table\n                columns={ruleColumns}\n                dataSource={selectionRules}\n                rowKey=\"id\"\n                loading={loading}\n                scroll={{ x: 1000 }}\n                pagination={{\n                  pageSize: 10,\n                  showTotal: (total) => `共 ${total} 条规则`,\n                }}\n              />\n            </Card>\n          )},\n          { key: 'tasks', label: <span><SyncOutlined /> 上架任务</span>, children: (\n            <Card>\n              <Row justify=\"space-between\" align=\"middle\" style={{ marginBottom: 16 }}>\n                <Col>\n                  <Title level={5}>自动上架任务</Title>\n                  <Text type=\"secondary\">查看和管理自动上架任务的执行状态</Text>\n                </Col>\n                <Col>\n                  <Space>\n                    <Button\n                      icon={autoListingConfig?.enabled ? <PauseCircleOutlined /> : <PlayCircleOutlined />}\n                      onClick={handleToggleAutoListing}\n                      loading={loading}\n                    >\n                      {autoListingConfig?.enabled ? '暂停自动上架' : '启动自动上架'}\n                    </Button>\n                    <Button icon={<ReloadOutlined />} onClick={fetchData}>\n                      刷新\n                    </Button>\n                  </Space>\n                </Col>\n              </Row>\n\n              <Row gutter={[16, 16]} style={{ marginBottom: 24 }}>\n                <Col xs={24} sm={12} lg={6}>\n                  <Statistic\n                    title=\"总任务数\"\n                    value={listingStats?.totalTasks || 0}\n                    prefix={<SyncOutlined />}\n                  />\n                </Col>\n                <Col xs={24} sm={12} lg={6}>\n                  <Statistic\n                    title=\"处理中\"\n                    value={listingStats?.processingTasks || 0}\n                    prefix={<ClockCircleOutlined />}\n                    valueStyle={{ color: '#1890ff' }}\n                  />\n                </Col>\n                <Col xs={24} sm={12} lg={6}>\n                  <Statistic\n                    title=\"已完成\"\n                    value={listingStats?.completedTasks || 0}\n                    prefix={<CheckCircleOutlined />}\n                    valueStyle={{ color: '#52c41a' }}\n                  />\n                </Col>\n                <Col xs={24} sm={12} lg={6}>\n                  <Statistic\n                    title=\"失败\"\n                    value={listingStats?.failedTasks || 0}\n                    prefix={<AlertOutlined />}\n                    valueStyle={{ color: '#ff4d4f' }}\n                  />\n                </Col>\n              </Row>\n\n              <Table\n                columns={taskColumns}\n                dataSource={listingTasks}\n                rowKey=\"id\"\n                loading={loading}\n                scroll={{ x: 800 }}\n                pagination={{\n                  pageSize: 10,\n                  showTotal: (total) => `共 ${total} 个任务`,\n                }}\n              />\n            </Card>\n          )},\n        ]}\n      />\n\n      <Modal\n        title=\"创建选品规则\"\n        open={ruleModalVisible}\n        onOk={handleCreateRule}\n        onCancel={() => {\n          setRuleModalVisible(false);\n          ruleForm.resetFields();\n        }}\n        width={800}\n      >\n        <Form form={ruleForm} layout=\"vertical\">\n          <Form.Item\n            name=\"name\"\n            label=\"规则名称\"\n            rules={[{ required: true, message: '请输入规则名称' }]}\n          >\n            <Input placeholder=\"例如：高ROI低竞争策略\" />\n          </Form.Item>\n\n          <Form.Item\n            name=\"category\"\n            label=\"商品分类\"\n            rules={[{ required: true, message: '请选择商品分类' }]}\n          >\n            <Select mode=\"multiple\" placeholder=\"选择商品分类\">\n              {categories.map(cat => <Option key={cat} value={cat}>{cat}</Option>)}\n            </Select>\n          </Form.Item>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"minROI\"\n                label=\"最低ROI (%)\"\n                rules={[{ required: true, message: '请输入最低ROI' }]}\n              >\n                <InputNumber min={0} max={100} style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"maxROI\"\n                label=\"最高ROI (%)\"\n                rules={[{ required: true, message: '请输入最高ROI' }]}\n              >\n                <InputNumber min={0} max={100} style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"minProfit\"\n                label=\"最低利润 (¥)\"\n                rules={[{ required: true, message: '请输入最低利润' }]}\n              >\n                <InputNumber min={0} style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"maxPrice\"\n                label=\"最高价格 (¥)\"\n                rules={[{ required: true, message: '请输入最高价格' }]}\n              >\n                <InputNumber min={0} style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"minSalesVolume\"\n                label=\"最低销量\"\n                rules={[{ required: true, message: '请输入最低销量' }]}\n              >\n                <InputNumber min={0} style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"minRating\"\n                label=\"最低评分\"\n                rules={[{ required: true, message: '请输入最低评分' }]}\n              >\n                <InputNumber min={0} max={5} step={0.1} style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"maxCompetitionLevel\"\n                label=\"最高竞争水平\"\n                rules={[{ required: true, message: '请选择最高竞争水平' }]}\n              >\n                <Select placeholder=\"选择竞争水平\">\n                  <Option value=\"LOW\">低</Option>\n                  <Option value=\"MEDIUM\">中</Option>\n                  <Option value=\"HIGH\">高</Option>\n                </Select>\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"trendFilter\"\n                label=\"趋势筛选\"\n                rules={[{ required: true, message: '请选择趋势筛选' }]}\n              >\n                <Select placeholder=\"选择趋势\">\n                  <Option value=\"ALL\">全部</Option>\n                  <Option value=\"UP\">上升</Option>\n                  <Option value=\"STABLE\">稳定</Option>\n                </Select>\n              </Form.Item>\n            </Col>\n          </Row>\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"自动上架配置\"\n        open={configModalVisible}\n        onOk={handleSaveConfig}\n        onCancel={() => {\n          setConfigModalVisible(false);\n          configForm.resetFields();\n        }}\n        width={700}\n      >\n        <Form form={configForm} layout=\"vertical\">\n          <Form.Item\n            name=\"enabled\"\n            label=\"启用自动上架\"\n            valuePropName=\"checked\"\n          >\n            <Switch />\n          </Form.Item>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"batchSize\"\n                label=\"每批上架数量\"\n                rules={[{ required: true, message: '请输入每批上架数量' }]}\n              >\n                <InputNumber min={1} max={50} style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"intervalHours\"\n                label=\"执行间隔（小时）\"\n                rules={[{ required: true, message: '请输入执行间隔' }]}\n              >\n                <InputNumber min={1} max={24} style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Form.Item\n            name=\"targetPlatforms\"\n            label=\"目标平台\"\n            rules={[{ required: true, message: '请选择目标平台' }]}\n          >\n            <Select mode=\"multiple\" placeholder=\"选择目标平台\">\n              {platforms.map(platform => <Option key={platform} value={platform}>{platform}</Option>)}\n            </Select>\n          </Form.Item>\n\n          <Divider>自动化选项</Divider>\n\n          <Form.Item\n            name=\"autoPricing\"\n            label=\"自动定价\"\n            valuePropName=\"checked\"\n          >\n            <Switch />\n          </Form.Item>\n\n          <Form.Item\n            name=\"autoInventory\"\n            label=\"自动库存管理\"\n            valuePropName=\"checked\"\n          >\n            <Switch />\n          </Form.Item>\n\n          <Form.Item\n            name=\"autoDescription\"\n            label=\"自动生成描述\"\n            valuePropName=\"checked\"\n          >\n            <Switch />\n          </Form.Item>\n\n          <Form.Item\n            name=\"autoImages\"\n            label=\"自动优化图片\"\n            valuePropName=\"checked\"\n          >\n            <Switch />\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      <Drawer\n        title=\"商品详情\"\n        placement=\"right\"\n        width={600}\n        open={productDetailVisible}\n        onClose={() => setProductDetailVisible(false)}\n      >\n        {selectedProduct && (\n          <div>\n            <img\n              src={selectedProduct.image_url}\n              alt={selectedProduct.name}\n              style={{ width: '100%', height: 300, objectFit: 'cover', borderRadius: 8, marginBottom: 16 }}\n            />\n            <Title level={4}>{selectedProduct.name}</Title>\n            <Text type=\"secondary\">SKU: {selectedProduct.product_id}</Text>\n            <Divider />\n            <Row gutter={[16, 16]}>\n              <Col span={12}>\n                <Statistic title=\"售价\" value={selectedProduct.price} prefix=\"¥\" precision={2} />\n              </Col>\n              <Col span={12}>\n                <Statistic title=\"成本\" value={selectedProduct.cost_price} prefix=\"¥\" precision={2} />\n              </Col>\n              <Col span={12}>\n                <Statistic title=\"利润\" value={selectedProduct.profit} prefix=\"¥\" precision={2} valueStyle={{ color: '#52c41a' }} />\n              </Col>\n              <Col span={12}>\n                <Statistic title=\"ROI\" value={selectedProduct.roi} suffix=\"%\" valueStyle={{ color: '#52c41a' }} />\n              </Col>\n              <Col span={12}>\n                <Statistic title=\"销量\" value={selectedProduct.sales_volume} />\n              </Col>\n              <Col span={12}>\n                <Statistic title=\"评分\" value={selectedProduct.rating} suffix={`/ 5`} />\n              </Col>\n            </Row>\n            <Divider />\n            <Space direction=\"vertical\" style={{ width: '100%' }}>\n              <div>\n                <Text strong>分类: </Text>\n                <Tag>{selectedProduct.category}</Tag>\n              </div>\n              <div>\n                <Text strong>竞争水平: </Text>\n                <Tag color={COMPETITION_CONFIG[selectedProduct.competition_level].color}>\n                  {COMPETITION_CONFIG[selectedProduct.competition_level].text}\n                </Tag>\n              </div>\n              <div>\n                <Text strong>趋势: </Text>\n                <Tag icon={TREND_CONFIG[selectedProduct.trend].icon} color={TREND_CONFIG[selectedProduct.trend].color}>\n                  {TREND_CONFIG[selectedProduct.trend].text}\n                </Tag>\n              </div>\n              <div>\n                <Text strong>来源平台: </Text>\n                <Tag>{selectedProduct.source_platform}</Tag>\n              </div>\n              <div>\n                <Text strong>选品评分: </Text>\n                <Progress\n                  percent={selectedProduct.selection_score}\n                  strokeColor={selectedProduct.selection_score >= 90 ? '#52c41a' : selectedProduct.selection_score >= 80 ? '#faad14' : '#ff4d4f'}\n                />\n              </div>\n              <div>\n                <Text strong>标签: </Text>\n                <Space wrap>\n                  {(selectedProduct.tags || []).map(tag => <Tag key={tag} color=\"blue\">{tag}</Tag>)}\n                </Space>\n              </div>\n            </Space>\n            <Divider />\n            <Button type=\"primary\" block icon={<ShoppingOutlined />} onClick={() => handleAddToSelection(selectedProduct.id)}>\n              添加到选品列表\n            </Button>\n          </div>\n        )}\n      </Drawer>\n    </div>\n  );\n};\n\nexport default AutoProductSelection;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/AutoProductSelection/index.tsx"
    },
    "14": {
      "path": "/dashboard/auto-execution",
      "file": "@/pages/AutoExecution/index.tsx",
      "parentId": "4",
      "id": "14",
      "absPath": "/dashboard/auto-execution",
      "__content": "/**\n * [FE-AIAUTO-001] 自动化配置页面\n * 管理AI决策自动执行的配置、阈值和等级\n */\n\nimport {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Button,\n  Space,\n  Tag,\n  Row,\n  Col,\n  Statistic,\n  Modal,\n  Form,\n  Input,\n  InputNumber,\n  Select,\n  Switch,\n  Tabs,\n  Tooltip,\n  Progress,\n  Badge,\n  message,\n  Descriptions,\n  Divider,\n  Alert,\n  Timeline,\n  Popconfirm,\n  SettingOutlined,\n  ThunderboltOutlined,\n  SafetyOutlined,\n  ClockCircleOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  ExclamationCircleOutlined,\n  RiseOutlined,\n  FallOutlined,\n  HistoryOutlined,\n  InfoCircleOutlined,\n  SyncOutlined,\n  Option,\n  TextArea,\n  FC,\n} from '@/imports';\nimport type { ColumnsType } from 'antd/es/table';\nimport {\n  autoExecutionDataSource,\n  AutoExecutionConfig,\n  LevelEvolutionRecord,\n  AutomationLevel,\n  DecisionModule,\n  MODULE_NAMES,\n  LEVEL_CAPABILITIES,\n} from '@/services/autoExecutionDataSource';\nimport ThresholdConfigForm from './components/ThresholdConfigForm';\nimport EvolutionStage from './components/EvolutionStage';\n\nconst LEVEL_COLORS: Record<AutomationLevel, string> = {\n  L1: 'default',\n  L2: 'processing',\n  L3: 'success',\n  L4: 'warning',\n  L5: 'magenta',\n};\n\nconst STATUS_COLORS: Record<string, string> = {\n  ACTIVE: 'success',\n  INACTIVE: 'default',\n  SUSPENDED: 'error',\n};\n\nconst AutoExecutionConfigPage: FC = () => {\n  const [configs, setConfigs] = useState<AutoExecutionConfig[]>([]);\n  const [evolutionHistory, setEvolutionHistory] = useState<LevelEvolutionRecord[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [selectedConfig, setSelectedConfig] = useState<AutoExecutionConfig | null>(null);\n  const [configModalVisible, setConfigModalVisible] = useState(false);\n  const [levelModalVisible, setLevelModalVisible] = useState(false);\n  const [levelAction, setLevelAction] = useState<'upgrade' | 'downgrade'>('upgrade');\n  const [targetLevel, setTargetLevel] = useState<AutomationLevel>('L1');\n  const [levelForm] = Form.useForm();\n\n  useEffect(() => {\n    fetchConfigs();\n    fetchHistory();\n  }, []);\n\n  const fetchConfigs = async () => {\n    setLoading(true);\n    try {\n      const data = await autoExecutionDataSource.fetchConfigs('tenant-001');\n      setConfigs(data);\n    } catch (error) {\n      message.error('获取配置失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const fetchHistory = async () => {\n    try {\n      const data = await autoExecutionDataSource.fetchEvolutionHistory('tenant-001');\n      setEvolutionHistory(data);\n    } catch (error) {\n      console.error('获取演进历史失败', error);\n    }\n  };\n\n  const handleUpdateConfig = async (values: Partial<AutoExecutionConfig>) => {\n    if (!selectedConfig) return;\n    try {\n      await autoExecutionDataSource.updateConfig(selectedConfig.id, values);\n      message.success('配置更新成功');\n      setConfigModalVisible(false);\n      fetchConfigs();\n    } catch (error) {\n      message.error('配置更新失败');\n    }\n  };\n\n  const handleLevelChange = async (values: { reason: string }) => {\n    if (!selectedConfig) return;\n    try {\n      if (levelAction === 'upgrade') {\n        await autoExecutionDataSource.upgradeLevel(\n          selectedConfig.tenant_id,\n          selectedConfig.shop_id,\n          selectedConfig.module,\n          targetLevel,\n          values.reason\n        );\n        message.success(`等级已升级至 ${targetLevel}`);\n      } else {\n        await autoExecutionDataSource.downgradeLevel(\n          selectedConfig.tenant_id,\n          selectedConfig.shop_id,\n          selectedConfig.module,\n          targetLevel,\n          values.reason\n        );\n        message.success(`等级已降级至 ${targetLevel}`);\n      }\n      setLevelModalVisible(false);\n      levelForm.resetFields();\n      fetchConfigs();\n      fetchHistory();\n    } catch (error: any) {\n      message.error(error.message || '等级变更失败');\n    }\n  };\n\n  const getNextLevel = (current: AutomationLevel): AutomationLevel => {\n    const levels: AutomationLevel[] = ['L1', 'L2', 'L3', 'L4', 'L5'];\n    const index = levels.indexOf(current);\n    return levels[Math.min(index + 1, 4)];\n  };\n\n  const getPrevLevel = (current: AutomationLevel): AutomationLevel => {\n    const levels: AutomationLevel[] = ['L1', 'L2', 'L3', 'L4', 'L5'];\n    const index = levels.indexOf(current);\n    return levels[Math.max(index - 1, 0)];\n  };\n\n  const canUpgrade = (config: AutoExecutionConfig): boolean => {\n    if (config.automation_level === 'L5') return false;\n    const stats = config.statistics;\n    if (stats.total_executions < 100) return false;\n    const successRate = stats.success_count / stats.total_executions;\n    return successRate >= 0.95;\n  };\n\n  const columns: ColumnsType<AutoExecutionConfig> = [\n    {\n      title: '模块',\n      dataIndex: 'module',\n      key: 'module',\n      render: (module: DecisionModule) => (\n        <Tag color=\"blue\">{MODULE_NAMES[module]}</Tag>\n      ),\n    },\n    {\n      title: '自动化等级',\n      dataIndex: 'automation_level',\n      key: 'automation_level',\n      render: (level: AutomationLevel) => (\n        <Tag color={LEVEL_COLORS[level]}>{level}</Tag>\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => (\n        <Badge status={STATUS_COLORS[status] as any} text={status} />\n      ),\n    },\n    {\n      title: '置信度阈值',\n      key: 'thresholds',\n      render: (_, record) => (\n        <Space direction=\"vertical\" size=\"small\">\n          <span>自动执行: {(record.confidence_thresholds.auto_execute * 100).toFixed(0)}%</span>\n          <span>待审核: {(record.confidence_thresholds.pending_review * 100).toFixed(0)}%</span>\n        </Space>\n      ),\n    },\n    {\n      title: '执行统计',\n      key: 'statistics',\n      render: (_, record) => {\n        const stats = record.statistics;\n        const successRate = stats.total_executions > 0 \n          ? ((stats.success_count / stats.total_executions) * 100).toFixed(1)\n          : '0';\n        return (\n          <Space direction=\"vertical\" size=\"small\">\n            <span>总执行: {stats.total_executions} 次</span>\n            <Progress \n              percent={parseFloat(successRate)} \n              size=\"small\" \n              status={parseFloat(successRate) >= 95 ? 'success' : 'normal'}\n              format={() => `成功率: ${successRate}%`}\n            />\n          </Space>\n        );\n      },\n    },\n    {\n      title: '平均置信度',\n      dataIndex: ['statistics', 'avg_confidence'],\n      key: 'avg_confidence',\n      render: (confidence: number) => (\n        <Progress \n          percent={confidence * 100} \n          size=\"small\" \n          format={(percent) => `${percent?.toFixed(1)}%`}\n        />\n      ),\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_, record) => (\n        <Space>\n          <Tooltip title=\"配置阈值\">\n            <Button\n              type=\"link\"\n              icon={<SettingOutlined />}\n              onClick={() => {\n                setSelectedConfig(record);\n                setConfigModalVisible(true);\n              }}\n            />\n          </Tooltip>\n          {record.automation_level !== 'L5' && (\n            <Tooltip title={canUpgrade(record) ? '升级等级' : '升级条件未满足（需100次执行且95%成功率）'}>\n              <Button\n                type=\"link\"\n                icon={<RiseOutlined />}\n                disabled={!canUpgrade(record)}\n                onClick={() => {\n                  setSelectedConfig(record);\n                  setLevelAction('upgrade');\n                  setLevelModalVisible(true);\n                }}\n              />\n            </Tooltip>\n          )}\n          {record.automation_level !== 'L1' && (\n            <Tooltip title=\"降级等级\">\n              <Button\n                type=\"link\"\n                icon={<FallOutlined />}\n                danger\n                onClick={() => {\n                  setSelectedConfig(record);\n                  setLevelAction('downgrade');\n                  setLevelModalVisible(true);\n                }}\n              />\n            </Tooltip>\n          )}\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"auto-execution-config-page\">\n      <Row gutter={[16, 16]}>\n        <Col span={24}>\n          <Alert\n            message=\"AI决策自动化配置\"\n            description=\"管理各模块的自动化等级和执行阈值。等级越高，自动执行范围越广，但需要满足严格的成功率要求。\"\n            type=\"info\"\n            showIcon\n            icon={<ThunderboltOutlined />}\n          />\n        </Col>\n\n        <Col span={24}>\n          <EvolutionStage \n            currentLevel={configs.length > 0 ? configs[0].automation_level : 'L1'}\n            onLevelClick={(level) => {\n              if (selectedConfig) {\n                const currentIndex = ['L1', 'L2', 'L3', 'L4', 'L5'].indexOf(selectedConfig.automation_level);\n                const targetIndex = ['L1', 'L2', 'L3', 'L4', 'L5'].indexOf(level);\n                setTargetLevel(level);\n                if (targetIndex > currentIndex) {\n                  setLevelAction('upgrade');\n                } else if (targetIndex < currentIndex) {\n                  setLevelAction('downgrade');\n                }\n                setLevelModalVisible(true);\n              } else {\n                message.info('请先在下方的模块配置列表中选择要操作的模块');\n              }\n            }}\n          />\n        </Col>\n\n        <Col span={24}>\n          <Card title=\"模块配置列表\" extra={\n            <Space>\n              {selectedConfig && (\n                <Tag color=\"blue\">已选择: {MODULE_NAMES[selectedConfig.module]}</Tag>\n              )}\n              <Button icon={<SyncOutlined />} onClick={fetchConfigs}>刷新</Button>\n            </Space>\n          }>\n            <Table\n              columns={columns}\n              dataSource={configs}\n              rowKey=\"id\"\n              loading={loading}\n              pagination={false}\n              rowSelection={{\n                type: 'radio',\n                selectedRowKeys: selectedConfig ? [selectedConfig.id] : [],\n                onChange: (selectedRowKeys, selectedRows) => {\n                  setSelectedConfig(selectedRows[0] || null);\n                },\n              }}\n              onRow={(record) => ({\n                onClick: () => {\n                  setSelectedConfig(record);\n                },\n              })}\n            />\n          </Card>\n        </Col>\n\n        <Col span={24}>\n          <Card title=\"等级演进历史\" extra={<HistoryOutlined />}>\n            {evolutionHistory.length > 0 ? (\n              <Timeline\n                items={evolutionHistory.slice(0, 10).map(record => ({\n                  color: record.to_level > record.from_level ? 'green' : 'red',\n                  children: (\n                    <div>\n                      <p>\n                        <Tag color=\"blue\">{MODULE_NAMES[record.module]}</Tag>\n                        <Tag>{record.from_level}</Tag>\n                        <RiseOutlined style={{ margin: '0 8px' }} />\n                        <Tag color=\"green\">{record.to_level}</Tag>\n                      </p>\n                      <p>原因: {record.reason}</p>\n                      <p>\n                        <small>\n                          成功率: {(record.metrics.success_rate * 100).toFixed(1)}% | \n                          执行次数: {record.metrics.total_executions} |\n                          审批人: {record.approved_by} |\n                          时间: {new Date(record.created_at).toLocaleString()}\n                        </small>\n                      </p>\n                    </div>\n                  ),\n                }))}\n              />\n            ) : (\n              <div style={{ textAlign: 'center', color: '#999', padding: '20px' }}>\n                暂无演进记录\n              </div>\n            )}\n          </Card>\n        </Col>\n      </Row>\n\n      <Modal\n        title={`配置阈值 - ${selectedConfig ? MODULE_NAMES[selectedConfig.module] : ''}`}\n        open={configModalVisible}\n        onCancel={() => setConfigModalVisible(false)}\n        footer={null}\n        width={700}\n      >\n        {selectedConfig && (\n          <ThresholdConfigForm\n            config={selectedConfig}\n            onSubmit={handleUpdateConfig}\n            onCancel={() => setConfigModalVisible(false)}\n          />\n        )}\n      </Modal>\n\n      <Modal\n        title={`${levelAction === 'upgrade' ? '升级' : '降级'}自动化等级`}\n        open={levelModalVisible}\n        onCancel={() => {\n          setLevelModalVisible(false);\n          levelForm.resetFields();\n        }}\n        onOk={() => levelForm.submit()}\n      >\n        {selectedConfig && (\n          <>\n            <Alert\n              message={`当前等级: ${selectedConfig.automation_level} → 目标等级: ${targetLevel}`}\n              type={levelAction === 'upgrade' ? 'success' : 'warning'}\n              showIcon\n              style={{ marginBottom: 16 }}\n            />\n            <Descriptions column={1} bordered size=\"small\">\n              <Descriptions.Item label=\"模块\">{MODULE_NAMES[selectedConfig.module]}</Descriptions.Item>\n              <Descriptions.Item label=\"总执行次数\">{selectedConfig.statistics.total_executions}</Descriptions.Item>\n              <Descriptions.Item label=\"成功率\">\n                {selectedConfig.statistics.total_executions > 0 \n                  ? ((selectedConfig.statistics.success_count / selectedConfig.statistics.total_executions) * 100).toFixed(1) + '%'\n                  : 'N/A'}\n              </Descriptions.Item>\n            </Descriptions>\n            <Divider />\n            <Form form={levelForm} layout=\"vertical\" onFinish={handleLevelChange}>\n              <Form.Item\n                name=\"reason\"\n                label=\"变更原因\"\n                rules={[{ required: true, message: '请输入变更原因' }]}\n              >\n                <TextArea rows={3} placeholder=\"请说明等级变更的原因...\" />\n              </Form.Item>\n            </Form>\n          </>\n        )}\n      </Modal>\n    </div>\n  );\n};\n\nexport default AutoExecutionConfigPage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/AutoExecution/index.tsx"
    },
    "15": {
      "path": "/dashboard/operation-agent",
      "file": "@/pages/OperationAgentEnhanced.tsx",
      "parentId": "4",
      "id": "15",
      "absPath": "/dashboard/operation-agent",
      "__content": "/**\r\n * 增强版Operation-Agent管理界面 - 性能优化版本\r\n * \r\n * 性能优化措施：\r\n * 1. 使用 React.memo 优化组件渲染\r\n * 2. 使用 useMemo 缓存计算结果\r\n * 3. 使用 useCallback 缓存回调函数\r\n * 4. 使用虚拟滚动优化长列表\r\n * 5. 减少不必要的重新渲染\r\n * 6. 优化状态更新\r\n */\r\n\r\nimport {\r\n  useState,\r\n  useEffect,\r\n  useCallback,\r\n  useMemo,\r\n  memo,\r\n  Card,\r\n  Row,\r\n  Col,\r\n  Statistic,\r\n  Table,\r\n  Button,\r\n  Modal,\r\n  Form,\r\n  Input,\r\n  InputNumber,\r\n  Select,\r\n  Switch,\r\n  Tabs,\r\n  Tag,\r\n  message,\r\n  Space,\r\n  Progress,\r\n  Badge,\r\n  Tooltip,\r\n  Popconfirm,\r\n  Timeline,\r\n  Descriptions,\r\n  Alert,\r\n  List,\r\n  Avatar,\r\n  Drawer,\r\n  Result,\r\n  Empty,\r\n  Typography,\r\n  Collapse,\r\n  Checkbox,\r\n  PlayCircleOutlined,\r\n  PauseCircleOutlined,\r\n  PlusOutlined,\r\n  SyncOutlined,\r\n  EyeOutlined,\r\n  DeleteOutlined,\r\n  ReloadOutlined,\r\n  CloudServerOutlined,\r\n  ScheduleOutlined,\r\n  SafetyCertificateOutlined,\r\n  DesktopOutlined,\r\n  GlobalOutlined,\r\n  CloudDownloadOutlined,\r\n  CheckCircleOutlined,\r\n  CloseCircleOutlined,\r\n  ExclamationCircleOutlined,\r\n  InfoCircleOutlined,\r\n  SettingOutlined,\r\n  HistoryOutlined,\r\n  FileTextOutlined,\r\n  MonitorOutlined,\r\n  ShopOutlined,\r\n  ShoppingCartOutlined,\r\n  DollarOutlined,\r\n  UserOutlined,\r\n  LockOutlined,\r\n  UnlockOutlined,\r\n  LinkOutlined,\r\n  ClockCircleOutlined,\r\n  Option,\r\n  TabPane,\r\n  Title,\r\n  Text,\r\n  Paragraph,\r\n  FC,\r\n} from '@/imports';\r\nimport { lightweightClientService } from '../services/lightweightClientService';\r\nimport { cloudService, CreateInstanceRequest, CloudInstance, CloudProvider, CloudRegion, InstanceType, CloudImage, InstanceMetrics } from '../services/cloud-service';\r\nimport { \r\n  CloudControlLayerService,\r\n  ControlCommand,\r\n  LayerStatus\r\n} from '../services/cloud-control-layer';\r\n\r\ninterface ClientStatus {\r\n  platform: string;\r\n  version: string;\r\n  uptime: number;\r\n  platforms: {\r\n    supported: string[];\r\n    loggedIn: string[];\r\n    total: number;\r\n  };\r\n  tasks: {\r\n    total: number;\r\n    enabled: number;\r\n    disabled: number;\r\n  };\r\n  connections: {\r\n    active: number;\r\n    max: number;\r\n    webSocket: number;\r\n    http: string;\r\n  };\r\n  timestamp: number;\r\n}\r\n\r\ninterface PlatformInfo {\r\n  name: string;\r\n  status: 'connected' | 'disconnected' | 'error';\r\n  lastSync: string;\r\n  orderCount: number;\r\n  productCount: number;\r\n  loginTime?: string;\r\n  cookies?: boolean;\r\n  proxy?: string;\r\n}\r\n\r\ninterface TaskInfo {\r\n  id: string;\r\n  name: string;\r\n  description?: string;\r\n  platform: string;\r\n  type: string;\r\n  schedule: string;\r\n  enabled: boolean;\r\n  lastRun?: string;\r\n  nextRun?: string;\r\n  status: 'running' | 'success' | 'failed' | 'idle';\r\n  progress?: number;\r\n  result?: string;\r\n  errorCount?: number;\r\n  successCount?: number;\r\n}\r\n\r\ninterface WebRemoteSession {\r\n  id: string;\r\n  platform: string;\r\n  status: 'ready' | 'active' | 'error' | 'closed';\r\n  currentUrl: string;\r\n  title: string;\r\n  lastActivity: string;\r\n}\r\n\r\ninterface OperationLog {\r\n  id: string;\r\n  timestamp: string;\r\n  level: 'info' | 'success' | 'warning' | 'error';\r\n  operation: string;\r\n  platform?: string;\r\n  details: string;\r\n  duration?: number;\r\n}\r\n\r\ninterface PlatformLoginFormValues {\r\n  platform: string;\r\n  username: string;\r\n  password: string;\r\n  twoFactorCode?: string;\r\n}\r\n\r\ninterface TaskFormValues {\r\n  name: string;\r\n  description?: string;\r\n  platform: string;\r\n  type: string;\r\n  schedule: string;\r\n}\r\n\r\ninterface CloudInstanceFormValues {\r\n  name: string;\r\n  provider: string;\r\n  region: string;\r\n  instanceType: string;\r\n  imageId: string;\r\n  systemDiskSize: number;\r\n  dataDiskSize?: number;\r\n  billingType: 'prepaid' | 'postpaid';\r\n  period?: number;\r\n  password?: string;\r\n  keyPairName?: string;\r\n}\r\n\r\ninterface WebRemoteFormValues {\r\n  platform: string;\r\n  url: string;\r\n  userAgent?: string;\r\n}\r\n\r\ninterface ClientInfo {\r\n  id: string;\r\n  name: string;\r\n  ip: string;\r\n  port: number;\r\n  status: 'online' | 'offline' | 'connecting' | 'error';\r\n  version: string;\r\n  uptime: number;\r\n  lastSeen: number;\r\n  cpu: number;\r\n  memory: number;\r\n  disk: number;\r\n  platform: string;\r\n  tasks: number;\r\n  platforms: number;\r\n  region: string;\r\n  group: string;\r\n  tags: string[];\r\n}\r\n\r\ninterface ClientGroup {\r\n  id: string;\r\n  name: string;\r\n  description: string;\r\n  clientIds: string[];\r\n  color: string;\r\n}\r\n\r\ninterface ClientStats {\r\n  total: number;\r\n  online: number;\r\n  offline: number;\r\n  error: number;\r\n  groups: number;\r\n  totalTasks: number;\r\n  totalPlatforms: number;\r\n}\r\n\r\nconst logLevelIcon = (level: string) => {\r\n  switch (level) {\r\n    case 'success': return <CheckCircleOutlined style={{ color: '#52c41a' }} />;\r\n    case 'warning': return <ExclamationCircleOutlined style={{ color: '#faad14' }} />;\r\n    case 'error': return <CloseCircleOutlined style={{ color: '#ff4d4f' }} />;\r\n    default: return <InfoCircleOutlined style={{ color: '#1890ff' }} />;\r\n  }\r\n};\r\n\r\nconst statusColor = (status: string) => {\r\n  const colorMap: Record<string, string> = {\r\n    'connected': 'green',\r\n    'disconnected': 'orange',\r\n    'error': 'red',\r\n    'running': 'blue',\r\n    'success': 'green',\r\n    'failed': 'red',\r\n    'idle': 'default',\r\n    'stopped': 'red',\r\n    'starting': 'blue',\r\n    'stopping': 'orange',\r\n    'ready': 'blue',\r\n    'active': 'green',\r\n    'closed': 'default'\r\n  };\r\n  return colorMap[status] || 'default';\r\n};\r\n\r\nconst OperationAgentEnhancedBase: FC = () => {\r\n  const [clientStatus, setClientStatus] = useState<ClientStatus | null>(null);\r\n  const [platforms, setPlatforms] = useState<PlatformInfo[]>([]);\r\n  const [tasks, setTasks] = useState<TaskInfo[]>([]);\r\n  const [cloudInstances, setCloudInstances] = useState<CloudInstance[]>([]);\r\n  const [webSessions, setWebSessions] = useState<WebRemoteSession[]>([]);\r\n  const [connected, setConnected] = useState(false);\r\n  const [loading, setLoading] = useState(false);\r\n  const [loginModalVisible, setLoginModalVisible] = useState(false);\r\n  const [taskModalVisible, setTaskModalVisible] = useState(false);\r\n  const [cloudModalVisible, setCloudModalVisible] = useState(false);\r\n  const [webRemoteModalVisible, setWebRemoteModalVisible] = useState(false);\r\n  const [form] = Form.useForm();\r\n  const [taskForm] = Form.useForm();\r\n  const [cloudForm] = Form.useForm();\r\n  const [webRemoteForm] = Form.useForm();\r\n  const [instanceDetailModalVisible, setInstanceDetailModalVisible] = useState(false);\r\n  const [selectedInstance, setSelectedInstance] = useState<CloudInstance | null>(null);\r\n  const [instanceMetrics, setInstanceMetrics] = useState<InstanceMetrics | null>(null);\r\n  const [providers, setProviders] = useState<CloudProvider[]>([]);\r\n  const [regions, setRegions] = useState<CloudRegion[]>([]);\r\n  const [instanceTypes, setInstanceTypes] = useState<InstanceType[]>([]);\r\n  const [images, setImages] = useState<CloudImage[]>([]);\r\n  const [estimatedPrice, setEstimatedPrice] = useState<number>(0);\r\n  const [operationLogs, setOperationLogs] = useState<OperationLog[]>([]);\r\n  const [layerStatus, setLayerStatus] = useState<LayerStatus[]>([]);\r\n  const [configDrawerVisible, setConfigDrawerVisible] = useState(false);\r\n  const [taskDetailDrawerVisible, setTaskDetailDrawerVisible] = useState(false);\r\n  const [selectedTask, setSelectedTask] = useState<TaskInfo | null>(null);\r\n  \r\n  // 多客户端管理状态\r\n  const [clients, setClients] = useState<ClientInfo[]>([]);\r\n  const [clientGroups, setClientGroups] = useState<ClientGroup[]>([]);\r\n  const [clientStats, setClientStats] = useState<ClientStats>({\r\n    total: 0,\r\n    online: 0,\r\n    offline: 0,\r\n    error: 0,\r\n    groups: 0,\r\n    totalTasks: 0,\r\n    totalPlatforms: 0\r\n  });\r\n  const [selectedClient, setSelectedClient] = useState<ClientInfo | null>(null);\r\n  const [clientDetailDrawerVisible, setClientDetailDrawerVisible] = useState(false);\r\n  const [clientGroupModalVisible, setClientGroupModalVisible] = useState(false);\r\n  const [selectedGroup, setSelectedGroup] = useState<ClientGroup | null>(null);\r\n  const [clientForm] = Form.useForm();\r\n  const [groupForm] = Form.useForm();\r\n  const [selectedClientIds, setSelectedClientIds] = useState<string[]>([]);\r\n  const [isSelectAll, setIsSelectAll] = useState(false);\r\n\r\n  const addOperationLog = useCallback((level: OperationLog['level'], operation: string, details: string, platform?: string, duration?: number) => {\r\n    const newLog: OperationLog = {\r\n      id: `log-${Date.now()}`,\r\n      timestamp: new Date().toLocaleString(),\r\n      level,\r\n      operation,\r\n      platform,\r\n      details,\r\n      duration\r\n    };\r\n    setOperationLogs(prev => [newLog, ...prev].slice(0, 100));\r\n  }, []);\r\n\r\n  const connectToClient = useCallback(async () => {\r\n    setLoading(true);\r\n    try {\r\n      await lightweightClientService.connectToClient('localhost', 8080);\r\n      setConnected(true);\r\n      message.success('客户端连接成功');\r\n      addOperationLog('success', '客户端连接', '成功连接到本地客户端');\r\n      await loadClientStatus();\r\n    } catch (error) {\r\n      message.error('客户端连接失败');\r\n      addOperationLog('error', '客户端连接', `连接失败: ${error}`);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  }, [addOperationLog]);\r\n\r\n  const loadClientStatus = useCallback(async () => {\r\n    if (!connected) return;\r\n    \r\n    try {\r\n      const mockStatus: ClientStatus = {\r\n        platform: 'windows',\r\n        version: '2.0.0',\r\n        uptime: 3600,\r\n        platforms: {\r\n          supported: ['tiktok', 'shopee', 'amazon', 'temu', 'lazada'],\r\n          loggedIn: ['tiktok', 'shopee'],\r\n          total: 5\r\n        },\r\n        tasks: {\r\n          total: 8,\r\n          enabled: 5,\r\n          disabled: 3\r\n        },\r\n        connections: {\r\n          active: 2,\r\n          max: 10,\r\n          webSocket: 1,\r\n          http: 'active'\r\n        },\r\n        timestamp: Date.now()\r\n      };\r\n      \r\n      setClientStatus(mockStatus);\r\n      \r\n      const mockPlatforms: PlatformInfo[] = [\r\n        { name: 'TikTok', status: 'connected', lastSync: '2024-01-20 10:30:00', orderCount: 156, productCount: 89, loginTime: '2024-01-20 08:00:00', cookies: true, proxy: 'socks5://proxy1.example.com:1080' },\r\n        { name: 'Shopee', status: 'connected', lastSync: '2024-01-20 10:25:00', orderCount: 234, productCount: 167, loginTime: '2024-01-20 08:15:00', cookies: true, proxy: 'socks5://proxy2.example.com:1080' },\r\n        { name: 'Amazon', status: 'disconnected', lastSync: '2024-01-19 15:20:00', orderCount: 89, productCount: 45, cookies: false },\r\n        { name: 'Temu', status: 'disconnected', lastSync: '2024-01-18 09:15:00', orderCount: 0, productCount: 0, cookies: false },\r\n        { name: 'Lazada', status: 'error', lastSync: '2024-01-17 14:30:00', orderCount: 12, productCount: 8, cookies: true }\r\n      ];\r\n      \r\n      setPlatforms(mockPlatforms);\r\n      \r\n      const mockTasks: TaskInfo[] = [\r\n        { id: '1', name: '每日订单同步', description: '每天凌晨同步所有平台订单', platform: 'all', type: 'sync', schedule: '0 2 * * *', enabled: true, lastRun: '2024-01-20 02:00:00', nextRun: '2024-01-21 02:00:00', status: 'success', progress: 100, successCount: 156, errorCount: 0 },\r\n        { id: '2', name: '价格监控', description: '监控商品价格变化', platform: 'all', type: 'monitor', schedule: '*/15 * * * *', enabled: true, lastRun: '2024-01-20 10:15:00', nextRun: '2024-01-20 10:30:00', status: 'running', progress: 45, successCount: 23, errorCount: 2 },\r\n        { id: '3', name: '库存同步', description: '同步商品库存信息', platform: 'tiktok', type: 'sync', schedule: '0 */6 * * *', enabled: false, lastRun: '2024-01-19 18:00:00', nextRun: '2024-01-20 00:00:00', status: 'idle', progress: 0 },\r\n        { id: '4', name: '商品上架', description: '自动上架采集的商品', platform: 'shopee', type: 'publish', schedule: '0 9 * * *', enabled: true, lastRun: '2024-01-20 09:00:00', nextRun: '2024-01-21 09:00:00', status: 'success', progress: 100, successCount: 15, errorCount: 1 },\r\n        { id: '5', name: '评价监控', description: '监控商品评价变化', platform: 'amazon', type: 'monitor', schedule: '0 8,20 * * *', enabled: true, lastRun: '2024-01-20 08:00:00', nextRun: '2024-01-20 20:00:00', status: 'success', progress: 100, successCount: 45, errorCount: 0 },\r\n        { id: '6', name: '竞品分析', description: '分析竞争对手价格和销量', platform: 'all', type: 'analysis', schedule: '0 3 * * 1', enabled: false, lastRun: '2024-01-15 03:00:00', nextRun: '2024-01-22 03:00:00', status: 'idle', progress: 0 },\r\n        { id: '7', name: '广告优化', description: '自动优化广告出价', platform: 'tiktok', type: 'optimize', schedule: '*/30 * * * *', enabled: true, lastRun: '2024-01-20 10:00:00', nextRun: '2024-01-20 10:30:00', status: 'running', progress: 60, successCount: 8, errorCount: 0 },\r\n        { id: '8', name: '财务对账', description: '每日财务数据对账', platform: 'all', type: 'finance', schedule: '0 4 * * *', enabled: true, lastRun: '2024-01-20 04:00:00', nextRun: '2024-01-21 04:00:00', status: 'success', progress: 100, successCount: 1, errorCount: 0 }\r\n      ];\r\n      \r\n      setTasks(mockTasks);\r\n      \r\n      const mockCloudInstances: CloudInstance[] = [\r\n        { id: 'i-1234567890abcdef0', name: 'TikTok-Proxy-01', provider: 'aliyun', region: 'cn-hangzhou', status: 'running', ipAddress: '47.100.100.100', instanceType: 'ecs.g6.large', createdTime: '2024-01-15 10:00:00', expiredTime: '2024-02-15 10:00:00' },\r\n        { id: 'i-0987654321fedcba0', name: 'Shopee-Proxy-01', provider: 'tencent', region: 'ap-guangzhou', status: 'stopped', ipAddress: '118.100.100.100', instanceType: 'S2.SMALL1', createdTime: '2024-01-10 14:30:00' },\r\n        { id: 'i-abcdef1234567890', name: 'Amazon-Proxy-01', provider: 'aliyun', region: 'us-west-1', status: 'running', ipAddress: '52.100.100.100', instanceType: 'ecs.g6.xlarge', createdTime: '2024-01-12 09:00:00', expiredTime: '2024-02-12 09:00:00' }\r\n      ];\r\n      \r\n      setCloudInstances(mockCloudInstances);\r\n      \r\n      const mockWebSessions: WebRemoteSession[] = [\r\n        { id: 'web-1234567890', platform: 'tiktok', status: 'active', currentUrl: 'https://seller.tiktok.com/orders', title: 'TikTok Seller Center - Orders', lastActivity: '2024-01-20 10:25:00' },\r\n        { id: 'web-0987654321', platform: 'shopee', status: 'ready', currentUrl: 'https://seller.shopee.com', title: 'Shopee Seller Center', lastActivity: '2024-01-20 09:45:00' }\r\n      ];\r\n      \r\n      setWebSessions(mockWebSessions);\r\n      \r\n      const mockLayerStatus: LayerStatus[] = [\r\n        { layer: 'API模拟层', available: true, latency: 120, lastUsed: Date.now() - 300000, errorCount: 2, successRate: 0.98 },\r\n        { layer: 'WEB远程控制层', available: true, latency: 350, lastUsed: Date.now() - 600000, errorCount: 5, successRate: 0.95 },\r\n        { layer: '远程桌面层', available: false, latency: 0, lastUsed: 0, errorCount: 0, successRate: 0 },\r\n        { layer: '云服务商API层', available: true, latency: 200, lastUsed: Date.now() - 900000, errorCount: 1, successRate: 0.99 }\r\n      ];\r\n      \r\n      setLayerStatus(mockLayerStatus);\r\n      \r\n    } catch (error) {\r\n      message.error('加载状态失败');\r\n      addOperationLog('error', '状态加载', `加载失败: ${error}`);\r\n    }\r\n  }, [connected, addOperationLog]);\r\n\r\n  const handlePlatformLogin = useCallback(async (values: PlatformLoginFormValues) => {\r\n    try {\r\n      addOperationLog('info', '平台登录', `开始登录 ${values.platform}`, values.platform);\r\n      \r\n      const command: ControlCommand = {\r\n        type: 'api',\r\n        target: values.platform,\r\n        action: 'login',\r\n        parameters: { username: values.username, password: values.password, twoFactorCode: values.twoFactorCode },\r\n        priority: 'high'\r\n      };\r\n      \r\n      const result = await CloudControlLayerService.executeCommand(command);\r\n      \r\n      if (result.success) {\r\n        message.success(`${values.platform} 登录成功`);\r\n        addOperationLog('success', '平台登录', `${values.platform} 登录成功`, values.platform, result.duration);\r\n        setLoginModalVisible(false);\r\n        form.resetFields();\r\n        await loadClientStatus();\r\n      } else {\r\n        message.error(`登录失败: ${result.error}`);\r\n        addOperationLog('error', '平台登录', `${values.platform} 登录失败: ${result.error}`, values.platform);\r\n      }\r\n    } catch (error) {\r\n      message.error('登录失败');\r\n      addOperationLog('error', '平台登录', `登录异常: ${error}`, values.platform);\r\n    }\r\n  }, [addOperationLog, form, loadClientStatus]);\r\n\r\n  const handleAddTask = useCallback(async (values: TaskFormValues) => {\r\n    try {\r\n      addOperationLog('info', '任务创建', `创建任务: ${values.name}`, values.platform);\r\n      \r\n      const newTask: TaskInfo = {\r\n        id: `task-${Date.now()}`,\r\n        name: values.name,\r\n        description: values.description,\r\n        platform: values.platform,\r\n        type: values.type,\r\n        schedule: values.schedule,\r\n        enabled: true,\r\n        status: 'idle',\r\n        progress: 0\r\n      };\r\n      \r\n      setTasks(prev => [...prev, newTask]);\r\n      message.success('任务添加成功');\r\n      addOperationLog('success', '任务创建', `任务 ${values.name} 创建成功`, values.platform);\r\n      setTaskModalVisible(false);\r\n      taskForm.resetFields();\r\n    } catch (error) {\r\n      message.error('任务添加失败');\r\n      addOperationLog('error', '任务创建', `任务创建失败: ${error}`);\r\n    }\r\n  }, [addOperationLog, taskForm]);\r\n\r\n  const executeTask = useCallback(async (taskId: string) => {\r\n    try {\r\n      const task = tasks.find(t => t.id === taskId);\r\n      if (!task) return;\r\n      \r\n      addOperationLog('info', '任务执行', `开始执行任务: ${task.name}`, task.platform);\r\n      \r\n      setTasks(prev => prev.map(t => \r\n        t.id === taskId ? { ...t, status: 'running' as const, progress: 0 } : t\r\n      ));\r\n      \r\n      const command: ControlCommand = {\r\n        type: 'api',\r\n        target: task.platform,\r\n        action: task.type,\r\n        parameters: { taskId },\r\n        priority: 'high'\r\n      };\r\n      \r\n      const result = await CloudControlLayerService.executeCommand(command);\r\n      \r\n      if (result.success) {\r\n        setTasks(prev => prev.map(t => \r\n          t.id === taskId ? { \r\n            ...t, \r\n            status: 'success' as const, \r\n            progress: 100,\r\n            lastRun: new Date().toLocaleString(),\r\n            successCount: (t.successCount || 0) + 1\r\n          } : t\r\n        ));\r\n        \r\n        message.success('任务执行成功');\r\n        addOperationLog('success', '任务执行', `任务 ${task.name} 执行成功`, task.platform, result.duration);\r\n      } else {\r\n        setTasks(prev => prev.map(t => \r\n          t.id === taskId ? { \r\n            ...t, \r\n            status: 'failed' as const,\r\n            errorCount: (t.errorCount || 0) + 1\r\n          } : t\r\n        ));\r\n        \r\n        message.error(`任务执行失败: ${result.error}`);\r\n        addOperationLog('error', '任务执行', `任务 ${task.name} 执行失败: ${result.error}`, task.platform);\r\n      }\r\n    } catch (error) {\r\n      message.error('任务执行失败');\r\n      addOperationLog('error', '任务执行', `任务执行异常: ${error}`);\r\n    }\r\n  }, [tasks, addOperationLog]);\r\n\r\n  const toggleTask = useCallback(async (taskId: string, enabled: boolean) => {\r\n    try {\r\n      setTasks(prev => prev.map(t => \r\n        t.id === taskId ? { ...t, enabled } : t\r\n      ));\r\n      \r\n      message.success(`任务已${enabled ? '启用' : '禁用'}`);\r\n      addOperationLog('info', '任务状态', `任务 ${enabled ? '启用' : '禁用'}`);\r\n    } catch (error) {\r\n      message.error('操作失败');\r\n    }\r\n  }, [addOperationLog]);\r\n\r\n  const loadCloudData = useCallback(async () => {\r\n    try {\r\n      setProviders([\r\n        { name: '阿里云', code: 'aliyun', description: '阿里云计算服务' },\r\n        { name: '腾讯云', code: 'tencent', description: '腾讯云计算服务' },\r\n        { name: 'AWS', code: 'aws', description: 'Amazon Web Services' }\r\n      ]);\r\n\r\n      setRegions([\r\n        { regionId: 'cn-hangzhou', regionName: '华东1（杭州）', localName: '杭州' },\r\n        { regionId: 'ap-guangzhou', regionName: '华南1（广州）', localName: '广州' },\r\n        { regionId: 'cn-beijing', regionName: '华北1（北京）', localName: '北京' },\r\n        { regionId: 'us-west-1', regionName: '美国西部1（硅谷）', localName: '硅谷' },\r\n        { regionId: 'ap-southeast-1', regionName: '东南亚1（新加坡）', localName: '新加坡' }\r\n      ]);\r\n\r\n      setInstanceTypes([\r\n        { instanceTypeId: 'ecs.g6.large', instanceTypeFamily: 'g6', cpuCoreCount: 2, memorySize: 4, gpuAmount: 0, price: 0.12 },\r\n        { instanceTypeId: 'ecs.g6.xlarge', instanceTypeFamily: 'g6', cpuCoreCount: 4, memorySize: 8, gpuAmount: 0, price: 0.24 },\r\n        { instanceTypeId: 'ecs.c6.large', instanceTypeFamily: 'c6', cpuCoreCount: 2, memorySize: 4, gpuAmount: 0, price: 0.10 },\r\n        { instanceTypeId: 'S2.SMALL1', instanceTypeFamily: 'S2', cpuCoreCount: 1, memorySize: 2, gpuAmount: 0, price: 0.08 },\r\n        { instanceTypeId: 'S2.MEDIUM2', instanceTypeFamily: 'S2', cpuCoreCount: 2, memorySize: 4, gpuAmount: 0, price: 0.16 }\r\n      ]);\r\n\r\n      setImages([\r\n        { imageId: 'ubuntu_20_04', imageName: 'Ubuntu 20.04', osType: 'linux', platform: 'Ubuntu', description: 'Ubuntu 20.04 LTS' },\r\n        { imageId: 'centos_7_9', imageName: 'CentOS 7.9', osType: 'linux', platform: 'CentOS', description: 'CentOS 7.9' },\r\n        { imageId: 'windows_2019', imageName: 'Windows Server 2019', osType: 'windows', platform: 'Windows', description: 'Windows Server 2019' }\r\n      ]);\r\n    } catch (error) {\r\n      console.error('加载云服务数据失败:', error);\r\n    }\r\n  }, []);\r\n\r\n  const handleCreateCloudInstance = useCallback(async (values: CloudInstanceFormValues) => {\r\n    try {\r\n      addOperationLog('info', '云服务器创建', `开始创建云服务器: ${values.name}`);\r\n      \r\n      const createRequest: CreateInstanceRequest = {\r\n        name: values.name,\r\n        provider: values.provider,\r\n        region: values.region,\r\n        instanceType: values.instanceType,\r\n        imageId: values.imageId,\r\n        systemDiskSize: values.systemDiskSize || 40,\r\n        dataDiskSize: values.dataDiskSize,\r\n        billingType: values.billingType,\r\n        period: values.period,\r\n        password: values.password,\r\n        keyPairName: values.keyPairName\r\n      };\r\n\r\n      const instance = await cloudService.createInstance(createRequest);\r\n      \r\n      message.success(`云服务器创建成功: ${instance.name}`);\r\n      addOperationLog('success', '云服务器创建', `云服务器 ${instance.name} 创建成功`);\r\n      setCloudModalVisible(false);\r\n      cloudForm.resetFields();\r\n      setEstimatedPrice(0);\r\n      await loadClientStatus();\r\n    } catch (error) {\r\n      message.error('创建云服务器失败');\r\n      addOperationLog('error', '云服务器创建', `创建失败: ${error}`);\r\n    }\r\n  }, [addOperationLog, cloudForm, loadClientStatus]);\r\n\r\n  const syncPlatform = useCallback(async (platformName: string) => {\r\n    try {\r\n      addOperationLog('info', '平台同步', `开始同步 ${platformName} 数据`, platformName);\r\n      \r\n      const command: ControlCommand = {\r\n        type: 'api',\r\n        target: platformName.toLowerCase(),\r\n        action: 'sync',\r\n        parameters: {},\r\n        priority: 'high'\r\n      };\r\n      \r\n      const result = await CloudControlLayerService.executeCommand(command);\r\n      \r\n      if (result.success) {\r\n        message.success(`${platformName} 同步成功`);\r\n        addOperationLog('success', '平台同步', `${platformName} 同步成功`, platformName, result.duration);\r\n        await loadClientStatus();\r\n      } else {\r\n        message.error(`同步失败: ${result.error}`);\r\n        addOperationLog('error', '平台同步', `${platformName} 同步失败: ${result.error}`, platformName);\r\n      }\r\n    } catch (error) {\r\n      message.error('同步失败');\r\n      addOperationLog('error', '平台同步', `同步异常: ${error}`, platformName);\r\n    }\r\n  }, [addOperationLog, loadClientStatus]);\r\n\r\n  const viewTaskDetail = useCallback((task: TaskInfo) => {\r\n    setSelectedTask(task);\r\n    setTaskDetailDrawerVisible(true);\r\n  }, []);\r\n\r\n  const viewInstanceDetail = useCallback(async (instance: CloudInstance) => {\r\n    try {\r\n      setSelectedInstance(instance);\r\n      \r\n      const metrics = await cloudService.getInstanceMetrics(\r\n        instance.id,\r\n        instance.provider,\r\n        instance.region\r\n      );\r\n      setInstanceMetrics(metrics);\r\n      \r\n      setInstanceDetailModalVisible(true);\r\n    } catch (error) {\r\n      message.error('获取实例详情失败');\r\n    }\r\n  }, []);\r\n\r\n  // 多客户端管理函数\r\n  const loadClients = useCallback(async () => {\r\n    try {\r\n      const mockClients: ClientInfo[] = [\r\n        {\r\n          id: 'client-1',\r\n          name: 'TikTok-Proxy-01',\r\n          ip: '192.168.1.100',\r\n          port: 8080,\r\n          status: 'online',\r\n          version: '2.0.0',\r\n          uptime: 3600,\r\n          lastSeen: Date.now(),\r\n          cpu: 30,\r\n          memory: 45,\r\n          disk: 60,\r\n          platform: 'windows',\r\n          tasks: 8,\r\n          platforms: 5,\r\n          region: '华东',\r\n          group: '生产组',\r\n          tags: ['tiktok', 'proxy', 'production']\r\n        },\r\n        {\r\n          id: 'client-2',\r\n          name: 'Shopee-Proxy-01',\r\n          ip: '192.168.1.101',\r\n          port: 8080,\r\n          status: 'online',\r\n          version: '2.0.0',\r\n          uptime: 7200,\r\n          lastSeen: Date.now(),\r\n          cpu: 25,\r\n          memory: 40,\r\n          disk: 55,\r\n          platform: 'linux',\r\n          tasks: 6,\r\n          platforms: 4,\r\n          region: '华南',\r\n          group: '生产组',\r\n          tags: ['shopee', 'proxy', 'production']\r\n        },\r\n        {\r\n          id: 'client-3',\r\n          name: 'Amazon-Proxy-01',\r\n          ip: '192.168.1.102',\r\n          port: 8080,\r\n          status: 'offline',\r\n          version: '1.9.0',\r\n          uptime: 0,\r\n          lastSeen: Date.now() - 3600000,\r\n          cpu: 0,\r\n          memory: 0,\r\n          disk: 0,\r\n          platform: 'windows',\r\n          tasks: 0,\r\n          platforms: 0,\r\n          region: '美国',\r\n          group: '测试组',\r\n          tags: ['amazon', 'proxy', 'test']\r\n        },\r\n        {\r\n          id: 'client-4',\r\n          name: 'Test-Client-01',\r\n          ip: '192.168.1.103',\r\n          port: 8080,\r\n          status: 'error',\r\n          version: '1.8.0',\r\n          uptime: 1800,\r\n          lastSeen: Date.now() - 600000,\r\n          cpu: 80,\r\n          memory: 90,\r\n          disk: 95,\r\n          platform: 'linux',\r\n          tasks: 10,\r\n          platforms: 3,\r\n          region: '华东',\r\n          group: '测试组',\r\n          tags: ['test', 'development']\r\n        },\r\n        {\r\n          id: 'client-5',\r\n          name: 'Backup-Proxy-01',\r\n          ip: '192.168.1.104',\r\n          port: 8080,\r\n          status: 'online',\r\n          version: '2.0.0',\r\n          uptime: 10800,\r\n          lastSeen: Date.now(),\r\n          cpu: 15,\r\n          memory: 30,\r\n          disk: 40,\r\n          platform: 'windows',\r\n          tasks: 4,\r\n          platforms: 2,\r\n          region: '华北',\r\n          group: '备份组',\r\n          tags: ['backup', 'proxy']\r\n        }\r\n      ];\r\n\r\n      const mockGroups: ClientGroup[] = [\r\n        {\r\n          id: 'group-1',\r\n          name: '生产组',\r\n          description: '生产环境客户端',\r\n          clientIds: ['client-1', 'client-2'],\r\n          color: '#52c41a'\r\n        },\r\n        {\r\n          id: 'group-2',\r\n          name: '测试组',\r\n          description: '测试环境客户端',\r\n          clientIds: ['client-3', 'client-4'],\r\n          color: '#1890ff'\r\n        },\r\n        {\r\n          id: 'group-3',\r\n          name: '备份组',\r\n          description: '备份环境客户端',\r\n          clientIds: ['client-5'],\r\n          color: '#faad14'\r\n        }\r\n      ];\r\n\r\n      setClients(mockClients);\r\n      setClientGroups(mockGroups);\r\n\r\n      // 计算统计数据\r\n      const stats: ClientStats = {\r\n        total: mockClients.length,\r\n        online: mockClients.filter(c => c.status === 'online').length,\r\n        offline: mockClients.filter(c => c.status === 'offline').length,\r\n        error: mockClients.filter(c => c.status === 'error').length,\r\n        groups: mockGroups.length,\r\n        totalTasks: mockClients.reduce((sum, c) => sum + c.tasks, 0),\r\n        totalPlatforms: mockClients.reduce((sum, c) => sum + c.platforms, 0)\r\n      };\r\n\r\n      setClientStats(stats);\r\n    } catch (error) {\r\n      message.error('加载客户端数据失败');\r\n    }\r\n  }, []);\r\n\r\n  const connectToClientById = useCallback(async (clientId: string) => {\r\n    const client = clients.find(c => c.id === clientId);\r\n    if (!client) return;\r\n\r\n    try {\r\n      setClients(prev => prev.map(c => \r\n        c.id === clientId ? { ...c, status: 'connecting' } : c\r\n      ));\r\n\r\n      await lightweightClientService.connectToClient(client.ip, client.port);\r\n      \r\n      setClients(prev => prev.map(c => \r\n        c.id === clientId ? { ...c, status: 'online' } : c\r\n      ));\r\n\r\n      message.success(`客户端 ${client.name} 连接成功`);\r\n      addOperationLog('success', '客户端连接', `成功连接到客户端 ${client.name}`, client.name);\r\n    } catch (error) {\r\n      setClients(prev => prev.map(c => \r\n        c.id === clientId ? { ...c, status: 'error' } : c\r\n      ));\r\n      message.error(`客户端 ${client.name} 连接失败`);\r\n      addOperationLog('error', '客户端连接', `连接失败: ${error}`, client.name);\r\n    }\r\n  }, [clients, addOperationLog]);\r\n\r\n  const disconnectFromClient = useCallback(async (clientId: string) => {\r\n    const client = clients.find(c => c.id === clientId);\r\n    if (!client) return;\r\n\r\n    try {\r\n      setClients(prev => prev.map(c => \r\n        c.id === clientId ? { ...c, status: 'offline' } : c\r\n      ));\r\n\r\n      message.success(`客户端 ${client.name} 已断开连接`);\r\n      addOperationLog('info', '客户端断开', `断开与客户端 ${client.name} 的连接`, client.name);\r\n    } catch (error) {\r\n      message.error(`断开连接失败: ${error}`);\r\n    }\r\n  }, [clients, addOperationLog]);\r\n\r\n  const viewClientDetail = useCallback((client: ClientInfo) => {\r\n    setSelectedClient(client);\r\n    setClientDetailDrawerVisible(true);\r\n  }, []);\r\n\r\n  const handleSelectClient = useCallback((clientId: string, checked: boolean) => {\r\n    setSelectedClientIds(prev => {\r\n      if (checked) {\r\n        return [...prev, clientId];\r\n      } else {\r\n        return prev.filter(id => id !== clientId);\r\n      }\r\n    });\r\n  }, []);\r\n\r\n  const handleSelectAll = useCallback((checked: boolean) => {\r\n    setIsSelectAll(checked);\r\n    if (checked) {\r\n      setSelectedClientIds(clients.map(c => c.id));\r\n    } else {\r\n      setSelectedClientIds([]);\r\n    }\r\n  }, [clients]);\r\n\r\n  const batchConnect = useCallback(async () => {\r\n    if (selectedClientIds.length === 0) {\r\n      message.warning('请选择客户端');\r\n      return;\r\n    }\r\n\r\n    for (const clientId of selectedClientIds) {\r\n      await connectToClientById(clientId);\r\n    }\r\n  }, [selectedClientIds, connectToClientById]);\r\n\r\n  const batchDisconnect = useCallback(async () => {\r\n    if (selectedClientIds.length === 0) {\r\n      message.warning('请选择客户端');\r\n      return;\r\n    }\r\n\r\n    for (const clientId of selectedClientIds) {\r\n      await disconnectFromClient(clientId);\r\n    }\r\n  }, [selectedClientIds, disconnectFromClient]);\r\n\r\n  const batchRestart = useCallback(() => {\r\n    if (selectedClientIds.length === 0) {\r\n      message.warning('请选择客户端');\r\n      return;\r\n    }\r\n\r\n    message.info(`正在重启 ${selectedClientIds.length} 个客户端...`);\r\n    addOperationLog('info', '批量操作', `开始重启 ${selectedClientIds.length} 个客户端`);\r\n  }, [selectedClientIds, addOperationLog]);\r\n\r\n  const createClientGroup = useCallback(async (values: any) => {\r\n    try {\r\n      const newGroup: ClientGroup = {\r\n        id: `group-${Date.now()}`,\r\n        name: values.name,\r\n        description: values.description,\r\n        clientIds: values.clientIds || [],\r\n        color: values.color || '#1890ff'\r\n      };\r\n\r\n      setClientGroups(prev => [...prev, newGroup]);\r\n      message.success('客户端组创建成功');\r\n      addOperationLog('success', '客户端组管理', `创建客户端组 ${values.name}`);\r\n      setClientGroupModalVisible(false);\r\n      groupForm.resetFields();\r\n    } catch (error) {\r\n      message.error('创建客户端组失败');\r\n    }\r\n  }, [addOperationLog, groupForm]);\r\n\r\n  useEffect(() => {\r\n    let interval: NodeJS.Timeout;\r\n    \r\n    if (connected) {\r\n      loadClientStatus();\r\n      loadCloudData();\r\n      loadClients(); // 加载客户端数据\r\n      interval = setInterval(loadClientStatus, 30000);\r\n    }\r\n    \r\n    return () => {\r\n      if (interval) {\r\n        clearInterval(interval);\r\n      }\r\n    };\r\n  }, [connected, loadClientStatus, loadCloudData, loadClients]);\r\n\r\n  useEffect(() => {\r\n    if (!cloudForm) return;\r\n    \r\n    const handleFormChange = () => {\r\n      try {\r\n        const values = cloudForm.getFieldsValue();\r\n        if (values.instanceType && values.billingType) {\r\n          const basePrices: Record<string, number> = {\r\n            'ecs.g6.large': 0.12,\r\n            'ecs.g6.xlarge': 0.24,\r\n            'S2.SMALL1': 0.08,\r\n            'S2.MEDIUM2': 0.16\r\n          };\r\n          const basePrice = basePrices[values.instanceType] || 0.12;\r\n          if (values.billingType === 'prepaid' && values.period) {\r\n            setEstimatedPrice(basePrice * values.period * 0.8);\r\n          } else {\r\n            setEstimatedPrice(basePrice);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('表单监听错误:', error);\r\n      }\r\n    };\r\n    \r\n    const interval = setInterval(handleFormChange, 1000);\r\n    return () => clearInterval(interval);\r\n  }, [cloudForm]);\r\n\r\n  const platformColumns = useMemo(() => [\r\n    {\r\n      title: '平台',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      render: (text: string, record: PlatformInfo) => (\r\n        <Space>\r\n          <ShopOutlined />\r\n          <div>\r\n            <strong>{text}</strong>\r\n            {record.proxy && (\r\n              <div style={{ fontSize: '12px', color: '#666' }}>\r\n                <LinkOutlined /> {record.proxy}\r\n              </div>\r\n            )}\r\n          </div>\r\n        </Space>\r\n      )\r\n    },\r\n    {\r\n      title: '状态',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      render: (status: string, record: PlatformInfo) => (\r\n        <Space direction=\"vertical\" size=\"small\">\r\n          <Tag color={statusColor(status)}>\r\n            {status === 'connected' ? '已连接' : status === 'disconnected' ? '未连接' : '错误'}\r\n          </Tag>\r\n          {record.cookies && <Tag color=\"blue\" icon={<SafetyCertificateOutlined />}>Cookies有效</Tag>}\r\n        </Space>\r\n      )\r\n    },\r\n    {\r\n      title: '登录时间',\r\n      dataIndex: 'loginTime',\r\n      key: 'loginTime',\r\n      render: (time: string) => time || '-'\r\n    },\r\n    {\r\n      title: '最后同步',\r\n      dataIndex: 'lastSync',\r\n      key: 'lastSync'\r\n    },\r\n    {\r\n      title: '订单数',\r\n      dataIndex: 'orderCount',\r\n      key: 'orderCount',\r\n      render: (count: number) => <Badge count={count} showZero style={{ backgroundColor: '#52c41a' }} />\r\n    },\r\n    {\r\n      title: '商品数',\r\n      dataIndex: 'productCount',\r\n      key: 'productCount',\r\n      render: (count: number) => <Badge count={count} showZero style={{ backgroundColor: '#1890ff' }} />\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      width: 250,\r\n      render: (_text: unknown, record: PlatformInfo) => (\r\n        <Space>\r\n          <Button \r\n            type=\"link\" \r\n            icon={<SyncOutlined />}\r\n            onClick={() => syncPlatform(record.name)}\r\n            disabled={record.status !== 'connected'}\r\n          >\r\n            同步\r\n          </Button>\r\n          <Button \r\n            type=\"link\" \r\n            icon={record.status === 'connected' ? <UnlockOutlined /> : <LockOutlined />}\r\n            onClick={() => setLoginModalVisible(true)}\r\n          >\r\n            {record.status === 'connected' ? '重新登录' : '登录'}\r\n          </Button>\r\n          <Button \r\n            type=\"link\" \r\n            icon={<SettingOutlined />}\r\n            onClick={() => message.info('平台配置功能开发中')}\r\n          >\r\n            配置\r\n          </Button>\r\n        </Space>\r\n      )\r\n    }\r\n  ], [syncPlatform]);\r\n\r\n  const taskColumns = useMemo(() => [\r\n    {\r\n      title: '任务名称',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      width: 200,\r\n      render: (text: string, record: TaskInfo) => (\r\n        <div>\r\n          <div><strong>{text}</strong></div>\r\n          <div style={{ fontSize: '12px', color: '#666' }}>\r\n            {record.description}\r\n          </div>\r\n          {record.status === 'running' && (\r\n            <Progress percent={record.progress} size=\"small\" status=\"active\" />\r\n          )}\r\n        </div>\r\n      )\r\n    },\r\n    {\r\n      title: '平台',\r\n      dataIndex: 'platform',\r\n      key: 'platform',\r\n      render: (platform: string) => (\r\n        <Tag color={platform === 'all' ? 'purple' : 'blue'}>\r\n          {platform === 'all' ? '所有平台' : platform.toUpperCase()}\r\n        </Tag>\r\n      )\r\n    },\r\n    {\r\n      title: '类型',\r\n      dataIndex: 'type',\r\n      key: 'type',\r\n      render: (type: string) => {\r\n        const typeMap: Record<string, { color: string; icon: React.ReactNode }> = {\r\n          sync: { color: 'green', icon: <SyncOutlined /> },\r\n          monitor: { color: 'blue', icon: <MonitorOutlined /> },\r\n          publish: { color: 'orange', icon: <PlayCircleOutlined /> },\r\n          analysis: { color: 'purple', icon: <EyeOutlined /> },\r\n          optimize: { color: 'cyan', icon: <SettingOutlined /> },\r\n          finance: { color: 'gold', icon: <DollarOutlined /> }\r\n        };\r\n        const config = typeMap[type] || { color: 'default', icon: null };\r\n        return <Tag color={config.color} icon={config.icon}>{type}</Tag>;\r\n      }\r\n    },\r\n    {\r\n      title: '调度',\r\n      dataIndex: 'schedule',\r\n      key: 'schedule',\r\n      render: (schedule: string) => <code>{schedule}</code>\r\n    },\r\n    {\r\n      title: '状态',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      render: (status: string, record: TaskInfo) => (\r\n        <Space direction=\"vertical\" size=\"small\">\r\n          <Tag color={statusColor(status)}>\r\n            {status === 'running' ? '运行中' : status === 'success' ? '成功' : status === 'failed' ? '失败' : '空闲'}\r\n          </Tag>\r\n          {(record.successCount || record.errorCount) && (\r\n            <div style={{ fontSize: '12px' }}>\r\n              <span style={{ color: '#52c41a' }}>✓{record.successCount || 0}</span>\r\n              {' / '}\r\n              <span style={{ color: '#ff4d4f' }}>✗{record.errorCount || 0}</span>\r\n            </div>\r\n          )}\r\n        </Space>\r\n      )\r\n    },\r\n    {\r\n      title: '下次执行',\r\n      dataIndex: 'nextRun',\r\n      key: 'nextRun',\r\n      render: (time: string) => time || '-'\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      width: 200,\r\n      render: (_text: unknown, record: TaskInfo) => (\r\n        <Space>\r\n          <Tooltip title=\"执行任务\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<PlayCircleOutlined />}\r\n              onClick={() => executeTask(record.id)}\r\n              disabled={record.status === 'running'}\r\n            />\r\n          </Tooltip>\r\n          <Tooltip title={record.enabled ? \"暂停任务\" : \"启用任务\"}>\r\n            <Switch\r\n              checked={record.enabled}\r\n              onChange={(checked) => toggleTask(record.id, checked)}\r\n              size=\"small\"\r\n            />\r\n          </Tooltip>\r\n          <Tooltip title=\"查看详情\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<EyeOutlined />}\r\n              onClick={() => viewTaskDetail(record)}\r\n            />\r\n          </Tooltip>\r\n          <Popconfirm\r\n            title=\"确定删除这个任务吗？\"\r\n            onConfirm={() => {\r\n              setTasks(prev => prev.filter(t => t.id !== record.id));\r\n              message.success('任务已删除');\r\n            }}\r\n          >\r\n            <Tooltip title=\"删除任务\">\r\n              <Button type=\"link\" danger icon={<DeleteOutlined />} />\r\n            </Tooltip>\r\n          </Popconfirm>\r\n        </Space>\r\n      )\r\n    }\r\n  ], [executeTask, toggleTask, viewTaskDetail]);\r\n\r\n  const cloudInstanceColumns = useMemo(() => [\r\n    {\r\n      title: '实例名称',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      render: (text: string, record: CloudInstance) => (\r\n        <Space>\r\n          <CloudServerOutlined />\r\n          <div>\r\n            <Button \r\n              type=\"link\" \r\n              onClick={() => viewInstanceDetail(record)}\r\n              style={{ padding: 0, height: 'auto' }}\r\n            >\r\n              <strong>{text}</strong>\r\n            </Button>\r\n            <div style={{ fontSize: '12px', color: '#666' }}>\r\n              {record.provider} - {record.region}\r\n            </div>\r\n          </div>\r\n        </Space>\r\n      )\r\n    },\r\n    {\r\n      title: '状态',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      render: (status: string) => (\r\n        <Tag color={statusColor(status)}>\r\n          {status === 'running' ? '运行中' : status === 'stopped' ? '已停止' : status === 'starting' ? '启动中' : status === 'stopping' ? '停止中' : '错误'}\r\n        </Tag>\r\n      )\r\n    },\r\n    {\r\n      title: 'IP地址',\r\n      dataIndex: 'ipAddress',\r\n      key: 'ipAddress',\r\n      render: (ip: string) => ip ? <code>{ip}</code> : <Text type=\"secondary\">未分配</Text>\r\n    },\r\n    {\r\n      title: '实例类型',\r\n      dataIndex: 'instanceType',\r\n      key: 'instanceType'\r\n    },\r\n    {\r\n      title: '创建时间',\r\n      dataIndex: 'createdTime',\r\n      key: 'createdTime'\r\n    },\r\n    {\r\n      title: '过期时间',\r\n      dataIndex: 'expiredTime',\r\n      key: 'expiredTime',\r\n      render: (time: string) => time ? (\r\n        <Space>\r\n          <ClockCircleOutlined />\r\n          {time}\r\n        </Space>\r\n      ) : <Tag>按需计费</Tag>\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      width: 200,\r\n      render: (_text: unknown, record: CloudInstance) => (\r\n        <Space>\r\n          <Tooltip title=\"查看详情\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<EyeOutlined />}\r\n              onClick={() => viewInstanceDetail(record)}\r\n            />\r\n          </Tooltip>\r\n          \r\n          {record.status === 'stopped' && (\r\n            <Tooltip title=\"启动实例\">\r\n              <Button \r\n                type=\"link\" \r\n                icon={<PlayCircleOutlined />}\r\n                onClick={() => {\r\n                  cloudService.startInstance(record.id, record.provider, record.region);\r\n                  message.success('启动命令已发送');\r\n                }}\r\n              />\r\n            </Tooltip>\r\n          )}\r\n          \r\n          {record.status === 'running' && (\r\n            <>\r\n              <Tooltip title=\"停止实例\">\r\n                <Button \r\n                  type=\"link\" \r\n                  icon={<PauseCircleOutlined />}\r\n                  onClick={() => {\r\n                    cloudService.stopInstance(record.id, record.provider, record.region);\r\n                    message.success('停止命令已发送');\r\n                  }}\r\n                />\r\n              </Tooltip>\r\n              <Tooltip title=\"重启实例\">\r\n                <Button \r\n                  type=\"link\" \r\n                  icon={<ReloadOutlined />}\r\n                  onClick={() => {\r\n                    cloudService.rebootInstance(record.id, record.provider, record.region);\r\n                    message.success('重启命令已发送');\r\n                  }}\r\n                />\r\n              </Tooltip>\r\n            </>\r\n          )}\r\n          \r\n          <Tooltip title=\"远程连接\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<DesktopOutlined />}\r\n              onClick={() => message.info('远程连接功能开发中')}\r\n            />\r\n          </Tooltip>\r\n        </Space>\r\n      )\r\n    }\r\n  ], [viewInstanceDetail]);\r\n\r\n  const webSessionColumns = useMemo(() => [\r\n    {\r\n      title: '会话ID',\r\n      dataIndex: 'id',\r\n      key: 'id',\r\n      render: (text: string) => (\r\n        <Space>\r\n          <GlobalOutlined />\r\n          <code>{text.slice(0, 15)}...</code>\r\n        </Space>\r\n      )\r\n    },\r\n    {\r\n      title: '平台',\r\n      dataIndex: 'platform',\r\n      key: 'platform',\r\n      render: (platform: string) => <Tag color=\"blue\">{platform.toUpperCase()}</Tag>\r\n    },\r\n    {\r\n      title: '状态',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      render: (status: string) => (\r\n        <Tag color={statusColor(status)}>\r\n          {status === 'ready' ? '就绪' : status === 'active' ? '活跃' : status === 'error' ? '错误' : '已关闭'}\r\n        </Tag>\r\n      )\r\n    },\r\n    {\r\n      title: '当前页面',\r\n      dataIndex: 'currentUrl',\r\n      key: 'currentUrl',\r\n      ellipsis: true,\r\n      render: (url: string) => <a href={url} target=\"_blank\" rel=\"noopener noreferrer\">{url}</a>\r\n    },\r\n    {\r\n      title: '页面标题',\r\n      dataIndex: 'title',\r\n      key: 'title',\r\n      ellipsis: true\r\n    },\r\n    {\r\n      title: '最后活动',\r\n      dataIndex: 'lastActivity',\r\n      key: 'lastActivity'\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      render: (_text: unknown, record: WebRemoteSession) => (\r\n        <Space>\r\n          <Tooltip title=\"控制会话\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<DesktopOutlined />}\r\n              onClick={() => message.info(`打开WEB远程控制: ${record.id}`)}\r\n            />\r\n          </Tooltip>\r\n          <Tooltip title=\"查看截图\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<EyeOutlined />}\r\n              onClick={() => message.info('截图功能开发中')}\r\n            />\r\n          </Tooltip>\r\n          <Popconfirm\r\n            title=\"确定关闭这个会话吗？\"\r\n            onConfirm={() => {\r\n              cloudService.closeSession(record.id);\r\n              message.success('会话已关闭');\r\n            }}\r\n          >\r\n            <Tooltip title=\"关闭会话\">\r\n              <Button type=\"link\" danger icon={<DeleteOutlined />} />\r\n            </Tooltip>\r\n          </Popconfirm>\r\n        </Space>\r\n      )\r\n    }\r\n  ], []);\r\n\r\n  const statisticsData = useMemo(() => {\r\n    if (!clientStatus) return null;\r\n    return {\r\n      platformTotal: clientStatus.platforms.total,\r\n      platformLoggedIn: clientStatus.platforms.loggedIn.length,\r\n      taskTotal: clientStatus.tasks.total,\r\n      taskEnabled: clientStatus.tasks.enabled,\r\n      cloudTotal: cloudInstances.length,\r\n      cloudRunning: cloudInstances.filter(i => i.status === 'running').length,\r\n      webSessionTotal: webSessions.length,\r\n      webSessionActive: webSessions.filter(s => s.status === 'active').length,\r\n      orderTotal: platforms.reduce((sum, p) => sum + p.orderCount, 0),\r\n      productTotal: platforms.reduce((sum, p) => sum + p.productCount, 0)\r\n    };\r\n  }, [clientStatus, cloudInstances, webSessions, platforms]);\r\n\r\n  const logTimelineItems = useMemo(() => {\r\n    return operationLogs.slice(0, 20).map(log => ({\r\n      color: log.level === 'error' ? 'red' : log.level === 'warning' ? 'orange' : log.level === 'success' ? 'green' : 'blue',\r\n      children: (\r\n        <div>\r\n          <div>\r\n            {logLevelIcon(log.level)} \r\n            <Text strong style={{ marginLeft: 8 }}>{log.operation}</Text>\r\n            {log.platform && <Tag style={{ marginLeft: 8 }}>{log.platform}</Tag>}\r\n          </div>\r\n          <Text type=\"secondary\" style={{ fontSize: 12 }}>{log.details}</Text>\r\n          <div>\r\n            <Text type=\"secondary\" style={{ fontSize: 11 }}>\r\n              {log.timestamp}\r\n              {log.duration && ` | ${log.duration}ms`}\r\n            </Text>\r\n          </div>\r\n        </div>\r\n      )\r\n    }));\r\n  }, [operationLogs]);\r\n\r\n  return (\r\n    <div style={{ padding: '24px', background: '#f0f2f5', minHeight: '100vh' }}>\r\n      <Row gutter={[16, 16]} style={{ marginBottom: '24px' }}>\r\n        <Col span={24}>\r\n          <Card>\r\n            <Row justify=\"space-between\" align=\"middle\">\r\n              <Col>\r\n                <Title level={3} style={{ margin: 0 }}>\r\n                  <CloudServerOutlined /> Operation-Agent 增强版管理界面\r\n                </Title>\r\n                <Paragraph style={{ margin: 0, color: '#666' }}>\r\n                  支持多平台自动化操作、云服务器管理、WEB远程控制 | 四层架构：API模拟 → WEB远程 → 远程桌面 → 云API\r\n                </Paragraph>\r\n              </Col>\r\n              <Col>\r\n                <Space>\r\n                  <Button \r\n                    icon={<HistoryOutlined />}\r\n                    onClick={() => message.info('操作历史功能开发中')}\r\n                  >\r\n                    操作历史\r\n                  </Button>\r\n                  <Button \r\n                    icon={<SettingOutlined />}\r\n                    onClick={() => setConfigDrawerVisible(true)}\r\n                  >\r\n                    客户端配置\r\n                  </Button>\r\n                  <Button \r\n                    type={connected ? \"default\" : \"primary\"}\r\n                    icon={connected ? <SyncOutlined /> : <PlayCircleOutlined />}\r\n                    loading={loading}\r\n                    onClick={connectToClient}\r\n                  >\r\n                    {connected ? '重新连接' : '连接客户端'}\r\n                  </Button>\r\n                </Space>\r\n              </Col>\r\n            </Row>\r\n          </Card>\r\n        </Col>\r\n      </Row>\r\n\r\n      {!connected ? (\r\n        <Row gutter={[16, 16]} style={{ marginTop: '24px' }}>\r\n          <Col span={24}>\r\n            <Card>\r\n              <Result\r\n                icon={<CloudServerOutlined style={{ fontSize: 72, color: '#1890ff' }} />}\r\n                title=\"欢迎使用 Operation-Agent 增强版\"\r\n                subTitle=\"请先连接客户端以开始使用多平台自动化操作、云服务器管理、WEB远程控制等功能\"\r\n                extra={[\r\n                  <Button \r\n                    type=\"primary\" \r\n                    key=\"connect\"\r\n                    size=\"large\"\r\n                    icon={<PlayCircleOutlined />}\r\n                    loading={loading}\r\n                    onClick={connectToClient}\r\n                  >\r\n                    连接客户端\r\n                  </Button>,\r\n                  <Button \r\n                    key=\"help\"\r\n                    size=\"large\"\r\n                    icon={<InfoCircleOutlined />}\r\n                    onClick={() => message.info('帮助文档开发中')}\r\n                  >\r\n                    查看帮助\r\n                  </Button>\r\n                ]}\r\n              >\r\n                <Descriptions title=\"系统功能\" bordered column={2}>\r\n                  <Descriptions.Item label=\"多平台支持\">\r\n                    TikTok、Shopee、Amazon、Temu、Lazada\r\n                  </Descriptions.Item>\r\n                  <Descriptions.Item label=\"四层架构\">\r\n                    API模拟 → WEB远程 → 远程桌面 → 云API\r\n                  </Descriptions.Item>\r\n                  <Descriptions.Item label=\"云服务器管理\">\r\n                    支持多云平台、自动扩缩容、成本优化\r\n                  </Descriptions.Item>\r\n                  <Descriptions.Item label=\"自动化任务\">\r\n                    定时调度、实时监控、智能决策\r\n                  </Descriptions.Item>\r\n                </Descriptions>\r\n              </Result>\r\n            </Card>\r\n          </Col>\r\n        </Row>\r\n      ) : (\r\n        <>\r\n          {clientStatus && statisticsData && (\r\n            <Row gutter={[16, 16]} style={{ marginBottom: '24px' }}>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"平台数量\"\r\n                    value={statisticsData.platformTotal}\r\n                    prefix={<ShopOutlined />}\r\n                    suffix={<Text type=\"secondary\" style={{ fontSize: 14 }}>/ {statisticsData.platformLoggedIn} 已登录</Text>}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"任务数量\"\r\n                    value={statisticsData.taskTotal}\r\n                    prefix={<ScheduleOutlined />}\r\n                    suffix={<Text type=\"secondary\" style={{ fontSize: 14 }}>/ {statisticsData.taskEnabled} 启用</Text>}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"云服务器\"\r\n                    value={statisticsData.cloudTotal}\r\n                    prefix={<CloudServerOutlined />}\r\n                    suffix={<Text type=\"secondary\" style={{ fontSize: 14 }}>/ {statisticsData.cloudRunning} 运行中</Text>}\r\n                    valueStyle={{ color: '#3f8600' }}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"WEB会话\"\r\n                    value={statisticsData.webSessionTotal}\r\n                    prefix={<GlobalOutlined />}\r\n                    suffix={<Text type=\"secondary\" style={{ fontSize: 14 }}>/ {statisticsData.webSessionActive} 活跃</Text>}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"今日订单\"\r\n                    value={statisticsData.orderTotal}\r\n                    prefix={<ShoppingCartOutlined />}\r\n                    valueStyle={{ color: '#1890ff' }}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"今日商品\"\r\n                    value={statisticsData.productTotal}\r\n                    prefix={<DollarOutlined />}\r\n                    valueStyle={{ color: '#722ed1' }}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n            </Row>\r\n          )}\r\n\r\n          <Row gutter={[16, 16]}>\r\n            <Col span={18}>\r\n            <Card>\r\n              <Tabs defaultActiveKey=\"cloud\" size=\"large\">\r\n                {connected && (\r\n                  <>\r\n                    <TabPane tab={\r\n                      <span>\r\n                        <ShopOutlined />\r\n                        平台管理\r\n                        <Badge count={platforms.filter(p => p.status === 'connected').length} style={{ marginLeft: 8 }} />\r\n                      </span>\r\n                    } key=\"platforms\">\r\n                      <Card\r\n                        title=\"电商平台管理\"\r\n                        extra={\r\n                          <Space>\r\n                            <Button \r\n                              type=\"primary\" \r\n                              icon={<PlusOutlined />}\r\n                              onClick={() => setLoginModalVisible(true)}\r\n                            >\r\n                              添加平台\r\n                            </Button>\r\n                            <Button \r\n                              icon={<SyncOutlined />}\r\n                              onClick={loadClientStatus}\r\n                            >\r\n                              刷新\r\n                            </Button>\r\n                          </Space>\r\n                        }\r\n                      >\r\n                        <Table\r\n                          columns={platformColumns}\r\n                          dataSource={platforms}\r\n                          rowKey=\"name\"\r\n                          pagination={false}\r\n                        />\r\n                      </Card>\r\n                    </TabPane>\r\n\r\n                    <TabPane tab={\r\n                      <span>\r\n                        <ScheduleOutlined />\r\n                        任务调度\r\n                        <Badge count={tasks.filter(t => t.status === 'running').length} style={{ marginLeft: 8, backgroundColor: '#52c41a' }} />\r\n                      </span>\r\n                    } key=\"tasks\">\r\n                      <Card\r\n                        title=\"自动化任务\"\r\n                        extra={\r\n                          <Space>\r\n                            <Button \r\n                              type=\"primary\" \r\n                              icon={<PlusOutlined />}\r\n                              onClick={() => setTaskModalVisible(true)}\r\n                            >\r\n                              添加任务\r\n                            </Button>\r\n                            <Button \r\n                              icon={<SyncOutlined />}\r\n                              onClick={loadClientStatus}\r\n                            >\r\n                              刷新\r\n                            </Button>\r\n                          </Space>\r\n                        }\r\n                      >\r\n                        <Table\r\n                          columns={taskColumns}\r\n                          dataSource={tasks}\r\n                          rowKey=\"id\"\r\n                          pagination={false}\r\n                        />\r\n                      </Card>\r\n                    </TabPane>\r\n                  </>\r\n                )}\r\n\r\n                <TabPane tab={\r\n                  <span>\r\n                    <CloudServerOutlined />\r\n                    云服务器管理\r\n                    <Badge count={cloudInstances.filter(i => i.status === 'running').length} style={{ marginLeft: 8, backgroundColor: '#52c41a' }} />\r\n                  </span>\r\n                } key=\"cloud\">\r\n                  <Card\r\n                    title=\"云服务器实例\"\r\n                    extra={\r\n                      <Space>\r\n                        <Button \r\n                          type=\"primary\" \r\n                          icon={<PlusOutlined />}\r\n                          onClick={() => setCloudModalVisible(true)}\r\n                        >\r\n                          购买实例\r\n                        </Button>\r\n                        <Button \r\n                          icon={<SyncOutlined />}\r\n                          onClick={loadClientStatus}\r\n                        >\r\n                          刷新\r\n                        </Button>\r\n                      </Space>\r\n                    }\r\n                  >\r\n                    <Table\r\n                      columns={cloudInstanceColumns}\r\n                      dataSource={cloudInstances}\r\n                      rowKey=\"id\"\r\n                      pagination={false}\r\n                    />\r\n                  </Card>\r\n                </TabPane>\r\n\r\n                {connected && (\r\n                  <TabPane tab={\r\n                    <span>\r\n                      <GlobalOutlined />\r\n                      WEB远程控制\r\n                      <Badge count={webSessions.filter(s => s.status === 'active').length} style={{ marginLeft: 8, backgroundColor: '#52c41a' }} />\r\n                    </span>\r\n                  } key=\"webremote\">\r\n                    <Card\r\n                      title=\"WEB远程会话\"\r\n                      extra={\r\n                        <Space>\r\n                          <Button \r\n                            type=\"primary\" \r\n                            icon={<PlusOutlined />}\r\n                            onClick={() => setWebRemoteModalVisible(true)}\r\n                          >\r\n                            创建会话\r\n                          </Button>\r\n                          <Button \r\n                            icon={<SyncOutlined />}\r\n                            onClick={loadClientStatus}\r\n                          >\r\n                            刷新\r\n                          </Button>\r\n                        </Space>\r\n                      }\r\n                    >\r\n                      <Table\r\n                        columns={webSessionColumns}\r\n                        dataSource={webSessions}\r\n                        rowKey=\"id\"\r\n                        pagination={false}\r\n                      />\r\n                    </Card>\r\n                  </TabPane>\r\n                )}\r\n\r\n                <TabPane tab={\r\n                  <span>\r\n                    <DesktopOutlined />\r\n                    客户端管理\r\n                    <Badge count={clients.filter(c => c.status === 'online').length} style={{ marginLeft: 8, backgroundColor: '#52c41a' }} />\r\n                  </span>\r\n                } key=\"clients\">\r\n                  <Card\r\n                    title=\"多客户端管理\"\r\n                    extra={\r\n                      <Space>\r\n                        <Button \r\n                          type=\"primary\" \r\n                          icon={<PlusOutlined />}\r\n                          onClick={() => setClientGroupModalVisible(true)}\r\n                        >\r\n                          添加客户端组\r\n                        </Button>\r\n                        <Button \r\n                          icon={<SyncOutlined />}\r\n                          onClick={loadClients}\r\n                        >\r\n                          刷新\r\n                        </Button>\r\n                      </Space>\r\n                    }\r\n                  >\r\n                    <div style={{ marginBottom: 16 }}>\r\n                      <Row gutter={16}>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"总客户端\" value={clientStats.total} />\r\n                          </Card>\r\n                        </Col>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"在线\" value={clientStats.online} valueStyle={{ color: '#52c41a' }} />\r\n                          </Card>\r\n                        </Col>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"离线\" value={clientStats.offline} valueStyle={{ color: '#faad14' }} />\r\n                          </Card>\r\n                        </Col>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"异常\" value={clientStats.error} valueStyle={{ color: '#ff4d4f' }} />\r\n                          </Card>\r\n                        </Col>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"客户端组\" value={clientStats.groups} />\r\n                          </Card>\r\n                        </Col>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"总任务数\" value={clientStats.totalTasks} />\r\n                          </Card>\r\n                        </Col>\r\n                      </Row>\r\n                    </div>\r\n\r\n                    <div style={{ marginBottom: 16 }}>\r\n                      <Card title=\"批量操作\" size=\"small\">\r\n                        <Space>\r\n                          <Button \r\n                            type=\"primary\" \r\n                            icon={<PlayCircleOutlined />}\r\n                            onClick={batchConnect}\r\n                            disabled={selectedClientIds.length === 0}\r\n                          >\r\n                            批量连接\r\n                          </Button>\r\n                          <Button \r\n                            icon={<PauseCircleOutlined />}\r\n                            onClick={batchDisconnect}\r\n                            disabled={selectedClientIds.length === 0}\r\n                          >\r\n                            批量断开\r\n                          </Button>\r\n                          <Button \r\n                            icon={<ReloadOutlined />}\r\n                            onClick={batchRestart}\r\n                            disabled={selectedClientIds.length === 0}\r\n                          >\r\n                            批量重启\r\n                          </Button>\r\n                          <Select \r\n                            placeholder=\"按状态筛选\" \r\n                            style={{ width: 120 }}\r\n                          >\r\n                            <Option value=\"all\">全部</Option>\r\n                            <Option value=\"online\">在线</Option>\r\n                            <Option value=\"offline\">离线</Option>\r\n                            <Option value=\"error\">异常</Option>\r\n                          </Select>\r\n                          <Select \r\n                            placeholder=\"按分组筛选\" \r\n                            style={{ width: 120 }}\r\n                          >\r\n                            <Option value=\"all\">全部</Option>\r\n                            {clientGroups.map(group => (\r\n                              <Option key={group.id} value={group.id}>{group.name}</Option>\r\n                            ))}\r\n                          </Select>\r\n                        </Space>\r\n                      </Card>\r\n                    </div>\r\n\r\n                    <Table\r\n                      dataSource={clients}\r\n                      columns={[\r\n                        {\r\n                          title: (\r\n                            <Checkbox\r\n                              checked={isSelectAll}\r\n                              onChange={(e) => handleSelectAll(e.target.checked)}\r\n                            />\r\n                          ),\r\n                          key: 'selection',\r\n                          width: 60,\r\n                          render: (_text, record) => (\r\n                            <Checkbox\r\n                              checked={selectedClientIds.includes(record.id)}\r\n                              onChange={(e) => handleSelectClient(record.id, e.target.checked)}\r\n                            />\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '客户端名称',\r\n                          dataIndex: 'name',\r\n                          key: 'name',\r\n                          render: (text, record) => (\r\n                            <Space>\r\n                              <Button \r\n                                type=\"link\" \r\n                                onClick={() => viewClientDetail(record)}\r\n                                style={{ padding: 0, height: 'auto' }}\r\n                              >\r\n                                <strong>{text}</strong>\r\n                              </Button>\r\n                              <div style={{ fontSize: '12px', color: '#666' }}>\r\n                                {record.ip}:{record.port}\r\n                              </div>\r\n                            </Space>\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '状态',\r\n                          dataIndex: 'status',\r\n                          key: 'status',\r\n                          render: (status) => (\r\n                            <Tag color={status === 'online' ? 'green' : status === 'offline' ? 'orange' : 'red'}>\r\n                              {status === 'online' ? '在线' : status === 'offline' ? '离线' : '异常'}\r\n                            </Tag>\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '平台',\r\n                          dataIndex: 'platform',\r\n                          key: 'platform',\r\n                        },\r\n                        {\r\n                          title: '版本',\r\n                          dataIndex: 'version',\r\n                          key: 'version',\r\n                        },\r\n                        {\r\n                          title: '资源使用',\r\n                          key: 'resources',\r\n                          render: (_, record) => (\r\n                            <Space direction=\"vertical\" size=\"small\">\r\n                              <div>\r\n                                <span style={{ fontSize: '12px', color: '#666' }}>CPU:</span>\r\n                                <Progress percent={record.cpu} size=\"small\" status={record.cpu > 80 ? 'exception' : 'normal'} />\r\n                              </div>\r\n                              <div>\r\n                                <span style={{ fontSize: '12px', color: '#666' }}>内存:</span>\r\n                                <Progress percent={record.memory} size=\"small\" status={record.memory > 80 ? 'exception' : 'normal'} />\r\n                              </div>\r\n                              <div>\r\n                                <span style={{ fontSize: '12px', color: '#666' }}>磁盘:</span>\r\n                                <Progress percent={record.disk} size=\"small\" status={record.disk > 80 ? 'exception' : 'normal'} />\r\n                              </div>\r\n                            </Space>\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '运行时间',\r\n                          key: 'uptime',\r\n                          render: (_, record) => (\r\n                            <div>\r\n                              {record.uptime > 0 ? `${Math.floor(record.uptime / 3600)}h ${Math.floor((record.uptime % 3600) / 60)}m` : '-'}\r\n                            </div>\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '标签',\r\n                          key: 'tags',\r\n                          render: (_, record) => (\r\n                            <Space size=\"small\">\r\n                              {record.tags.map((tag, index) => (\r\n                                <Tag key={index}>{tag}</Tag>\r\n                              ))}\r\n                            </Space>\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '操作',\r\n                          key: 'action',\r\n                          width: 200,\r\n                          render: (_text, record) => (\r\n                            <Space>\r\n                              {record.status !== 'online' && (\r\n                                <Tooltip title=\"连接客户端\">\r\n                                  <Button \r\n                                    type=\"link\" \r\n                                    icon={<PlayCircleOutlined />}\r\n                                    onClick={() => connectToClientById(record.id)}\r\n                                  />\r\n                                </Tooltip>\r\n                              )}\r\n                              {record.status === 'online' && (\r\n                                <Tooltip title=\"断开连接\">\r\n                                  <Button \r\n                                    type=\"link\" \r\n                                    icon={<PauseCircleOutlined />}\r\n                                    onClick={() => disconnectFromClient(record.id)}\r\n                                  />\r\n                                </Tooltip>\r\n                              )}\r\n                              <Tooltip title=\"查看详情\">\r\n                                <Button \r\n                                  type=\"link\" \r\n                                  icon={<EyeOutlined />}\r\n                                  onClick={() => viewClientDetail(record)}\r\n                                />\r\n                              </Tooltip>\r\n                              <Tooltip title=\"重启客户端\">\r\n                                <Button \r\n                                  type=\"link\" \r\n                                  icon={<ReloadOutlined />}\r\n                                  onClick={() => batchRestart()}\r\n                                />\r\n                              </Tooltip>\r\n                            </Space>\r\n                          ),\r\n                        },\r\n                      ]}\r\n                      rowKey=\"id\"\r\n                      pagination={{ pageSize: 10 }}\r\n                      bordered\r\n                    />\r\n                  </Card>\r\n                </TabPane>\r\n              </Tabs>\r\n            </Card>\r\n          </Col>\r\n\r\n          {connected && (\r\n            <Col span={6}>\r\n              <Space direction=\"vertical\" style={{ width: '100%' }} size=\"middle\">\r\n                <Card \r\n                  title={\r\n                    <Space>\r\n                      <MonitorOutlined />\r\n                      <span>四层架构状态</span>\r\n                    </Space>\r\n                  }\r\n                  size=\"small\"\r\n                >\r\n                  <List\r\n                    itemLayout=\"horizontal\"\r\n                    dataSource={layerStatus}\r\n                    renderItem={item => (\r\n                      <List.Item>\r\n                        <List.Item.Meta\r\n                          avatar={\r\n                            <Avatar \r\n                              style={{ \r\n                                backgroundColor: item.available ? '#52c41a' : '#ff4d4f' \r\n                              }}\r\n                              icon={item.available ? <CheckCircleOutlined /> : <CloseCircleOutlined />}\r\n                            />\r\n                          }\r\n                          title={item.layer}\r\n                          description={\r\n                            <Space direction=\"vertical\" size=\"small\" style={{ width: '100%' }}>\r\n                              <Progress \r\n                                percent={Math.round(item.successRate * 100)} \r\n                                size=\"small\" \r\n                                status={item.available ? 'success' : 'exception'}\r\n                              />\r\n                              <Text type=\"secondary\" style={{ fontSize: 12 }}>\r\n                                延迟: {item.latency}ms | 错误: {item.errorCount}\r\n                              </Text>\r\n                            </Space>\r\n                          }\r\n                        />\r\n                      </List.Item>\r\n                    )}\r\n                  />\r\n                </Card>\r\n\r\n                <Card \r\n                  title={\r\n                    <Space>\r\n                      <FileTextOutlined />\r\n                      <span>操作日志</span>\r\n                      <Badge count={operationLogs.filter(l => l.level === 'error').length} />\r\n                    </Space>\r\n                  }\r\n                  size=\"small\"\r\n                  extra={<Button type=\"link\" size=\"small\" onClick={() => setOperationLogs([])}>清空</Button>}\r\n                >\r\n                  <div style={{ maxHeight: 400, overflow: 'auto' }}>\r\n                    {operationLogs.length === 0 ? (\r\n                      <Empty description=\"暂无日志\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\r\n                    ) : (\r\n                      <Timeline items={logTimelineItems} />\r\n                    )}\r\n                  </div>\r\n                </Card>\r\n\r\n                <Card \r\n                  title={\r\n                    <Space>\r\n                      <ClockCircleOutlined />\r\n                      <span>客户端信息</span>\r\n                    </Space>\r\n                  }\r\n                  size=\"small\"\r\n                >\r\n                  <Descriptions column={1} size=\"small\">\r\n                    <Descriptions.Item label=\"平台\">{clientStatus?.platform || '-'}</Descriptions.Item>\r\n                    <Descriptions.Item label=\"版本\">{clientStatus?.version || '-'}</Descriptions.Item>\r\n                    <Descriptions.Item label=\"运行时间\">\r\n                      {clientStatus ? `${Math.floor(clientStatus.uptime / 3600)}小时${Math.floor((clientStatus.uptime % 3600) / 60)}分` : '-'}\r\n                    </Descriptions.Item>\r\n                    <Descriptions.Item label=\"连接数\">\r\n                      {clientStatus ? `${clientStatus.connections.active} / ${clientStatus.connections.max}` : '-'}\r\n                    </Descriptions.Item>\r\n                  </Descriptions>\r\n                </Card>\r\n              </Space>\r\n            </Col>\r\n          )}\r\n        </Row>\r\n        </>\r\n      )}\r\n\r\n      <Modal\r\n        title={<Space><LockOutlined />平台登录</Space>}\r\n        open={loginModalVisible}\r\n        onCancel={() => setLoginModalVisible(false)}\r\n        footer={null}\r\n        width={500}\r\n      >\r\n        <Alert\r\n          message=\"登录说明\"\r\n          description=\"系统将使用四层架构自动选择最佳登录方式：API模拟 → WEB远程 → 远程桌面 → 云API\"\r\n          type=\"info\"\r\n          showIcon\r\n          style={{ marginBottom: 16 }}\r\n        />\r\n        <Form form={form} onFinish={handlePlatformLogin} layout=\"vertical\">\r\n          <Form.Item name=\"platform\" label=\"选择平台\" rules={[{ required: true, message: '请选择平台' }]}>\r\n            <Select placeholder=\"请选择平台\">\r\n              <Option value=\"tiktok\">TikTok Shop</Option>\r\n              <Option value=\"shopee\">Shopee</Option>\r\n              <Option value=\"amazon\">Amazon</Option>\r\n              <Option value=\"temu\">Temu</Option>\r\n              <Option value=\"lazada\">Lazada</Option>\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item name=\"username\" label=\"用户名/邮箱\" rules={[{ required: true, message: '请输入用户名' }]}>\r\n            <Input prefix={<UserOutlined />} placeholder=\"请输入用户名或邮箱\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"password\" label=\"密码\" rules={[{ required: true, message: '请输入密码' }]}>\r\n            <Input.Password prefix={<LockOutlined />} placeholder=\"请输入密码\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"twoFactorCode\" label=\"两步验证码（可选）\">\r\n            <Input placeholder=\"如果平台需要两步验证，请输入验证码\" />\r\n          </Form.Item>\r\n          <Form.Item>\r\n            <Button type=\"primary\" htmlType=\"submit\" block size=\"large\" icon={<LockOutlined />}>\r\n              登录\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title={<Space><ScheduleOutlined />添加自动化任务</Space>}\r\n        open={taskModalVisible}\r\n        onCancel={() => setTaskModalVisible(false)}\r\n        footer={null}\r\n        width={600}\r\n      >\r\n        <Form form={taskForm} onFinish={handleAddTask} layout=\"vertical\">\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"name\" label=\"任务名称\" rules={[{ required: true, message: '请输入任务名称' }]}>\r\n                <Input placeholder=\"例如：每日订单同步\" />\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"platform\" label=\"目标平台\" rules={[{ required: true, message: '请选择平台' }]}>\r\n                <Select placeholder=\"请选择平台\">\r\n                  <Option value=\"all\">所有平台</Option>\r\n                  <Option value=\"tiktok\">TikTok</Option>\r\n                  <Option value=\"shopee\">Shopee</Option>\r\n                  <Option value=\"amazon\">Amazon</Option>\r\n                  <Option value=\"temu\">Temu</Option>\r\n                  <Option value=\"lazada\">Lazada</Option>\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"type\" label=\"任务类型\" rules={[{ required: true, message: '请选择任务类型' }]}>\r\n                <Select placeholder=\"请选择任务类型\">\r\n                  <Option value=\"sync\">数据同步</Option>\r\n                  <Option value=\"monitor\">监控任务</Option>\r\n                  <Option value=\"publish\">商品上架</Option>\r\n                  <Option value=\"analysis\">数据分析</Option>\r\n                  <Option value=\"optimize\">自动优化</Option>\r\n                  <Option value=\"finance\">财务对账</Option>\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"schedule\" label=\"调度规则\" rules={[{ required: true, message: '请输入调度规则' }]}>\r\n                <Input placeholder=\"例如: 0 2 * * * (每天凌晨2点)\" />\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n          <Form.Item name=\"description\" label=\"任务描述\">\r\n            <Input.TextArea rows={3} placeholder=\"请输入任务描述\" />\r\n          </Form.Item>\r\n          <Form.Item>\r\n            <Button type=\"primary\" htmlType=\"submit\" block size=\"large\" icon={<PlusOutlined />}>\r\n              添加任务\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title={<Space><CloudServerOutlined />购买云服务器</Space>}\r\n        open={cloudModalVisible}\r\n        onCancel={() => {\r\n          setCloudModalVisible(false);\r\n          setEstimatedPrice(0);\r\n          cloudForm.resetFields();\r\n        }}\r\n        width={800}\r\n        footer={null}\r\n      >\r\n        <Form form={cloudForm} onFinish={handleCreateCloudInstance} layout=\"vertical\">\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"name\" label=\"实例名称\" rules={[{ required: true, message: '请输入实例名称' }]}>\r\n                <Input placeholder=\"例如：TikTok-Proxy-01\" />\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"provider\" label=\"云服务商\" rules={[{ required: true, message: '请选择云服务商' }]}>\r\n                <Select placeholder=\"请选择云服务商\">\r\n                  {providers.map(provider => (\r\n                    <Option key={provider.code} value={provider.code}>\r\n                      {provider.name}\r\n                    </Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"region\" label=\"地域\" rules={[{ required: true, message: '请选择地域' }]}>\r\n                <Select placeholder=\"请选择地域\">\r\n                  {regions.map(region => (\r\n                    <Option key={region.regionId} value={region.regionId}>\r\n                      {region.regionName}\r\n                    </Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"instanceType\" label=\"实例规格\" rules={[{ required: true, message: '请选择实例规格' }]}>\r\n                <Select placeholder=\"请选择实例规格\">\r\n                  {instanceTypes.map(type => (\r\n                    <Option key={type.instanceTypeId} value={type.instanceTypeId}>\r\n                      {type.cpuCoreCount}核{type.memorySize}G - ¥{type.price}/小时\r\n                    </Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"imageId\" label=\"操作系统\" rules={[{ required: true, message: '请选择操作系统' }]}>\r\n                <Select placeholder=\"请选择操作系统\">\r\n                  {images.map(image => (\r\n                    <Option key={image.imageId} value={image.imageId}>\r\n                      {image.imageName}\r\n                    </Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"billingType\" label=\"计费方式\" rules={[{ required: true, message: '请选择计费方式' }]}>\r\n                <Select placeholder=\"请选择计费方式\">\r\n                  <Option value=\"prepaid\">包年包月</Option>\r\n                  <Option value=\"postpaid\">按量计费</Option>\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"systemDiskSize\" label=\"系统盘大小(GB)\" rules={[{ required: true, message: '请输入系统盘大小' }]}>\r\n                <InputNumber min={20} max={500} style={{ width: '100%' }} placeholder=\"请输入系统盘大小\" addonAfter=\"GB\" />\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"dataDiskSize\" label=\"数据盘大小(GB)\">\r\n                <InputNumber min={0} max={2000} style={{ width: '100%' }} placeholder=\"可选\" addonAfter=\"GB\" />\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Form.Item \r\n            name=\"period\" \r\n            label=\"购买时长(月)\" \r\n            dependencies={['billingType']}\r\n            rules={[({ getFieldValue }) => ({\r\n              required: getFieldValue('billingType') === 'prepaid', \r\n              message: '包年包月需要指定购买时长' \r\n            })]}\r\n          >\r\n            <Select placeholder=\"请选择购买时长\">\r\n              <Option value={1}>1个月</Option>\r\n              <Option value={3}>3个月</Option>\r\n              <Option value={6}>6个月</Option>\r\n              <Option value={12}>12个月</Option>\r\n            </Select>\r\n          </Form.Item>\r\n\r\n          <Form.Item name=\"password\" label=\"实例密码\">\r\n            <Input.Password placeholder=\"设置实例登录密码\" />\r\n          </Form.Item>\r\n\r\n          {estimatedPrice > 0 && (\r\n            <Card size=\"small\" style={{ marginBottom: 16, background: '#f0f8ff' }}>\r\n              <Row justify=\"center\" align=\"middle\">\r\n                <Col>\r\n                  <Statistic\r\n                    title=\"费用估算\"\r\n                    value={estimatedPrice}\r\n                    precision={2}\r\n                    prefix=\"¥\"\r\n                    suffix={cloudForm.getFieldValue('billingType') === 'prepaid' ? '总费用' : '/小时'}\r\n                    valueStyle={{ color: '#1890ff', fontSize: 28 }}\r\n                  />\r\n                </Col>\r\n              </Row>\r\n            </Card>\r\n          )}\r\n\r\n          <Form.Item>\r\n            <Button type=\"primary\" htmlType=\"submit\" size=\"large\" block icon={<CloudDownloadOutlined />}>\r\n              立即购买\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title={<Space><GlobalOutlined />创建WEB远程会话</Space>}\r\n        open={webRemoteModalVisible}\r\n        onCancel={() => setWebRemoteModalVisible(false)}\r\n        footer={null}\r\n      >\r\n        <Form form={webRemoteForm} onFinish={async (values) => {\r\n          try {\r\n            await cloudService.createRemoteSession('web-session', values.platform, 'local', 'admin');\r\n            message.success('WEB远程会话创建成功');\r\n            setWebRemoteModalVisible(false);\r\n            webRemoteForm.resetFields();\r\n            await loadClientStatus();\r\n          } catch (error) {\r\n            message.error('创建WEB远程会话失败');\r\n          }\r\n        }} layout=\"vertical\">\r\n          <Form.Item name=\"platform\" label=\"目标平台\" rules={[{ required: true }]}>\r\n            <Select placeholder=\"请选择平台\">\r\n              <Option value=\"tiktok\">TikTok</Option>\r\n              <Option value=\"shopee\">Shopee</Option>\r\n              <Option value=\"amazon\">Amazon</Option>\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item name=\"url\" label=\"起始URL\" rules={[{ required: true }]}>\r\n            <Input placeholder=\"请输入起始URL\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"userAgent\" label=\"User Agent\">\r\n            <Input placeholder=\"自定义User Agent（可选）\" />\r\n          </Form.Item>\r\n          <Form.Item>\r\n            <Button type=\"primary\" htmlType=\"submit\" block>\r\n              创建会话\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title={<Space><CloudServerOutlined />实例详情 - {selectedInstance?.name}</Space>}\r\n        open={instanceDetailModalVisible}\r\n        onCancel={() => {\r\n          setInstanceDetailModalVisible(false);\r\n          setSelectedInstance(null);\r\n          setInstanceMetrics(null);\r\n        }}\r\n        width={800}\r\n        footer={[\r\n          <Button key=\"close\" onClick={() => setInstanceDetailModalVisible(false)}>\r\n            关闭\r\n          </Button>\r\n        ]}\r\n      >\r\n        {selectedInstance && (\r\n          <Descriptions bordered column={2}>\r\n            <Descriptions.Item label=\"实例ID\">{selectedInstance.id}</Descriptions.Item>\r\n            <Descriptions.Item label=\"实例名称\">{selectedInstance.name}</Descriptions.Item>\r\n            <Descriptions.Item label=\"云服务商\">{selectedInstance.provider}</Descriptions.Item>\r\n            <Descriptions.Item label=\"地域\">{selectedInstance.region}</Descriptions.Item>\r\n            <Descriptions.Item label=\"状态\">\r\n              <Tag color={statusColor(selectedInstance.status)}>{selectedInstance.status}</Tag>\r\n            </Descriptions.Item>\r\n            <Descriptions.Item label=\"IP地址\">{selectedInstance.ipAddress || '未分配'}</Descriptions.Item>\r\n            <Descriptions.Item label=\"实例类型\">{selectedInstance.instanceType}</Descriptions.Item>\r\n            <Descriptions.Item label=\"创建时间\">{selectedInstance.createdTime}</Descriptions.Item>\r\n            <Descriptions.Item label=\"过期时间\">{selectedInstance.expiredTime || '按需计费'}</Descriptions.Item>\r\n          </Descriptions>\r\n        )}\r\n        \r\n        {instanceMetrics && (\r\n          <Card title=\"监控指标\" style={{ marginTop: 16 }}>\r\n            <Row gutter={16}>\r\n              <Col span={6}>\r\n                <Statistic title=\"CPU使用率\" value={instanceMetrics.cpu} suffix=\"%\" />\r\n              </Col>\r\n              <Col span={6}>\r\n                <Statistic title=\"内存使用率\" value={instanceMetrics.memory} suffix=\"%\" />\r\n              </Col>\r\n              <Col span={6}>\r\n                <Statistic title=\"磁盘使用率\" value={instanceMetrics.disk} suffix=\"%\" />\r\n              </Col>\r\n              <Col span={6}>\r\n                <Statistic title=\"网络入流量\" value={instanceMetrics.networkIn} suffix=\"KB/s\" />\r\n              </Col>\r\n            </Row>\r\n          </Card>\r\n        )}\r\n      </Modal>\r\n\r\n      <Drawer\r\n        title=\"客户端配置\"\r\n        placement=\"right\"\r\n        onClose={() => setConfigDrawerVisible(false)}\r\n        open={configDrawerVisible}\r\n        width={400}\r\n      >\r\n        <Alert\r\n          message=\"配置说明\"\r\n          description=\"客户端配置将影响所有平台操作的行为\"\r\n          type=\"info\"\r\n          showIcon\r\n          style={{ marginBottom: 16 }}\r\n        />\r\n        <Form layout=\"vertical\">\r\n          <Form.Item label=\"代理设置\">\r\n            <Switch checkedChildren=\"启用\" unCheckedChildren=\"禁用\" />\r\n          </Form.Item>\r\n          <Form.Item label=\"指纹保护\">\r\n            <Switch defaultChecked checkedChildren=\"启用\" unCheckedChildren=\"禁用\" />\r\n          </Form.Item>\r\n          <Form.Item label=\"时区\">\r\n            <Select defaultValue=\"Asia/Shanghai\" style={{ width: '100%' }}>\r\n              <Option value=\"Asia/Shanghai\">Asia/Shanghai (UTC+8)</Option>\r\n              <Option value=\"America/New_York\">America/New_York (UTC-5)</Option>\r\n              <Option value=\"Europe/London\">Europe/London (UTC+0)</Option>\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item label=\"语言\">\r\n            <Select defaultValue=\"zh-CN\" style={{ width: '100%' }}>\r\n              <Option value=\"zh-CN\">简体中文</Option>\r\n              <Option value=\"en-US\">English (US)</Option>\r\n              <Option value=\"ja-JP\">日本語</Option>\r\n            </Select>\r\n          </Form.Item>\r\n        </Form>\r\n      </Drawer>\r\n\r\n      <Drawer\r\n        title={`任务详情 - ${selectedTask?.name}`}\r\n        placement=\"right\"\r\n        onClose={() => setTaskDetailDrawerVisible(false)}\r\n        open={taskDetailDrawerVisible}\r\n        width={500}\r\n      >\r\n        {selectedTask && (\r\n          <div>\r\n            <Descriptions column={1} bordered>\r\n              <Descriptions.Item label=\"任务ID\">{selectedTask.id}</Descriptions.Item>\r\n              <Descriptions.Item label=\"任务名称\">{selectedTask.name}</Descriptions.Item>\r\n              <Descriptions.Item label=\"描述\">{selectedTask.description}</Descriptions.Item>\r\n              <Descriptions.Item label=\"平台\">{selectedTask.platform}</Descriptions.Item>\r\n              <Descriptions.Item label=\"类型\">{selectedTask.type}</Descriptions.Item>\r\n              <Descriptions.Item label=\"调度规则\">{selectedTask.schedule}</Descriptions.Item>\r\n              <Descriptions.Item label=\"状态\">\r\n                <Tag color={statusColor(selectedTask.status)}>{selectedTask.status}</Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"上次执行\">{selectedTask.lastRun || '-'}</Descriptions.Item>\r\n              <Descriptions.Item label=\"下次执行\">{selectedTask.nextRun || '-'}</Descriptions.Item>\r\n              <Descriptions.Item label=\"成功次数\">{selectedTask.successCount || 0}</Descriptions.Item>\r\n              <Descriptions.Item label=\"失败次数\">{selectedTask.errorCount || 0}</Descriptions.Item>\r\n            </Descriptions>\r\n            \r\n            {selectedTask.status === 'running' && (\r\n              <Card title=\"执行进度\" style={{ marginTop: 16 }}>\r\n                <Progress percent={selectedTask.progress} status=\"active\" />\r\n              </Card>\r\n            )}\r\n          </div>\r\n        )}\r\n      </Drawer>\r\n\r\n      <Drawer\r\n        title={`客户端详情 - ${selectedClient?.name}`}\r\n        placement=\"right\"\r\n        onClose={() => setClientDetailDrawerVisible(false)}\r\n        open={clientDetailDrawerVisible}\r\n        width={600}\r\n      >\r\n        {selectedClient && (\r\n          <div>\r\n            <Descriptions column={2} bordered>\r\n              <Descriptions.Item label=\"客户端ID\">{selectedClient.id}</Descriptions.Item>\r\n              <Descriptions.Item label=\"名称\">{selectedClient.name}</Descriptions.Item>\r\n              <Descriptions.Item label=\"IP地址\">{selectedClient.ip}</Descriptions.Item>\r\n              <Descriptions.Item label=\"端口\">{selectedClient.port}</Descriptions.Item>\r\n              <Descriptions.Item label=\"状态\">\r\n                <Tag color={selectedClient.status === 'online' ? 'green' : selectedClient.status === 'offline' ? 'orange' : 'red'}>\r\n                  {selectedClient.status === 'online' ? '在线' : selectedClient.status === 'offline' ? '离线' : '异常'}\r\n                </Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"平台\">{selectedClient.platform}</Descriptions.Item>\r\n              <Descriptions.Item label=\"版本\">{selectedClient.version}</Descriptions.Item>\r\n              <Descriptions.Item label=\"运行时间\">\r\n                {selectedClient.uptime > 0 ? `${Math.floor(selectedClient.uptime / 3600)}小时 ${Math.floor((selectedClient.uptime % 3600) / 60)}分钟` : '-'}\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"区域\">{selectedClient.region}</Descriptions.Item>\r\n              <Descriptions.Item label=\"分组\">{selectedClient.group}</Descriptions.Item>\r\n            </Descriptions>\r\n\r\n            <Card title=\"资源使用情况\" style={{ marginTop: 16 }}>\r\n              <Row gutter={16}>\r\n                <Col span={8}>\r\n                  <Card>\r\n                    <Statistic \r\n                      title=\"CPU使用率\" \r\n                      value={selectedClient.cpu} \r\n                      suffix=\"%\" \r\n                      valueStyle={{ color: selectedClient.cpu > 80 ? '#ff4d4f' : '#52c41a' }} \r\n                    />\r\n                    <Progress percent={selectedClient.cpu} status={selectedClient.cpu > 80 ? 'exception' : 'normal'} />\r\n                  </Card>\r\n                </Col>\r\n                <Col span={8}>\r\n                  <Card>\r\n                    <Statistic \r\n                      title=\"内存使用率\" \r\n                      value={selectedClient.memory} \r\n                      suffix=\"%\" \r\n                      valueStyle={{ color: selectedClient.memory > 80 ? '#ff4d4f' : '#52c41a' }} \r\n                    />\r\n                    <Progress percent={selectedClient.memory} status={selectedClient.memory > 80 ? 'exception' : 'normal'} />\r\n                  </Card>\r\n                </Col>\r\n                <Col span={8}>\r\n                  <Card>\r\n                    <Statistic \r\n                      title=\"磁盘使用率\" \r\n                      value={selectedClient.disk} \r\n                      suffix=\"%\" \r\n                      valueStyle={{ color: selectedClient.disk > 80 ? '#ff4d4f' : '#52c41a' }} \r\n                    />\r\n                    <Progress percent={selectedClient.disk} status={selectedClient.disk > 80 ? 'exception' : 'normal'} />\r\n                  </Card>\r\n                </Col>\r\n              </Row>\r\n            </Card>\r\n\r\n            <Card title=\"运行信息\" style={{ marginTop: 16 }}>\r\n              <Row gutter={16}>\r\n                <Col span={8}>\r\n                  <Statistic title=\"任务数量\" value={selectedClient.tasks} prefix={<ScheduleOutlined />} />\r\n                </Col>\r\n                <Col span={8}>\r\n                  <Statistic title=\"平台数量\" value={selectedClient.platforms} prefix={<ShopOutlined />} />\r\n                </Col>\r\n                <Col span={8}>\r\n                  <Statistic title=\"最后活跃\" value={new Date(selectedClient.lastSeen).toLocaleString()} prefix={<ClockCircleOutlined />} />\r\n                </Col>\r\n              </Row>\r\n            </Card>\r\n\r\n            <Card title=\"标签\" style={{ marginTop: 16 }}>\r\n              <Space wrap>\r\n                {selectedClient.tags.map((tag, index) => (\r\n                  <Tag key={index}>{tag}</Tag>\r\n                ))}\r\n              </Space>\r\n            </Card>\r\n\r\n            <Card title=\"操作\" style={{ marginTop: 16 }}>\r\n              <Space>\r\n                {selectedClient.status !== 'online' && (\r\n                  <Button \r\n                    type=\"primary\" \r\n                    icon={<PlayCircleOutlined />}\r\n                    onClick={() => connectToClientById(selectedClient.id)}\r\n                  >\r\n                    连接\r\n                  </Button>\r\n                )}\r\n                {selectedClient.status === 'online' && (\r\n                  <Button \r\n                    icon={<PauseCircleOutlined />}\r\n                    onClick={() => disconnectFromClient(selectedClient.id)}\r\n                  >\r\n                    断开连接\r\n                  </Button>\r\n                )}\r\n                <Button \r\n                  icon={<ReloadOutlined />}\r\n                  onClick={() => batchRestart()}\r\n                >\r\n                  重启\r\n                </Button>\r\n                <Button \r\n                  icon={<SettingOutlined />}\r\n                  onClick={() => message.info('客户端配置功能开发中')}\r\n                >\r\n                  配置\r\n                </Button>\r\n              </Space>\r\n            </Card>\r\n          </div>\r\n        )}\r\n      </Drawer>\r\n\r\n      <Modal\r\n        title=\"添加客户端组\"\r\n        open={clientGroupModalVisible}\r\n        onCancel={() => setClientGroupModalVisible(false)}\r\n        footer={null}\r\n      >\r\n        <Form form={groupForm} onFinish={createClientGroup} layout=\"vertical\">\r\n          <Form.Item name=\"name\" label=\"组名称\" rules={[{ required: true, message: '请输入组名称' }]}>\r\n            <Input placeholder=\"例如：生产组\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"description\" label=\"组描述\">\r\n            <Input.TextArea rows={3} placeholder=\"请输入组描述\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"color\" label=\"组颜色\">\r\n            <Select defaultValue=\"#1890ff\">\r\n              <Option value=\"#1890ff\">蓝色</Option>\r\n              <Option value=\"#52c41a\">绿色</Option>\r\n              <Option value=\"#faad14\">黄色</Option>\r\n              <Option value=\"#ff4d4f\">红色</Option>\r\n              <Option value=\"#722ed1\">紫色</Option>\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item>\r\n            <Button type=\"primary\" htmlType=\"submit\" block>\r\n              创建客户端组\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n    </div>\r\n  );\r\n};\r\n\r\nconst OperationAgentEnhanced = memo(OperationAgentEnhancedBase);\r\nOperationAgentEnhanced.displayName = 'OperationAgentEnhanced';\r\n\r\nexport default OperationAgentEnhanced;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/OperationAgentEnhanced.tsx"
    },
    "16": {
      "path": "/dashboard/operation-agent-enhanced",
      "file": "@/pages/OperationAgentEnhanced.tsx",
      "parentId": "4",
      "id": "16",
      "absPath": "/dashboard/operation-agent-enhanced",
      "__content": "/**\r\n * 增强版Operation-Agent管理界面 - 性能优化版本\r\n * \r\n * 性能优化措施：\r\n * 1. 使用 React.memo 优化组件渲染\r\n * 2. 使用 useMemo 缓存计算结果\r\n * 3. 使用 useCallback 缓存回调函数\r\n * 4. 使用虚拟滚动优化长列表\r\n * 5. 减少不必要的重新渲染\r\n * 6. 优化状态更新\r\n */\r\n\r\nimport {\r\n  useState,\r\n  useEffect,\r\n  useCallback,\r\n  useMemo,\r\n  memo,\r\n  Card,\r\n  Row,\r\n  Col,\r\n  Statistic,\r\n  Table,\r\n  Button,\r\n  Modal,\r\n  Form,\r\n  Input,\r\n  InputNumber,\r\n  Select,\r\n  Switch,\r\n  Tabs,\r\n  Tag,\r\n  message,\r\n  Space,\r\n  Progress,\r\n  Badge,\r\n  Tooltip,\r\n  Popconfirm,\r\n  Timeline,\r\n  Descriptions,\r\n  Alert,\r\n  List,\r\n  Avatar,\r\n  Drawer,\r\n  Result,\r\n  Empty,\r\n  Typography,\r\n  Collapse,\r\n  Checkbox,\r\n  PlayCircleOutlined,\r\n  PauseCircleOutlined,\r\n  PlusOutlined,\r\n  SyncOutlined,\r\n  EyeOutlined,\r\n  DeleteOutlined,\r\n  ReloadOutlined,\r\n  CloudServerOutlined,\r\n  ScheduleOutlined,\r\n  SafetyCertificateOutlined,\r\n  DesktopOutlined,\r\n  GlobalOutlined,\r\n  CloudDownloadOutlined,\r\n  CheckCircleOutlined,\r\n  CloseCircleOutlined,\r\n  ExclamationCircleOutlined,\r\n  InfoCircleOutlined,\r\n  SettingOutlined,\r\n  HistoryOutlined,\r\n  FileTextOutlined,\r\n  MonitorOutlined,\r\n  ShopOutlined,\r\n  ShoppingCartOutlined,\r\n  DollarOutlined,\r\n  UserOutlined,\r\n  LockOutlined,\r\n  UnlockOutlined,\r\n  LinkOutlined,\r\n  ClockCircleOutlined,\r\n  Option,\r\n  TabPane,\r\n  Title,\r\n  Text,\r\n  Paragraph,\r\n  FC,\r\n} from '@/imports';\r\nimport { lightweightClientService } from '../services/lightweightClientService';\r\nimport { cloudService, CreateInstanceRequest, CloudInstance, CloudProvider, CloudRegion, InstanceType, CloudImage, InstanceMetrics } from '../services/cloud-service';\r\nimport { \r\n  CloudControlLayerService,\r\n  ControlCommand,\r\n  LayerStatus\r\n} from '../services/cloud-control-layer';\r\n\r\ninterface ClientStatus {\r\n  platform: string;\r\n  version: string;\r\n  uptime: number;\r\n  platforms: {\r\n    supported: string[];\r\n    loggedIn: string[];\r\n    total: number;\r\n  };\r\n  tasks: {\r\n    total: number;\r\n    enabled: number;\r\n    disabled: number;\r\n  };\r\n  connections: {\r\n    active: number;\r\n    max: number;\r\n    webSocket: number;\r\n    http: string;\r\n  };\r\n  timestamp: number;\r\n}\r\n\r\ninterface PlatformInfo {\r\n  name: string;\r\n  status: 'connected' | 'disconnected' | 'error';\r\n  lastSync: string;\r\n  orderCount: number;\r\n  productCount: number;\r\n  loginTime?: string;\r\n  cookies?: boolean;\r\n  proxy?: string;\r\n}\r\n\r\ninterface TaskInfo {\r\n  id: string;\r\n  name: string;\r\n  description?: string;\r\n  platform: string;\r\n  type: string;\r\n  schedule: string;\r\n  enabled: boolean;\r\n  lastRun?: string;\r\n  nextRun?: string;\r\n  status: 'running' | 'success' | 'failed' | 'idle';\r\n  progress?: number;\r\n  result?: string;\r\n  errorCount?: number;\r\n  successCount?: number;\r\n}\r\n\r\ninterface WebRemoteSession {\r\n  id: string;\r\n  platform: string;\r\n  status: 'ready' | 'active' | 'error' | 'closed';\r\n  currentUrl: string;\r\n  title: string;\r\n  lastActivity: string;\r\n}\r\n\r\ninterface OperationLog {\r\n  id: string;\r\n  timestamp: string;\r\n  level: 'info' | 'success' | 'warning' | 'error';\r\n  operation: string;\r\n  platform?: string;\r\n  details: string;\r\n  duration?: number;\r\n}\r\n\r\ninterface PlatformLoginFormValues {\r\n  platform: string;\r\n  username: string;\r\n  password: string;\r\n  twoFactorCode?: string;\r\n}\r\n\r\ninterface TaskFormValues {\r\n  name: string;\r\n  description?: string;\r\n  platform: string;\r\n  type: string;\r\n  schedule: string;\r\n}\r\n\r\ninterface CloudInstanceFormValues {\r\n  name: string;\r\n  provider: string;\r\n  region: string;\r\n  instanceType: string;\r\n  imageId: string;\r\n  systemDiskSize: number;\r\n  dataDiskSize?: number;\r\n  billingType: 'prepaid' | 'postpaid';\r\n  period?: number;\r\n  password?: string;\r\n  keyPairName?: string;\r\n}\r\n\r\ninterface WebRemoteFormValues {\r\n  platform: string;\r\n  url: string;\r\n  userAgent?: string;\r\n}\r\n\r\ninterface ClientInfo {\r\n  id: string;\r\n  name: string;\r\n  ip: string;\r\n  port: number;\r\n  status: 'online' | 'offline' | 'connecting' | 'error';\r\n  version: string;\r\n  uptime: number;\r\n  lastSeen: number;\r\n  cpu: number;\r\n  memory: number;\r\n  disk: number;\r\n  platform: string;\r\n  tasks: number;\r\n  platforms: number;\r\n  region: string;\r\n  group: string;\r\n  tags: string[];\r\n}\r\n\r\ninterface ClientGroup {\r\n  id: string;\r\n  name: string;\r\n  description: string;\r\n  clientIds: string[];\r\n  color: string;\r\n}\r\n\r\ninterface ClientStats {\r\n  total: number;\r\n  online: number;\r\n  offline: number;\r\n  error: number;\r\n  groups: number;\r\n  totalTasks: number;\r\n  totalPlatforms: number;\r\n}\r\n\r\nconst logLevelIcon = (level: string) => {\r\n  switch (level) {\r\n    case 'success': return <CheckCircleOutlined style={{ color: '#52c41a' }} />;\r\n    case 'warning': return <ExclamationCircleOutlined style={{ color: '#faad14' }} />;\r\n    case 'error': return <CloseCircleOutlined style={{ color: '#ff4d4f' }} />;\r\n    default: return <InfoCircleOutlined style={{ color: '#1890ff' }} />;\r\n  }\r\n};\r\n\r\nconst statusColor = (status: string) => {\r\n  const colorMap: Record<string, string> = {\r\n    'connected': 'green',\r\n    'disconnected': 'orange',\r\n    'error': 'red',\r\n    'running': 'blue',\r\n    'success': 'green',\r\n    'failed': 'red',\r\n    'idle': 'default',\r\n    'stopped': 'red',\r\n    'starting': 'blue',\r\n    'stopping': 'orange',\r\n    'ready': 'blue',\r\n    'active': 'green',\r\n    'closed': 'default'\r\n  };\r\n  return colorMap[status] || 'default';\r\n};\r\n\r\nconst OperationAgentEnhancedBase: FC = () => {\r\n  const [clientStatus, setClientStatus] = useState<ClientStatus | null>(null);\r\n  const [platforms, setPlatforms] = useState<PlatformInfo[]>([]);\r\n  const [tasks, setTasks] = useState<TaskInfo[]>([]);\r\n  const [cloudInstances, setCloudInstances] = useState<CloudInstance[]>([]);\r\n  const [webSessions, setWebSessions] = useState<WebRemoteSession[]>([]);\r\n  const [connected, setConnected] = useState(false);\r\n  const [loading, setLoading] = useState(false);\r\n  const [loginModalVisible, setLoginModalVisible] = useState(false);\r\n  const [taskModalVisible, setTaskModalVisible] = useState(false);\r\n  const [cloudModalVisible, setCloudModalVisible] = useState(false);\r\n  const [webRemoteModalVisible, setWebRemoteModalVisible] = useState(false);\r\n  const [form] = Form.useForm();\r\n  const [taskForm] = Form.useForm();\r\n  const [cloudForm] = Form.useForm();\r\n  const [webRemoteForm] = Form.useForm();\r\n  const [instanceDetailModalVisible, setInstanceDetailModalVisible] = useState(false);\r\n  const [selectedInstance, setSelectedInstance] = useState<CloudInstance | null>(null);\r\n  const [instanceMetrics, setInstanceMetrics] = useState<InstanceMetrics | null>(null);\r\n  const [providers, setProviders] = useState<CloudProvider[]>([]);\r\n  const [regions, setRegions] = useState<CloudRegion[]>([]);\r\n  const [instanceTypes, setInstanceTypes] = useState<InstanceType[]>([]);\r\n  const [images, setImages] = useState<CloudImage[]>([]);\r\n  const [estimatedPrice, setEstimatedPrice] = useState<number>(0);\r\n  const [operationLogs, setOperationLogs] = useState<OperationLog[]>([]);\r\n  const [layerStatus, setLayerStatus] = useState<LayerStatus[]>([]);\r\n  const [configDrawerVisible, setConfigDrawerVisible] = useState(false);\r\n  const [taskDetailDrawerVisible, setTaskDetailDrawerVisible] = useState(false);\r\n  const [selectedTask, setSelectedTask] = useState<TaskInfo | null>(null);\r\n  \r\n  // 多客户端管理状态\r\n  const [clients, setClients] = useState<ClientInfo[]>([]);\r\n  const [clientGroups, setClientGroups] = useState<ClientGroup[]>([]);\r\n  const [clientStats, setClientStats] = useState<ClientStats>({\r\n    total: 0,\r\n    online: 0,\r\n    offline: 0,\r\n    error: 0,\r\n    groups: 0,\r\n    totalTasks: 0,\r\n    totalPlatforms: 0\r\n  });\r\n  const [selectedClient, setSelectedClient] = useState<ClientInfo | null>(null);\r\n  const [clientDetailDrawerVisible, setClientDetailDrawerVisible] = useState(false);\r\n  const [clientGroupModalVisible, setClientGroupModalVisible] = useState(false);\r\n  const [selectedGroup, setSelectedGroup] = useState<ClientGroup | null>(null);\r\n  const [clientForm] = Form.useForm();\r\n  const [groupForm] = Form.useForm();\r\n  const [selectedClientIds, setSelectedClientIds] = useState<string[]>([]);\r\n  const [isSelectAll, setIsSelectAll] = useState(false);\r\n\r\n  const addOperationLog = useCallback((level: OperationLog['level'], operation: string, details: string, platform?: string, duration?: number) => {\r\n    const newLog: OperationLog = {\r\n      id: `log-${Date.now()}`,\r\n      timestamp: new Date().toLocaleString(),\r\n      level,\r\n      operation,\r\n      platform,\r\n      details,\r\n      duration\r\n    };\r\n    setOperationLogs(prev => [newLog, ...prev].slice(0, 100));\r\n  }, []);\r\n\r\n  const connectToClient = useCallback(async () => {\r\n    setLoading(true);\r\n    try {\r\n      await lightweightClientService.connectToClient('localhost', 8080);\r\n      setConnected(true);\r\n      message.success('客户端连接成功');\r\n      addOperationLog('success', '客户端连接', '成功连接到本地客户端');\r\n      await loadClientStatus();\r\n    } catch (error) {\r\n      message.error('客户端连接失败');\r\n      addOperationLog('error', '客户端连接', `连接失败: ${error}`);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  }, [addOperationLog]);\r\n\r\n  const loadClientStatus = useCallback(async () => {\r\n    if (!connected) return;\r\n    \r\n    try {\r\n      const mockStatus: ClientStatus = {\r\n        platform: 'windows',\r\n        version: '2.0.0',\r\n        uptime: 3600,\r\n        platforms: {\r\n          supported: ['tiktok', 'shopee', 'amazon', 'temu', 'lazada'],\r\n          loggedIn: ['tiktok', 'shopee'],\r\n          total: 5\r\n        },\r\n        tasks: {\r\n          total: 8,\r\n          enabled: 5,\r\n          disabled: 3\r\n        },\r\n        connections: {\r\n          active: 2,\r\n          max: 10,\r\n          webSocket: 1,\r\n          http: 'active'\r\n        },\r\n        timestamp: Date.now()\r\n      };\r\n      \r\n      setClientStatus(mockStatus);\r\n      \r\n      const mockPlatforms: PlatformInfo[] = [\r\n        { name: 'TikTok', status: 'connected', lastSync: '2024-01-20 10:30:00', orderCount: 156, productCount: 89, loginTime: '2024-01-20 08:00:00', cookies: true, proxy: 'socks5://proxy1.example.com:1080' },\r\n        { name: 'Shopee', status: 'connected', lastSync: '2024-01-20 10:25:00', orderCount: 234, productCount: 167, loginTime: '2024-01-20 08:15:00', cookies: true, proxy: 'socks5://proxy2.example.com:1080' },\r\n        { name: 'Amazon', status: 'disconnected', lastSync: '2024-01-19 15:20:00', orderCount: 89, productCount: 45, cookies: false },\r\n        { name: 'Temu', status: 'disconnected', lastSync: '2024-01-18 09:15:00', orderCount: 0, productCount: 0, cookies: false },\r\n        { name: 'Lazada', status: 'error', lastSync: '2024-01-17 14:30:00', orderCount: 12, productCount: 8, cookies: true }\r\n      ];\r\n      \r\n      setPlatforms(mockPlatforms);\r\n      \r\n      const mockTasks: TaskInfo[] = [\r\n        { id: '1', name: '每日订单同步', description: '每天凌晨同步所有平台订单', platform: 'all', type: 'sync', schedule: '0 2 * * *', enabled: true, lastRun: '2024-01-20 02:00:00', nextRun: '2024-01-21 02:00:00', status: 'success', progress: 100, successCount: 156, errorCount: 0 },\r\n        { id: '2', name: '价格监控', description: '监控商品价格变化', platform: 'all', type: 'monitor', schedule: '*/15 * * * *', enabled: true, lastRun: '2024-01-20 10:15:00', nextRun: '2024-01-20 10:30:00', status: 'running', progress: 45, successCount: 23, errorCount: 2 },\r\n        { id: '3', name: '库存同步', description: '同步商品库存信息', platform: 'tiktok', type: 'sync', schedule: '0 */6 * * *', enabled: false, lastRun: '2024-01-19 18:00:00', nextRun: '2024-01-20 00:00:00', status: 'idle', progress: 0 },\r\n        { id: '4', name: '商品上架', description: '自动上架采集的商品', platform: 'shopee', type: 'publish', schedule: '0 9 * * *', enabled: true, lastRun: '2024-01-20 09:00:00', nextRun: '2024-01-21 09:00:00', status: 'success', progress: 100, successCount: 15, errorCount: 1 },\r\n        { id: '5', name: '评价监控', description: '监控商品评价变化', platform: 'amazon', type: 'monitor', schedule: '0 8,20 * * *', enabled: true, lastRun: '2024-01-20 08:00:00', nextRun: '2024-01-20 20:00:00', status: 'success', progress: 100, successCount: 45, errorCount: 0 },\r\n        { id: '6', name: '竞品分析', description: '分析竞争对手价格和销量', platform: 'all', type: 'analysis', schedule: '0 3 * * 1', enabled: false, lastRun: '2024-01-15 03:00:00', nextRun: '2024-01-22 03:00:00', status: 'idle', progress: 0 },\r\n        { id: '7', name: '广告优化', description: '自动优化广告出价', platform: 'tiktok', type: 'optimize', schedule: '*/30 * * * *', enabled: true, lastRun: '2024-01-20 10:00:00', nextRun: '2024-01-20 10:30:00', status: 'running', progress: 60, successCount: 8, errorCount: 0 },\r\n        { id: '8', name: '财务对账', description: '每日财务数据对账', platform: 'all', type: 'finance', schedule: '0 4 * * *', enabled: true, lastRun: '2024-01-20 04:00:00', nextRun: '2024-01-21 04:00:00', status: 'success', progress: 100, successCount: 1, errorCount: 0 }\r\n      ];\r\n      \r\n      setTasks(mockTasks);\r\n      \r\n      const mockCloudInstances: CloudInstance[] = [\r\n        { id: 'i-1234567890abcdef0', name: 'TikTok-Proxy-01', provider: 'aliyun', region: 'cn-hangzhou', status: 'running', ipAddress: '47.100.100.100', instanceType: 'ecs.g6.large', createdTime: '2024-01-15 10:00:00', expiredTime: '2024-02-15 10:00:00' },\r\n        { id: 'i-0987654321fedcba0', name: 'Shopee-Proxy-01', provider: 'tencent', region: 'ap-guangzhou', status: 'stopped', ipAddress: '118.100.100.100', instanceType: 'S2.SMALL1', createdTime: '2024-01-10 14:30:00' },\r\n        { id: 'i-abcdef1234567890', name: 'Amazon-Proxy-01', provider: 'aliyun', region: 'us-west-1', status: 'running', ipAddress: '52.100.100.100', instanceType: 'ecs.g6.xlarge', createdTime: '2024-01-12 09:00:00', expiredTime: '2024-02-12 09:00:00' }\r\n      ];\r\n      \r\n      setCloudInstances(mockCloudInstances);\r\n      \r\n      const mockWebSessions: WebRemoteSession[] = [\r\n        { id: 'web-1234567890', platform: 'tiktok', status: 'active', currentUrl: 'https://seller.tiktok.com/orders', title: 'TikTok Seller Center - Orders', lastActivity: '2024-01-20 10:25:00' },\r\n        { id: 'web-0987654321', platform: 'shopee', status: 'ready', currentUrl: 'https://seller.shopee.com', title: 'Shopee Seller Center', lastActivity: '2024-01-20 09:45:00' }\r\n      ];\r\n      \r\n      setWebSessions(mockWebSessions);\r\n      \r\n      const mockLayerStatus: LayerStatus[] = [\r\n        { layer: 'API模拟层', available: true, latency: 120, lastUsed: Date.now() - 300000, errorCount: 2, successRate: 0.98 },\r\n        { layer: 'WEB远程控制层', available: true, latency: 350, lastUsed: Date.now() - 600000, errorCount: 5, successRate: 0.95 },\r\n        { layer: '远程桌面层', available: false, latency: 0, lastUsed: 0, errorCount: 0, successRate: 0 },\r\n        { layer: '云服务商API层', available: true, latency: 200, lastUsed: Date.now() - 900000, errorCount: 1, successRate: 0.99 }\r\n      ];\r\n      \r\n      setLayerStatus(mockLayerStatus);\r\n      \r\n    } catch (error) {\r\n      message.error('加载状态失败');\r\n      addOperationLog('error', '状态加载', `加载失败: ${error}`);\r\n    }\r\n  }, [connected, addOperationLog]);\r\n\r\n  const handlePlatformLogin = useCallback(async (values: PlatformLoginFormValues) => {\r\n    try {\r\n      addOperationLog('info', '平台登录', `开始登录 ${values.platform}`, values.platform);\r\n      \r\n      const command: ControlCommand = {\r\n        type: 'api',\r\n        target: values.platform,\r\n        action: 'login',\r\n        parameters: { username: values.username, password: values.password, twoFactorCode: values.twoFactorCode },\r\n        priority: 'high'\r\n      };\r\n      \r\n      const result = await CloudControlLayerService.executeCommand(command);\r\n      \r\n      if (result.success) {\r\n        message.success(`${values.platform} 登录成功`);\r\n        addOperationLog('success', '平台登录', `${values.platform} 登录成功`, values.platform, result.duration);\r\n        setLoginModalVisible(false);\r\n        form.resetFields();\r\n        await loadClientStatus();\r\n      } else {\r\n        message.error(`登录失败: ${result.error}`);\r\n        addOperationLog('error', '平台登录', `${values.platform} 登录失败: ${result.error}`, values.platform);\r\n      }\r\n    } catch (error) {\r\n      message.error('登录失败');\r\n      addOperationLog('error', '平台登录', `登录异常: ${error}`, values.platform);\r\n    }\r\n  }, [addOperationLog, form, loadClientStatus]);\r\n\r\n  const handleAddTask = useCallback(async (values: TaskFormValues) => {\r\n    try {\r\n      addOperationLog('info', '任务创建', `创建任务: ${values.name}`, values.platform);\r\n      \r\n      const newTask: TaskInfo = {\r\n        id: `task-${Date.now()}`,\r\n        name: values.name,\r\n        description: values.description,\r\n        platform: values.platform,\r\n        type: values.type,\r\n        schedule: values.schedule,\r\n        enabled: true,\r\n        status: 'idle',\r\n        progress: 0\r\n      };\r\n      \r\n      setTasks(prev => [...prev, newTask]);\r\n      message.success('任务添加成功');\r\n      addOperationLog('success', '任务创建', `任务 ${values.name} 创建成功`, values.platform);\r\n      setTaskModalVisible(false);\r\n      taskForm.resetFields();\r\n    } catch (error) {\r\n      message.error('任务添加失败');\r\n      addOperationLog('error', '任务创建', `任务创建失败: ${error}`);\r\n    }\r\n  }, [addOperationLog, taskForm]);\r\n\r\n  const executeTask = useCallback(async (taskId: string) => {\r\n    try {\r\n      const task = tasks.find(t => t.id === taskId);\r\n      if (!task) return;\r\n      \r\n      addOperationLog('info', '任务执行', `开始执行任务: ${task.name}`, task.platform);\r\n      \r\n      setTasks(prev => prev.map(t => \r\n        t.id === taskId ? { ...t, status: 'running' as const, progress: 0 } : t\r\n      ));\r\n      \r\n      const command: ControlCommand = {\r\n        type: 'api',\r\n        target: task.platform,\r\n        action: task.type,\r\n        parameters: { taskId },\r\n        priority: 'high'\r\n      };\r\n      \r\n      const result = await CloudControlLayerService.executeCommand(command);\r\n      \r\n      if (result.success) {\r\n        setTasks(prev => prev.map(t => \r\n          t.id === taskId ? { \r\n            ...t, \r\n            status: 'success' as const, \r\n            progress: 100,\r\n            lastRun: new Date().toLocaleString(),\r\n            successCount: (t.successCount || 0) + 1\r\n          } : t\r\n        ));\r\n        \r\n        message.success('任务执行成功');\r\n        addOperationLog('success', '任务执行', `任务 ${task.name} 执行成功`, task.platform, result.duration);\r\n      } else {\r\n        setTasks(prev => prev.map(t => \r\n          t.id === taskId ? { \r\n            ...t, \r\n            status: 'failed' as const,\r\n            errorCount: (t.errorCount || 0) + 1\r\n          } : t\r\n        ));\r\n        \r\n        message.error(`任务执行失败: ${result.error}`);\r\n        addOperationLog('error', '任务执行', `任务 ${task.name} 执行失败: ${result.error}`, task.platform);\r\n      }\r\n    } catch (error) {\r\n      message.error('任务执行失败');\r\n      addOperationLog('error', '任务执行', `任务执行异常: ${error}`);\r\n    }\r\n  }, [tasks, addOperationLog]);\r\n\r\n  const toggleTask = useCallback(async (taskId: string, enabled: boolean) => {\r\n    try {\r\n      setTasks(prev => prev.map(t => \r\n        t.id === taskId ? { ...t, enabled } : t\r\n      ));\r\n      \r\n      message.success(`任务已${enabled ? '启用' : '禁用'}`);\r\n      addOperationLog('info', '任务状态', `任务 ${enabled ? '启用' : '禁用'}`);\r\n    } catch (error) {\r\n      message.error('操作失败');\r\n    }\r\n  }, [addOperationLog]);\r\n\r\n  const loadCloudData = useCallback(async () => {\r\n    try {\r\n      setProviders([\r\n        { name: '阿里云', code: 'aliyun', description: '阿里云计算服务' },\r\n        { name: '腾讯云', code: 'tencent', description: '腾讯云计算服务' },\r\n        { name: 'AWS', code: 'aws', description: 'Amazon Web Services' }\r\n      ]);\r\n\r\n      setRegions([\r\n        { regionId: 'cn-hangzhou', regionName: '华东1（杭州）', localName: '杭州' },\r\n        { regionId: 'ap-guangzhou', regionName: '华南1（广州）', localName: '广州' },\r\n        { regionId: 'cn-beijing', regionName: '华北1（北京）', localName: '北京' },\r\n        { regionId: 'us-west-1', regionName: '美国西部1（硅谷）', localName: '硅谷' },\r\n        { regionId: 'ap-southeast-1', regionName: '东南亚1（新加坡）', localName: '新加坡' }\r\n      ]);\r\n\r\n      setInstanceTypes([\r\n        { instanceTypeId: 'ecs.g6.large', instanceTypeFamily: 'g6', cpuCoreCount: 2, memorySize: 4, gpuAmount: 0, price: 0.12 },\r\n        { instanceTypeId: 'ecs.g6.xlarge', instanceTypeFamily: 'g6', cpuCoreCount: 4, memorySize: 8, gpuAmount: 0, price: 0.24 },\r\n        { instanceTypeId: 'ecs.c6.large', instanceTypeFamily: 'c6', cpuCoreCount: 2, memorySize: 4, gpuAmount: 0, price: 0.10 },\r\n        { instanceTypeId: 'S2.SMALL1', instanceTypeFamily: 'S2', cpuCoreCount: 1, memorySize: 2, gpuAmount: 0, price: 0.08 },\r\n        { instanceTypeId: 'S2.MEDIUM2', instanceTypeFamily: 'S2', cpuCoreCount: 2, memorySize: 4, gpuAmount: 0, price: 0.16 }\r\n      ]);\r\n\r\n      setImages([\r\n        { imageId: 'ubuntu_20_04', imageName: 'Ubuntu 20.04', osType: 'linux', platform: 'Ubuntu', description: 'Ubuntu 20.04 LTS' },\r\n        { imageId: 'centos_7_9', imageName: 'CentOS 7.9', osType: 'linux', platform: 'CentOS', description: 'CentOS 7.9' },\r\n        { imageId: 'windows_2019', imageName: 'Windows Server 2019', osType: 'windows', platform: 'Windows', description: 'Windows Server 2019' }\r\n      ]);\r\n    } catch (error) {\r\n      console.error('加载云服务数据失败:', error);\r\n    }\r\n  }, []);\r\n\r\n  const handleCreateCloudInstance = useCallback(async (values: CloudInstanceFormValues) => {\r\n    try {\r\n      addOperationLog('info', '云服务器创建', `开始创建云服务器: ${values.name}`);\r\n      \r\n      const createRequest: CreateInstanceRequest = {\r\n        name: values.name,\r\n        provider: values.provider,\r\n        region: values.region,\r\n        instanceType: values.instanceType,\r\n        imageId: values.imageId,\r\n        systemDiskSize: values.systemDiskSize || 40,\r\n        dataDiskSize: values.dataDiskSize,\r\n        billingType: values.billingType,\r\n        period: values.period,\r\n        password: values.password,\r\n        keyPairName: values.keyPairName\r\n      };\r\n\r\n      const instance = await cloudService.createInstance(createRequest);\r\n      \r\n      message.success(`云服务器创建成功: ${instance.name}`);\r\n      addOperationLog('success', '云服务器创建', `云服务器 ${instance.name} 创建成功`);\r\n      setCloudModalVisible(false);\r\n      cloudForm.resetFields();\r\n      setEstimatedPrice(0);\r\n      await loadClientStatus();\r\n    } catch (error) {\r\n      message.error('创建云服务器失败');\r\n      addOperationLog('error', '云服务器创建', `创建失败: ${error}`);\r\n    }\r\n  }, [addOperationLog, cloudForm, loadClientStatus]);\r\n\r\n  const syncPlatform = useCallback(async (platformName: string) => {\r\n    try {\r\n      addOperationLog('info', '平台同步', `开始同步 ${platformName} 数据`, platformName);\r\n      \r\n      const command: ControlCommand = {\r\n        type: 'api',\r\n        target: platformName.toLowerCase(),\r\n        action: 'sync',\r\n        parameters: {},\r\n        priority: 'high'\r\n      };\r\n      \r\n      const result = await CloudControlLayerService.executeCommand(command);\r\n      \r\n      if (result.success) {\r\n        message.success(`${platformName} 同步成功`);\r\n        addOperationLog('success', '平台同步', `${platformName} 同步成功`, platformName, result.duration);\r\n        await loadClientStatus();\r\n      } else {\r\n        message.error(`同步失败: ${result.error}`);\r\n        addOperationLog('error', '平台同步', `${platformName} 同步失败: ${result.error}`, platformName);\r\n      }\r\n    } catch (error) {\r\n      message.error('同步失败');\r\n      addOperationLog('error', '平台同步', `同步异常: ${error}`, platformName);\r\n    }\r\n  }, [addOperationLog, loadClientStatus]);\r\n\r\n  const viewTaskDetail = useCallback((task: TaskInfo) => {\r\n    setSelectedTask(task);\r\n    setTaskDetailDrawerVisible(true);\r\n  }, []);\r\n\r\n  const viewInstanceDetail = useCallback(async (instance: CloudInstance) => {\r\n    try {\r\n      setSelectedInstance(instance);\r\n      \r\n      const metrics = await cloudService.getInstanceMetrics(\r\n        instance.id,\r\n        instance.provider,\r\n        instance.region\r\n      );\r\n      setInstanceMetrics(metrics);\r\n      \r\n      setInstanceDetailModalVisible(true);\r\n    } catch (error) {\r\n      message.error('获取实例详情失败');\r\n    }\r\n  }, []);\r\n\r\n  // 多客户端管理函数\r\n  const loadClients = useCallback(async () => {\r\n    try {\r\n      const mockClients: ClientInfo[] = [\r\n        {\r\n          id: 'client-1',\r\n          name: 'TikTok-Proxy-01',\r\n          ip: '192.168.1.100',\r\n          port: 8080,\r\n          status: 'online',\r\n          version: '2.0.0',\r\n          uptime: 3600,\r\n          lastSeen: Date.now(),\r\n          cpu: 30,\r\n          memory: 45,\r\n          disk: 60,\r\n          platform: 'windows',\r\n          tasks: 8,\r\n          platforms: 5,\r\n          region: '华东',\r\n          group: '生产组',\r\n          tags: ['tiktok', 'proxy', 'production']\r\n        },\r\n        {\r\n          id: 'client-2',\r\n          name: 'Shopee-Proxy-01',\r\n          ip: '192.168.1.101',\r\n          port: 8080,\r\n          status: 'online',\r\n          version: '2.0.0',\r\n          uptime: 7200,\r\n          lastSeen: Date.now(),\r\n          cpu: 25,\r\n          memory: 40,\r\n          disk: 55,\r\n          platform: 'linux',\r\n          tasks: 6,\r\n          platforms: 4,\r\n          region: '华南',\r\n          group: '生产组',\r\n          tags: ['shopee', 'proxy', 'production']\r\n        },\r\n        {\r\n          id: 'client-3',\r\n          name: 'Amazon-Proxy-01',\r\n          ip: '192.168.1.102',\r\n          port: 8080,\r\n          status: 'offline',\r\n          version: '1.9.0',\r\n          uptime: 0,\r\n          lastSeen: Date.now() - 3600000,\r\n          cpu: 0,\r\n          memory: 0,\r\n          disk: 0,\r\n          platform: 'windows',\r\n          tasks: 0,\r\n          platforms: 0,\r\n          region: '美国',\r\n          group: '测试组',\r\n          tags: ['amazon', 'proxy', 'test']\r\n        },\r\n        {\r\n          id: 'client-4',\r\n          name: 'Test-Client-01',\r\n          ip: '192.168.1.103',\r\n          port: 8080,\r\n          status: 'error',\r\n          version: '1.8.0',\r\n          uptime: 1800,\r\n          lastSeen: Date.now() - 600000,\r\n          cpu: 80,\r\n          memory: 90,\r\n          disk: 95,\r\n          platform: 'linux',\r\n          tasks: 10,\r\n          platforms: 3,\r\n          region: '华东',\r\n          group: '测试组',\r\n          tags: ['test', 'development']\r\n        },\r\n        {\r\n          id: 'client-5',\r\n          name: 'Backup-Proxy-01',\r\n          ip: '192.168.1.104',\r\n          port: 8080,\r\n          status: 'online',\r\n          version: '2.0.0',\r\n          uptime: 10800,\r\n          lastSeen: Date.now(),\r\n          cpu: 15,\r\n          memory: 30,\r\n          disk: 40,\r\n          platform: 'windows',\r\n          tasks: 4,\r\n          platforms: 2,\r\n          region: '华北',\r\n          group: '备份组',\r\n          tags: ['backup', 'proxy']\r\n        }\r\n      ];\r\n\r\n      const mockGroups: ClientGroup[] = [\r\n        {\r\n          id: 'group-1',\r\n          name: '生产组',\r\n          description: '生产环境客户端',\r\n          clientIds: ['client-1', 'client-2'],\r\n          color: '#52c41a'\r\n        },\r\n        {\r\n          id: 'group-2',\r\n          name: '测试组',\r\n          description: '测试环境客户端',\r\n          clientIds: ['client-3', 'client-4'],\r\n          color: '#1890ff'\r\n        },\r\n        {\r\n          id: 'group-3',\r\n          name: '备份组',\r\n          description: '备份环境客户端',\r\n          clientIds: ['client-5'],\r\n          color: '#faad14'\r\n        }\r\n      ];\r\n\r\n      setClients(mockClients);\r\n      setClientGroups(mockGroups);\r\n\r\n      // 计算统计数据\r\n      const stats: ClientStats = {\r\n        total: mockClients.length,\r\n        online: mockClients.filter(c => c.status === 'online').length,\r\n        offline: mockClients.filter(c => c.status === 'offline').length,\r\n        error: mockClients.filter(c => c.status === 'error').length,\r\n        groups: mockGroups.length,\r\n        totalTasks: mockClients.reduce((sum, c) => sum + c.tasks, 0),\r\n        totalPlatforms: mockClients.reduce((sum, c) => sum + c.platforms, 0)\r\n      };\r\n\r\n      setClientStats(stats);\r\n    } catch (error) {\r\n      message.error('加载客户端数据失败');\r\n    }\r\n  }, []);\r\n\r\n  const connectToClientById = useCallback(async (clientId: string) => {\r\n    const client = clients.find(c => c.id === clientId);\r\n    if (!client) return;\r\n\r\n    try {\r\n      setClients(prev => prev.map(c => \r\n        c.id === clientId ? { ...c, status: 'connecting' } : c\r\n      ));\r\n\r\n      await lightweightClientService.connectToClient(client.ip, client.port);\r\n      \r\n      setClients(prev => prev.map(c => \r\n        c.id === clientId ? { ...c, status: 'online' } : c\r\n      ));\r\n\r\n      message.success(`客户端 ${client.name} 连接成功`);\r\n      addOperationLog('success', '客户端连接', `成功连接到客户端 ${client.name}`, client.name);\r\n    } catch (error) {\r\n      setClients(prev => prev.map(c => \r\n        c.id === clientId ? { ...c, status: 'error' } : c\r\n      ));\r\n      message.error(`客户端 ${client.name} 连接失败`);\r\n      addOperationLog('error', '客户端连接', `连接失败: ${error}`, client.name);\r\n    }\r\n  }, [clients, addOperationLog]);\r\n\r\n  const disconnectFromClient = useCallback(async (clientId: string) => {\r\n    const client = clients.find(c => c.id === clientId);\r\n    if (!client) return;\r\n\r\n    try {\r\n      setClients(prev => prev.map(c => \r\n        c.id === clientId ? { ...c, status: 'offline' } : c\r\n      ));\r\n\r\n      message.success(`客户端 ${client.name} 已断开连接`);\r\n      addOperationLog('info', '客户端断开', `断开与客户端 ${client.name} 的连接`, client.name);\r\n    } catch (error) {\r\n      message.error(`断开连接失败: ${error}`);\r\n    }\r\n  }, [clients, addOperationLog]);\r\n\r\n  const viewClientDetail = useCallback((client: ClientInfo) => {\r\n    setSelectedClient(client);\r\n    setClientDetailDrawerVisible(true);\r\n  }, []);\r\n\r\n  const handleSelectClient = useCallback((clientId: string, checked: boolean) => {\r\n    setSelectedClientIds(prev => {\r\n      if (checked) {\r\n        return [...prev, clientId];\r\n      } else {\r\n        return prev.filter(id => id !== clientId);\r\n      }\r\n    });\r\n  }, []);\r\n\r\n  const handleSelectAll = useCallback((checked: boolean) => {\r\n    setIsSelectAll(checked);\r\n    if (checked) {\r\n      setSelectedClientIds(clients.map(c => c.id));\r\n    } else {\r\n      setSelectedClientIds([]);\r\n    }\r\n  }, [clients]);\r\n\r\n  const batchConnect = useCallback(async () => {\r\n    if (selectedClientIds.length === 0) {\r\n      message.warning('请选择客户端');\r\n      return;\r\n    }\r\n\r\n    for (const clientId of selectedClientIds) {\r\n      await connectToClientById(clientId);\r\n    }\r\n  }, [selectedClientIds, connectToClientById]);\r\n\r\n  const batchDisconnect = useCallback(async () => {\r\n    if (selectedClientIds.length === 0) {\r\n      message.warning('请选择客户端');\r\n      return;\r\n    }\r\n\r\n    for (const clientId of selectedClientIds) {\r\n      await disconnectFromClient(clientId);\r\n    }\r\n  }, [selectedClientIds, disconnectFromClient]);\r\n\r\n  const batchRestart = useCallback(() => {\r\n    if (selectedClientIds.length === 0) {\r\n      message.warning('请选择客户端');\r\n      return;\r\n    }\r\n\r\n    message.info(`正在重启 ${selectedClientIds.length} 个客户端...`);\r\n    addOperationLog('info', '批量操作', `开始重启 ${selectedClientIds.length} 个客户端`);\r\n  }, [selectedClientIds, addOperationLog]);\r\n\r\n  const createClientGroup = useCallback(async (values: any) => {\r\n    try {\r\n      const newGroup: ClientGroup = {\r\n        id: `group-${Date.now()}`,\r\n        name: values.name,\r\n        description: values.description,\r\n        clientIds: values.clientIds || [],\r\n        color: values.color || '#1890ff'\r\n      };\r\n\r\n      setClientGroups(prev => [...prev, newGroup]);\r\n      message.success('客户端组创建成功');\r\n      addOperationLog('success', '客户端组管理', `创建客户端组 ${values.name}`);\r\n      setClientGroupModalVisible(false);\r\n      groupForm.resetFields();\r\n    } catch (error) {\r\n      message.error('创建客户端组失败');\r\n    }\r\n  }, [addOperationLog, groupForm]);\r\n\r\n  useEffect(() => {\r\n    let interval: NodeJS.Timeout;\r\n    \r\n    if (connected) {\r\n      loadClientStatus();\r\n      loadCloudData();\r\n      loadClients(); // 加载客户端数据\r\n      interval = setInterval(loadClientStatus, 30000);\r\n    }\r\n    \r\n    return () => {\r\n      if (interval) {\r\n        clearInterval(interval);\r\n      }\r\n    };\r\n  }, [connected, loadClientStatus, loadCloudData, loadClients]);\r\n\r\n  useEffect(() => {\r\n    if (!cloudForm) return;\r\n    \r\n    const handleFormChange = () => {\r\n      try {\r\n        const values = cloudForm.getFieldsValue();\r\n        if (values.instanceType && values.billingType) {\r\n          const basePrices: Record<string, number> = {\r\n            'ecs.g6.large': 0.12,\r\n            'ecs.g6.xlarge': 0.24,\r\n            'S2.SMALL1': 0.08,\r\n            'S2.MEDIUM2': 0.16\r\n          };\r\n          const basePrice = basePrices[values.instanceType] || 0.12;\r\n          if (values.billingType === 'prepaid' && values.period) {\r\n            setEstimatedPrice(basePrice * values.period * 0.8);\r\n          } else {\r\n            setEstimatedPrice(basePrice);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('表单监听错误:', error);\r\n      }\r\n    };\r\n    \r\n    const interval = setInterval(handleFormChange, 1000);\r\n    return () => clearInterval(interval);\r\n  }, [cloudForm]);\r\n\r\n  const platformColumns = useMemo(() => [\r\n    {\r\n      title: '平台',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      render: (text: string, record: PlatformInfo) => (\r\n        <Space>\r\n          <ShopOutlined />\r\n          <div>\r\n            <strong>{text}</strong>\r\n            {record.proxy && (\r\n              <div style={{ fontSize: '12px', color: '#666' }}>\r\n                <LinkOutlined /> {record.proxy}\r\n              </div>\r\n            )}\r\n          </div>\r\n        </Space>\r\n      )\r\n    },\r\n    {\r\n      title: '状态',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      render: (status: string, record: PlatformInfo) => (\r\n        <Space direction=\"vertical\" size=\"small\">\r\n          <Tag color={statusColor(status)}>\r\n            {status === 'connected' ? '已连接' : status === 'disconnected' ? '未连接' : '错误'}\r\n          </Tag>\r\n          {record.cookies && <Tag color=\"blue\" icon={<SafetyCertificateOutlined />}>Cookies有效</Tag>}\r\n        </Space>\r\n      )\r\n    },\r\n    {\r\n      title: '登录时间',\r\n      dataIndex: 'loginTime',\r\n      key: 'loginTime',\r\n      render: (time: string) => time || '-'\r\n    },\r\n    {\r\n      title: '最后同步',\r\n      dataIndex: 'lastSync',\r\n      key: 'lastSync'\r\n    },\r\n    {\r\n      title: '订单数',\r\n      dataIndex: 'orderCount',\r\n      key: 'orderCount',\r\n      render: (count: number) => <Badge count={count} showZero style={{ backgroundColor: '#52c41a' }} />\r\n    },\r\n    {\r\n      title: '商品数',\r\n      dataIndex: 'productCount',\r\n      key: 'productCount',\r\n      render: (count: number) => <Badge count={count} showZero style={{ backgroundColor: '#1890ff' }} />\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      width: 250,\r\n      render: (_text: unknown, record: PlatformInfo) => (\r\n        <Space>\r\n          <Button \r\n            type=\"link\" \r\n            icon={<SyncOutlined />}\r\n            onClick={() => syncPlatform(record.name)}\r\n            disabled={record.status !== 'connected'}\r\n          >\r\n            同步\r\n          </Button>\r\n          <Button \r\n            type=\"link\" \r\n            icon={record.status === 'connected' ? <UnlockOutlined /> : <LockOutlined />}\r\n            onClick={() => setLoginModalVisible(true)}\r\n          >\r\n            {record.status === 'connected' ? '重新登录' : '登录'}\r\n          </Button>\r\n          <Button \r\n            type=\"link\" \r\n            icon={<SettingOutlined />}\r\n            onClick={() => message.info('平台配置功能开发中')}\r\n          >\r\n            配置\r\n          </Button>\r\n        </Space>\r\n      )\r\n    }\r\n  ], [syncPlatform]);\r\n\r\n  const taskColumns = useMemo(() => [\r\n    {\r\n      title: '任务名称',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      width: 200,\r\n      render: (text: string, record: TaskInfo) => (\r\n        <div>\r\n          <div><strong>{text}</strong></div>\r\n          <div style={{ fontSize: '12px', color: '#666' }}>\r\n            {record.description}\r\n          </div>\r\n          {record.status === 'running' && (\r\n            <Progress percent={record.progress} size=\"small\" status=\"active\" />\r\n          )}\r\n        </div>\r\n      )\r\n    },\r\n    {\r\n      title: '平台',\r\n      dataIndex: 'platform',\r\n      key: 'platform',\r\n      render: (platform: string) => (\r\n        <Tag color={platform === 'all' ? 'purple' : 'blue'}>\r\n          {platform === 'all' ? '所有平台' : platform.toUpperCase()}\r\n        </Tag>\r\n      )\r\n    },\r\n    {\r\n      title: '类型',\r\n      dataIndex: 'type',\r\n      key: 'type',\r\n      render: (type: string) => {\r\n        const typeMap: Record<string, { color: string; icon: React.ReactNode }> = {\r\n          sync: { color: 'green', icon: <SyncOutlined /> },\r\n          monitor: { color: 'blue', icon: <MonitorOutlined /> },\r\n          publish: { color: 'orange', icon: <PlayCircleOutlined /> },\r\n          analysis: { color: 'purple', icon: <EyeOutlined /> },\r\n          optimize: { color: 'cyan', icon: <SettingOutlined /> },\r\n          finance: { color: 'gold', icon: <DollarOutlined /> }\r\n        };\r\n        const config = typeMap[type] || { color: 'default', icon: null };\r\n        return <Tag color={config.color} icon={config.icon}>{type}</Tag>;\r\n      }\r\n    },\r\n    {\r\n      title: '调度',\r\n      dataIndex: 'schedule',\r\n      key: 'schedule',\r\n      render: (schedule: string) => <code>{schedule}</code>\r\n    },\r\n    {\r\n      title: '状态',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      render: (status: string, record: TaskInfo) => (\r\n        <Space direction=\"vertical\" size=\"small\">\r\n          <Tag color={statusColor(status)}>\r\n            {status === 'running' ? '运行中' : status === 'success' ? '成功' : status === 'failed' ? '失败' : '空闲'}\r\n          </Tag>\r\n          {(record.successCount || record.errorCount) && (\r\n            <div style={{ fontSize: '12px' }}>\r\n              <span style={{ color: '#52c41a' }}>✓{record.successCount || 0}</span>\r\n              {' / '}\r\n              <span style={{ color: '#ff4d4f' }}>✗{record.errorCount || 0}</span>\r\n            </div>\r\n          )}\r\n        </Space>\r\n      )\r\n    },\r\n    {\r\n      title: '下次执行',\r\n      dataIndex: 'nextRun',\r\n      key: 'nextRun',\r\n      render: (time: string) => time || '-'\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      width: 200,\r\n      render: (_text: unknown, record: TaskInfo) => (\r\n        <Space>\r\n          <Tooltip title=\"执行任务\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<PlayCircleOutlined />}\r\n              onClick={() => executeTask(record.id)}\r\n              disabled={record.status === 'running'}\r\n            />\r\n          </Tooltip>\r\n          <Tooltip title={record.enabled ? \"暂停任务\" : \"启用任务\"}>\r\n            <Switch\r\n              checked={record.enabled}\r\n              onChange={(checked) => toggleTask(record.id, checked)}\r\n              size=\"small\"\r\n            />\r\n          </Tooltip>\r\n          <Tooltip title=\"查看详情\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<EyeOutlined />}\r\n              onClick={() => viewTaskDetail(record)}\r\n            />\r\n          </Tooltip>\r\n          <Popconfirm\r\n            title=\"确定删除这个任务吗？\"\r\n            onConfirm={() => {\r\n              setTasks(prev => prev.filter(t => t.id !== record.id));\r\n              message.success('任务已删除');\r\n            }}\r\n          >\r\n            <Tooltip title=\"删除任务\">\r\n              <Button type=\"link\" danger icon={<DeleteOutlined />} />\r\n            </Tooltip>\r\n          </Popconfirm>\r\n        </Space>\r\n      )\r\n    }\r\n  ], [executeTask, toggleTask, viewTaskDetail]);\r\n\r\n  const cloudInstanceColumns = useMemo(() => [\r\n    {\r\n      title: '实例名称',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      render: (text: string, record: CloudInstance) => (\r\n        <Space>\r\n          <CloudServerOutlined />\r\n          <div>\r\n            <Button \r\n              type=\"link\" \r\n              onClick={() => viewInstanceDetail(record)}\r\n              style={{ padding: 0, height: 'auto' }}\r\n            >\r\n              <strong>{text}</strong>\r\n            </Button>\r\n            <div style={{ fontSize: '12px', color: '#666' }}>\r\n              {record.provider} - {record.region}\r\n            </div>\r\n          </div>\r\n        </Space>\r\n      )\r\n    },\r\n    {\r\n      title: '状态',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      render: (status: string) => (\r\n        <Tag color={statusColor(status)}>\r\n          {status === 'running' ? '运行中' : status === 'stopped' ? '已停止' : status === 'starting' ? '启动中' : status === 'stopping' ? '停止中' : '错误'}\r\n        </Tag>\r\n      )\r\n    },\r\n    {\r\n      title: 'IP地址',\r\n      dataIndex: 'ipAddress',\r\n      key: 'ipAddress',\r\n      render: (ip: string) => ip ? <code>{ip}</code> : <Text type=\"secondary\">未分配</Text>\r\n    },\r\n    {\r\n      title: '实例类型',\r\n      dataIndex: 'instanceType',\r\n      key: 'instanceType'\r\n    },\r\n    {\r\n      title: '创建时间',\r\n      dataIndex: 'createdTime',\r\n      key: 'createdTime'\r\n    },\r\n    {\r\n      title: '过期时间',\r\n      dataIndex: 'expiredTime',\r\n      key: 'expiredTime',\r\n      render: (time: string) => time ? (\r\n        <Space>\r\n          <ClockCircleOutlined />\r\n          {time}\r\n        </Space>\r\n      ) : <Tag>按需计费</Tag>\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      width: 200,\r\n      render: (_text: unknown, record: CloudInstance) => (\r\n        <Space>\r\n          <Tooltip title=\"查看详情\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<EyeOutlined />}\r\n              onClick={() => viewInstanceDetail(record)}\r\n            />\r\n          </Tooltip>\r\n          \r\n          {record.status === 'stopped' && (\r\n            <Tooltip title=\"启动实例\">\r\n              <Button \r\n                type=\"link\" \r\n                icon={<PlayCircleOutlined />}\r\n                onClick={() => {\r\n                  cloudService.startInstance(record.id, record.provider, record.region);\r\n                  message.success('启动命令已发送');\r\n                }}\r\n              />\r\n            </Tooltip>\r\n          )}\r\n          \r\n          {record.status === 'running' && (\r\n            <>\r\n              <Tooltip title=\"停止实例\">\r\n                <Button \r\n                  type=\"link\" \r\n                  icon={<PauseCircleOutlined />}\r\n                  onClick={() => {\r\n                    cloudService.stopInstance(record.id, record.provider, record.region);\r\n                    message.success('停止命令已发送');\r\n                  }}\r\n                />\r\n              </Tooltip>\r\n              <Tooltip title=\"重启实例\">\r\n                <Button \r\n                  type=\"link\" \r\n                  icon={<ReloadOutlined />}\r\n                  onClick={() => {\r\n                    cloudService.rebootInstance(record.id, record.provider, record.region);\r\n                    message.success('重启命令已发送');\r\n                  }}\r\n                />\r\n              </Tooltip>\r\n            </>\r\n          )}\r\n          \r\n          <Tooltip title=\"远程连接\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<DesktopOutlined />}\r\n              onClick={() => message.info('远程连接功能开发中')}\r\n            />\r\n          </Tooltip>\r\n        </Space>\r\n      )\r\n    }\r\n  ], [viewInstanceDetail]);\r\n\r\n  const webSessionColumns = useMemo(() => [\r\n    {\r\n      title: '会话ID',\r\n      dataIndex: 'id',\r\n      key: 'id',\r\n      render: (text: string) => (\r\n        <Space>\r\n          <GlobalOutlined />\r\n          <code>{text.slice(0, 15)}...</code>\r\n        </Space>\r\n      )\r\n    },\r\n    {\r\n      title: '平台',\r\n      dataIndex: 'platform',\r\n      key: 'platform',\r\n      render: (platform: string) => <Tag color=\"blue\">{platform.toUpperCase()}</Tag>\r\n    },\r\n    {\r\n      title: '状态',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      render: (status: string) => (\r\n        <Tag color={statusColor(status)}>\r\n          {status === 'ready' ? '就绪' : status === 'active' ? '活跃' : status === 'error' ? '错误' : '已关闭'}\r\n        </Tag>\r\n      )\r\n    },\r\n    {\r\n      title: '当前页面',\r\n      dataIndex: 'currentUrl',\r\n      key: 'currentUrl',\r\n      ellipsis: true,\r\n      render: (url: string) => <a href={url} target=\"_blank\" rel=\"noopener noreferrer\">{url}</a>\r\n    },\r\n    {\r\n      title: '页面标题',\r\n      dataIndex: 'title',\r\n      key: 'title',\r\n      ellipsis: true\r\n    },\r\n    {\r\n      title: '最后活动',\r\n      dataIndex: 'lastActivity',\r\n      key: 'lastActivity'\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      render: (_text: unknown, record: WebRemoteSession) => (\r\n        <Space>\r\n          <Tooltip title=\"控制会话\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<DesktopOutlined />}\r\n              onClick={() => message.info(`打开WEB远程控制: ${record.id}`)}\r\n            />\r\n          </Tooltip>\r\n          <Tooltip title=\"查看截图\">\r\n            <Button \r\n              type=\"link\" \r\n              icon={<EyeOutlined />}\r\n              onClick={() => message.info('截图功能开发中')}\r\n            />\r\n          </Tooltip>\r\n          <Popconfirm\r\n            title=\"确定关闭这个会话吗？\"\r\n            onConfirm={() => {\r\n              cloudService.closeSession(record.id);\r\n              message.success('会话已关闭');\r\n            }}\r\n          >\r\n            <Tooltip title=\"关闭会话\">\r\n              <Button type=\"link\" danger icon={<DeleteOutlined />} />\r\n            </Tooltip>\r\n          </Popconfirm>\r\n        </Space>\r\n      )\r\n    }\r\n  ], []);\r\n\r\n  const statisticsData = useMemo(() => {\r\n    if (!clientStatus) return null;\r\n    return {\r\n      platformTotal: clientStatus.platforms.total,\r\n      platformLoggedIn: clientStatus.platforms.loggedIn.length,\r\n      taskTotal: clientStatus.tasks.total,\r\n      taskEnabled: clientStatus.tasks.enabled,\r\n      cloudTotal: cloudInstances.length,\r\n      cloudRunning: cloudInstances.filter(i => i.status === 'running').length,\r\n      webSessionTotal: webSessions.length,\r\n      webSessionActive: webSessions.filter(s => s.status === 'active').length,\r\n      orderTotal: platforms.reduce((sum, p) => sum + p.orderCount, 0),\r\n      productTotal: platforms.reduce((sum, p) => sum + p.productCount, 0)\r\n    };\r\n  }, [clientStatus, cloudInstances, webSessions, platforms]);\r\n\r\n  const logTimelineItems = useMemo(() => {\r\n    return operationLogs.slice(0, 20).map(log => ({\r\n      color: log.level === 'error' ? 'red' : log.level === 'warning' ? 'orange' : log.level === 'success' ? 'green' : 'blue',\r\n      children: (\r\n        <div>\r\n          <div>\r\n            {logLevelIcon(log.level)} \r\n            <Text strong style={{ marginLeft: 8 }}>{log.operation}</Text>\r\n            {log.platform && <Tag style={{ marginLeft: 8 }}>{log.platform}</Tag>}\r\n          </div>\r\n          <Text type=\"secondary\" style={{ fontSize: 12 }}>{log.details}</Text>\r\n          <div>\r\n            <Text type=\"secondary\" style={{ fontSize: 11 }}>\r\n              {log.timestamp}\r\n              {log.duration && ` | ${log.duration}ms`}\r\n            </Text>\r\n          </div>\r\n        </div>\r\n      )\r\n    }));\r\n  }, [operationLogs]);\r\n\r\n  return (\r\n    <div style={{ padding: '24px', background: '#f0f2f5', minHeight: '100vh' }}>\r\n      <Row gutter={[16, 16]} style={{ marginBottom: '24px' }}>\r\n        <Col span={24}>\r\n          <Card>\r\n            <Row justify=\"space-between\" align=\"middle\">\r\n              <Col>\r\n                <Title level={3} style={{ margin: 0 }}>\r\n                  <CloudServerOutlined /> Operation-Agent 增强版管理界面\r\n                </Title>\r\n                <Paragraph style={{ margin: 0, color: '#666' }}>\r\n                  支持多平台自动化操作、云服务器管理、WEB远程控制 | 四层架构：API模拟 → WEB远程 → 远程桌面 → 云API\r\n                </Paragraph>\r\n              </Col>\r\n              <Col>\r\n                <Space>\r\n                  <Button \r\n                    icon={<HistoryOutlined />}\r\n                    onClick={() => message.info('操作历史功能开发中')}\r\n                  >\r\n                    操作历史\r\n                  </Button>\r\n                  <Button \r\n                    icon={<SettingOutlined />}\r\n                    onClick={() => setConfigDrawerVisible(true)}\r\n                  >\r\n                    客户端配置\r\n                  </Button>\r\n                  <Button \r\n                    type={connected ? \"default\" : \"primary\"}\r\n                    icon={connected ? <SyncOutlined /> : <PlayCircleOutlined />}\r\n                    loading={loading}\r\n                    onClick={connectToClient}\r\n                  >\r\n                    {connected ? '重新连接' : '连接客户端'}\r\n                  </Button>\r\n                </Space>\r\n              </Col>\r\n            </Row>\r\n          </Card>\r\n        </Col>\r\n      </Row>\r\n\r\n      {!connected ? (\r\n        <Row gutter={[16, 16]} style={{ marginTop: '24px' }}>\r\n          <Col span={24}>\r\n            <Card>\r\n              <Result\r\n                icon={<CloudServerOutlined style={{ fontSize: 72, color: '#1890ff' }} />}\r\n                title=\"欢迎使用 Operation-Agent 增强版\"\r\n                subTitle=\"请先连接客户端以开始使用多平台自动化操作、云服务器管理、WEB远程控制等功能\"\r\n                extra={[\r\n                  <Button \r\n                    type=\"primary\" \r\n                    key=\"connect\"\r\n                    size=\"large\"\r\n                    icon={<PlayCircleOutlined />}\r\n                    loading={loading}\r\n                    onClick={connectToClient}\r\n                  >\r\n                    连接客户端\r\n                  </Button>,\r\n                  <Button \r\n                    key=\"help\"\r\n                    size=\"large\"\r\n                    icon={<InfoCircleOutlined />}\r\n                    onClick={() => message.info('帮助文档开发中')}\r\n                  >\r\n                    查看帮助\r\n                  </Button>\r\n                ]}\r\n              >\r\n                <Descriptions title=\"系统功能\" bordered column={2}>\r\n                  <Descriptions.Item label=\"多平台支持\">\r\n                    TikTok、Shopee、Amazon、Temu、Lazada\r\n                  </Descriptions.Item>\r\n                  <Descriptions.Item label=\"四层架构\">\r\n                    API模拟 → WEB远程 → 远程桌面 → 云API\r\n                  </Descriptions.Item>\r\n                  <Descriptions.Item label=\"云服务器管理\">\r\n                    支持多云平台、自动扩缩容、成本优化\r\n                  </Descriptions.Item>\r\n                  <Descriptions.Item label=\"自动化任务\">\r\n                    定时调度、实时监控、智能决策\r\n                  </Descriptions.Item>\r\n                </Descriptions>\r\n              </Result>\r\n            </Card>\r\n          </Col>\r\n        </Row>\r\n      ) : (\r\n        <>\r\n          {clientStatus && statisticsData && (\r\n            <Row gutter={[16, 16]} style={{ marginBottom: '24px' }}>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"平台数量\"\r\n                    value={statisticsData.platformTotal}\r\n                    prefix={<ShopOutlined />}\r\n                    suffix={<Text type=\"secondary\" style={{ fontSize: 14 }}>/ {statisticsData.platformLoggedIn} 已登录</Text>}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"任务数量\"\r\n                    value={statisticsData.taskTotal}\r\n                    prefix={<ScheduleOutlined />}\r\n                    suffix={<Text type=\"secondary\" style={{ fontSize: 14 }}>/ {statisticsData.taskEnabled} 启用</Text>}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"云服务器\"\r\n                    value={statisticsData.cloudTotal}\r\n                    prefix={<CloudServerOutlined />}\r\n                    suffix={<Text type=\"secondary\" style={{ fontSize: 14 }}>/ {statisticsData.cloudRunning} 运行中</Text>}\r\n                    valueStyle={{ color: '#3f8600' }}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"WEB会话\"\r\n                    value={statisticsData.webSessionTotal}\r\n                    prefix={<GlobalOutlined />}\r\n                    suffix={<Text type=\"secondary\" style={{ fontSize: 14 }}>/ {statisticsData.webSessionActive} 活跃</Text>}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"今日订单\"\r\n                    value={statisticsData.orderTotal}\r\n                    prefix={<ShoppingCartOutlined />}\r\n                    valueStyle={{ color: '#1890ff' }}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n              <Col span={4}>\r\n                <Card hoverable>\r\n                  <Statistic\r\n                    title=\"今日商品\"\r\n                    value={statisticsData.productTotal}\r\n                    prefix={<DollarOutlined />}\r\n                    valueStyle={{ color: '#722ed1' }}\r\n                  />\r\n                </Card>\r\n              </Col>\r\n            </Row>\r\n          )}\r\n\r\n          <Row gutter={[16, 16]}>\r\n            <Col span={18}>\r\n            <Card>\r\n              <Tabs defaultActiveKey=\"cloud\" size=\"large\">\r\n                {connected && (\r\n                  <>\r\n                    <TabPane tab={\r\n                      <span>\r\n                        <ShopOutlined />\r\n                        平台管理\r\n                        <Badge count={platforms.filter(p => p.status === 'connected').length} style={{ marginLeft: 8 }} />\r\n                      </span>\r\n                    } key=\"platforms\">\r\n                      <Card\r\n                        title=\"电商平台管理\"\r\n                        extra={\r\n                          <Space>\r\n                            <Button \r\n                              type=\"primary\" \r\n                              icon={<PlusOutlined />}\r\n                              onClick={() => setLoginModalVisible(true)}\r\n                            >\r\n                              添加平台\r\n                            </Button>\r\n                            <Button \r\n                              icon={<SyncOutlined />}\r\n                              onClick={loadClientStatus}\r\n                            >\r\n                              刷新\r\n                            </Button>\r\n                          </Space>\r\n                        }\r\n                      >\r\n                        <Table\r\n                          columns={platformColumns}\r\n                          dataSource={platforms}\r\n                          rowKey=\"name\"\r\n                          pagination={false}\r\n                        />\r\n                      </Card>\r\n                    </TabPane>\r\n\r\n                    <TabPane tab={\r\n                      <span>\r\n                        <ScheduleOutlined />\r\n                        任务调度\r\n                        <Badge count={tasks.filter(t => t.status === 'running').length} style={{ marginLeft: 8, backgroundColor: '#52c41a' }} />\r\n                      </span>\r\n                    } key=\"tasks\">\r\n                      <Card\r\n                        title=\"自动化任务\"\r\n                        extra={\r\n                          <Space>\r\n                            <Button \r\n                              type=\"primary\" \r\n                              icon={<PlusOutlined />}\r\n                              onClick={() => setTaskModalVisible(true)}\r\n                            >\r\n                              添加任务\r\n                            </Button>\r\n                            <Button \r\n                              icon={<SyncOutlined />}\r\n                              onClick={loadClientStatus}\r\n                            >\r\n                              刷新\r\n                            </Button>\r\n                          </Space>\r\n                        }\r\n                      >\r\n                        <Table\r\n                          columns={taskColumns}\r\n                          dataSource={tasks}\r\n                          rowKey=\"id\"\r\n                          pagination={false}\r\n                        />\r\n                      </Card>\r\n                    </TabPane>\r\n                  </>\r\n                )}\r\n\r\n                <TabPane tab={\r\n                  <span>\r\n                    <CloudServerOutlined />\r\n                    云服务器管理\r\n                    <Badge count={cloudInstances.filter(i => i.status === 'running').length} style={{ marginLeft: 8, backgroundColor: '#52c41a' }} />\r\n                  </span>\r\n                } key=\"cloud\">\r\n                  <Card\r\n                    title=\"云服务器实例\"\r\n                    extra={\r\n                      <Space>\r\n                        <Button \r\n                          type=\"primary\" \r\n                          icon={<PlusOutlined />}\r\n                          onClick={() => setCloudModalVisible(true)}\r\n                        >\r\n                          购买实例\r\n                        </Button>\r\n                        <Button \r\n                          icon={<SyncOutlined />}\r\n                          onClick={loadClientStatus}\r\n                        >\r\n                          刷新\r\n                        </Button>\r\n                      </Space>\r\n                    }\r\n                  >\r\n                    <Table\r\n                      columns={cloudInstanceColumns}\r\n                      dataSource={cloudInstances}\r\n                      rowKey=\"id\"\r\n                      pagination={false}\r\n                    />\r\n                  </Card>\r\n                </TabPane>\r\n\r\n                {connected && (\r\n                  <TabPane tab={\r\n                    <span>\r\n                      <GlobalOutlined />\r\n                      WEB远程控制\r\n                      <Badge count={webSessions.filter(s => s.status === 'active').length} style={{ marginLeft: 8, backgroundColor: '#52c41a' }} />\r\n                    </span>\r\n                  } key=\"webremote\">\r\n                    <Card\r\n                      title=\"WEB远程会话\"\r\n                      extra={\r\n                        <Space>\r\n                          <Button \r\n                            type=\"primary\" \r\n                            icon={<PlusOutlined />}\r\n                            onClick={() => setWebRemoteModalVisible(true)}\r\n                          >\r\n                            创建会话\r\n                          </Button>\r\n                          <Button \r\n                            icon={<SyncOutlined />}\r\n                            onClick={loadClientStatus}\r\n                          >\r\n                            刷新\r\n                          </Button>\r\n                        </Space>\r\n                      }\r\n                    >\r\n                      <Table\r\n                        columns={webSessionColumns}\r\n                        dataSource={webSessions}\r\n                        rowKey=\"id\"\r\n                        pagination={false}\r\n                      />\r\n                    </Card>\r\n                  </TabPane>\r\n                )}\r\n\r\n                <TabPane tab={\r\n                  <span>\r\n                    <DesktopOutlined />\r\n                    客户端管理\r\n                    <Badge count={clients.filter(c => c.status === 'online').length} style={{ marginLeft: 8, backgroundColor: '#52c41a' }} />\r\n                  </span>\r\n                } key=\"clients\">\r\n                  <Card\r\n                    title=\"多客户端管理\"\r\n                    extra={\r\n                      <Space>\r\n                        <Button \r\n                          type=\"primary\" \r\n                          icon={<PlusOutlined />}\r\n                          onClick={() => setClientGroupModalVisible(true)}\r\n                        >\r\n                          添加客户端组\r\n                        </Button>\r\n                        <Button \r\n                          icon={<SyncOutlined />}\r\n                          onClick={loadClients}\r\n                        >\r\n                          刷新\r\n                        </Button>\r\n                      </Space>\r\n                    }\r\n                  >\r\n                    <div style={{ marginBottom: 16 }}>\r\n                      <Row gutter={16}>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"总客户端\" value={clientStats.total} />\r\n                          </Card>\r\n                        </Col>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"在线\" value={clientStats.online} valueStyle={{ color: '#52c41a' }} />\r\n                          </Card>\r\n                        </Col>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"离线\" value={clientStats.offline} valueStyle={{ color: '#faad14' }} />\r\n                          </Card>\r\n                        </Col>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"异常\" value={clientStats.error} valueStyle={{ color: '#ff4d4f' }} />\r\n                          </Card>\r\n                        </Col>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"客户端组\" value={clientStats.groups} />\r\n                          </Card>\r\n                        </Col>\r\n                        <Col span={4}>\r\n                          <Card>\r\n                            <Statistic title=\"总任务数\" value={clientStats.totalTasks} />\r\n                          </Card>\r\n                        </Col>\r\n                      </Row>\r\n                    </div>\r\n\r\n                    <div style={{ marginBottom: 16 }}>\r\n                      <Card title=\"批量操作\" size=\"small\">\r\n                        <Space>\r\n                          <Button \r\n                            type=\"primary\" \r\n                            icon={<PlayCircleOutlined />}\r\n                            onClick={batchConnect}\r\n                            disabled={selectedClientIds.length === 0}\r\n                          >\r\n                            批量连接\r\n                          </Button>\r\n                          <Button \r\n                            icon={<PauseCircleOutlined />}\r\n                            onClick={batchDisconnect}\r\n                            disabled={selectedClientIds.length === 0}\r\n                          >\r\n                            批量断开\r\n                          </Button>\r\n                          <Button \r\n                            icon={<ReloadOutlined />}\r\n                            onClick={batchRestart}\r\n                            disabled={selectedClientIds.length === 0}\r\n                          >\r\n                            批量重启\r\n                          </Button>\r\n                          <Select \r\n                            placeholder=\"按状态筛选\" \r\n                            style={{ width: 120 }}\r\n                          >\r\n                            <Option value=\"all\">全部</Option>\r\n                            <Option value=\"online\">在线</Option>\r\n                            <Option value=\"offline\">离线</Option>\r\n                            <Option value=\"error\">异常</Option>\r\n                          </Select>\r\n                          <Select \r\n                            placeholder=\"按分组筛选\" \r\n                            style={{ width: 120 }}\r\n                          >\r\n                            <Option value=\"all\">全部</Option>\r\n                            {clientGroups.map(group => (\r\n                              <Option key={group.id} value={group.id}>{group.name}</Option>\r\n                            ))}\r\n                          </Select>\r\n                        </Space>\r\n                      </Card>\r\n                    </div>\r\n\r\n                    <Table\r\n                      dataSource={clients}\r\n                      columns={[\r\n                        {\r\n                          title: (\r\n                            <Checkbox\r\n                              checked={isSelectAll}\r\n                              onChange={(e) => handleSelectAll(e.target.checked)}\r\n                            />\r\n                          ),\r\n                          key: 'selection',\r\n                          width: 60,\r\n                          render: (_text, record) => (\r\n                            <Checkbox\r\n                              checked={selectedClientIds.includes(record.id)}\r\n                              onChange={(e) => handleSelectClient(record.id, e.target.checked)}\r\n                            />\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '客户端名称',\r\n                          dataIndex: 'name',\r\n                          key: 'name',\r\n                          render: (text, record) => (\r\n                            <Space>\r\n                              <Button \r\n                                type=\"link\" \r\n                                onClick={() => viewClientDetail(record)}\r\n                                style={{ padding: 0, height: 'auto' }}\r\n                              >\r\n                                <strong>{text}</strong>\r\n                              </Button>\r\n                              <div style={{ fontSize: '12px', color: '#666' }}>\r\n                                {record.ip}:{record.port}\r\n                              </div>\r\n                            </Space>\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '状态',\r\n                          dataIndex: 'status',\r\n                          key: 'status',\r\n                          render: (status) => (\r\n                            <Tag color={status === 'online' ? 'green' : status === 'offline' ? 'orange' : 'red'}>\r\n                              {status === 'online' ? '在线' : status === 'offline' ? '离线' : '异常'}\r\n                            </Tag>\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '平台',\r\n                          dataIndex: 'platform',\r\n                          key: 'platform',\r\n                        },\r\n                        {\r\n                          title: '版本',\r\n                          dataIndex: 'version',\r\n                          key: 'version',\r\n                        },\r\n                        {\r\n                          title: '资源使用',\r\n                          key: 'resources',\r\n                          render: (_, record) => (\r\n                            <Space direction=\"vertical\" size=\"small\">\r\n                              <div>\r\n                                <span style={{ fontSize: '12px', color: '#666' }}>CPU:</span>\r\n                                <Progress percent={record.cpu} size=\"small\" status={record.cpu > 80 ? 'exception' : 'normal'} />\r\n                              </div>\r\n                              <div>\r\n                                <span style={{ fontSize: '12px', color: '#666' }}>内存:</span>\r\n                                <Progress percent={record.memory} size=\"small\" status={record.memory > 80 ? 'exception' : 'normal'} />\r\n                              </div>\r\n                              <div>\r\n                                <span style={{ fontSize: '12px', color: '#666' }}>磁盘:</span>\r\n                                <Progress percent={record.disk} size=\"small\" status={record.disk > 80 ? 'exception' : 'normal'} />\r\n                              </div>\r\n                            </Space>\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '运行时间',\r\n                          key: 'uptime',\r\n                          render: (_, record) => (\r\n                            <div>\r\n                              {record.uptime > 0 ? `${Math.floor(record.uptime / 3600)}h ${Math.floor((record.uptime % 3600) / 60)}m` : '-'}\r\n                            </div>\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '标签',\r\n                          key: 'tags',\r\n                          render: (_, record) => (\r\n                            <Space size=\"small\">\r\n                              {record.tags.map((tag, index) => (\r\n                                <Tag key={index}>{tag}</Tag>\r\n                              ))}\r\n                            </Space>\r\n                          ),\r\n                        },\r\n                        {\r\n                          title: '操作',\r\n                          key: 'action',\r\n                          width: 200,\r\n                          render: (_text, record) => (\r\n                            <Space>\r\n                              {record.status !== 'online' && (\r\n                                <Tooltip title=\"连接客户端\">\r\n                                  <Button \r\n                                    type=\"link\" \r\n                                    icon={<PlayCircleOutlined />}\r\n                                    onClick={() => connectToClientById(record.id)}\r\n                                  />\r\n                                </Tooltip>\r\n                              )}\r\n                              {record.status === 'online' && (\r\n                                <Tooltip title=\"断开连接\">\r\n                                  <Button \r\n                                    type=\"link\" \r\n                                    icon={<PauseCircleOutlined />}\r\n                                    onClick={() => disconnectFromClient(record.id)}\r\n                                  />\r\n                                </Tooltip>\r\n                              )}\r\n                              <Tooltip title=\"查看详情\">\r\n                                <Button \r\n                                  type=\"link\" \r\n                                  icon={<EyeOutlined />}\r\n                                  onClick={() => viewClientDetail(record)}\r\n                                />\r\n                              </Tooltip>\r\n                              <Tooltip title=\"重启客户端\">\r\n                                <Button \r\n                                  type=\"link\" \r\n                                  icon={<ReloadOutlined />}\r\n                                  onClick={() => batchRestart()}\r\n                                />\r\n                              </Tooltip>\r\n                            </Space>\r\n                          ),\r\n                        },\r\n                      ]}\r\n                      rowKey=\"id\"\r\n                      pagination={{ pageSize: 10 }}\r\n                      bordered\r\n                    />\r\n                  </Card>\r\n                </TabPane>\r\n              </Tabs>\r\n            </Card>\r\n          </Col>\r\n\r\n          {connected && (\r\n            <Col span={6}>\r\n              <Space direction=\"vertical\" style={{ width: '100%' }} size=\"middle\">\r\n                <Card \r\n                  title={\r\n                    <Space>\r\n                      <MonitorOutlined />\r\n                      <span>四层架构状态</span>\r\n                    </Space>\r\n                  }\r\n                  size=\"small\"\r\n                >\r\n                  <List\r\n                    itemLayout=\"horizontal\"\r\n                    dataSource={layerStatus}\r\n                    renderItem={item => (\r\n                      <List.Item>\r\n                        <List.Item.Meta\r\n                          avatar={\r\n                            <Avatar \r\n                              style={{ \r\n                                backgroundColor: item.available ? '#52c41a' : '#ff4d4f' \r\n                              }}\r\n                              icon={item.available ? <CheckCircleOutlined /> : <CloseCircleOutlined />}\r\n                            />\r\n                          }\r\n                          title={item.layer}\r\n                          description={\r\n                            <Space direction=\"vertical\" size=\"small\" style={{ width: '100%' }}>\r\n                              <Progress \r\n                                percent={Math.round(item.successRate * 100)} \r\n                                size=\"small\" \r\n                                status={item.available ? 'success' : 'exception'}\r\n                              />\r\n                              <Text type=\"secondary\" style={{ fontSize: 12 }}>\r\n                                延迟: {item.latency}ms | 错误: {item.errorCount}\r\n                              </Text>\r\n                            </Space>\r\n                          }\r\n                        />\r\n                      </List.Item>\r\n                    )}\r\n                  />\r\n                </Card>\r\n\r\n                <Card \r\n                  title={\r\n                    <Space>\r\n                      <FileTextOutlined />\r\n                      <span>操作日志</span>\r\n                      <Badge count={operationLogs.filter(l => l.level === 'error').length} />\r\n                    </Space>\r\n                  }\r\n                  size=\"small\"\r\n                  extra={<Button type=\"link\" size=\"small\" onClick={() => setOperationLogs([])}>清空</Button>}\r\n                >\r\n                  <div style={{ maxHeight: 400, overflow: 'auto' }}>\r\n                    {operationLogs.length === 0 ? (\r\n                      <Empty description=\"暂无日志\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\r\n                    ) : (\r\n                      <Timeline items={logTimelineItems} />\r\n                    )}\r\n                  </div>\r\n                </Card>\r\n\r\n                <Card \r\n                  title={\r\n                    <Space>\r\n                      <ClockCircleOutlined />\r\n                      <span>客户端信息</span>\r\n                    </Space>\r\n                  }\r\n                  size=\"small\"\r\n                >\r\n                  <Descriptions column={1} size=\"small\">\r\n                    <Descriptions.Item label=\"平台\">{clientStatus?.platform || '-'}</Descriptions.Item>\r\n                    <Descriptions.Item label=\"版本\">{clientStatus?.version || '-'}</Descriptions.Item>\r\n                    <Descriptions.Item label=\"运行时间\">\r\n                      {clientStatus ? `${Math.floor(clientStatus.uptime / 3600)}小时${Math.floor((clientStatus.uptime % 3600) / 60)}分` : '-'}\r\n                    </Descriptions.Item>\r\n                    <Descriptions.Item label=\"连接数\">\r\n                      {clientStatus ? `${clientStatus.connections.active} / ${clientStatus.connections.max}` : '-'}\r\n                    </Descriptions.Item>\r\n                  </Descriptions>\r\n                </Card>\r\n              </Space>\r\n            </Col>\r\n          )}\r\n        </Row>\r\n        </>\r\n      )}\r\n\r\n      <Modal\r\n        title={<Space><LockOutlined />平台登录</Space>}\r\n        open={loginModalVisible}\r\n        onCancel={() => setLoginModalVisible(false)}\r\n        footer={null}\r\n        width={500}\r\n      >\r\n        <Alert\r\n          message=\"登录说明\"\r\n          description=\"系统将使用四层架构自动选择最佳登录方式：API模拟 → WEB远程 → 远程桌面 → 云API\"\r\n          type=\"info\"\r\n          showIcon\r\n          style={{ marginBottom: 16 }}\r\n        />\r\n        <Form form={form} onFinish={handlePlatformLogin} layout=\"vertical\">\r\n          <Form.Item name=\"platform\" label=\"选择平台\" rules={[{ required: true, message: '请选择平台' }]}>\r\n            <Select placeholder=\"请选择平台\">\r\n              <Option value=\"tiktok\">TikTok Shop</Option>\r\n              <Option value=\"shopee\">Shopee</Option>\r\n              <Option value=\"amazon\">Amazon</Option>\r\n              <Option value=\"temu\">Temu</Option>\r\n              <Option value=\"lazada\">Lazada</Option>\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item name=\"username\" label=\"用户名/邮箱\" rules={[{ required: true, message: '请输入用户名' }]}>\r\n            <Input prefix={<UserOutlined />} placeholder=\"请输入用户名或邮箱\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"password\" label=\"密码\" rules={[{ required: true, message: '请输入密码' }]}>\r\n            <Input.Password prefix={<LockOutlined />} placeholder=\"请输入密码\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"twoFactorCode\" label=\"两步验证码（可选）\">\r\n            <Input placeholder=\"如果平台需要两步验证，请输入验证码\" />\r\n          </Form.Item>\r\n          <Form.Item>\r\n            <Button type=\"primary\" htmlType=\"submit\" block size=\"large\" icon={<LockOutlined />}>\r\n              登录\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title={<Space><ScheduleOutlined />添加自动化任务</Space>}\r\n        open={taskModalVisible}\r\n        onCancel={() => setTaskModalVisible(false)}\r\n        footer={null}\r\n        width={600}\r\n      >\r\n        <Form form={taskForm} onFinish={handleAddTask} layout=\"vertical\">\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"name\" label=\"任务名称\" rules={[{ required: true, message: '请输入任务名称' }]}>\r\n                <Input placeholder=\"例如：每日订单同步\" />\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"platform\" label=\"目标平台\" rules={[{ required: true, message: '请选择平台' }]}>\r\n                <Select placeholder=\"请选择平台\">\r\n                  <Option value=\"all\">所有平台</Option>\r\n                  <Option value=\"tiktok\">TikTok</Option>\r\n                  <Option value=\"shopee\">Shopee</Option>\r\n                  <Option value=\"amazon\">Amazon</Option>\r\n                  <Option value=\"temu\">Temu</Option>\r\n                  <Option value=\"lazada\">Lazada</Option>\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"type\" label=\"任务类型\" rules={[{ required: true, message: '请选择任务类型' }]}>\r\n                <Select placeholder=\"请选择任务类型\">\r\n                  <Option value=\"sync\">数据同步</Option>\r\n                  <Option value=\"monitor\">监控任务</Option>\r\n                  <Option value=\"publish\">商品上架</Option>\r\n                  <Option value=\"analysis\">数据分析</Option>\r\n                  <Option value=\"optimize\">自动优化</Option>\r\n                  <Option value=\"finance\">财务对账</Option>\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"schedule\" label=\"调度规则\" rules={[{ required: true, message: '请输入调度规则' }]}>\r\n                <Input placeholder=\"例如: 0 2 * * * (每天凌晨2点)\" />\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n          <Form.Item name=\"description\" label=\"任务描述\">\r\n            <Input.TextArea rows={3} placeholder=\"请输入任务描述\" />\r\n          </Form.Item>\r\n          <Form.Item>\r\n            <Button type=\"primary\" htmlType=\"submit\" block size=\"large\" icon={<PlusOutlined />}>\r\n              添加任务\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title={<Space><CloudServerOutlined />购买云服务器</Space>}\r\n        open={cloudModalVisible}\r\n        onCancel={() => {\r\n          setCloudModalVisible(false);\r\n          setEstimatedPrice(0);\r\n          cloudForm.resetFields();\r\n        }}\r\n        width={800}\r\n        footer={null}\r\n      >\r\n        <Form form={cloudForm} onFinish={handleCreateCloudInstance} layout=\"vertical\">\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"name\" label=\"实例名称\" rules={[{ required: true, message: '请输入实例名称' }]}>\r\n                <Input placeholder=\"例如：TikTok-Proxy-01\" />\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"provider\" label=\"云服务商\" rules={[{ required: true, message: '请选择云服务商' }]}>\r\n                <Select placeholder=\"请选择云服务商\">\r\n                  {providers.map(provider => (\r\n                    <Option key={provider.code} value={provider.code}>\r\n                      {provider.name}\r\n                    </Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"region\" label=\"地域\" rules={[{ required: true, message: '请选择地域' }]}>\r\n                <Select placeholder=\"请选择地域\">\r\n                  {regions.map(region => (\r\n                    <Option key={region.regionId} value={region.regionId}>\r\n                      {region.regionName}\r\n                    </Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"instanceType\" label=\"实例规格\" rules={[{ required: true, message: '请选择实例规格' }]}>\r\n                <Select placeholder=\"请选择实例规格\">\r\n                  {instanceTypes.map(type => (\r\n                    <Option key={type.instanceTypeId} value={type.instanceTypeId}>\r\n                      {type.cpuCoreCount}核{type.memorySize}G - ¥{type.price}/小时\r\n                    </Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"imageId\" label=\"操作系统\" rules={[{ required: true, message: '请选择操作系统' }]}>\r\n                <Select placeholder=\"请选择操作系统\">\r\n                  {images.map(image => (\r\n                    <Option key={image.imageId} value={image.imageId}>\r\n                      {image.imageName}\r\n                    </Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"billingType\" label=\"计费方式\" rules={[{ required: true, message: '请选择计费方式' }]}>\r\n                <Select placeholder=\"请选择计费方式\">\r\n                  <Option value=\"prepaid\">包年包月</Option>\r\n                  <Option value=\"postpaid\">按量计费</Option>\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"systemDiskSize\" label=\"系统盘大小(GB)\" rules={[{ required: true, message: '请输入系统盘大小' }]}>\r\n                <InputNumber min={20} max={500} style={{ width: '100%' }} placeholder=\"请输入系统盘大小\" addonAfter=\"GB\" />\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"dataDiskSize\" label=\"数据盘大小(GB)\">\r\n                <InputNumber min={0} max={2000} style={{ width: '100%' }} placeholder=\"可选\" addonAfter=\"GB\" />\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Form.Item \r\n            name=\"period\" \r\n            label=\"购买时长(月)\" \r\n            dependencies={['billingType']}\r\n            rules={[({ getFieldValue }) => ({\r\n              required: getFieldValue('billingType') === 'prepaid', \r\n              message: '包年包月需要指定购买时长' \r\n            })]}\r\n          >\r\n            <Select placeholder=\"请选择购买时长\">\r\n              <Option value={1}>1个月</Option>\r\n              <Option value={3}>3个月</Option>\r\n              <Option value={6}>6个月</Option>\r\n              <Option value={12}>12个月</Option>\r\n            </Select>\r\n          </Form.Item>\r\n\r\n          <Form.Item name=\"password\" label=\"实例密码\">\r\n            <Input.Password placeholder=\"设置实例登录密码\" />\r\n          </Form.Item>\r\n\r\n          {estimatedPrice > 0 && (\r\n            <Card size=\"small\" style={{ marginBottom: 16, background: '#f0f8ff' }}>\r\n              <Row justify=\"center\" align=\"middle\">\r\n                <Col>\r\n                  <Statistic\r\n                    title=\"费用估算\"\r\n                    value={estimatedPrice}\r\n                    precision={2}\r\n                    prefix=\"¥\"\r\n                    suffix={cloudForm.getFieldValue('billingType') === 'prepaid' ? '总费用' : '/小时'}\r\n                    valueStyle={{ color: '#1890ff', fontSize: 28 }}\r\n                  />\r\n                </Col>\r\n              </Row>\r\n            </Card>\r\n          )}\r\n\r\n          <Form.Item>\r\n            <Button type=\"primary\" htmlType=\"submit\" size=\"large\" block icon={<CloudDownloadOutlined />}>\r\n              立即购买\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title={<Space><GlobalOutlined />创建WEB远程会话</Space>}\r\n        open={webRemoteModalVisible}\r\n        onCancel={() => setWebRemoteModalVisible(false)}\r\n        footer={null}\r\n      >\r\n        <Form form={webRemoteForm} onFinish={async (values) => {\r\n          try {\r\n            await cloudService.createRemoteSession('web-session', values.platform, 'local', 'admin');\r\n            message.success('WEB远程会话创建成功');\r\n            setWebRemoteModalVisible(false);\r\n            webRemoteForm.resetFields();\r\n            await loadClientStatus();\r\n          } catch (error) {\r\n            message.error('创建WEB远程会话失败');\r\n          }\r\n        }} layout=\"vertical\">\r\n          <Form.Item name=\"platform\" label=\"目标平台\" rules={[{ required: true }]}>\r\n            <Select placeholder=\"请选择平台\">\r\n              <Option value=\"tiktok\">TikTok</Option>\r\n              <Option value=\"shopee\">Shopee</Option>\r\n              <Option value=\"amazon\">Amazon</Option>\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item name=\"url\" label=\"起始URL\" rules={[{ required: true }]}>\r\n            <Input placeholder=\"请输入起始URL\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"userAgent\" label=\"User Agent\">\r\n            <Input placeholder=\"自定义User Agent（可选）\" />\r\n          </Form.Item>\r\n          <Form.Item>\r\n            <Button type=\"primary\" htmlType=\"submit\" block>\r\n              创建会话\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title={<Space><CloudServerOutlined />实例详情 - {selectedInstance?.name}</Space>}\r\n        open={instanceDetailModalVisible}\r\n        onCancel={() => {\r\n          setInstanceDetailModalVisible(false);\r\n          setSelectedInstance(null);\r\n          setInstanceMetrics(null);\r\n        }}\r\n        width={800}\r\n        footer={[\r\n          <Button key=\"close\" onClick={() => setInstanceDetailModalVisible(false)}>\r\n            关闭\r\n          </Button>\r\n        ]}\r\n      >\r\n        {selectedInstance && (\r\n          <Descriptions bordered column={2}>\r\n            <Descriptions.Item label=\"实例ID\">{selectedInstance.id}</Descriptions.Item>\r\n            <Descriptions.Item label=\"实例名称\">{selectedInstance.name}</Descriptions.Item>\r\n            <Descriptions.Item label=\"云服务商\">{selectedInstance.provider}</Descriptions.Item>\r\n            <Descriptions.Item label=\"地域\">{selectedInstance.region}</Descriptions.Item>\r\n            <Descriptions.Item label=\"状态\">\r\n              <Tag color={statusColor(selectedInstance.status)}>{selectedInstance.status}</Tag>\r\n            </Descriptions.Item>\r\n            <Descriptions.Item label=\"IP地址\">{selectedInstance.ipAddress || '未分配'}</Descriptions.Item>\r\n            <Descriptions.Item label=\"实例类型\">{selectedInstance.instanceType}</Descriptions.Item>\r\n            <Descriptions.Item label=\"创建时间\">{selectedInstance.createdTime}</Descriptions.Item>\r\n            <Descriptions.Item label=\"过期时间\">{selectedInstance.expiredTime || '按需计费'}</Descriptions.Item>\r\n          </Descriptions>\r\n        )}\r\n        \r\n        {instanceMetrics && (\r\n          <Card title=\"监控指标\" style={{ marginTop: 16 }}>\r\n            <Row gutter={16}>\r\n              <Col span={6}>\r\n                <Statistic title=\"CPU使用率\" value={instanceMetrics.cpu} suffix=\"%\" />\r\n              </Col>\r\n              <Col span={6}>\r\n                <Statistic title=\"内存使用率\" value={instanceMetrics.memory} suffix=\"%\" />\r\n              </Col>\r\n              <Col span={6}>\r\n                <Statistic title=\"磁盘使用率\" value={instanceMetrics.disk} suffix=\"%\" />\r\n              </Col>\r\n              <Col span={6}>\r\n                <Statistic title=\"网络入流量\" value={instanceMetrics.networkIn} suffix=\"KB/s\" />\r\n              </Col>\r\n            </Row>\r\n          </Card>\r\n        )}\r\n      </Modal>\r\n\r\n      <Drawer\r\n        title=\"客户端配置\"\r\n        placement=\"right\"\r\n        onClose={() => setConfigDrawerVisible(false)}\r\n        open={configDrawerVisible}\r\n        width={400}\r\n      >\r\n        <Alert\r\n          message=\"配置说明\"\r\n          description=\"客户端配置将影响所有平台操作的行为\"\r\n          type=\"info\"\r\n          showIcon\r\n          style={{ marginBottom: 16 }}\r\n        />\r\n        <Form layout=\"vertical\">\r\n          <Form.Item label=\"代理设置\">\r\n            <Switch checkedChildren=\"启用\" unCheckedChildren=\"禁用\" />\r\n          </Form.Item>\r\n          <Form.Item label=\"指纹保护\">\r\n            <Switch defaultChecked checkedChildren=\"启用\" unCheckedChildren=\"禁用\" />\r\n          </Form.Item>\r\n          <Form.Item label=\"时区\">\r\n            <Select defaultValue=\"Asia/Shanghai\" style={{ width: '100%' }}>\r\n              <Option value=\"Asia/Shanghai\">Asia/Shanghai (UTC+8)</Option>\r\n              <Option value=\"America/New_York\">America/New_York (UTC-5)</Option>\r\n              <Option value=\"Europe/London\">Europe/London (UTC+0)</Option>\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item label=\"语言\">\r\n            <Select defaultValue=\"zh-CN\" style={{ width: '100%' }}>\r\n              <Option value=\"zh-CN\">简体中文</Option>\r\n              <Option value=\"en-US\">English (US)</Option>\r\n              <Option value=\"ja-JP\">日本語</Option>\r\n            </Select>\r\n          </Form.Item>\r\n        </Form>\r\n      </Drawer>\r\n\r\n      <Drawer\r\n        title={`任务详情 - ${selectedTask?.name}`}\r\n        placement=\"right\"\r\n        onClose={() => setTaskDetailDrawerVisible(false)}\r\n        open={taskDetailDrawerVisible}\r\n        width={500}\r\n      >\r\n        {selectedTask && (\r\n          <div>\r\n            <Descriptions column={1} bordered>\r\n              <Descriptions.Item label=\"任务ID\">{selectedTask.id}</Descriptions.Item>\r\n              <Descriptions.Item label=\"任务名称\">{selectedTask.name}</Descriptions.Item>\r\n              <Descriptions.Item label=\"描述\">{selectedTask.description}</Descriptions.Item>\r\n              <Descriptions.Item label=\"平台\">{selectedTask.platform}</Descriptions.Item>\r\n              <Descriptions.Item label=\"类型\">{selectedTask.type}</Descriptions.Item>\r\n              <Descriptions.Item label=\"调度规则\">{selectedTask.schedule}</Descriptions.Item>\r\n              <Descriptions.Item label=\"状态\">\r\n                <Tag color={statusColor(selectedTask.status)}>{selectedTask.status}</Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"上次执行\">{selectedTask.lastRun || '-'}</Descriptions.Item>\r\n              <Descriptions.Item label=\"下次执行\">{selectedTask.nextRun || '-'}</Descriptions.Item>\r\n              <Descriptions.Item label=\"成功次数\">{selectedTask.successCount || 0}</Descriptions.Item>\r\n              <Descriptions.Item label=\"失败次数\">{selectedTask.errorCount || 0}</Descriptions.Item>\r\n            </Descriptions>\r\n            \r\n            {selectedTask.status === 'running' && (\r\n              <Card title=\"执行进度\" style={{ marginTop: 16 }}>\r\n                <Progress percent={selectedTask.progress} status=\"active\" />\r\n              </Card>\r\n            )}\r\n          </div>\r\n        )}\r\n      </Drawer>\r\n\r\n      <Drawer\r\n        title={`客户端详情 - ${selectedClient?.name}`}\r\n        placement=\"right\"\r\n        onClose={() => setClientDetailDrawerVisible(false)}\r\n        open={clientDetailDrawerVisible}\r\n        width={600}\r\n      >\r\n        {selectedClient && (\r\n          <div>\r\n            <Descriptions column={2} bordered>\r\n              <Descriptions.Item label=\"客户端ID\">{selectedClient.id}</Descriptions.Item>\r\n              <Descriptions.Item label=\"名称\">{selectedClient.name}</Descriptions.Item>\r\n              <Descriptions.Item label=\"IP地址\">{selectedClient.ip}</Descriptions.Item>\r\n              <Descriptions.Item label=\"端口\">{selectedClient.port}</Descriptions.Item>\r\n              <Descriptions.Item label=\"状态\">\r\n                <Tag color={selectedClient.status === 'online' ? 'green' : selectedClient.status === 'offline' ? 'orange' : 'red'}>\r\n                  {selectedClient.status === 'online' ? '在线' : selectedClient.status === 'offline' ? '离线' : '异常'}\r\n                </Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"平台\">{selectedClient.platform}</Descriptions.Item>\r\n              <Descriptions.Item label=\"版本\">{selectedClient.version}</Descriptions.Item>\r\n              <Descriptions.Item label=\"运行时间\">\r\n                {selectedClient.uptime > 0 ? `${Math.floor(selectedClient.uptime / 3600)}小时 ${Math.floor((selectedClient.uptime % 3600) / 60)}分钟` : '-'}\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"区域\">{selectedClient.region}</Descriptions.Item>\r\n              <Descriptions.Item label=\"分组\">{selectedClient.group}</Descriptions.Item>\r\n            </Descriptions>\r\n\r\n            <Card title=\"资源使用情况\" style={{ marginTop: 16 }}>\r\n              <Row gutter={16}>\r\n                <Col span={8}>\r\n                  <Card>\r\n                    <Statistic \r\n                      title=\"CPU使用率\" \r\n                      value={selectedClient.cpu} \r\n                      suffix=\"%\" \r\n                      valueStyle={{ color: selectedClient.cpu > 80 ? '#ff4d4f' : '#52c41a' }} \r\n                    />\r\n                    <Progress percent={selectedClient.cpu} status={selectedClient.cpu > 80 ? 'exception' : 'normal'} />\r\n                  </Card>\r\n                </Col>\r\n                <Col span={8}>\r\n                  <Card>\r\n                    <Statistic \r\n                      title=\"内存使用率\" \r\n                      value={selectedClient.memory} \r\n                      suffix=\"%\" \r\n                      valueStyle={{ color: selectedClient.memory > 80 ? '#ff4d4f' : '#52c41a' }} \r\n                    />\r\n                    <Progress percent={selectedClient.memory} status={selectedClient.memory > 80 ? 'exception' : 'normal'} />\r\n                  </Card>\r\n                </Col>\r\n                <Col span={8}>\r\n                  <Card>\r\n                    <Statistic \r\n                      title=\"磁盘使用率\" \r\n                      value={selectedClient.disk} \r\n                      suffix=\"%\" \r\n                      valueStyle={{ color: selectedClient.disk > 80 ? '#ff4d4f' : '#52c41a' }} \r\n                    />\r\n                    <Progress percent={selectedClient.disk} status={selectedClient.disk > 80 ? 'exception' : 'normal'} />\r\n                  </Card>\r\n                </Col>\r\n              </Row>\r\n            </Card>\r\n\r\n            <Card title=\"运行信息\" style={{ marginTop: 16 }}>\r\n              <Row gutter={16}>\r\n                <Col span={8}>\r\n                  <Statistic title=\"任务数量\" value={selectedClient.tasks} prefix={<ScheduleOutlined />} />\r\n                </Col>\r\n                <Col span={8}>\r\n                  <Statistic title=\"平台数量\" value={selectedClient.platforms} prefix={<ShopOutlined />} />\r\n                </Col>\r\n                <Col span={8}>\r\n                  <Statistic title=\"最后活跃\" value={new Date(selectedClient.lastSeen).toLocaleString()} prefix={<ClockCircleOutlined />} />\r\n                </Col>\r\n              </Row>\r\n            </Card>\r\n\r\n            <Card title=\"标签\" style={{ marginTop: 16 }}>\r\n              <Space wrap>\r\n                {selectedClient.tags.map((tag, index) => (\r\n                  <Tag key={index}>{tag}</Tag>\r\n                ))}\r\n              </Space>\r\n            </Card>\r\n\r\n            <Card title=\"操作\" style={{ marginTop: 16 }}>\r\n              <Space>\r\n                {selectedClient.status !== 'online' && (\r\n                  <Button \r\n                    type=\"primary\" \r\n                    icon={<PlayCircleOutlined />}\r\n                    onClick={() => connectToClientById(selectedClient.id)}\r\n                  >\r\n                    连接\r\n                  </Button>\r\n                )}\r\n                {selectedClient.status === 'online' && (\r\n                  <Button \r\n                    icon={<PauseCircleOutlined />}\r\n                    onClick={() => disconnectFromClient(selectedClient.id)}\r\n                  >\r\n                    断开连接\r\n                  </Button>\r\n                )}\r\n                <Button \r\n                  icon={<ReloadOutlined />}\r\n                  onClick={() => batchRestart()}\r\n                >\r\n                  重启\r\n                </Button>\r\n                <Button \r\n                  icon={<SettingOutlined />}\r\n                  onClick={() => message.info('客户端配置功能开发中')}\r\n                >\r\n                  配置\r\n                </Button>\r\n              </Space>\r\n            </Card>\r\n          </div>\r\n        )}\r\n      </Drawer>\r\n\r\n      <Modal\r\n        title=\"添加客户端组\"\r\n        open={clientGroupModalVisible}\r\n        onCancel={() => setClientGroupModalVisible(false)}\r\n        footer={null}\r\n      >\r\n        <Form form={groupForm} onFinish={createClientGroup} layout=\"vertical\">\r\n          <Form.Item name=\"name\" label=\"组名称\" rules={[{ required: true, message: '请输入组名称' }]}>\r\n            <Input placeholder=\"例如：生产组\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"description\" label=\"组描述\">\r\n            <Input.TextArea rows={3} placeholder=\"请输入组描述\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"color\" label=\"组颜色\">\r\n            <Select defaultValue=\"#1890ff\">\r\n              <Option value=\"#1890ff\">蓝色</Option>\r\n              <Option value=\"#52c41a\">绿色</Option>\r\n              <Option value=\"#faad14\">黄色</Option>\r\n              <Option value=\"#ff4d4f\">红色</Option>\r\n              <Option value=\"#722ed1\">紫色</Option>\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item>\r\n            <Button type=\"primary\" htmlType=\"submit\" block>\r\n              创建客户端组\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n    </div>\r\n  );\r\n};\r\n\r\nconst OperationAgentEnhanced = memo(OperationAgentEnhancedBase);\r\nOperationAgentEnhanced.displayName = 'OperationAgentEnhanced';\r\n\r\nexport default OperationAgentEnhanced;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/OperationAgentEnhanced.tsx"
    },
    "17": {
      "path": "/dashboard/auto-pilot",
      "file": "@/pages/AutoPilot/index.tsx",
      "parentId": "4",
      "id": "17",
      "absPath": "/dashboard/auto-pilot",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Tabs,\n  Table,\n  Tag,\n  Statistic,\n  Row,\n  Col,\n  Spin,\n  message,\n  Button,\n  Modal,\n  Form,\n  Switch,\n  InputNumber,\n  Select,\n  Timeline,\n  Badge,\n  Typography,\n  Space,\n  Divider,\n  Alert,\n  Tooltip,\n  Progress,\n  RobotOutlined,\n  PlayCircleOutlined,\n  PauseCircleOutlined,\n  StopOutlined,\n  WarningOutlined,\n  SettingOutlined,\n  HistoryOutlined,\n  DashboardOutlined,\n  ThunderboltOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  SyncOutlined,\n  ClockCircleOutlined,\n  DollarOutlined,\n  ShoppingCartOutlined,\n  ToolOutlined,\n  PlusOutlined,\n  Option,\n  Title,\n  Text,\n  Paragraph,\n  FC,\n} from '@/imports';\nimport type { ColumnsType } from 'antd/es/table';\n\ninterface AutopilotSession {\n  id: string;\n  tenant_id: string;\n  shop_id: string;\n  status: 'IDLE' | 'RUNNING' | 'PAUSED' | 'STOPPED' | 'ERROR';\n  mode: 'FULL_AUTO' | 'SEMI_AUTO' | 'MANUAL';\n  config: any;\n  enabled_features: string[];\n  total_revenue: number;\n  total_orders: number;\n  total_profit: number;\n  tasks_completed: number;\n  tasks_failed: number;\n  started_at: string | null;\n  stopped_at: string | null;\n  last_activity_at: string | null;\n  error_message: string | null;\n  created_at: string;\n}\n\ninterface AutopilotLog {\n  id: string;\n  session_id: string;\n  log_type: 'TASK' | 'DECISION' | 'ERROR' | 'WARNING' | 'INFO';\n  task_type: string | null;\n  task_status: 'PENDING' | 'RUNNING' | 'COMPLETED' | 'FAILED';\n  description: string;\n  input_data: any;\n  output_data: any;\n  error_details: any;\n  duration_ms: number;\n  is_auto_executed: boolean;\n  trace_id: string | null;\n  created_at: string;\n}\n\ninterface AutopilotConfig {\n  features: {\n    pricing: boolean;\n    inventory: boolean;\n    advertising: boolean;\n    orderFulfillment: boolean;\n    customerService: boolean;\n  };\n  thresholds: {\n    minProfitMargin: number;\n    maxInventoryDays: number;\n    minAdRoi: number;\n  };\n  notifications: {\n    email: boolean;\n    sms: boolean;\n    webhook: string | null;\n  };\n}\n\nconst statusColors: Record<string, string> = {\n  IDLE: 'default',\n  RUNNING: 'processing',\n  PAUSED: 'warning',\n  STOPPED: 'default',\n  ERROR: 'error'\n};\n\nconst statusIcons: Record<string, React.ReactNode> = {\n  IDLE: <ClockCircleOutlined />,\n  RUNNING: <SyncOutlined spin />,\n  PAUSED: <PauseCircleOutlined />,\n  STOPPED: <StopOutlined />,\n  ERROR: <WarningOutlined />\n};\n\nconst modeColors: Record<string, string> = {\n  FULL_AUTO: 'red',\n  SEMI_AUTO: 'orange',\n  MANUAL: 'blue'\n};\n\nconst logTypeColors: Record<string, string> = {\n  TASK: 'blue',\n  DECISION: 'purple',\n  ERROR: 'red',\n  WARNING: 'orange',\n  INFO: 'default'\n};\n\nconst taskStatusColors: Record<string, string> = {\n  PENDING: 'default',\n  RUNNING: 'processing',\n  COMPLETED: 'success',\n  FAILED: 'error'\n};\n\nconst AutoPilotPage: FC = () => {\n  const [loading, setLoading] = useState(true);\n  const [sessions, setSessions] = useState<AutopilotSession[]>([]);\n  const [selectedSession, setSelectedSession] = useState<AutopilotSession | null>(null);\n  const [logs, setLogs] = useState<AutopilotLog[]>([]);\n  const [createModalVisible, setCreateModalVisible] = useState(false);\n  const [configModalVisible, setConfigModalVisible] = useState(false);\n  const [emergencyStopModalVisible, setEmergencyStopModalVisible] = useState(false);\n  const [form] = Form.useForm();\n  const [configForm] = Form.useForm();\n\n  useEffect(() => {\n    fetchSessions();\n  }, []);\n\n  useEffect(() => {\n    if (selectedSession) {\n      fetchSessionLogs(selectedSession.id);\n      const interval = setInterval(() => {\n        fetchSessionLogs(selectedSession.id);\n      }, 10000);\n      return () => clearInterval(interval);\n    }\n  }, [selectedSession]);\n\n  const fetchSessions = async () => {\n    setLoading(true);\n    try {\n      const res = await fetch('/api/v1/autopilot/sessions');\n      const data = await res.json();\n      if (data.success) {\n        setSessions(data.data);\n        if (data.data.length > 0 && !selectedSession) {\n          setSelectedSession(data.data[0]);\n        }\n      }\n    } catch (error) {\n      message.error('Failed to fetch sessions');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const fetchSessionLogs = async (sessionId: string) => {\n    try {\n      const res = await fetch(`/api/v1/autopilot/sessions/${sessionId}/logs?limit=100`);\n      const data = await res.json();\n      if (data.success) {\n        setLogs(data.data);\n      }\n    } catch (error) {\n      console.error('Failed to fetch logs:', error);\n    }\n  };\n\n  const handleCreateSession = async (values: any) => {\n    try {\n      const res = await fetch('/api/v1/autopilot/sessions', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(values)\n      });\n      const data = await res.json();\n\n      if (data.success) {\n        message.success('Session created successfully');\n        setCreateModalVisible(false);\n        form.resetFields();\n        fetchSessions();\n      } else {\n        message.error(data.message || 'Failed to create session');\n      }\n    } catch (error) {\n      message.error('Failed to create session');\n    }\n  };\n\n  const handleStartSession = async (sessionId: string) => {\n    try {\n      const res = await fetch(`/api/v1/autopilot/sessions/${sessionId}/start`, {\n        method: 'POST'\n      });\n      const data = await res.json();\n\n      if (data.success) {\n        message.success('Session started successfully');\n        fetchSessions();\n      } else {\n        message.error(data.message || 'Failed to start session');\n      }\n    } catch (error) {\n      message.error('Failed to start session');\n    }\n  };\n\n  const handlePauseSession = async (sessionId: string) => {\n    try {\n      const res = await fetch(`/api/v1/autopilot/sessions/${sessionId}/pause`, {\n        method: 'POST'\n      });\n      const data = await res.json();\n\n      if (data.success) {\n        message.success('Session paused');\n        fetchSessions();\n      } else {\n        message.error(data.message || 'Failed to pause session');\n      }\n    } catch (error) {\n      message.error('Failed to pause session');\n    }\n  };\n\n  const handleResumeSession = async (sessionId: string) => {\n    try {\n      const res = await fetch(`/api/v1/autopilot/sessions/${sessionId}/resume`, {\n        method: 'POST'\n      });\n      const data = await res.json();\n\n      if (data.success) {\n        message.success('Session resumed');\n        fetchSessions();\n      } else {\n        message.error(data.message || 'Failed to resume session');\n      }\n    } catch (error) {\n      message.error('Failed to resume session');\n    }\n  };\n\n  const handleStopSession = async (sessionId: string, reason?: string) => {\n    try {\n      const res = await fetch(`/api/v1/autopilot/sessions/${sessionId}/stop`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ reason })\n      });\n      const data = await res.json();\n\n      if (data.success) {\n        message.success('Session stopped');\n        fetchSessions();\n      } else {\n        message.error(data.message || 'Failed to stop session');\n      }\n    } catch (error) {\n      message.error('Failed to stop session');\n    }\n  };\n\n  const handleEmergencyStop = async (sessionId: string, reason: string) => {\n    try {\n      const res = await fetch(`/api/v1/autopilot/sessions/${sessionId}/emergency-stop`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ reason })\n      });\n      const data = await res.json();\n\n      if (data.success) {\n        message.warning('Emergency stop executed!');\n        setEmergencyStopModalVisible(false);\n        fetchSessions();\n      } else {\n        message.error(data.message || 'Failed to execute emergency stop');\n      }\n    } catch (error) {\n      message.error('Failed to execute emergency stop');\n    }\n  };\n\n  const handleUpdateConfig = async (sessionId: string, config: Partial<AutopilotConfig>) => {\n    try {\n      const res = await fetch(`/api/v1/autopilot/sessions/${sessionId}/config`, {\n        method: 'PUT',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(config)\n      });\n      const data = await res.json();\n\n      if (data.success) {\n        message.success('Config updated');\n        setConfigModalVisible(false);\n        fetchSessions();\n      } else {\n        message.error(data.message || 'Failed to update config');\n      }\n    } catch (error) {\n      message.error('Failed to update config');\n    }\n  };\n\n  const renderSessionCard = (session: AutopilotSession) => (\n    <Card\n      hoverable\n      style={{ marginBottom: 16 }}\n      onClick={() => setSelectedSession(session)}\n      className={selectedSession?.id === session.id ? 'ant-card-bordered' : ''}\n    >\n      <Row gutter={16} align=\"middle\">\n        <Col flex=\"auto\">\n          <Space direction=\"vertical\" size=\"small\" style={{ width: '100%' }}>\n            <Space>\n              <Text strong style={{ fontSize: 16 }}>\n                <RobotOutlined /> Session {session.id.slice(0, 8)}\n              </Text>\n              <Tag color={statusColors[session.status]} icon={statusIcons[session.status]}>\n                {session.status}\n              </Tag>\n              <Tag color={modeColors[session.mode]}>{session.mode}</Tag>\n            </Space>\n            <Space>\n              <Text type=\"secondary\">Shop: {session.shop_id}</Text>\n              <Divider type=\"vertical\" />\n              <Text type=\"secondary\">\n                Started: {session.started_at ? new Date(session.started_at).toLocaleString() : 'Not started'}\n              </Text>\n            </Space>\n            <Row gutter={16}>\n              <Col>\n                <Statistic\n                  title=\"Revenue\"\n                  value={session.total_revenue}\n                  prefix=\"$\"\n                  valueStyle={{ fontSize: 14 }}\n                />\n              </Col>\n              <Col>\n                <Statistic\n                  title=\"Orders\"\n                  value={session.total_orders}\n                  valueStyle={{ fontSize: 14 }}\n                />\n              </Col>\n              <Col>\n                <Statistic\n                  title=\"Profit\"\n                  value={session.total_profit}\n                  prefix=\"$\"\n                  valueStyle={{ fontSize: 14, color: session.total_profit >= 0 ? '#52c41a' : '#ff4d4f' }}\n                />\n              </Col>\n              <Col>\n                <Statistic\n                  title=\"Tasks\"\n                  value={session.tasks_completed}\n                  suffix={`/ ${session.tasks_completed + session.tasks_failed}`}\n                  valueStyle={{ fontSize: 14 }}\n                />\n              </Col>\n            </Row>\n          </Space>\n        </Col>\n        <Col>\n          <Space direction=\"vertical\">\n            {session.status === 'IDLE' && (\n              <Button type=\"primary\" icon={<PlayCircleOutlined />} onClick={(e) => { e.stopPropagation(); handleStartSession(session.id); }}>\n                Start\n              </Button>\n            )}\n            {session.status === 'RUNNING' && (\n              <>\n                <Button icon={<PauseCircleOutlined />} onClick={(e) => { e.stopPropagation(); handlePauseSession(session.id); }}>\n                  Pause\n                </Button>\n                <Button danger icon={<StopOutlined />} onClick={(e) => { e.stopPropagation(); handleStopSession(session.id); }}>\n                  Stop\n                </Button>\n              </>\n            )}\n            {session.status === 'PAUSED' && (\n              <>\n                <Button type=\"primary\" icon={<PlayCircleOutlined />} onClick={(e) => { e.stopPropagation(); handleResumeSession(session.id); }}>\n                  Resume\n                </Button>\n                <Button danger icon={<StopOutlined />} onClick={(e) => { e.stopPropagation(); handleStopSession(session.id); }}>\n                  Stop\n                </Button>\n              </>\n            )}\n          </Space>\n        </Col>\n      </Row>\n      {session.error_message && (\n        <Alert type=\"error\" message={session.error_message} style={{ marginTop: 12 }} />\n      )}\n    </Card>\n  );\n\n  const logsColumns: ColumnsType<AutopilotLog> = [\n    {\n      title: 'Time',\n      dataIndex: 'created_at',\n      key: 'created_at',\n      width: 150,\n      render: (date: string) => new Date(date).toLocaleTimeString()\n    },\n    {\n      title: 'Type',\n      dataIndex: 'log_type',\n      key: 'log_type',\n      width: 100,\n      render: (type: string) => <Tag color={logTypeColors[type]}>{type}</Tag>\n    },\n    {\n      title: 'Task',\n      dataIndex: 'task_type',\n      key: 'task_type',\n      width: 150,\n      render: (task: string | null) => task || '-'\n    },\n    {\n      title: 'Status',\n      dataIndex: 'task_status',\n      key: 'task_status',\n      width: 100,\n      render: (status: string) => (\n        <Tag color={taskStatusColors[status]} icon={\n          status === 'COMPLETED' ? <CheckCircleOutlined /> :\n          status === 'FAILED' ? <CloseCircleOutlined /> :\n          status === 'RUNNING' ? <SyncOutlined spin /> : null\n        }>\n          {status}\n        </Tag>\n      )\n    },\n    {\n      title: 'Description',\n      dataIndex: 'description',\n      key: 'description',\n      ellipsis: true\n    },\n    {\n      title: 'Duration',\n      dataIndex: 'duration_ms',\n      key: 'duration_ms',\n      width: 100,\n      render: (ms: number) => ms ? `${ms}ms` : '-'\n    },\n    {\n      title: 'Auto',\n      dataIndex: 'is_auto_executed',\n      key: 'is_auto_executed',\n      width: 80,\n      render: (auto: boolean) => auto ? <Badge status=\"processing\" text=\"Auto\" /> : <Badge status=\"default\" text=\"Manual\" />\n    }\n  ];\n\n  const renderConfigForm = () => (\n    <Form form={configForm} layout=\"vertical\" initialValues={selectedSession?.config}>\n      <Title level={5}>Enabled Features</Title>\n      <Row gutter={16}>\n        <Col span={12}>\n          <Form.Item name={['features', 'pricing']} label=\"Auto Pricing\" valuePropName=\"checked\">\n            <Switch />\n          </Form.Item>\n        </Col>\n        <Col span={12}>\n          <Form.Item name={['features', 'inventory']} label=\"Inventory Management\" valuePropName=\"checked\">\n            <Switch />\n          </Form.Item>\n        </Col>\n        <Col span={12}>\n          <Form.Item name={['features', 'advertising']} label=\"Ad Optimization\" valuePropName=\"checked\">\n            <Switch />\n          </Form.Item>\n        </Col>\n        <Col span={12}>\n          <Form.Item name={['features', 'orderFulfillment']} label=\"Order Fulfillment\" valuePropName=\"checked\">\n            <Switch />\n          </Form.Item>\n        </Col>\n        <Col span={12}>\n          <Form.Item name={['features', 'customerService']} label=\"Customer Service\" valuePropName=\"checked\">\n            <Switch />\n          </Form.Item>\n        </Col>\n      </Row>\n\n      <Divider />\n\n      <Title level={5}>Thresholds</Title>\n      <Row gutter={16}>\n        <Col span={8}>\n          <Form.Item name={['thresholds', 'minProfitMargin']} label=\"Min Profit Margin (%)\">\n            <InputNumber min={0} max={100} style={{ width: '100%' }} />\n          </Form.Item>\n        </Col>\n        <Col span={8}>\n          <Form.Item name={['thresholds', 'maxInventoryDays']} label=\"Max Inventory Days\">\n            <InputNumber min={1} style={{ width: '100%' }} />\n          </Form.Item>\n        </Col>\n        <Col span={8}>\n          <Form.Item name={['thresholds', 'minAdRoi']} label=\"Min Ad ROI (%)\">\n            <InputNumber min={0} style={{ width: '100%' }} />\n          </Form.Item>\n        </Col>\n      </Row>\n\n      <Divider />\n\n      <Title level={5}>Notifications</Title>\n      <Row gutter={16}>\n        <Col span={12}>\n          <Form.Item name={['notifications', 'email']} label=\"Email Notifications\" valuePropName=\"checked\">\n            <Switch />\n          </Form.Item>\n        </Col>\n        <Col span={12}>\n          <Form.Item name={['notifications', 'sms']} label=\"SMS Notifications\" valuePropName=\"checked\">\n            <Switch />\n          </Form.Item>\n        </Col>\n      </Row>\n    </Form>\n  );\n\n  if (loading) {\n    return (\n      <div style={{ textAlign: 'center', padding: '100px 0' }}>\n        <Spin size=\"large\" />\n      </div>\n    );\n  }\n\n  return (\n    <div style={{ padding: 24 }}>\n      <Row gutter={[16, 16]}>\n        <Col span={24}>\n          <Card>\n            <Row gutter={16} align=\"middle\">\n              <Col flex=\"auto\">\n                <Title level={3} style={{ margin: 0 }}>\n                  <RobotOutlined /> AI AutoPilot\n                </Title>\n                <Text type=\"secondary\">\n                  Automate your store operations with AI-powered decision making\n                </Text>\n              </Col>\n              <Col>\n                <Space>\n                  <Button\n                    type=\"primary\"\n                    icon={<PlusOutlined />}\n                    onClick={() => setCreateModalVisible(true)}\n                  >\n                    New Session\n                  </Button>\n                  {selectedSession && (\n                    <Button\n                      icon={<SettingOutlined />}\n                      onClick={() => {\n                        configForm.setFieldsValue(selectedSession.config);\n                        setConfigModalVisible(true);\n                      }}\n                    >\n                      Configure\n                    </Button>\n                  )}\n                  {selectedSession && selectedSession.status === 'RUNNING' && (\n                    <Button\n                      danger\n                      icon={<WarningOutlined />}\n                      onClick={() => setEmergencyStopModalVisible(true)}\n                    >\n                      Emergency Stop\n                    </Button>\n                  )}\n                </Space>\n              </Col>\n            </Row>\n          </Card>\n        </Col>\n\n        <Col span={24}>\n          <Tabs \n            defaultActiveKey=\"sessions\"\n            items={[\n              { key: 'sessions', label: <span><DashboardOutlined /> Sessions</span>, children: (\n                sessions.length === 0 ? (\n                  <Card>\n                    <div style={{ textAlign: 'center', padding: '40px 0' }}>\n                      <RobotOutlined style={{ fontSize: 48, color: '#d9d9d9' }} />\n                      <Paragraph type=\"secondary\" style={{ marginTop: 16 }}>\n                        No autopilot sessions yet. Create one to start automating your store.\n                      </Paragraph>\n                      <Button type=\"primary\" onClick={() => setCreateModalVisible(true)}>\n                        Create First Session\n                      </Button>\n                    </div>\n                  </Card>\n                ) : (\n                  sessions.map(session => renderSessionCard(session))\n                )\n              )},\n              { key: 'logs', label: <span><HistoryOutlined /> Activity Log</span>, disabled: !selectedSession, children: (\n                selectedSession && (\n                  <Card title={`Session ${selectedSession.id.slice(0, 8)} - Activity Log`}>\n                    <Table\n                      columns={logsColumns}\n                      dataSource={logs}\n                      rowKey=\"id\"\n                      pagination={{ pageSize: 20 }}\n                      size=\"small\"\n                    />\n                  </Card>\n                )\n              )},\n              { key: 'features', label: <span><ThunderboltOutlined /> Features</span>, disabled: !selectedSession, children: (\n                selectedSession && (\n                  <Card>\n                    <Row gutter={[16, 16]}>\n                      {selectedSession.enabled_features.map(feature => (\n                        <Col span={8} key={feature}>\n                          <Card size=\"small\">\n                            <Statistic\n                              title={feature.replace(/([A-Z])/g, ' $1').trim()}\n                              value=\"Active\"\n                              valueStyle={{ color: '#52c41a', fontSize: 14 }}\n                              prefix={<CheckCircleOutlined />}\n                            />\n                          </Card>\n                        </Col>\n                      ))}\n                    </Row>\n                  </Card>\n                )\n              )},\n            ]}\n          />\n        </Col>\n      </Row>\n\n      <Modal\n        title=\"Create New Autopilot Session\"\n        open={createModalVisible}\n        onCancel={() => setCreateModalVisible(false)}\n        onOk={() => form.submit()}\n        width={600}\n      >\n        <Form form={form} layout=\"vertical\" onFinish={handleCreateSession}>\n          <Form.Item name=\"shopId\" label=\"Shop ID\" rules={[{ required: true }]}>\n            <Select placeholder=\"Select a shop\">\n              <Option value=\"shop-1\">Shop 1</Option>\n              <Option value=\"shop-2\">Shop 2</Option>\n            </Select>\n          </Form.Item>\n          <Form.Item name=\"mode\" label=\"Automation Mode\" rules={[{ required: true }]}>\n            <Select placeholder=\"Select mode\">\n              <Option value=\"FULL_AUTO\">\n                <Tag color=\"red\">Full Auto</Tag> - AI makes all decisions\n              </Option>\n              <Option value=\"SEMI_AUTO\">\n                <Tag color=\"orange\">Semi Auto</Tag> - AI suggests, you approve\n              </Option>\n              <Option value=\"MANUAL\">\n                <Tag color=\"blue\">Manual</Tag> - AI only monitors\n              </Option>\n            </Select>\n          </Form.Item>\n          <Alert\n            message=\"Warning\"\n            description=\"Full Auto mode allows AI to make decisions without human approval. Use with caution.\"\n            type=\"warning\"\n            showIcon\n            style={{ marginBottom: 16 }}\n          />\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"Session Configuration\"\n        open={configModalVisible}\n        onCancel={() => setConfigModalVisible(false)}\n        onOk={() => handleUpdateConfig(selectedSession?.id || '', configForm.getFieldsValue())}\n        width={700}\n      >\n        {renderConfigForm()}\n      </Modal>\n\n      <Modal\n        title={<span style={{ color: '#ff4d4f' }}><WarningOutlined /> Emergency Stop</span>}\n        open={emergencyStopModalVisible}\n        onCancel={() => setEmergencyStopModalVisible(false)}\n        onOk={() => {\n          const reason = 'User initiated emergency stop';\n          handleEmergencyStop(selectedSession?.id || '', reason);\n        }}\n        okText=\"Confirm Emergency Stop\"\n        okButtonProps={{ danger: true }}\n      >\n        <Alert\n          message=\"Warning\"\n          description=\"Emergency stop will immediately halt all automated operations. This action cannot be undone.\"\n          type=\"error\"\n          showIcon\n        />\n        <Paragraph style={{ marginTop: 16 }}>\n          Are you sure you want to execute an emergency stop for session {selectedSession?.id.slice(0, 8)}?\n        </Paragraph>\n      </Modal>\n    </div>\n  );\n};\n\nexport default AutoPilotPage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/AutoPilot/index.tsx"
    },
    "18": {
      "path": "/dashboard/task-center",
      "file": "@/pages/TaskCenter/index.tsx",
      "parentId": "4",
      "id": "18",
      "absPath": "/dashboard/task-center",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Table,\r\n  Tag,\r\n  Button,\r\n  Space,\r\n  Modal,\r\n  Form,\r\n  Input,\r\n  Select,\r\n  DatePicker,\r\n  message,\r\n  Tooltip,\r\n  Row,\r\n  Col,\r\n  Statistic,\r\n  Badge,\r\n  Dropdown,\r\n  Menu,\r\n  Tabs,\r\n  Progress,\r\n  Alert,\r\n  Descriptions,\r\n  Timeline,\r\n  InputNumber,\r\n  Switch,\r\n  Steps,\r\n  PlayCircleOutlined,\r\n  PauseCircleOutlined,\r\n  StopOutlined,\r\n  ReloadOutlined,\r\n  SearchOutlined,\r\n  FilterOutlined,\r\n  CheckCircleOutlined,\r\n  ClockCircleOutlined,\r\n  SyncOutlined,\r\n  WarningOutlined,\r\n  MoreOutlined,\r\n  EyeOutlined,\r\n  EditOutlined,\r\n  DeleteOutlined,\r\n  PlusOutlined,\r\n  SettingOutlined,\r\n  RocketOutlined,\r\n  ThunderboltOutlined,\r\n  FileTextOutlined,\r\n  BarChartOutlined,\r\n  Option,\r\n  RangePicker,\r\n  Step,\r\n  FC,\r\n} from '@/imports';\r\nimport { taskCenterDataSource, Task } from '@/services/taskCenterDataSource';\r\nimport type { ColumnsType } from 'antd/es/table';\r\n\r\nconst TASK_TYPE_MAP: Record<string, { color: string; text: string; icon: React.ReactNode }> = {\r\n  PRODUCT_SYNC: { color: 'blue', text: 'Product Sync', icon: <SyncOutlined /> },\r\n  ORDER_PROCESS: { color: 'green', text: 'Order Process', icon: <FileTextOutlined /> },\r\n  DATA_ANALYSIS: { color: 'purple', text: 'Data Analysis', icon: <BarChartOutlined /> },\r\n  AD_OPTIMIZATION: { color: 'orange', text: 'Ad Optimization', icon: <ThunderboltOutlined /> },\r\n  INVENTORY_CHECK: { color: 'cyan', text: 'Inventory Check', icon: <RocketOutlined /> },\r\n  CUSTOM: { color: 'default', text: 'Custom', icon: <SettingOutlined /> },\r\n};\r\n\r\nconst TASK_STATUS_MAP: Record<string, { color: string; text: string; icon: React.ReactNode }> = {\r\n  PENDING: { color: 'default', text: 'Pending', icon: <ClockCircleOutlined /> },\r\n  RUNNING: { color: 'processing', text: 'Running', icon: <SyncOutlined spin /> },\r\n  PAUSED: { color: 'warning', text: 'Paused', icon: <PauseCircleOutlined /> },\r\n  COMPLETED: { color: 'success', text: 'Completed', icon: <CheckCircleOutlined /> },\r\n  FAILED: { color: 'error', text: 'Failed', icon: <WarningOutlined /> },\r\n  CANCELLED: { color: 'default', text: 'Cancelled', icon: <StopOutlined /> },\r\n};\r\n\r\nconst PRIORITY_MAP: Record<string, { color: string; text: string }> = {\r\n  LOW: { color: 'default', text: 'Low' },\r\n  MEDIUM: { color: 'blue', text: 'Medium' },\r\n  HIGH: { color: 'orange', text: 'High' },\r\n  URGENT: { color: 'red', text: 'Urgent' },\r\n};\r\n\r\nconst SCHEDULE_TYPE_MAP: Record<string, { color: string; text: string }> = {\r\n  MANUAL: { color: 'default', text: 'Manual' },\r\n  SCHEDULED: { color: 'blue', text: 'Scheduled' },\r\n  TRIGGERED: { color: 'green', text: 'Triggered' },\r\n};\r\n\r\nconst TaskCenter: FC = () => {\r\n  const [loading, setLoading] = useState(false);\r\n  const [tasks, setTasks] = useState<Task[]>([]);\r\n  const [selectedTask, setSelectedTask] = useState<Task | null>(null);\r\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\r\n  const [createModalVisible, setCreateModalVisible] = useState(false);\r\n  const [editModalVisible, setEditModalVisible] = useState(false);\r\n  const [activeTab, setActiveTab] = useState('all');\r\n  const [searchText, setSearchText] = useState('');\r\n  const [filterStatus, setFilterStatus] = useState<string>('');\r\n  const [filterType, setFilterType] = useState<string>('');\r\n  const [filterPriority, setFilterPriority] = useState<string>('');\r\n  const [stats, setStats] = useState({\r\n    total: 0,\r\n    pending: 0,\r\n    running: 0,\r\n    completed: 0,\r\n    failed: 0,\r\n  });\r\n  const [createForm] = Form.useForm();\r\n  const [editForm] = Form.useForm();\r\n\r\n  useEffect(() => {\r\n    fetchTasks();\r\n    const interval = setInterval(fetchTasks, 5000);\r\n    return () => clearInterval(interval);\r\n  }, []);\r\n\r\n  const fetchTasks = async () => {\r\n    setLoading(true);\r\n    try {\r\n      const mockTasks: Task[] = [\r\n        {\r\n          id: '1',\r\n          taskId: 'TASK-2026-001',\r\n          name: 'Product Sync - Amazon US',\r\n          type: 'PRODUCT_SYNC',\r\n          status: 'RUNNING',\r\n          priority: 'HIGH',\r\n          progress: 65,\r\n          createdAt: '2026-03-18 10:00:00',\r\n          startedAt: '2026-03-18 10:05:00',\r\n          estimatedDuration: 30,\r\n          retryCount: 0,\r\n          maxRetries: 3,\r\n          shopId: 'SHOP_001',\r\n          shopName: 'Amazon US Store',\r\n          createdBy: 'admin',\r\n          scheduleType: 'MANUAL',\r\n        },\r\n        {\r\n          id: '2',\r\n          taskId: 'TASK-2026-002',\r\n          name: 'Order Processing - Batch 001',\r\n          type: 'ORDER_PROCESS',\r\n          status: 'COMPLETED',\r\n          priority: 'URGENT',\r\n          progress: 100,\r\n          createdAt: '2026-03-18 09:00:00',\r\n          startedAt: '2026-03-18 09:01:00',\r\n          completedAt: '2026-03-18 09:15:00',\r\n          estimatedDuration: 15,\r\n          actualDuration: 14,\r\n          retryCount: 0,\r\n          maxRetries: 3,\r\n          shopId: 'SHOP_002',\r\n          shopName: 'eBay Outlet',\r\n          createdBy: 'admin',\r\n          scheduleType: 'MANUAL',\r\n          result: { processedOrders: 150, successCount: 148, failedCount: 2 },\r\n        },\r\n        {\r\n          id: '3',\r\n          taskId: 'TASK-2026-003',\r\n          name: 'Data Analysis - Weekly Report',\r\n          type: 'DATA_ANALYSIS',\r\n          status: 'PENDING',\r\n          priority: 'MEDIUM',\r\n          progress: 0,\r\n          createdAt: '2026-03-18 08:00:00',\r\n          estimatedDuration: 60,\r\n          retryCount: 0,\r\n          maxRetries: 3,\r\n          shopId: 'SHOP_003',\r\n          shopName: 'Shopify Brand Store',\r\n          createdBy: 'admin',\r\n          scheduleType: 'SCHEDULED',\r\n          scheduleTime: '2026-03-18 12:00:00',\r\n        },\r\n        {\r\n          id: '4',\r\n          taskId: 'TASK-2026-004',\r\n          name: 'Ad Optimization - Campaign A',\r\n          type: 'AD_OPTIMIZATION',\r\n          status: 'FAILED',\r\n          priority: 'HIGH',\r\n          progress: 45,\r\n          createdAt: '2026-03-18 07:30:00',\r\n          startedAt: '2026-03-18 07:31:00',\r\n          estimatedDuration: 20,\r\n          actualDuration: 25,\r\n          retryCount: 3,\r\n          maxRetries: 3,\r\n          shopId: 'SHOP_001',\r\n          shopName: 'Amazon US Store',\r\n          createdBy: 'admin',\r\n          scheduleType: 'TRIGGERED',\r\n          errorMessage: 'API rate limit exceeded. Please retry later.',\r\n        },\r\n        {\r\n          id: '5',\r\n          taskId: 'TASK-2026-005',\r\n          name: 'Inventory Check - All Warehouses',\r\n          type: 'INVENTORY_CHECK',\r\n          status: 'PAUSED',\r\n          priority: 'MEDIUM',\r\n          progress: 30,\r\n          createdAt: '2026-03-18 06:00:00',\r\n          startedAt: '2026-03-18 06:01:00',\r\n          estimatedDuration: 45,\r\n          retryCount: 0,\r\n          maxRetries: 3,\r\n          shopId: 'SHOP_004',\r\n          shopName: 'Shopee Mall',\r\n          createdBy: 'admin',\r\n          scheduleType: 'MANUAL',\r\n        },\r\n        {\r\n          id: '6',\r\n          taskId: 'TASK-2026-006',\r\n          name: 'Custom Task - Data Export',\r\n          type: 'CUSTOM',\r\n          status: 'COMPLETED',\r\n          priority: 'LOW',\r\n          progress: 100,\r\n          createdAt: '2026-03-17 18:00:00',\r\n          startedAt: '2026-03-17 18:01:00',\r\n          completedAt: '2026-03-17 18:30:00',\r\n          estimatedDuration: 30,\r\n          actualDuration: 29,\r\n          retryCount: 0,\r\n          maxRetries: 3,\r\n          shopId: 'SHOP_005',\r\n          shopName: 'Lazada Store',\r\n          createdBy: 'user1',\r\n          scheduleType: 'MANUAL',\r\n          result: { exportedRecords: 5000, fileSize: '25MB' },\r\n        },\r\n      ];\r\n      setTasks(mockTasks);\r\n      calculateStats(mockTasks);\r\n    } catch (error) {\r\n      message.error('Failed to load tasks');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const calculateStats = (taskList: Task[]) => {\r\n    setStats({\r\n      total: taskList.length,\r\n      pending: taskList.filter((t) => t.status === 'PENDING').length,\r\n      running: taskList.filter((t) => t.status === 'RUNNING').length,\r\n      completed: taskList.filter((t) => t.status === 'COMPLETED').length,\r\n      failed: taskList.filter((t) => t.status === 'FAILED').length,\r\n    });\r\n  };\r\n\r\n  const handleViewDetail = (task: Task) => {\r\n    setSelectedTask(task);\r\n    setDetailModalVisible(true);\r\n  };\r\n\r\n  const handleStart = async (taskId: string) => {\r\n    setLoading(true);\r\n    try {\r\n      console.log('Starting task:', taskId);\r\n      await new Promise((resolve) => setTimeout(resolve, 500));\r\n      message.success('Task started successfully');\r\n      fetchTasks();\r\n    } catch (error) {\r\n      message.error('Failed to start task');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handlePause = async (taskId: string) => {\r\n    setLoading(true);\r\n    try {\r\n      console.log('Pausing task:', taskId);\r\n      await new Promise((resolve) => setTimeout(resolve, 500));\r\n      message.success('Task paused successfully');\r\n      fetchTasks();\r\n    } catch (error) {\r\n      message.error('Failed to pause task');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleStop = async (taskId: string) => {\r\n    setLoading(true);\r\n    try {\r\n      console.log('Stopping task:', taskId);\r\n      await new Promise((resolve) => setTimeout(resolve, 500));\r\n      message.success('Task stopped successfully');\r\n      fetchTasks();\r\n    } catch (error) {\r\n      message.error('Failed to stop task');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleRetry = async (taskId: string) => {\r\n    setLoading(true);\r\n    try {\r\n      console.log('Retrying task:', taskId);\r\n      await new Promise((resolve) => setTimeout(resolve, 500));\r\n      message.success('Task retry initiated');\r\n      fetchTasks();\r\n    } catch (error) {\r\n      message.error('Failed to retry task');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleDelete = async (taskId: string) => {\r\n    setLoading(true);\r\n    try {\r\n      console.log('Deleting task:', taskId);\r\n      await new Promise((resolve) => setTimeout(resolve, 500));\r\n      message.success('Task deleted successfully');\r\n      fetchTasks();\r\n    } catch (error) {\r\n      message.error('Failed to delete task');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleCreate = () => {\r\n    createForm.resetFields();\r\n    setCreateModalVisible(true);\r\n  };\r\n\r\n  const handleCreateSubmit = async () => {\r\n    try {\r\n      const values = await createForm.validateFields();\r\n      console.log('Creating task:', values);\r\n      message.success('Task created successfully');\r\n      setCreateModalVisible(false);\r\n      fetchTasks();\r\n    } catch (error) {\r\n      message.error('Failed to create task');\r\n    }\r\n  };\r\n\r\n  const handleEdit = (task: Task) => {\r\n    setSelectedTask(task);\r\n    editForm.setFieldsValue({\r\n      name: task.name,\r\n      type: task.type,\r\n      priority: task.priority,\r\n      scheduleType: task.scheduleType,\r\n      scheduleTime: task.scheduleTime,\r\n      maxRetries: task.maxRetries,\r\n    });\r\n    setEditModalVisible(true);\r\n  };\r\n\r\n  const handleEditSubmit = async () => {\r\n    try {\r\n      const values = await editForm.validateFields();\r\n      console.log('Updating task:', { taskId: selectedTask?.id, ...values });\r\n      message.success('Task updated successfully');\r\n      setEditModalVisible(false);\r\n      fetchTasks();\r\n    } catch (error) {\r\n      message.error('Failed to update task');\r\n    }\r\n  };\r\n\r\n  const handleSearch = (value: string) => {\r\n    setSearchText(value);\r\n  };\r\n\r\n  const handleFilter = (field: string, value: string) => {\r\n    if (field === 'status') setFilterStatus(value);\r\n    if (field === 'type') setFilterType(value);\r\n    if (field === 'priority') setFilterPriority(value);\r\n  };\r\n\r\n  const getFilteredTasks = () => {\r\n    let filtered = tasks;\r\n\r\n    if (activeTab !== 'all') {\r\n      filtered = filtered.filter((t) => t.status === activeTab);\r\n    }\r\n\r\n    if (searchText) {\r\n      filtered = filtered.filter(\r\n        (t) =>\r\n          (t.taskId || '').toLowerCase().includes(searchText.toLowerCase()) ||\r\n          t.name.toLowerCase().includes(searchText.toLowerCase())\r\n      );\r\n    }\r\n\r\n    if (filterStatus) {\r\n      filtered = filtered.filter((t) => t.status === filterStatus);\r\n    }\r\n\r\n    if (filterType) {\r\n      filtered = filtered.filter((t) => t.type === filterType);\r\n    }\r\n\r\n    if (filterPriority) {\r\n      filtered = filtered.filter((t) => t.priority === filterPriority);\r\n    }\r\n\r\n    return filtered;\r\n  };\r\n\r\n  const columns: ColumnsType<Task> = [\r\n    {\r\n      title: 'Task ID',\r\n      dataIndex: 'taskId',\r\n      key: 'taskId',\r\n      width: 140,\r\n      render: (text: string, record) => (\r\n        <a onClick={() => handleViewDetail(record)}>{text}</a>\r\n      ),\r\n    },\r\n    {\r\n      title: 'Name',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      width: 200,\r\n    },\r\n    {\r\n      title: 'Type',\r\n      dataIndex: 'type',\r\n      key: 'type',\r\n      width: 130,\r\n      filters: Object.keys(TASK_TYPE_MAP).map((key) => ({\r\n        text: TASK_TYPE_MAP[key].text,\r\n        value: key,\r\n      })),\r\n      render: (type: string) => {\r\n        const config = TASK_TYPE_MAP[type];\r\n        return <Tag icon={config.icon} color={config.color}>{config.text}</Tag>;\r\n      },\r\n    },\r\n    {\r\n      title: 'Status',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      width: 110,\r\n      filters: Object.keys(TASK_STATUS_MAP).map((key) => ({\r\n        text: TASK_STATUS_MAP[key].text,\r\n        value: key,\r\n      })),\r\n      render: (status: string) => {\r\n        const config = TASK_STATUS_MAP[status];\r\n        return <Tag icon={config.icon} color={config.color}>{config.text}</Tag>;\r\n      },\r\n    },\r\n    {\r\n      title: 'Priority',\r\n      dataIndex: 'priority',\r\n      key: 'priority',\r\n      width: 90,\r\n      filters: Object.keys(PRIORITY_MAP).map((key) => ({\r\n        text: PRIORITY_MAP[key].text,\r\n        value: key,\r\n      })),\r\n      render: (priority: string) => {\r\n        const config = PRIORITY_MAP[priority];\r\n        return <Tag color={config.color}>{config.text}</Tag>;\r\n      },\r\n    },\r\n    {\r\n      title: 'Progress',\r\n      dataIndex: 'progress',\r\n      key: 'progress',\r\n      width: 150,\r\n      render: (progress: number, record) => (\r\n        <Progress\r\n          percent={progress}\r\n          status={record.status === 'FAILED' ? 'exception' : record.status === 'COMPLETED' ? 'success' : 'active'}\r\n          size=\"small\"\r\n        />\r\n      ),\r\n    },\r\n    {\r\n      title: 'Shop',\r\n      dataIndex: 'shopName',\r\n      key: 'shopName',\r\n      width: 150,\r\n    },\r\n    {\r\n      title: 'Created',\r\n      dataIndex: 'createdAt',\r\n      key: 'createdAt',\r\n      width: 160,\r\n    },\r\n    {\r\n      title: 'Actions',\r\n      key: 'action',\r\n      width: 200,\r\n      fixed: 'right',\r\n      render: (_, record) => (\r\n        <Space size=\"small\">\r\n          <Tooltip title=\"View Details\">\r\n            <Button type=\"link\" icon={<EyeOutlined />} onClick={() => handleViewDetail(record)} />\r\n          </Tooltip>\r\n          {record.status === 'PENDING' && (\r\n            <Tooltip title=\"Start Task\">\r\n              <Button type=\"link\" icon={<PlayCircleOutlined />} onClick={() => record.taskId && handleStart(record.taskId)} />\r\n            </Tooltip>\r\n          )}\r\n          {record.status === 'RUNNING' && (\r\n            <Tooltip title=\"Pause Task\">\r\n              <Button type=\"link\" icon={<PauseCircleOutlined />} onClick={() => record.taskId && handlePause(record.taskId)} />\r\n            </Tooltip>\r\n          )}\r\n          {record.status === 'PAUSED' && (\r\n            <Tooltip title=\"Resume Task\">\r\n              <Button type=\"link\" icon={<PlayCircleOutlined />} onClick={() => record.taskId && handleStart(record.taskId)} />\r\n            </Tooltip>\r\n          )}\r\n          {(record.status === 'RUNNING' || record.status === 'PAUSED') && (\r\n            <Tooltip title=\"Stop Task\">\r\n              <Button type=\"link\" danger icon={<StopOutlined />} onClick={() => record.taskId && handleStop(record.taskId)} />\r\n            </Tooltip>\r\n          )}\r\n          {record.status === 'FAILED' && (record.retryCount || 0) < (record.maxRetries || 0) && (\r\n            <Tooltip title=\"Retry Task\">\r\n              <Button type=\"link\" icon={<ReloadOutlined />} onClick={() => record.taskId && handleRetry(record.taskId)} />\r\n            </Tooltip>\r\n          )}\r\n          <Tooltip title=\"Edit Task\">\r\n            <Button type=\"link\" icon={<EditOutlined />} onClick={() => handleEdit(record)} />\r\n          </Tooltip>\r\n          <Dropdown\r\n            overlay={\r\n              <Menu>\r\n                <Menu.Item key=\"delete\" danger onClick={() => record.taskId && handleDelete(record.taskId)}>\r\n                  Delete Task\r\n                </Menu.Item>\r\n              </Menu>\r\n            }\r\n          >\r\n            <Button type=\"link\" icon={<MoreOutlined />} />\r\n          </Dropdown>\r\n        </Space>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <div className=\"task-center-page\">\r\n      <Row gutter={16} style={{ marginBottom: 24 }}>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic title=\"Total Tasks\" value={stats.total} />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Pending\"\r\n              value={stats.pending}\r\n              valueStyle={{ color: '#faad14' }}\r\n              prefix={<ClockCircleOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Running\"\r\n              value={stats.running}\r\n              valueStyle={{ color: '#1890ff' }}\r\n              prefix={<SyncOutlined spin />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Completed\"\r\n              value={stats.completed}\r\n              valueStyle={{ color: '#52c41a' }}\r\n              prefix={<CheckCircleOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Failed\"\r\n              value={stats.failed}\r\n              valueStyle={{ color: '#ff4d4f' }}\r\n              prefix={<WarningOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleCreate} block>\r\n              Create Task\r\n            </Button>\r\n          </Card>\r\n        </Col>\r\n      </Row>\r\n\r\n      <Card\r\n        title=\"Task Center\"\r\n        extra={\r\n          <Space>\r\n            <Button icon={<ReloadOutlined />} onClick={fetchTasks}>\r\n              Refresh\r\n            </Button>\r\n          </Space>\r\n        }\r\n      >\r\n        <Tabs \r\n          activeKey={activeTab} \r\n          onChange={setActiveTab}\r\n          items={[\r\n            { key: 'all', label: 'All Tasks' },\r\n            { key: 'PENDING', label: <Badge count={stats.pending} offset={[10, 0]} size=\"small\">Pending</Badge> },\r\n            { key: 'RUNNING', label: <Badge count={stats.running} offset={[10, 0]} size=\"small\">Running</Badge> },\r\n            { key: 'COMPLETED', label: 'Completed' },\r\n            { key: 'FAILED', label: <Badge count={stats.failed} offset={[10, 0]} size=\"small\">Failed</Badge> },\r\n          ]}\r\n        />\r\n\r\n        <Card size=\"small\" style={{ marginBottom: 16 }}>\r\n          <Row gutter={16}>\r\n            <Col span={8}>\r\n              <Input\r\n                placeholder=\"Search task ID or name\"\r\n                prefix={<SearchOutlined />}\r\n                value={searchText}\r\n                onChange={(e) => handleSearch(e.target.value)}\r\n                allowClear\r\n              />\r\n            </Col>\r\n            <Col span={4}>\r\n              <Select\r\n                placeholder=\"Filter by Status\"\r\n                value={filterStatus}\r\n                onChange={(value) => handleFilter('status', value)}\r\n                allowClear\r\n                style={{ width: '100%' }}\r\n              >\r\n                {Object.keys(TASK_STATUS_MAP).map((key) => (\r\n                  <Option key={key} value={key}>\r\n                    {TASK_STATUS_MAP[key].text}\r\n                  </Option>\r\n                ))}\r\n              </Select>\r\n            </Col>\r\n            <Col span={4}>\r\n              <Select\r\n                placeholder=\"Filter by Type\"\r\n                value={filterType}\r\n                onChange={(value) => handleFilter('type', value)}\r\n                allowClear\r\n                style={{ width: '100%' }}\r\n              >\r\n                {Object.keys(TASK_TYPE_MAP).map((key) => (\r\n                  <Option key={key} value={key}>\r\n                    {TASK_TYPE_MAP[key].text}\r\n                  </Option>\r\n                ))}\r\n              </Select>\r\n            </Col>\r\n            <Col span={4}>\r\n              <Select\r\n                placeholder=\"Filter by Priority\"\r\n                value={filterPriority}\r\n                onChange={(value) => handleFilter('priority', value)}\r\n                allowClear\r\n                style={{ width: '100%' }}\r\n              >\r\n                {Object.keys(PRIORITY_MAP).map((key) => (\r\n                  <Option key={key} value={key}>\r\n                    {PRIORITY_MAP[key].text}\r\n                  </Option>\r\n                ))}\r\n              </Select>\r\n            </Col>\r\n          </Row>\r\n        </Card>\r\n\r\n        <Table\r\n          columns={columns}\r\n          dataSource={getFilteredTasks()}\r\n          rowKey=\"id\"\r\n          loading={loading}\r\n          scroll={{ x: 1400 }}\r\n          pagination={{\r\n            showSizeChanger: true,\r\n            showTotal: (total) => `Total ${total} tasks`,\r\n          }}\r\n        />\r\n      </Card>\r\n\r\n      <Modal\r\n        title=\"Task Details\"\r\n        open={detailModalVisible}\r\n        onCancel={() => setDetailModalVisible(false)}\r\n        footer={[\r\n          <Button key=\"close\" onClick={() => setDetailModalVisible(false)}>\r\n            Close\r\n          </Button>,\r\n        ]}\r\n        width={900}\r\n      >\r\n        {selectedTask && (\r\n          <>\r\n            {selectedTask.status === 'FAILED' && (\r\n              <Alert\r\n                message=\"Task Failed\"\r\n                description={selectedTask.errorMessage}\r\n                type=\"error\"\r\n                showIcon\r\n                style={{ marginBottom: 16 }}\r\n              />\r\n            )}\r\n            <Row gutter={16}>\r\n              <Col span={12}>\r\n                <Card size=\"small\" title=\"Task Info\">\r\n                  <p><strong>Task ID:</strong> {selectedTask.taskId}</p>\r\n                  <p><strong>Name:</strong> {selectedTask.name}</p>\r\n                  <p><strong>Type:</strong> <Tag icon={TASK_TYPE_MAP[selectedTask.type].icon} color={TASK_TYPE_MAP[selectedTask.type].color}>{TASK_TYPE_MAP[selectedTask.type].text}</Tag></p>\r\n                  <p><strong>Status:</strong> <Tag icon={TASK_STATUS_MAP[selectedTask.status].icon} color={TASK_STATUS_MAP[selectedTask.status].color}>{TASK_STATUS_MAP[selectedTask.status].text}</Tag></p>\r\n                  <p><strong>Priority:</strong> <Tag color={PRIORITY_MAP[selectedTask.priority || 'MEDIUM'].color}>{PRIORITY_MAP[selectedTask.priority || 'MEDIUM'].text}</Tag></p> \r\n                  <p><strong>Schedule Type:</strong> <Tag color={SCHEDULE_TYPE_MAP[selectedTask.scheduleType || 'ONCE'].color}>{SCHEDULE_TYPE_MAP[selectedTask.scheduleType || 'ONCE'].text}</Tag></p>\r\n                </Card>\r\n              </Col>\r\n              <Col span={12}>\r\n                <Card size=\"small\" title=\"Progress\">\r\n                  <Progress\r\n                    percent={selectedTask.progress}\r\n                    status={selectedTask.status === 'FAILED' ? 'exception' : selectedTask.status === 'COMPLETED' ? 'success' : 'active'}\r\n                    strokeColor={{\r\n                      '0%': '#108ee9',\r\n                      '100%': '#87d068',\r\n                    }}\r\n                  />\r\n                  <p style={{ marginTop: 16 }}><strong>Retry Count:</strong> {selectedTask.retryCount} / {selectedTask.maxRetries}</p>\r\n                </Card>\r\n              </Col>\r\n            </Row>\r\n            <Card size=\"small\" title=\"Shop Info\" style={{ marginTop: 16 }}>\r\n              <p><strong>Shop:</strong> {selectedTask.shopName}</p>\r\n              <p><strong>Created By:</strong> {selectedTask.createdBy}</p>\r\n            </Card>\r\n            <Card size=\"small\" title=\"Timing\" style={{ marginTop: 16 }}>\r\n              <Descriptions column={2}>\r\n                <Descriptions.Item label=\"Created At\">{selectedTask.createdAt}</Descriptions.Item>\r\n                <Descriptions.Item label=\"Started At\">{selectedTask.startedAt || '-'}</Descriptions.Item>\r\n                <Descriptions.Item label=\"Completed At\">{selectedTask.completedAt || '-'}</Descriptions.Item>\r\n                <Descriptions.Item label=\"Schedule Time\">{selectedTask.scheduleTime || '-'}</Descriptions.Item>\r\n                <Descriptions.Item label=\"Estimated Duration\">{selectedTask.estimatedDuration ? `${selectedTask.estimatedDuration} min` : '-'}</Descriptions.Item>\r\n                <Descriptions.Item label=\"Actual Duration\">{selectedTask.actualDuration ? `${selectedTask.actualDuration} min` : '-'}</Descriptions.Item>\r\n              </Descriptions>\r\n            </Card>\r\n            {selectedTask.result && (\r\n              <Card size=\"small\" title=\"Result\" style={{ marginTop: 16 }}>\r\n                <pre>{JSON.stringify(selectedTask.result, null, 2)}</pre>\r\n              </Card>\r\n            )}\r\n          </>\r\n        )}\r\n      </Modal>\r\n\r\n      <Modal\r\n        title=\"Create New Task\"\r\n        open={createModalVisible}\r\n        onOk={handleCreateSubmit}\r\n        onCancel={() => setCreateModalVisible(false)}\r\n        width={600}\r\n      >\r\n        <Form form={createForm} layout=\"vertical\">\r\n          <Form.Item\r\n            name=\"name\"\r\n            label=\"Task Name\"\r\n            rules={[{ required: true, message: 'Please enter task name' }]}\r\n          >\r\n            <Input placeholder=\"Enter task name\" />\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"type\"\r\n            label=\"Task Type\"\r\n            rules={[{ required: true, message: 'Please select task type' }]}\r\n          >\r\n            <Select placeholder=\"Select task type\">\r\n              {Object.keys(TASK_TYPE_MAP).map((key) => (\r\n                <Option key={key} value={key}>\r\n                  {TASK_TYPE_MAP[key].text}\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"priority\"\r\n            label=\"Priority\"\r\n            rules={[{ required: true, message: 'Please select priority' }]}\r\n          >\r\n            <Select placeholder=\"Select priority\">\r\n              {Object.keys(PRIORITY_MAP).map((key) => (\r\n                <Option key={key} value={key}>\r\n                  {PRIORITY_MAP[key].text}\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"scheduleType\"\r\n            label=\"Schedule Type\"\r\n            rules={[{ required: true, message: 'Please select schedule type' }]}\r\n          >\r\n            <Select placeholder=\"Select schedule type\">\r\n              {Object.keys(SCHEDULE_TYPE_MAP).map((key) => (\r\n                <Option key={key} value={key}>\r\n                  {SCHEDULE_TYPE_MAP[key].text}\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"scheduleTime\"\r\n            label=\"Schedule Time\"\r\n          >\r\n            <DatePicker showTime style={{ width: '100%' }} />\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"maxRetries\"\r\n            label=\"Max Retries\"\r\n            rules={[{ required: true, message: 'Please enter max retries' }]}\r\n          >\r\n            <InputNumber min={0} max={10} style={{ width: '100%' }} />\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title=\"Edit Task\"\r\n        open={editModalVisible}\r\n        onOk={handleEditSubmit}\r\n        onCancel={() => setEditModalVisible(false)}\r\n        width={600}\r\n      >\r\n        <Form form={editForm} layout=\"vertical\">\r\n          <Form.Item\r\n            name=\"name\"\r\n            label=\"Task Name\"\r\n            rules={[{ required: true, message: 'Please enter task name' }]}\r\n          >\r\n            <Input placeholder=\"Enter task name\" />\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"type\"\r\n            label=\"Task Type\"\r\n            rules={[{ required: true, message: 'Please select task type' }]}\r\n          >\r\n            <Select placeholder=\"Select task type\">\r\n              {Object.keys(TASK_TYPE_MAP).map((key) => (\r\n                <Option key={key} value={key}>\r\n                  {TASK_TYPE_MAP[key].text}\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"priority\"\r\n            label=\"Priority\"\r\n            rules={[{ required: true, message: 'Please select priority' }]}\r\n          >\r\n            <Select placeholder=\"Select priority\">\r\n              {Object.keys(PRIORITY_MAP).map((key) => (\r\n                <Option key={key} value={key}>\r\n                  {PRIORITY_MAP[key].text}\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"scheduleType\"\r\n            label=\"Schedule Type\"\r\n            rules={[{ required: true, message: 'Please select schedule type' }]}\r\n          >\r\n            <Select placeholder=\"Select schedule type\">\r\n              {Object.keys(SCHEDULE_TYPE_MAP).map((key) => (\r\n                <Option key={key} value={key}>\r\n                  {SCHEDULE_TYPE_MAP[key].text}\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"scheduleTime\"\r\n            label=\"Schedule Time\"\r\n          >\r\n            <DatePicker showTime style={{ width: '100%' }} />\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"maxRetries\"\r\n            label=\"Max Retries\"\r\n            rules={[{ required: true, message: 'Please enter max retries' }]}\r\n          >\r\n            <InputNumber min={0} max={10} style={{ width: '100%' }} />\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default TaskCenter;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/TaskCenter/index.tsx"
    },
    "19": {
      "path": "/dashboard/product",
      "file": "@/pages/Product/index.tsx",
      "parentId": "4",
      "id": "19",
      "absPath": "/dashboard/product",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Typography,\n  Row,\n  Col,\n  Button,\n  Table,\n  Input,\n  Select,\n  Modal,\n  Form,\n  InputNumber,\n  message,\n  Tag,\n  Space,\n  Popconfirm,\n  Tabs,\n  PlusOutlined,\n  UploadOutlined,\n  EditOutlined,\n  SearchOutlined,\n  FilterOutlined,\n  SyncOutlined,\n  DeleteOutlined,\n  EyeOutlined,\n  GlobalOutlined,\n  Link,\n  Title,\n  Text,\n  FC,\n} from '@/imports';\nimport CrossPlatformManage from './CrossPlatformManage';\n\ninterface Product {\n  id: string;\n  name: string;\n  sku: string;\n  price: number;\n  cost: number;\n  stock: number;\n  status: 'draft' | 'published' | 'synced';\n  platform: string;\n  createdAt: string;\n}\n\nconst ProductManagement: FC = () => {\n  const [products, setProducts] = useState<Product[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);\n  const [searchText, setSearchText] = useState('');\n  const [filterStatus, setFilterStatus] = useState<string>('');\n  const [sortField, setSortField] = useState<string>('');\n  const [sortOrder, setSortOrder] = useState<'ascend' | 'descend'>('ascend');\n  const [isModalVisible, setIsModalVisible] = useState(false);\n  const [editingProduct, setEditingProduct] = useState<Product | null>(null);\n  const [isDetailModalVisible, setIsDetailModalVisible] = useState(false);\n  const [viewingProduct, setViewingProduct] = useState<Product | null>(null);\n  const [isPricingModalVisible, setIsPricingModalVisible] = useState(false);\n  const [pricingProduct, setPricingProduct] = useState<Product | null>(null);\n  const [activeTab, setActiveTab] = useState('local');\n  const [form] = Form.useForm();\n  const [pricingForm] = Form.useForm();\n\n  useEffect(() => {\n    fetchProducts();\n  }, []);\n\n  const fetchProducts = async () => {\n    setLoading(true);\n    try {\n      const response = await fetch('/api/v1/products');\n      const data = await response.json();\n      setProducts(data.data || []);\n    } catch (error) {\n      message.error('获取商品列表失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleSearch = (value: string) => {\n    setSearchText(value);\n  };\n\n  const handleFilter = (status: string) => {\n    setFilterStatus(status);\n  };\n\n  const handleSort = (field: string, order: 'ascend' | 'descend') => {\n    setSortField(field);\n    setSortOrder(order);\n  };\n\n  const handleAdd = () => {\n    setEditingProduct(null);\n    form.resetFields();\n    setIsModalVisible(true);\n  };\n\n  const handleEdit = (record: Product) => {\n    setEditingProduct(record);\n    form.setFieldsValue(record);\n    setIsModalVisible(true);\n  };\n\n  const handleView = (record: Product) => {\n    setViewingProduct(record);\n    setIsDetailModalVisible(true);\n  };\n\n  const handlePricing = (record: Product) => {\n    setPricingProduct(record);\n    pricingForm.setFieldsValue({\n      cost: record.cost,\n      price: record.price,\n      profit: record.price - record.cost,\n      profitMargin: ((record.price - record.cost) / record.price * 100).toFixed(2)\n    });\n    setIsPricingModalVisible(true);\n  };\n\n  const handlePublish = async (record: Product) => {\n    try {\n      await fetch(`/api/v1/products/${record.id}/publish`, {\n        method: 'POST'\n      });\n      message.success('商品上架成功');\n      fetchProducts();\n    } catch (error) {\n      message.error('商品上架失败');\n    }\n  };\n\n  const handleSync = async (record: Product) => {\n    try {\n      await fetch(`/api/v1/products/${record.id}/sync`, {\n        method: 'POST'\n      });\n      message.success('商品同步成功');\n      fetchProducts();\n    } catch (error) {\n      message.error('商品同步失败');\n    }\n  };\n\n  const handleBatchSync = async () => {\n    if (selectedRowKeys.length === 0) {\n      message.warning('请先选择要同步的商品');\n      return;\n    }\n    try {\n      await fetch('/api/v1/products/batch-sync', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ ids: selectedRowKeys })\n      });\n      message.success('批量同步成功');\n      fetchProducts();\n    } catch (error) {\n      message.error('批量同步失败');\n    }\n  };\n\n  const handleDelete = async (id: string) => {\n    try {\n      await fetch(`/api/v1/products/${id}`, {\n        method: 'DELETE'\n      });\n      message.success('商品删除成功');\n      fetchProducts();\n    } catch (error) {\n      message.error('商品删除失败');\n    }\n  };\n\n  const handleModalOk = async () => {\n    try {\n      const values = await form.validateFields();\n      if (editingProduct) {\n        await fetch(`/api/v1/products/${editingProduct.id}`, {\n          method: 'PUT',\n          headers: { 'Content-Type': 'application/json' },\n          body: JSON.stringify(values)\n        });\n        message.success('商品更新成功');\n      } else {\n        await fetch('/api/v1/products', {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json' },\n          body: JSON.stringify(values)\n        });\n        message.success('商品创建成功');\n      }\n      setIsModalVisible(false);\n      fetchProducts();\n    } catch (error) {\n      message.error('操作失败');\n    }\n  };\n\n  const handlePricingChange = () => {\n    const cost = pricingForm.getFieldValue('cost');\n    const price = pricingForm.getFieldValue('price');\n    if (cost && price) {\n      pricingForm.setFieldsValue({\n        profit: price - cost,\n        profitMargin: ((price - cost) / price * 100).toFixed(2)\n      });\n    }\n  };\n\n  const handlePricingModalOk = async () => {\n    try {\n      const values = await pricingForm.validateFields();\n      if (pricingProduct) {\n        await fetch(`/api/v1/products/${pricingProduct.id}/pricing`, {\n          method: 'PUT',\n          headers: { 'Content-Type': 'application/json' },\n          body: JSON.stringify(values)\n        });\n        message.success('定价更新成功');\n        setIsPricingModalVisible(false);\n        fetchProducts();\n      }\n    } catch (error) {\n      message.error('定价更新失败');\n    }\n  };\n\n  const filteredProducts = products.filter(product => {\n    if (searchText && !product.name.toLowerCase().includes(searchText.toLowerCase()) && \n        !product.sku.toLowerCase().includes(searchText.toLowerCase())) {\n      return false;\n    }\n    if (filterStatus && product.status !== filterStatus) {\n      return false;\n    }\n    return true;\n  });\n\n  const sortedProducts = [...filteredProducts].sort((a, b) => {\n    const field = sortField as keyof Product;\n    const aValue = a[field];\n    const bValue = b[field];\n    \n    if (sortOrder === 'ascend') {\n      return aValue > bValue ? 1 : -1;\n    } else {\n      return aValue < bValue ? 1 : -1;\n    }\n  });\n\n  const columns = [\n    {\n      title: '商品名称',\n      dataIndex: 'name',\n      key: 'name',\n      sorter: true\n    },\n    {\n      title: 'SKU',\n      dataIndex: 'sku',\n      key: 'sku'\n    },\n    {\n      title: '价格',\n      dataIndex: 'price',\n      key: 'price',\n      sorter: true,\n      render: (price: number) => `¥${price.toFixed(2)}`\n    },\n    {\n      title: '成本',\n      dataIndex: 'cost',\n      key: 'cost',\n      sorter: true,\n      render: (cost: number) => `¥${cost.toFixed(2)}`\n    },\n    {\n      title: '库存',\n      dataIndex: 'stock',\n      key: 'stock',\n      sorter: true\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      filters: [\n        { text: '草稿', value: 'draft' },\n        { text: '已定价', value: 'priced' },\n        { text: '已上架', value: 'listed' },\n        { text: '同步中', value: 'syncing' },\n        { text: '已在线', value: 'live' },\n        { text: '同步失败', value: 'sync_failed' },\n        { text: '已下架', value: 'offline' }\n      ],\n      render: (status: string) => {\n        const colorMap: Record<string, string> = {\n          draft: 'default',\n          priced: 'processing',\n          listed: 'warning',\n          syncing: 'processing',\n          live: 'success',\n          sync_failed: 'error',\n          offline: 'default'\n        };\n        const textMap: Record<string, string> = {\n          draft: '草稿',\n          priced: '已定价',\n          listed: '已上架(本地)',\n          syncing: '同步中',\n          live: '已在线',\n          sync_failed: '同步失败',\n          offline: '已下架'\n        };\n        return <Tag color={colorMap[status]}>{textMap[status]}</Tag>;\n      }\n    },\n    {\n      title: '平台',\n      dataIndex: 'platform',\n      key: 'platform'\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: any, record: Product) => (\n        <Space size=\"small\">\n          <Button\n            type=\"link\"\n            icon={<EyeOutlined />}\n            onClick={() => handleView(record)}\n          >\n            查看\n          </Button>\n          <Button\n            type=\"link\"\n            icon={<EditOutlined />}\n            onClick={() => handleEdit(record)}\n          >\n            编辑\n          </Button>\n          <Button\n            type=\"link\"\n            onClick={() => handlePricing(record)}\n          >\n            定价\n          </Button>\n          {record.status === 'draft' && (\n            <Button\n              type=\"link\"\n              onClick={() => handlePublish(record)}\n            >\n              上架\n            </Button>\n          )}\n          <Button\n            type=\"link\"\n            icon={<SyncOutlined />}\n            onClick={() => handleSync(record)}\n          >\n            同步\n          </Button>\n          <Popconfirm\n            title=\"确定要删除这个商品吗？\"\n            onConfirm={() => handleDelete(record.id)}\n            okText=\"确定\"\n            cancelText=\"取消\"\n          >\n            <Button type=\"link\" danger icon={<DeleteOutlined />}>\n              删除\n            </Button>\n          </Popconfirm>\n        </Space>\n      )\n    }\n  ];\n\n  return (\n    <div>\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <Title level={4}>商品管理</Title>\n        <Space>\n          <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleAdd}>\n            新增商品\n          </Button>\n          <Button icon={<UploadOutlined />}>\n            <Link to=\"/Product/MaterialUpload\">素材上传</Link>\n          </Button>\n          <Button\n            icon={<SyncOutlined />}\n            onClick={handleBatchSync}\n            disabled={selectedRowKeys.length === 0}\n          >\n            批量同步\n          </Button>\n        </Space>\n      </div>\n\n      <Tabs activeKey={activeTab} onChange={setActiveTab} style={{ marginBottom: 16 }}>\n        <Tabs.TabPane tab=\"本地商品管理\" key=\"local\">\n          <Card style={{ marginBottom: 16 }}>\n            <Space style={{ width: '100%', marginBottom: 16 }}>\n              <Input\n                placeholder=\"搜索商品名称或SKU\"\n                prefix={<SearchOutlined />}\n                style={{ width: 300 }}\n                onChange={e => handleSearch(e.target.value)}\n                allowClear\n              />\n              <Select\n                placeholder=\"筛选状态\"\n                style={{ width: 150 }}\n                onChange={handleFilter}\n                allowClear\n              >\n                <Select.Option value=\"draft\">草稿</Select.Option>\n                <Select.Option value=\"published\">已发布</Select.Option>\n                <Select.Option value=\"synced\">已同步</Select.Option>\n              </Select>\n              <Select\n                placeholder=\"排序字段\"\n                style={{ width: 150 }}\n                onChange={(value) => handleSort(value, sortOrder)}\n                allowClear\n              >\n                <Select.Option value=\"name\">商品名称</Select.Option>\n                <Select.Option value=\"price\">价格</Select.Option>\n                <Select.Option value=\"stock\">库存</Select.Option>\n                <Select.Option value=\"createdAt\">创建时间</Select.Option>\n              </Select>\n              <Select\n                placeholder=\"排序方式\"\n                style={{ width: 120 }}\n                onChange={(value) => handleSort(sortField, value)}\n                value={sortOrder}\n              >\n                <Select.Option value=\"ascend\">升序</Select.Option>\n                <Select.Option value=\"descend\">降序</Select.Option>\n              </Select>\n            </Space>\n          </Card>\n\n          <Card>\n            <Table\n              rowKey=\"id\"\n              columns={columns}\n              dataSource={sortedProducts}\n              loading={loading}\n              rowSelection={{\n                selectedRowKeys,\n                onChange: setSelectedRowKeys\n              }}\n              pagination={{\n                pageSize: 10,\n                showSizeChanger: true,\n                showTotal: (total) => `共 ${total} 条`\n              }}\n            />\n          </Card>\n        </Tabs.TabPane>\n        <Tabs.TabPane \n          tab={\n            <span>\n              <GlobalOutlined />\n              跨平台商品管理\n            </span>\n          } \n          key=\"crossPlatform\"\n        >\n          <CrossPlatformManage />\n        </Tabs.TabPane>\n      </Tabs>\n\n      <Modal\n        title={editingProduct ? '编辑商品' : '新增商品'}\n        open={isModalVisible}\n        onOk={handleModalOk}\n        onCancel={() => setIsModalVisible(false)}\n        width={600}\n      >\n        <Form form={form} layout=\"vertical\">\n          <Form.Item\n            name=\"name\"\n            label=\"商品名称\"\n            rules={[{ required: true, message: '请输入商品名称' }]}\n          >\n            <Input placeholder=\"请输入商品名称\" />\n          </Form.Item>\n          <Form.Item\n            name=\"sku\"\n            label=\"SKU\"\n            rules={[{ required: true, message: '请输入SKU' }]}\n          >\n            <Input placeholder=\"请输入SKU\" />\n          </Form.Item>\n          <Form.Item\n            name=\"price\"\n            label=\"价格\"\n            rules={[{ required: true, message: '请输入价格' }]}\n          >\n            <InputNumber\n              placeholder=\"请输入价格\"\n              style={{ width: '100%' }}\n              min={0}\n              precision={2}\n            />\n          </Form.Item>\n          <Form.Item\n            name=\"cost\"\n            label=\"成本\"\n            rules={[{ required: true, message: '请输入成本' }]}\n          >\n            <InputNumber\n              placeholder=\"请输入成本\"\n              style={{ width: '100%' }}\n              min={0}\n              precision={2}\n            />\n          </Form.Item>\n          <Form.Item\n            name=\"stock\"\n            label=\"库存\"\n            rules={[{ required: true, message: '请输入库存' }]}\n          >\n            <InputNumber\n              placeholder=\"请输入库存\"\n              style={{ width: '100%' }}\n              min={0}\n            />\n          </Form.Item>\n          <Form.Item\n            name=\"platform\"\n            label=\"平台\"\n            rules={[{ required: true, message: '请选择平台' }]}\n          >\n            <Select placeholder=\"请选择平台\">\n              <Select.Option value=\"amazon\">Amazon</Select.Option>\n              <Select.Option value=\"ebay\">eBay</Select.Option>\n              <Select.Option value=\"shopify\">Shopify</Select.Option>\n            </Select>\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"商品详情\"\n        open={isDetailModalVisible}\n        onCancel={() => setIsDetailModalVisible(false)}\n        footer={[\n          <Button key=\"close\" onClick={() => setIsDetailModalVisible(false)}>\n            关闭\n          </Button>\n        ]}\n        width={800}\n      >\n        {viewingProduct && (\n          <div>\n            <Row gutter={16}>\n              <Col span={12}>\n                <Text strong>商品名称：</Text>\n                <div>{viewingProduct.name}</div>\n              </Col>\n              <Col span={12}>\n                <Text strong>SKU：</Text>\n                <div>{viewingProduct.sku}</div>\n              </Col>\n            </Row>\n            <Row gutter={16} style={{ marginTop: 16 }}>\n              <Col span={8}>\n                <Text strong>价格：</Text>\n                <div>¥{viewingProduct.price.toFixed(2)}</div>\n              </Col>\n              <Col span={8}>\n                <Text strong>成本：</Text>\n                <div>¥{viewingProduct.cost.toFixed(2)}</div>\n              </Col>\n              <Col span={8}>\n                <Text strong>利润：</Text>\n                <div>¥{(viewingProduct.price - viewingProduct.cost).toFixed(2)}</div>\n              </Col>\n            </Row>\n            <Row gutter={16} style={{ marginTop: 16 }}>\n              <Col span={8}>\n                <Text strong>库存：</Text>\n                <div>{viewingProduct.stock}</div>\n              </Col>\n              <Col span={8}>\n                <Text strong>状态：</Text>\n                <div>\n                  <Tag color={viewingProduct.status === 'published' ? 'green' : 'default'}>\n                    {viewingProduct.status === 'published' ? '已发布' : viewingProduct.status === 'synced' ? '已同步' : '草稿'}\n                  </Tag>\n                </div>\n              </Col>\n              <Col span={8}>\n                <Text strong>平台：</Text>\n                <div>{viewingProduct.platform}</div>\n              </Col>\n            </Row>\n          </div>\n        )}\n      </Modal>\n\n      <Modal\n        title=\"商品定价\"\n        open={isPricingModalVisible}\n        onOk={handlePricingModalOk}\n        onCancel={() => setIsPricingModalVisible(false)}\n        width={600}\n      >\n        <Form form={pricingForm} layout=\"vertical\">\n          <Form.Item\n            name=\"cost\"\n            label=\"成本\"\n            rules={[{ required: true, message: '请输入成本' }]}\n          >\n            <InputNumber\n              placeholder=\"请输入成本\"\n              style={{ width: '100%' }}\n              min={0}\n              precision={2}\n              onChange={handlePricingChange}\n            />\n          </Form.Item>\n          <Form.Item\n            name=\"price\"\n            label=\"价格\"\n            rules={[{ required: true, message: '请输入价格' }]}\n          >\n            <InputNumber\n              placeholder=\"请输入价格\"\n              style={{ width: '100%' }}\n              min={0}\n              precision={2}\n              onChange={handlePricingChange}\n            />\n          </Form.Item>\n          <Form.Item\n            name=\"profit\"\n            label=\"利润\"\n          >\n            <InputNumber\n              disabled\n              style={{ width: '100%' }}\n              precision={2}\n            />\n          </Form.Item>\n          <Form.Item\n            name=\"profitMargin\"\n            label=\"利润率（%）\"\n          >\n            <InputNumber\n              disabled\n              style={{ width: '100%' }}\n              precision={2}\n            />\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default ProductManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Product/index.tsx"
    },
    "20": {
      "path": "/dashboard/product/publish",
      "file": "@/pages/Product/ProductPublishForm.tsx",
      "parentId": "4",
      "id": "20",
      "absPath": "/dashboard/product/publish",
      "__content": "import {\r\n  useState,\r\n  Card,\r\n  Form,\r\n  Input,\r\n  Select,\r\n  InputNumber,\r\n  Button,\r\n  Space,\r\n  Row,\r\n  Col,\r\n  Divider,\r\n  Upload,\r\n  message,\r\n  Tabs,\r\n  Table,\r\n  Tag,\r\n  Modal,\r\n  Switch,\r\n  Tooltip,\r\n  Alert,\r\n  Image,\r\n  Badge,\r\n  Progress,\r\n  PlusOutlined,\r\n  DeleteOutlined,\r\n  SaveOutlined,\r\n  SendOutlined,\r\n  InfoCircleOutlined,\r\n  ShopOutlined,\r\n  DollarOutlined,\r\n  BoxPlotOutlined,\r\n  PictureOutlined,\r\n  VideoCameraOutlined,\r\n  TranslationOutlined,\r\n  ThunderboltOutlined,\r\n  EyeOutlined,\r\n  Option,\r\n  TextArea,\r\n  FC,\r\n} from '@/imports';\r\nimport type { UploadFile } from 'antd/es/upload/interface';\r\nimport {\r\n  materialProcessingDataSource,\r\n  ImageToImageParams,\r\n  ImageToVideoParams,\r\n  STYLE_OPTIONS,\r\n  TRANSLATION_LANGUAGES,\r\n} from '@/services/materialProcessingDataSource';\nimport { useLocale } from '@/contexts/LocaleContext';\r\n\r\ninterface ProductVariant {\r\n  id: string;\r\n  sku: string;\r\n  name: string;\r\n  price: number;\r\n  stock: number;\r\n  attributes: Record<string, string>;\r\n}\r\n\r\ninterface PublishFormValues {\r\n  name: string;\r\n  platform: string[];\r\n  category: string;\r\n  brand: string;\r\n  description: string;\r\n  price: number;\r\n  costPrice: number;\r\n  currency: string;\r\n  stock: number;\r\n  sku: string;\r\n  status: 'DRAFT' | 'PENDING' | 'ACTIVE';\r\n  autoPublish: boolean;\r\n  complianceCheck: boolean;\r\n}\r\n\r\nconst PLATFORMS = [\r\n  { value: 'Amazon', label: 'Amazon' },\r\n  { value: 'eBay', label: 'eBay' },\r\n  { value: 'Shopify', label: 'Shopify' },\r\n  { value: 'Walmart', label: 'Walmart' },\r\n  { value: 'AliExpress', label: 'AliExpress' },\r\n];\r\n\r\nconst CATEGORIES = [\r\n  { value: 'Industrial Automation > Sensors', label: 'Industrial Automation > Sensors' },\r\n  { value: 'Industrial Automation > Controllers', label: 'Industrial Automation > Controllers' },\r\n  { value: 'Industrial Automation > Motors', label: 'Industrial Automation > Motors' },\r\n  { value: 'Electronics > Components', label: 'Electronics > Components' },\r\n  { value: 'Tools > Power Tools', label: 'Tools > Power Tools' },\r\n];\r\n\r\nconst CURRENCIES = [\r\n  { value: 'USD', label: 'USD - US Dollar' },\r\n  { value: 'EUR', label: 'EUR - Euro' },\r\n  { value: 'GBP', label: 'GBP - British Pound' },\r\n  { value: 'CNY', label: 'CNY - Chinese Yuan' },\r\n];\r\n\r\nconst ProductPublishForm: FC = () => {\r\n  const [form] = Form.useForm();\r\n  const [loading, setLoading] = useState(false);\r\n  const [variants, setVariants] = useState<ProductVariant[]>([]);\r\n  const [fileList, setFileList] = useState<UploadFile[]>([]);\r\n  const [activeTab, setActiveTab] = useState('basic');\r\n  const [processingJobs, setProcessingJobs] = useState<any[]>([]);\r\n  const [materialModalVisible, setMaterialModalVisible] = useState(false);\r\n  const [selectedImage, setSelectedImage] = useState<string>('');\r\n  const [processingType, setProcessingType] = useState<'image-to-image' | 'image-to-video'>('image-to-image');\r\n  const [processingLoading, setProcessingLoading] = useState(false);\r\n  const { t } = useLocale();\r\n\r\n  const handleAddVariant = () => {\r\n    const newVariant: ProductVariant = {\r\n      id: `v${Date.now()}`,\r\n      sku: '',\r\n      name: '',\r\n      price: 0,\r\n      stock: 0,\r\n      attributes: {},\r\n    };\r\n    setVariants([...variants, newVariant]);\r\n  };\r\n\r\n  const handleRemoveVariant = (id: string) => {\r\n    setVariants(variants.filter(v => v.id !== id));\r\n  };\r\n\r\n  const handleVariantChange = (id: string, field: string, value: any) => {\r\n    setVariants(variants.map(v => \r\n      v.id === id ? { ...v, [field]: value } : v\r\n    ));\r\n  };\r\n\r\n  const handleOpenMaterialProcessing = (imageUrl: string, type: 'image-to-image' | 'image-to-video') => {\r\n    setSelectedImage(imageUrl);\r\n    setProcessingType(type);\r\n    setMaterialModalVisible(true);\r\n  };\r\n\r\n  const handleProcessImage = async (params: ImageToImageParams | ImageToVideoParams) => {\r\n    if (!selectedImage) {\r\n      message.warning(t('product.publish.selectImage'));\r\n      return;\r\n    }\r\n    \r\n    setProcessingLoading(true);\r\n    try {\r\n      let job;\r\n      if (processingType === 'image-to-image') {\r\n        job = await materialProcessingDataSource.imageToImage(selectedImage, params as ImageToImageParams);\r\n      } else {\r\n        job = await materialProcessingDataSource.imageToVideo(selectedImage, params as ImageToVideoParams);\r\n      }\r\n      \r\n      setProcessingJobs([...processingJobs, job]);\r\n      message.success(t('product.publish.taskCreated', { id: job.id }));\r\n      setMaterialModalVisible(false);\r\n      \r\n      // 轮询检查任务状态\r\n      const checkInterval = setInterval(async () => {\r\n        const updatedJob = await materialProcessingDataSource.getJobStatus(job.id);\r\n        if (updatedJob.status === 'completed') {\r\n          clearInterval(checkInterval);\r\n          message.success(t('product.publish.processingComplete'));\r\n          // 将处理结果添加到文件列表\r\n          if (processingType === 'image-to-image') {\r\n            setFileList([...fileList, {\r\n              uid: `processed-${Date.now()}`,\r\n              name: `processed-${Date.now()}.jpg`,\r\n              status: 'done',\r\n              url: updatedJob.outputUrl,\r\n              thumbUrl: updatedJob.outputUrl,\r\n            } as UploadFile]);\r\n          } else {\r\n            message.info(t('product.publish.videoGenerated'));\r\n          }\r\n          setProcessingJobs(processingJobs.map(j => j.id === job.id ? updatedJob : j));\r\n        }\r\n      }, 2000);\r\n    } catch (error) {\r\n      message.error(t('product.publish.processFailed'));\r\n    } finally {\r\n      setProcessingLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleSaveDraft = async () => {\r\n    try {\r\n      await form.validateFields();\r\n      setLoading(true);\r\n      await new Promise(resolve => setTimeout(resolve, 1000));\r\n      message.success(t('product.publish.draftSaved'));\r\n    } catch (error) {\r\n      message.error(t('product.publish.fillRequiredFields'));\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleSubmit = async () => {\r\n    try {\r\n      const values = await form.validateFields();\r\n      setLoading(true);\r\n      \r\n      // Step 1: 先保存到本地系统\r\n      const productData = {\r\n        ...values,\r\n        variants,\r\n        images: fileList.map(f => f.url || f.thumbUrl),\r\n        createdAt: new Date().toISOString(),\r\n        syncStatus: 'PENDING', // 待同步状态\r\n      };\r\n      \r\n      // 模拟保存到本地数据库\r\n      await new Promise(resolve => setTimeout(resolve, 800));\r\n      message.success('Product saved to local system');\r\n      \r\n      // Step 2: 合规检查（本地进行）\r\n      if (values.complianceCheck) {\r\n        message.info('Running compliance check...');\r\n        await new Promise(resolve => setTimeout(resolve, 600));\r\n      }\r\n      \r\n      // Step 3: 提交审核（本地状态变更）\r\n      await new Promise(resolve => setTimeout(resolve, 400));\r\n      \r\n      Modal.success({\r\n        title: 'Product Created Successfully',\r\n        content: (\r\n          <div>\r\n            <p>Product \"{values.name}\" has been saved to local system.</p>\r\n            <p>Target platforms: {values.platform.join(', ')}</p>\r\n            <p>Status: {values.autoPublish ? 'Will be auto-published after review' : 'Pending review'}</p>\r\n            <p style={{ color: '#1890ff', marginTop: 8 }}>\r\n              The product will be synced to platforms according to the sync schedule.\r\n            </p>\r\n          </div>\r\n        ),\r\n      });\r\n      \r\n      // 重置表单\r\n      form.resetFields();\r\n      setVariants([]);\r\n      setFileList([]);\r\n    } catch (error) {\r\n      message.error('Please fill in required fields');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const variantColumns = [\r\n    {\r\n      title: 'SKU',\r\n      dataIndex: 'sku',\r\n      key: 'sku',\r\n      render: (value: string, record: ProductVariant) => (\r\n        <Input \r\n          value={value} \r\n          onChange={(e) => handleVariantChange(record.id, 'sku', e.target.value)}\r\n          placeholder=\"SKU\"\r\n        />\r\n      ),\r\n    },\r\n    {\r\n      title: 'Name',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      render: (value: string, record: ProductVariant) => (\r\n        <Input \r\n          value={value} \r\n          onChange={(e) => handleVariantChange(record.id, 'name', e.target.value)}\r\n          placeholder=\"Variant Name\"\r\n        />\r\n      ),\r\n    },\r\n    {\r\n      title: 'Price',\r\n      dataIndex: 'price',\r\n      key: 'price',\r\n      render: (value: number, record: ProductVariant) => (\r\n        <InputNumber \r\n          value={value} \r\n          onChange={(v) => handleVariantChange(record.id, 'price', v)}\r\n          min={0}\r\n          precision={2}\r\n          style={{ width: '100%' }}\r\n        />\r\n      ),\r\n    },\r\n    {\r\n      title: 'Stock',\r\n      dataIndex: 'stock',\r\n      key: 'stock',\r\n      render: (value: number, record: ProductVariant) => (\r\n        <InputNumber \r\n          value={value} \r\n          onChange={(v) => handleVariantChange(record.id, 'stock', v)}\r\n          min={0}\r\n          style={{ width: '100%' }}\r\n        />\r\n      ),\r\n    },\r\n    {\r\n      title: 'Action',\r\n      key: 'action',\r\n      render: (_: any, record: ProductVariant) => (\r\n        <Button \r\n          type=\"text\" \r\n          danger \r\n          icon={<DeleteOutlined />} \r\n          onClick={() => handleRemoveVariant(record.id)}\r\n        />\r\n      ),\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <div className=\"product-publish-form-page\">\r\n      <Card title=\"Product Publish Form\">\r\n        <Form\r\n          form={form}\r\n          layout=\"vertical\"\r\n          initialValues={{\r\n            currency: 'USD',\r\n            status: 'DRAFT',\r\n            autoPublish: false,\r\n            complianceCheck: true,\r\n          }}\r\n        >\r\n          <Tabs \r\n            activeKey={activeTab} \r\n            onChange={setActiveTab}\r\n            items={[\r\n              { key: 'basic', label: 'Basic Info', children: (\r\n                <>\r\n                  <Row gutter={24}>\r\n                    <Col span={12}>\r\n                      <Form.Item\r\n                        name=\"name\"\r\n                        label=\"Product Name\"\r\n                        rules={[{ required: true, message: 'Please enter product name' }]}\r\n                      >\r\n                        <Input placeholder=\"Enter product name\" maxLength={200} showCount />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={12}>\r\n                      <Form.Item\r\n                        name=\"platform\"\r\n                        label=\"Target Platforms\"\r\n                        rules={[{ required: true, message: 'Please select at least one platform' }]}\r\n                      >\r\n                        <Select mode=\"multiple\" placeholder=\"Select platforms\">\r\n                          {PLATFORMS.map(p => (\r\n                            <Option key={p.value} value={p.value}>{p.label}</Option>\r\n                          ))}\r\n                        </Select>\r\n                      </Form.Item>\r\n                    </Col>\r\n                  </Row>\r\n\r\n                  <Row gutter={24}>\r\n                    <Col span={12}>\r\n                      <Form.Item\r\n                        name=\"category\"\r\n                        label=\"Category\"\r\n                        rules={[{ required: true, message: 'Please select category' }]}\r\n                      >\r\n                        <Select placeholder=\"Select category\" showSearch>\r\n                          {CATEGORIES.map(c => (\r\n                            <Option key={c.value} value={c.value}>{c.label}</Option>\r\n                          ))}\r\n                        </Select>\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={12}>\r\n                      <Form.Item name=\"brand\" label=\"Brand\">\r\n                        <Input placeholder=\"Enter brand name\" />\r\n                      </Form.Item>\r\n                    </Col>\r\n                  </Row>\r\n\r\n                  <Form.Item\r\n                    name=\"description\"\r\n                    label=\"Description\"\r\n                    rules={[{ required: true, message: 'Please enter description' }]}\r\n                  >\r\n                    <TextArea rows={4} placeholder=\"Enter product description\" maxLength={5000} showCount />\r\n                  </Form.Item>\r\n\r\n                  <Divider>{t('product.publish.productImages')}</Divider>\r\n\r\n                  <Alert\r\n                    message={t('product.publish.materialProcessing')}\r\n                    description={t('product.publish.materialProcessingDesc')}\r\n                    type=\"info\"\r\n                    showIcon\r\n                    style={{ marginBottom: 16 }}\r\n                  />\r\n\r\n                  <Form.Item label={t('product.publish.images')}>\r\n                    <Upload\r\n                      listType=\"picture-card\"\r\n                      fileList={fileList}\r\n                      onChange={({ fileList }) => setFileList(fileList)}\r\n                      beforeUpload={() => false}\r\n                      multiple\r\n                      itemRender={(originNode, file) => (\r\n                        <div style={{ position: 'relative' }}>\r\n                          {originNode}\r\n                          {file.status === 'done' && file.url && (\r\n                            <div style={{\r\n                              position: 'absolute',\r\n                              bottom: 0,\r\n                              left: 0,\r\n                              right: 0,\r\n                              background: 'rgba(0,0,0,0.5)',\r\n                              display: 'flex',\r\n                              justifyContent: 'center',\r\n                              gap: 4,\r\n                              padding: '2px 0',\r\n                            }}>\r\n                              <Tooltip title={t('product.publish.imageToImage')}>\r\n                                <Button\r\n                                  size=\"small\"\r\n                                  type=\"text\"\r\n                                  icon={<PictureOutlined style={{ color: '#fff' }} />}\r\n                                  onClick={() => handleOpenMaterialProcessing(file.url || file.thumbUrl || '', 'image-to-image')}\r\n                                />\r\n                              </Tooltip>\r\n                              <Tooltip title={t('product.publish.imageToVideo')}>\r\n                                <Button\r\n                                  size=\"small\"\r\n                                  type=\"text\"\r\n                                  icon={<VideoCameraOutlined style={{ color: '#fff' }} />}\r\n                                  onClick={() => handleOpenMaterialProcessing(file.url || file.thumbUrl || '', 'image-to-video')}\r\n                                />\r\n                              </Tooltip>\r\n                            </div>\r\n                          )}\r\n                        </div>\r\n                      )}\r\n                    >\r\n                      {fileList.length >= 8 ? null : (\r\n                        <div>\r\n                          <PlusOutlined />\r\n                          <div style={{ marginTop: 8 }}>{t('product.publish.upload')}</div>\r\n                        </div>\r\n                      )}\r\n                    </Upload>\r\n                  </Form.Item>\r\n\r\n                  {processingJobs.length > 0 && (\r\n                    <Card size=\"small\" title={t('product.publish.processingTasks')} style={{ marginTop: 16 }}>\r\n                      {processingJobs.map(job => (\r\n                        <div key={job.id} style={{ marginBottom: 8 }}>\r\n                          <Space>\r\n                            <Tag color=\"blue\">{job.type === 'image_to_image' ? t('product.publish.imageToImage') : t('product.publish.imageToVideo')}</Tag>\r\n                            <Progress percent={job.progress} size=\"small\" style={{ width: 200 }} />\r\n                            <Tag color={job.status === 'processing' ? 'processing' : 'success'}>\r\n                              {job.status}\r\n                            </Tag>\r\n                          </Space>\r\n                        </div>\r\n                      ))}\r\n                    </Card>\r\n                  )}\r\n                </>\r\n              )},\r\n              { key: 'pricing', label: <><DollarOutlined /> {t('product.publish.pricing')}</>, children: (\r\n                <>\r\n                  <Alert\r\n                    message={t('product.publish.profitMarginValidation')}\r\n                    description={t('product.publish.profitMarginDesc')}\r\n                    type=\"info\"\r\n                    showIcon\r\n                    style={{ marginBottom: 24 }}\r\n                  />\r\n\r\n                  <Row gutter={24}>\r\n                    <Col span={8}>\r\n                      <Form.Item\r\n                        name=\"price\"\r\n                        label={t('product.publish.sellingPrice')}\r\n                        rules={[{ required: true, message: t('product.publish.enterPrice') }]}\r\n                      >\r\n                        <InputNumber\r\n                          prefix=\"$\"\r\n                          min={0}\r\n                          precision={2}\r\n                          style={{ width: '100%' }}\r\n                          placeholder=\"0.00\"\r\n                        />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={8}>\r\n                      <Form.Item\r\n                        name=\"costPrice\"\r\n                        label={t('product.publish.costPrice')}\r\n                        rules={[{ required: true, message: t('product.publish.enterCostPrice') }]}\r\n                      >\r\n                        <InputNumber\r\n                          prefix=\"$\"\r\n                          min={0}\r\n                          precision={2}\r\n                          style={{ width: '100%' }}\r\n                          placeholder=\"0.00\"\r\n                        />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={8}>\r\n                      <Form.Item name=\"currency\" label={t('product.publish.currency')}>\r\n                        <Select>\r\n                          {CURRENCIES.map(c => (\r\n                            <Option key={c.value} value={c.value}>{c.label}</Option>\r\n                          ))}\r\n                        </Select>\r\n                      </Form.Item>\r\n                    </Col>\r\n                  </Row>\r\n                </>\r\n              )},\r\n              { key: 'inventory', label: <><BoxPlotOutlined /> Inventory</>, children: (\r\n                <>\r\n                  <Row gutter={24}>\r\n                    <Col span={12}>\r\n                      <Form.Item\r\n                        name=\"sku\"\r\n                        label=\"SKU\"\r\n                        rules={[{ required: true, message: 'Please enter SKU' }]}\r\n                      >\r\n                        <Input placeholder=\"Enter SKU\" />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={12}>\r\n                      <Form.Item\r\n                        name=\"stock\"\r\n                        label=\"Initial Stock\"\r\n                        rules={[{ required: true, message: 'Please enter stock quantity' }]}\r\n                      >\r\n                        <InputNumber min={0} style={{ width: '100%' }} placeholder=\"0\" />\r\n                      </Form.Item>\r\n                    </Col>\r\n                  </Row>\r\n\r\n                  <Divider>Variants</Divider>\r\n\r\n                  <div style={{ marginBottom: 16 }}>\r\n                    <Button type=\"dashed\" icon={<PlusOutlined />} onClick={handleAddVariant}>\r\n                      Add Variant\r\n                    </Button>\r\n                  </div>\r\n\r\n                  <Table\r\n                    columns={variantColumns}\r\n                    dataSource={variants}\r\n                    rowKey=\"id\"\r\n                    pagination={false}\r\n                    size=\"small\"\r\n                    locale={{ emptyText: 'No variants added' }}\r\n                  />\r\n                </>\r\n              )},\r\n              { key: 'settings', label: 'Publish Settings', children: (\r\n                <>\r\n                  <Row gutter={24}>\r\n                    <Col span={12}>\r\n                      <Form.Item\r\n                        name=\"status\"\r\n                        label=\"Status\"\r\n                        rules={[{ required: true }]}\r\n                      >\r\n                        <Select>\r\n                          <Option value=\"DRAFT\">Draft</Option>\r\n                          <Option value=\"PENDING\">Pending Review</Option>\r\n                          <Option value=\"ACTIVE\">Active</Option>\r\n                        </Select>\r\n                      </Form.Item>\r\n                    </Col>\r\n                  </Row>\r\n\r\n                  <Form.Item\r\n                    name=\"complianceCheck\"\r\n                    label=\"Run Compliance Check\"\r\n                    valuePropName=\"checked\"\r\n                  >\r\n                    <Switch checkedChildren=\"Yes\" unCheckedChildren=\"No\" />\r\n                  </Form.Item>\r\n\r\n                  <Form.Item\r\n                    name=\"autoPublish\"\r\n                    label=\"Auto Publish After Compliance Check\"\r\n                    valuePropName=\"checked\"\r\n                    extra=\"Product will be automatically published if compliance check passes\"\r\n                  >\r\n                    <Switch checkedChildren=\"Yes\" unCheckedChildren=\"No\" />\r\n                  </Form.Item>\r\n\r\n                  <Alert\r\n                    message=\"Publishing Rules\"\r\n                    description={\r\n                      <ul style={{ marginBottom: 0, paddingLeft: 20 }}>\r\n                        <li>Products are first saved to local system, then synced to platforms</li>\r\n                        <li>All products must pass compliance check before syncing</li>\r\n                        <li>Products with profit margin below threshold will require manual approval</li>\r\n                        <li>Platform sync happens according to configured schedule</li>\r\n                      </ul>\r\n                    }\r\n                    type=\"warning\"\r\n                    showIcon\r\n                  />\r\n                </>\r\n              )},\r\n            ]}\r\n          />\r\n\r\n          <Divider />\r\n\r\n          <Space style={{ width: '100%', justifyContent: 'flex-end' }}>\r\n            <Button onClick={() => form.resetFields()}>Reset</Button>\r\n            <Button icon={<SaveOutlined />} onClick={handleSaveDraft} loading={loading}>\r\n              Save Draft\r\n            </Button>\r\n            <Button type=\"primary\" icon={<SendOutlined />} onClick={handleSubmit} loading={loading}>\r\n              Save to System\r\n            </Button>\r\n          </Space>\r\n        </Form>\r\n\r\n        <Modal\r\n          title={\r\n            <Space>\r\n              <ThunderboltOutlined style={{ color: '#1890ff' }} />\r\n              {processingType === 'image-to-image' ? t('product.publish.imageToImage') : t('product.publish.imageToVideo')}\r\n            </Space>\r\n          }\r\n          open={materialModalVisible}\r\n          onCancel={() => setMaterialModalVisible(false)}\r\n          footer={null}\r\n          width={600}\r\n        >\r\n          {selectedImage && (\r\n            <div style={{ marginBottom: 16 }}>\r\n              <Text type=\"secondary\">{t('product.publish.originalPreview')}</Text>\r\n              <Image src={selectedImage} width={200} style={{ marginTop: 8, borderRadius: 8 }} />\r\n            </div>\r\n          )}\r\n\r\n          <Form layout=\"vertical\" onFinish={handleProcessImage}>\r\n            {processingType === 'image-to-image' ? (\r\n              <>\r\n                <Form.Item name=\"prompt\" label={t('product.publish.prompt')}>\r\n                  <Input.TextArea \r\n                    rows={2} \r\n                    placeholder={t('product.publish.promptPlaceholder')}\r\n                  />\r\n                </Form.Item>\r\n                <Row gutter={16}>\r\n                  <Col span={12}>\r\n                    <Form.Item name=\"style\" label={t('product.publish.style')} initialValue=\"realistic\">\r\n                      <Select>\r\n                        {STYLE_OPTIONS.map(opt => (\r\n                          <Option key={opt.value} value={opt.value}>{opt.label}</Option>\r\n                        ))}\r\n                      </Select>\r\n                    </Form.Item>\r\n                  </Col>\r\n                  <Col span={12}>\r\n                    <Form.Item name=\"strength\" label={t('product.publish.strength')} initialValue={0.7}>\r\n                      <InputNumber min={0} max={1} step={0.1} style={{ width: '100%' }} />\r\n                    </Form.Item>\r\n                  </Col>\r\n                </Row>\r\n              </>\r\n            ) : (\r\n              <>\r\n                <Form.Item name=\"prompt\" label={t('product.publish.prompt')}>\r\n                  <Input.TextArea \r\n                    rows={2} \r\n                    placeholder={t('product.publish.promptPlaceholder')}\r\n                  />\r\n                </Form.Item>\r\n                <Row gutter={16}>\r\n                  <Col span={8}>\r\n                    <Form.Item name=\"motion\" label={t('product.publish.motion')} initialValue=\"zoom\">\r\n                      <Select>\r\n                        <Option value=\"zoom\">{t('product.publish.motionZoom')}</Option>\r\n                        <Option value=\"pan\">{t('product.publish.motionPan')}</Option>\r\n                        <Option value=\"rotate\">{t('product.publish.motionRotate')}</Option>\r\n                        <Option value=\"dynamic\">{t('product.publish.motionDynamic')}</Option>\r\n                      </Select>\r\n                    </Form.Item>\r\n                  </Col>\r\n                  <Col span={8}>\r\n                    <Form.Item name=\"duration\" label={t('product.publish.duration')} initialValue={5}>\r\n                      <InputNumber min={1} max={30} style={{ width: '100%' }} />\r\n                    </Form.Item>\r\n                  </Col>\r\n                  <Col span={8}>\r\n                    <Form.Item name=\"fps\" label={t('product.publish.fps')} initialValue={30}>\r\n                      <Select>\r\n                        <Option value={24}>24 FPS</Option>\r\n                        <Option value={30}>30 FPS</Option>\r\n                        <Option value={60}>60 FPS</Option>\r\n                      </Select>\r\n                    </Form.Item>\r\n                  </Col>\r\n                </Row>\r\n              </>\r\n            )}\r\n\r\n            <Form.Item>\r\n              <Space>\r\n                <Button type=\"primary\" htmlType=\"submit\" loading={processingLoading}>\r\n                  {t('product.publish.startProcessing')}\r\n                </Button>\r\n                <Button onClick={() => setMaterialModalVisible(false)}>\r\n                  {t('product.publish.cancel')}\r\n                </Button>\r\n              </Space>\r\n            </Form.Item>\r\n          </Form>\r\n        </Modal>\r\n      </Card>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default ProductPublishForm;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Product/ProductPublishForm.tsx"
    },
    "21": {
      "path": "/dashboard/product/ai-pricing",
      "file": "@/pages/Product/AIPricing/index.tsx",
      "parentId": "4",
      "id": "21",
      "absPath": "/dashboard/product/ai-pricing",
      "__content": "import {\n  useState,\n  Link,\n  Card,\n  Typography,\n  Row,\n  Col,\n  Form,\n  Input,\n  Select,\n  Button,\n  Table,\n  Statistic,\n  Spin,\n  message,\n  Alert,\n  CalculatorOutlined,\n  SaveOutlined,\n  HistoryOutlined,\n  LineChartOutlined,\n  Title,\n  Text,\n  Paragraph,\n  Option,\n  Item,\n  FC,\n} from '@/imports';\n\nimport { productDataSource } from '@/services/productDataSource';\n\ninterface PricingSuggestion {\n  id: string;\n  scenario: string;\n  suggestedPrice: number;\n  expectedProfit: number;\n  expectedROI: number;\n  expectedSales: number;\n  confidence: number;\n}\n\ninterface PriceHistory {\n  id: string;\n  date: string;\n  oldPrice: number;\n  newPrice: number;\n  reason: string;\n  operator: string;\n}\n\nconst AIPricing: FC = () => {\n  const [loading, setLoading] = useState<boolean>(false);\n  const [pricingSuggestions, setPricingSuggestions] = useState<PricingSuggestion[]>([]);\n  const [priceHistory, setPriceHistory] = useState<PriceHistory[]>([]);\n  const [form] = Form.useForm();\n\n  const mockPricingSuggestions: PricingSuggestion[] = [\n    {\n      id: '1',\n      scenario: '激进定价',\n      suggestedPrice: 349,\n      expectedProfit: 199,\n      expectedROI: 132.67,\n      expectedSales: 80,\n      confidence: 0.85,\n    },\n    {\n      id: '2',\n      scenario: '均衡定价',\n      suggestedPrice: 299,\n      expectedProfit: 149,\n      expectedROI: 99.33,\n      expectedSales: 120,\n      confidence: 0.95,\n    },\n    {\n      id: '3',\n      scenario: '保守定价',\n      suggestedPrice: 279,\n      expectedProfit: 129,\n      expectedROI: 86.00,\n      expectedSales: 150,\n      confidence: 0.90,\n    },\n  ];\n\n  const mockPriceHistory: PriceHistory[] = [\n    {\n      id: '1',\n      date: '2026-03-15',\n      oldPrice: 279,\n      newPrice: 299,\n      reason: '基于市场竞争分析',\n      operator: 'AI系统',\n    },\n    {\n      id: '2',\n      date: '2026-03-10',\n      oldPrice: 259,\n      newPrice: 279,\n      reason: '成本上升',\n      operator: '运营专员',\n    },\n    {\n      id: '3',\n      date: '2026-03-01',\n      oldPrice: 239,\n      newPrice: 259,\n      reason: '新品上市',\n      operator: '运营专员',\n    },\n  ];\n\n  const handleCalculatePrice = () => {\n    setLoading(true);\n    // 模拟API请求\n    setTimeout(() => {\n      setPricingSuggestions(mockPricingSuggestions);\n      setPriceHistory(mockPriceHistory);\n      setLoading(false);\n      message.success('智能定价计算完成');\n    }, 1500);\n  };\n\n  const handleApplyPrice = (scenario: string, price: number) => {\n    message.success(`已应用${scenario}定价策略，新价格：¥${price}`);\n  };\n\n  const columns = [\n    {\n      title: '场景',\n      dataIndex: 'scenario',\n      key: 'scenario',\n    },\n    {\n      title: '建议售价',\n      dataIndex: 'suggestedPrice',\n      key: 'suggestedPrice',\n      render: (text: number) => `¥${text}`,\n    },\n    {\n      title: '预期利润',\n      dataIndex: 'expectedProfit',\n      key: 'expectedProfit',\n      render: (text: number) => `¥${text}`,\n    },\n    {\n      title: '预期ROI',\n      dataIndex: 'expectedROI',\n      key: 'expectedROI',\n      render: (text: number) => `${text}%`,\n    },\n    {\n      title: '预期销量',\n      dataIndex: 'expectedSales',\n      key: 'expectedSales',\n    },\n    {\n      title: '置信度',\n      dataIndex: 'confidence',\n      key: 'confidence',\n      render: (text: number) => `${(text * 100).toFixed(0)}%`,\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: any, record: PricingSuggestion) => (\n        <Button \n          type=\"primary\" \n          size=\"small\"\n          onClick={() => handleApplyPrice(record.scenario, record.suggestedPrice)}\n        >\n          应用\n        </Button>\n      ),\n    },\n  ];\n\n  const historyColumns = [\n    {\n      title: '日期',\n      dataIndex: 'date',\n      key: 'date',\n    },\n    {\n      title: '旧价格',\n      dataIndex: 'oldPrice',\n      key: 'oldPrice',\n      render: (text: number) => `¥${text}`,\n    },\n    {\n      title: '新价格',\n      dataIndex: 'newPrice',\n      key: 'newPrice',\n      render: (text: number) => `¥${text}`,\n    },\n    {\n      title: '调整原因',\n      dataIndex: 'reason',\n      key: 'reason',\n    },\n    {\n      title: '操作人',\n      dataIndex: 'operator',\n      key: 'operator',\n    },\n  ];\n\n  return (\n    <div>\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <Title level={4}>AI智能定价</Title>\n        <Button type=\"primary\" icon={<HistoryOutlined />}>\n          <Link to=\"/Product/PriceHistory\">价格历史</Link>\n        </Button>\n      </div>\n\n      {/* 定价参数表单 */}\n      <Card title=\"定价参数\" style={{ marginBottom: 24 }}>\n        <Form\n          form={form}\n          layout=\"horizontal\"\n          initialValues={{\n            productId: 'P001',\n            cost: 150,\n            currentPrice: 299,\n            competitorPrice: 329,\n            salesVolume: 120,\n            pricingStrategy: 'balanced',\n          }}\n        >\n          <Row gutter={[16, 16]}>\n            <Col span={6}>\n              <Item label=\"商品ID\" name=\"productId\">\n                <Input placeholder=\"输入商品ID\" />\n              </Item>\n            </Col>\n            <Col span={6}>\n              <Item label=\"成本\" name=\"cost\" rules={[{ required: true, message: '请输入成本' }]}>\n                <Input type=\"number\" prefix=\"¥\" placeholder=\"输入成本\" />\n              </Item>\n            </Col>\n            <Col span={6}>\n              <Item label=\"当前售价\" name=\"currentPrice\" rules={[{ required: true, message: '请输入当前售价' }]}>\n                <Input type=\"number\" prefix=\"¥\" placeholder=\"输入当前售价\" />\n              </Item>\n            </Col>\n            <Col span={6}>\n              <Item label=\"竞品价格\" name=\"competitorPrice\">\n                <Input type=\"number\" prefix=\"¥\" placeholder=\"输入竞品价格\" />\n              </Item>\n            </Col>\n            <Col span={6}>\n              <Item label=\"月销量\" name=\"salesVolume\">\n                <Input type=\"number\" placeholder=\"输入月销量\" />\n              </Item>\n            </Col>\n            <Col span={6}>\n              <Item label=\"定价策略\" name=\"pricingStrategy\">\n                <Select>\n                  <Option value=\"aggressive\">激进定价</Option>\n                  <Option value=\"balanced\">均衡定价</Option>\n                  <Option value=\"conservative\">保守定价</Option>\n                </Select>\n              </Item>\n            </Col>\n            <Col span={12} style={{ display: 'flex', alignItems: 'flex-end' }}>\n              <Button \n                type=\"primary\" \n                icon={<CalculatorOutlined />} \n                onClick={handleCalculatePrice}\n                loading={loading}\n                style={{ width: '100%' }}\n              >\n                计算智能定价\n              </Button>\n            </Col>\n          </Row>\n        </Form>\n      </Card>\n\n      {/* 定价建议 */}\n      <Card title=\"智能定价建议\" style={{ marginBottom: 24 }}>\n        {loading ? (\n          <div style={{ display: 'flex', justifyContent: 'center', padding: '40px 0' }}>\n            <Spin size=\"large\" />\n          </div>\n        ) : pricingSuggestions.length > 0 ? (\n          <Table \n            columns={columns} \n            dataSource={pricingSuggestions} \n            rowKey=\"id\"\n            pagination={false}\n          />\n        ) : (\n          <Alert \n            message=\"请输入定价参数并点击计算按钮\" \n            type=\"info\" \n            showIcon \n            style={{ margin: '20px 0' }}\n          />\n        )}\n      </Card>\n\n      {/* 价格历史 */}\n      <Card title=\"价格调整历史\">\n        <Table \n          columns={historyColumns} \n          dataSource={priceHistory} \n          rowKey=\"id\"\n          pagination={{ pageSize: 5 }}\n        />\n      </Card>\n    </div>\n  );\n};\n\nexport default AIPricing;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Product/AIPricing/index.tsx"
    },
    "22": {
      "path": "/dashboard/product/profit-monitor",
      "file": "@/pages/Product/ProfitMonitor/index.tsx",
      "parentId": "4",
      "id": "22",
      "absPath": "/dashboard/product/profit-monitor",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Typography,\n  Row,\n  Col,\n  Select,\n  Button,\n  Table,\n  Statistic,\n  Spin,\n  message,\n  Alert,\n  Badge,\n  LineChart,\n  Line,\n  AreaChart,\n  Area,\n  XAxis,\n  YAxis,\n  CartesianGrid,\n  Tooltip,\n  Legend,\n  ResponsiveContainer,\n  AlertOutlined,\n  UpOutlined,\n  DownOutlined,\n  ReloadOutlined,\n  EyeOutlined,\n  Title,\n  Text,\n  Paragraph,\n  Option,\n  FC,\n} from '@/imports';\nimport { productDataSource } from '@/services/productDataSource';\n\ninterface ProfitData {\n  id: string;\n  date: string;\n  profit: number;\n  sales: number;\n  cost: number;\n  roi: number;\n}\n\ninterface AlertItem {\n  id: string;\n  productId: string;\n  productName: string;\n  type: string;\n  message: string;\n  severity: 'info' | 'warning' | 'error';\n  date: string;\n}\n\ninterface ProductProfit {\n  id: string;\n  productId: string;\n  productName: string;\n  currentProfit: number;\n  previousProfit: number;\n  change: number;\n  roi: number;\n  status: 'up' | 'down' | 'stable';\n}\n\nconst ProfitMonitor: FC = () => {\n  const [loading, setLoading] = useState<boolean>(false);\n  const [profitData, setProfitData] = useState<ProfitData[]>([]);\n  const [alerts, setAlerts] = useState<AlertItem[]>([]);\n  const [productProfits, setProductProfits] = useState<ProductProfit[]>([]);\n  const [selectedProduct, setSelectedProduct] = useState<string>('');\n  const [timeRange, setTimeRange] = useState<string>('7d');\n\n  const mockProfitData: ProfitData[] = [\n    { id: '1', date: '2026-03-12', profit: 14900, sales: 12000, cost: 8000, roi: 99.33 },\n    { id: '2', date: '2026-03-13', profit: 15200, sales: 12500, cost: 8200, roi: 100.67 },\n    { id: '3', date: '2026-03-14', profit: 14800, sales: 11800, cost: 8100, roi: 98.67 },\n    { id: '4', date: '2026-03-15', profit: 16500, sales: 13500, cost: 8500, roi: 103.33 },\n    { id: '5', date: '2026-03-16', profit: 17200, sales: 14000, cost: 8800, roi: 105.33 },\n    { id: '6', date: '2026-03-17', profit: 16800, sales: 13800, cost: 8700, roi: 104.00 },\n    { id: '7', date: '2026-03-18', profit: 18500, sales: 15000, cost: 9200, roi: 108.33 },\n  ];\n\n  const mockAlerts: AlertItem[] = [\n    {\n      id: '1',\n      productId: 'P001',\n      productName: '智能手表',\n      type: '利润下降',\n      message: '连续3天利润下降，当前利润低于预期15%',\n      severity: 'warning',\n      date: '2026-03-18 10:30',\n    },\n    {\n      id: '2',\n      productId: 'P002',\n      productName: '无线耳机',\n      type: 'ROI异常',\n      message: 'ROI突然上升30%，可能存在定价问题',\n      severity: 'info',\n      date: '2026-03-18 09:15',\n    },\n    {\n      id: '3',\n      productId: 'P003',\n      productName: '智能音箱',\n      type: '成本上升',\n      message: '成本上升10%，建议调整售价',\n      severity: 'error',\n      date: '2026-03-17 16:45',\n    },\n  ];\n\n  const mockProductProfits: ProductProfit[] = [\n    {\n      id: '1',\n      productId: 'P001',\n      productName: '智能手表',\n      currentProfit: 14900,\n      previousProfit: 15200,\n      change: -2.0,\n      roi: 99.33,\n      status: 'down',\n    },\n    {\n      id: '2',\n      productId: 'P002',\n      productName: '无线耳机',\n      currentProfit: 23800,\n      previousProfit: 21500,\n      change: 10.7,\n      roi: 148.75,\n      status: 'up',\n    },\n    {\n      id: '3',\n      productId: 'P003',\n      productName: '智能音箱',\n      currentProfit: 9500,\n      previousProfit: 9400,\n      change: 1.1,\n      roi: 86.36,\n      status: 'stable',\n    },\n  ];\n\n  const fetchProfitData = () => {\n    setLoading(true);\n    // 模拟API请求\n    setTimeout(() => {\n      setProfitData(mockProfitData);\n      setAlerts(mockAlerts);\n      setProductProfits(mockProductProfits);\n      setLoading(false);\n    }, 1000);\n  };\n\n  useEffect(() => {\n    fetchProfitData();\n  }, []);\n\n  const handleProductChange = (value: string) => {\n    setSelectedProduct(value);\n  };\n\n  const handleTimeRangeChange = (value: string) => {\n    setTimeRange(value);\n  };\n\n  const handleRefresh = () => {\n    fetchProfitData();\n  };\n\n  const columns = [\n    {\n      title: '商品ID',\n      dataIndex: 'productId',\n      key: 'productId',\n    },\n    {\n      title: '商品名称',\n      dataIndex: 'productName',\n      key: 'productName',\n    },\n    {\n      title: '当前利润',\n      dataIndex: 'currentProfit',\n      key: 'currentProfit',\n      render: (text: number) => `¥${text}`,\n    },\n    {\n      title: '变化率',\n      dataIndex: 'change',\n      key: 'change',\n      render: (text: number) => (\n        <span style={{ color: text > 0 ? '#52c41a' : text < 0 ? '#ff4d4f' : '#1890ff' }}>\n          {text > 0 ? '+' : ''}{text}%\n        </span>\n      ),\n    },\n    {\n      title: 'ROI',\n      dataIndex: 'roi',\n      key: 'roi',\n      render: (text: number) => `${text}%`,\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => (\n        <Badge \n          status={status === 'up' ? 'success' : status === 'down' ? 'error' : 'default'} \n          text={status === 'up' ? '上升' : status === 'down' ? '下降' : '稳定'}\n        />\n      ),\n    },\n  ];\n\n  const alertColumns = [\n    {\n      title: '商品ID',\n      dataIndex: 'productId',\n      key: 'productId',\n    },\n    {\n      title: '商品名称',\n      dataIndex: 'productName',\n      key: 'productName',\n    },\n    {\n      title: '类型',\n      dataIndex: 'type',\n      key: 'type',\n    },\n    {\n      title: '消息',\n      dataIndex: 'message',\n      key: 'message',\n    },\n    {\n      title: '严重程度',\n      dataIndex: 'severity',\n      key: 'severity',\n      render: (severity: string) => (\n        <Badge \n          status={severity === 'info' ? 'default' : severity === 'warning' ? 'warning' : 'error'} \n          text={severity === 'info' ? '信息' : severity === 'warning' ? '警告' : '错误'}\n        />\n      ),\n    },\n    {\n      title: '时间',\n      dataIndex: 'date',\n      key: 'date',\n    },\n  ];\n\n  return (\n    <div>\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <Title level={4}>商品利润监控</Title>\n        <div style={{ display: 'flex', gap: 12 }}>\n          <Select\n            placeholder=\"选择商品\"\n            style={{ width: 200 }}\n            onChange={handleProductChange}\n          >\n            <Option value=\"\">全部商品</Option>\n            <Option value=\"P001\">智能手表</Option>\n            <Option value=\"P002\">无线耳机</Option>\n            <Option value=\"P003\">智能音箱</Option>\n          </Select>\n          <Select\n            defaultValue=\"7d\"\n            style={{ width: 120 }}\n            onChange={handleTimeRangeChange}\n          >\n            <Option value=\"7d\">近7天</Option>\n            <Option value=\"30d\">近30天</Option>\n            <Option value=\"90d\">近90天</Option>\n          </Select>\n          <Button \n            type=\"primary\" \n            icon={<ReloadOutlined />} \n            onClick={handleRefresh}\n            loading={loading}\n          >\n            刷新\n          </Button>\n        </div>\n      </div>\n\n      {/* 利润概览 */}\n      <Row gutter={[16, 16]} style={{ marginBottom: 24 }}>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"总利润\"\n              value={mockProductProfits.reduce((sum, item) => sum + item.currentProfit, 0)}\n              prefix=\"¥\"\n              valueStyle={{ color: '#3f8600' }}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"平均ROI\"\n              value={mockProductProfits.reduce((sum, item) => sum + item.roi, 0) / mockProductProfits.length}\n              suffix=\"%\"\n              valueStyle={{ color: '#3f8600' }}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"利润预警\"\n              value={mockAlerts.length}\n              prefix={<AlertOutlined />}\n              valueStyle={{ color: '#faad14' }}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"监控商品数\"\n              value={mockProductProfits.length}\n              prefix={<EyeOutlined />}\n              valueStyle={{ color: '#1890ff' }}\n            />\n          </Card>\n        </Col>\n      </Row>\n\n      {/* 利润趋势图表 */}\n      <Card title=\"利润趋势\" style={{ marginBottom: 24 }}>\n        <ResponsiveContainer width=\"100%\" height={400}>\n          <AreaChart data={profitData}>\n            <CartesianGrid strokeDasharray=\"3 3\" />\n            <XAxis dataKey=\"date\" />\n            <YAxis />\n            <Tooltip />\n            <Legend />\n            <Area type=\"monotone\" dataKey=\"profit\" name=\"利润\" fill=\"#52c41a\" stroke=\"#52c41a\" />\n            <Area type=\"monotone\" dataKey=\"sales\" name=\"销售额\" fill=\"#1890ff\" stroke=\"#1890ff\" />\n            <Area type=\"monotone\" dataKey=\"cost\" name=\"成本\" fill=\"#faad14\" stroke=\"#faad14\" />\n          </AreaChart>\n        </ResponsiveContainer>\n      </Card>\n\n      <Row gutter={[16, 16]}>\n        {/* 商品利润列表 */}\n        <Col span={12}>\n          <Card title=\"商品利润详情\">\n            <Table \n              columns={columns} \n              dataSource={productProfits} \n              rowKey=\"id\" \n              loading={loading}\n              pagination={{ pageSize: 5 }}\n            />\n          </Card>\n        </Col>\n\n        {/* 利润预警 */}\n        <Col span={12}>\n          <Card title=\"利润预警\">\n            <Table \n              columns={alertColumns} \n              dataSource={alerts} \n              rowKey=\"id\" \n              loading={loading}\n              pagination={{ pageSize: 5 }}\n            />\n          </Card>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nexport default ProfitMonitor;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Product/ProfitMonitor/index.tsx"
    },
    "23": {
      "path": "/dashboard/inventory",
      "file": "@/pages/Inventory/index.tsx",
      "parentId": "4",
      "id": "23",
      "absPath": "/dashboard/inventory",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Row,\n  Col,\n  Statistic,\n  Button,\n  Table,\n  InboxOutlined,\n  AlertOutlined,\n  CheckCircleOutlined,\n  DollarOutlined,\n  useNavigate,\n  inventoryDataSource,\n  FC,\n} from '@/imports';\nimport type { Inventory } from '@/types/inventory';\nimport { InventoryStatus } from '@/types/inventory';\n\nconst InventoryPage: FC = () => {\n  const navigate = useNavigate();\n  const [inventory, setInventory] = useState<Inventory[]>([]);\n  const [loading, setLoading] = useState(false);\n\n  useEffect(() => {\n    fetchInventory();\n  }, []);\n\n  const fetchInventory = async () => {\n    setLoading(true);\n    try {\n      const result = await inventoryDataSource.list();\n      setInventory(result.data);\n    } catch (error) {\n      // handle error\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const columns = [\n    {\n      title: 'SKU',\n      dataIndex: 'productId',\n      key: 'productId',\n    },\n    {\n      title: '商品名称',\n      dataIndex: 'productName',\n      key: 'productName',\n    },\n    {\n      title: '库存数量',\n      dataIndex: 'quantity',\n      key: 'quantity',\n      render: (stock: number, record: Inventory) => {\n        let color = '#3f8600';\n        if (record.status === InventoryStatus.LOW_STOCK) color = '#fa8c16';\n        if (record.status === InventoryStatus.OUT_OF_STOCK) color = '#cf1322';\n        return <span style={{ color }}>{stock}</span>;\n      },\n    },\n    {\n      title: '最低库存',\n      dataIndex: 'threshold',\n      key: 'threshold',\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: InventoryStatus) => {\n        const statusMap = {\n          [InventoryStatus.IN_STOCK]: { text: '正常', icon: <CheckCircleOutlined style={{ color: '#3f8600' }} />, color: '#3f8600' },\n          [InventoryStatus.LOW_STOCK]: { text: '库存不足', icon: <AlertOutlined style={{ color: '#fa8c16' }} />, color: '#fa8c16' },\n          [InventoryStatus.OUT_OF_STOCK]: { text: '缺货', icon: <AlertOutlined style={{ color: '#cf1322' }} />, color: '#cf1322' },\n        };\n        const statusInfo = statusMap[status] || { text: status, icon: null, color: '#000' };\n        return (\n          <span style={{ color: statusInfo.color }}>\n            {statusInfo.icon} {statusInfo.text}\n          </span>\n        );\n      },\n    },\n  ];\n\n  const totalItems = inventory.length;\n  const lowStockItems = inventory.filter(item => item.status === InventoryStatus.LOW_STOCK).length;\n  const outOfStockItems = inventory.filter(item => item.status === InventoryStatus.OUT_OF_STOCK).length;\n\n  return (\n    <div className=\"inventory\">\n      <div className=\"page-header\">\n        <h1>库存管理</h1>\n      </div>\n\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"总商品数\"\n              value={totalItems}\n              prefix={<InboxOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"库存不足\"\n              value={lowStockItems}\n              prefix={<AlertOutlined style={{ color: '#fa8c16' }} />}\n              valueStyle={{ color: '#fa8c16' }}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"缺货商品\"\n              value={outOfStockItems}\n              prefix={<AlertOutlined style={{ color: '#cf1322' }} />}\n              valueStyle={{ color: '#cf1322' }}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"库存总量\"\n              value={inventory.reduce((sum, item) => sum + item.quantity, 0)}\n              prefix={<DollarOutlined />}\n            />\n          </Card>\n        </Col>\n      </Row>\n\n      <Card title=\"库存列表\">\n        <Table\n          columns={columns}\n          dataSource={inventory}\n          loading={loading}\n          rowKey=\"id\"\n          pagination={{\n            pageSize: 10,\n            showSizeChanger: true,\n          }}\n        />\n      </Card>\n\n      <Row gutter={16} style={{ marginTop: 24 }}>\n        <Col span={8}>\n          <Button type=\"primary\" block onClick={() => navigate('/inventory/warehouses')}>\n            查看仓库管理\n          </Button>\n        </Col>\n        <Col span={8}>\n          <Button type=\"primary\" block onClick={() => navigate('/inventory/forecast')}>\n            查看库存预测\n          </Button>\n        </Col>\n        <Col span={8}>\n          <Button type=\"primary\" block onClick={fetchInventory}>\n            刷新库存\n          </Button>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nexport default InventoryPage;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Inventory/index.tsx"
    },
    "24": {
      "path": "/dashboard/inventory/warehouses",
      "file": "@/pages/Inventory/Warehouses.tsx",
      "parentId": "4",
      "id": "24",
      "absPath": "/dashboard/inventory/warehouses",
      "__content": "import {\n  useState,\n  useEffect,\n  Table,\n  Button,\n  Input,\n  Select,\n  Card,\n  message,\n  Modal,\n  Form,\n  PlusOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  SearchOutlined,\n  Option,\n  Search,\n  FC,\n} from '@/imports';\nimport { inventoryDataSource, Warehouse } from '@/services/inventoryDataSource';\n\nconst Warehouses: FC = () => {\n  const [warehouses, setWarehouses] = useState<Warehouse[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [modalVisible, setModalVisible] = useState(false);\n  const [editingWarehouse, setEditingWarehouse] = useState<Warehouse | null>(null);\n  const [form] = Form.useForm();\n\n  useEffect(() => {\n    fetchWarehouses();\n  }, []);\n\n  const fetchWarehouses = async () => {\n    setLoading(true);\n    try {\n      const data = await inventoryDataSource.fetchWarehouses();\n      setWarehouses(data);\n    } catch (error) {\n      message.error('Failed to load warehouses');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleAddWarehouse = () => {\n    form.resetFields();\n    setEditingWarehouse(null);\n    setModalVisible(true);\n  };\n\n  const handleEditWarehouse = (warehouse: Warehouse) => {\n    form.setFieldsValue(warehouse);\n    setEditingWarehouse(warehouse);\n    setModalVisible(true);\n  };\n\n  const handleDeleteWarehouse = (id: string) => {\n    message.success('仓库已删除');\n    fetchWarehouses();\n  };\n\n  const handleSubmit = async (values: any) => {\n    setLoading(true);\n    // 模拟API调用\n    setTimeout(() => {\n      message.success(editingWarehouse ? '仓库更新成功' : '仓库创建成功');\n      setLoading(false);\n      setModalVisible(false);\n      fetchWarehouses();\n    }, 1000);\n  };\n\n  const columns = [\n    {\n      title: '仓库名称',\n      dataIndex: 'name',\n      key: 'name',\n    },\n    {\n      title: '位置',\n      dataIndex: 'location',\n      key: 'location',\n    },\n    {\n      title: '容量',\n      dataIndex: 'capacity',\n      key: 'capacity',\n    },\n    {\n      title: '已使用',\n      dataIndex: 'used',\n      key: 'used',\n    },\n    {\n      title: '使用率',\n      key: 'usageRate',\n      render: (_: any, record: Warehouse) => {\n        const usageRate = (record.currentUsage / record.capacity) * 100;\n        return `${usageRate.toFixed(2)}%`;\n      },\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => {\n        const statusMap: Record<string, string> = {\n          active: '活跃',\n          inactive: '非活跃',\n          maintenance: '维护中',\n        };\n        return statusMap[status] || status;\n      },\n    },\n    {\n      title: '类型',\n      dataIndex: 'type',\n      key: 'type',\n      render: (type: string) => {\n        const typeMap: Record<string, string> = {\n          primary: '主要仓库',\n          secondary: '次要仓库',\n          third_party: '第三方仓库',\n        };\n        return typeMap[type] || type;\n      },\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: any, record: Warehouse) => (\n        <div>\n          <Button\n            type=\"link\"\n            icon={<EditOutlined />}\n            onClick={() => handleEditWarehouse(record)}\n          >\n            编辑\n          </Button>\n          <Button\n            type=\"link\"\n            danger\n            icon={<DeleteOutlined />}\n            onClick={() => handleDeleteWarehouse(record.id)}\n          >\n            删除\n          </Button>\n        </div>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"warehouses\">\n      <div className=\"page-header\">\n        <h1>仓库管理</h1>\n        <Button\n          type=\"primary\"\n          icon={<PlusOutlined />}\n          onClick={handleAddWarehouse}\n        >\n          添加仓库\n        </Button>\n      </div>\n\n      <Card title=\"仓库列表\">\n        <Table\n          columns={columns}\n          dataSource={warehouses}\n          loading={loading}\n          rowKey=\"id\"\n          pagination={{\n            pageSize: 10,\n            showSizeChanger: true,\n          }}\n        />\n      </Card>\n\n      <Modal\n        title={editingWarehouse ? '编辑仓库' : '添加仓库'}\n        open={modalVisible}\n        onCancel={() => setModalVisible(false)}\n        footer={null}\n      >\n        <Form\n          form={form}\n          layout=\"vertical\"\n          onFinish={handleSubmit}\n        >\n          <Form.Item\n            name=\"name\"\n            label=\"仓库名称\"\n            rules={[{ required: true, message: '请输入仓库名称' }]}\n          >\n            <Input placeholder=\"请输入仓库名称\" />\n          </Form.Item>\n\n          <Form.Item\n            name=\"location\"\n            label=\"位置\"\n            rules={[{ required: true, message: '请输入仓库位置' }]}\n          >\n            <Input placeholder=\"请输入仓库位置\" />\n          </Form.Item>\n\n          <Form.Item\n            name=\"capacity\"\n            label=\"容量\"\n            rules={[{ required: true, message: '请输入仓库容量' }]}\n          >\n            <Input type=\"number\" placeholder=\"请输入仓库容量\" />\n          </Form.Item>\n\n          <Form.Item\n            name=\"status\"\n            label=\"状态\"\n            rules={[{ required: true, message: '请选择仓库状态' }]}\n          >\n            <Select placeholder=\"请选择仓库状态\">\n              <Option value=\"active\">活跃</Option>\n              <Option value=\"inactive\">非活跃</Option>\n              <Option value=\"maintenance\">维护中</Option>\n            </Select>\n          </Form.Item>\n\n          <Form.Item\n            name=\"type\"\n            label=\"类型\"\n            rules={[{ required: true, message: '请选择仓库类型' }]}\n          >\n            <Select placeholder=\"请选择仓库类型\">\n              <Option value=\"primary\">主要仓库</Option>\n              <Option value=\"secondary\">次要仓库</Option>\n              <Option value=\"third_party\">第三方仓库</Option>\n            </Select>\n          </Form.Item>\n\n          <Form.Item>\n            <Button type=\"primary\" htmlType=\"submit\" loading={loading}>\n              保存\n            </Button>\n            <Button style={{ marginLeft: 16 }} onClick={() => setModalVisible(false)}>\n              取消\n            </Button>\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default Warehouses;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Inventory/Warehouses.tsx"
    },
    "25": {
      "path": "/dashboard/orders",
      "file": "@/pages/Orders/index.tsx",
      "parentId": "4",
      "id": "25",
      "absPath": "/dashboard/orders",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Typography,\n  Row,\n  Col,\n  Button,\n  Statistic,\n  Space,\n  Tabs,\n  FileTextOutlined,\n  AlertOutlined,\n  BarChartOutlined,\n  SyncOutlined,\n  PlusOutlined,\n  SearchOutlined,\n  FilterOutlined,\n  DollarOutlined,\n  TruckOutlined,\n  ClockCircleOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  Link,\n  Area,\n  Pie,\n  Column,\n  orderDataSource,\n  Title,\n  Text,\n  Paragraph,\n  FC,\n} from '@/imports';\nimport moment from 'moment';\n\nconst OrderManagement: FC = () => {\n  const [loading, setLoading] = useState(false);\n  const [orderData, setOrderData] = useState<{\n    trend: Array<{ date: string; orders: number; amount: number }>;\n    platform: Array<{ name: string; value: number }>;\n    status: Array<{ name: string; value: number; color: string }>;\n    metrics: {\n      totalOrders: number;\n      totalAmount: number;\n      pendingOrders: number;\n      todayOrders: number;\n      todayAmount: number;\n      avgOrderValue: number;\n    };\n    recentOrders: Array<{ id: string; customer: string; amount: number; status: string; platform: string }>;\n  }>({\n    trend: [],\n    platform: [],\n    status: [],\n    metrics: {\n      totalOrders: 0,\n      totalAmount: 0,\n      pendingOrders: 0,\n      todayOrders: 0,\n      todayAmount: 0,\n      avgOrderValue: 0,\n    },\n    recentOrders: [],\n  });\n\n  useEffect(() => {\n    fetchOrderData();\n  }, []);\n\n  const fetchOrderData = async () => {\n    setLoading(true);\n    try {\n      const [trend, platform, status, metrics, recentOrders] = await Promise.all([\n        orderDataSource.getOrderTrend(7),\n        orderDataSource.getPlatformDistribution(),\n        orderDataSource.getStatusDistribution(),\n        orderDataSource.getKeyMetrics(),\n        orderDataSource.getRecentOrders(4),\n      ]);\n\n      setOrderData({\n        trend,\n        platform,\n        status,\n        metrics,\n        recentOrders,\n      });\n    } catch (error) {\n      console.error('Failed to fetch order data:', error);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  // 配置图表\n  const trendConfig = {\n    data: orderData.trend,\n    xField: 'date',\n    yField: 'amount',\n    seriesField: 'category',\n    yAxis: {\n      title: {\n        text: '订单金额 (USD)',\n      },\n    },\n    areaStyle: {\n      fill: 'l(270) 0:#ffffff 0.5:#1890ff 1:#1890ff',\n    },\n  };\n\n  const platformConfig = {\n    data: orderData.platform,\n    angleField: 'value',\n    colorField: 'name',\n    radius: 0.8,\n    label: {\n      type: 'outer',\n      content: '{name}: {percentage}',\n    },\n  };\n\n  const statusConfig = {\n    data: orderData.status,\n    xField: 'name',\n    yField: 'value',\n    colorField: 'name',\n    color: orderData.status.map(item => item.color),\n    label: {\n      position: 'top',\n    },\n  };\n\n  return (\n    <div style={{ padding: '0 24px 24px' }}>\n      {/* 页面标题和操作区 */}\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24, marginTop: 16 }}>\n        <div>\n          <Title level={4}>订单管理</Title>\n          <Text type=\"secondary\">管理和分析所有订单</Text>\n        </div>\n        <Space>\n          <Button icon={<SearchOutlined />}>\n            <Link to=\"/Orders/OrderList\">高级搜索</Link>\n          </Button>\n          <Button icon={<FilterOutlined />}>\n            <Link to=\"/Orders/OrderList\">筛选订单</Link>\n          </Button>\n          <Button type=\"primary\" icon={<SyncOutlined />} loading={loading} onClick={fetchOrderData}>\n            刷新数据\n          </Button>\n        </Space>\n      </div>\n\n      {/* 关键指标卡片 */}\n      <Row gutter={[16, 16]} style={{ marginBottom: 24 }}>\n        <Col span={6}>\n          <Card hoverable>\n            <Statistic \n              title=\"总订单数\" \n              value={orderData.metrics.totalOrders} \n              prefix={<FileTextOutlined />}\n              suffix={<Text type=\"secondary\">单</Text>}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card hoverable>\n            <Statistic \n              title=\"总销售额\" \n              value={orderData.metrics.totalAmount} \n              prefix={<DollarOutlined />}\n              suffix={<Text type=\"secondary\">USD</Text>}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card hoverable>\n            <Statistic \n              title=\"待处理订单\" \n              value={orderData.metrics.pendingOrders} \n              prefix={<ClockCircleOutlined />}\n              suffix={<Text type=\"secondary\">单</Text>}\n              valueStyle={{ color: '#faad14' }}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card hoverable>\n            <Statistic \n              title=\"今日订单\" \n              value={orderData.metrics.todayOrders} \n              prefix={<PlusOutlined />}\n              suffix={<Text type=\"secondary\">单</Text>}\n              valueStyle={{ color: '#52c41a' }}\n            />\n          </Card>\n        </Col>\n      </Row>\n\n      {/* 图表区域 */}\n      <Row gutter={[16, 16]} style={{ marginBottom: 24 }}>\n        <Col span={16}>\n          <Card title=\"订单趋势\" loading={loading}>\n            <Area {...trendConfig} />\n          </Card>\n        </Col>\n        <Col span={8}>\n          <Card title=\"平台分布\" loading={loading}>\n            <Pie {...platformConfig} />\n          </Card>\n        </Col>\n      </Row>\n\n      <Row gutter={[16, 16]} style={{ marginBottom: 24 }}>\n        <Col span={12}>\n          <Card title=\"订单状态分布\" loading={loading}>\n            <Column {...statusConfig} />\n          </Card>\n        </Col>\n        <Col span={12}>\n          <Card title=\"最近订单\" loading={loading}>\n            <div style={{ maxHeight: 300, overflowY: 'auto' }}>\n              {orderData.recentOrders.map((order, index) => (\n                <div key={order.id} style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '12px 0', borderBottom: index < orderData.recentOrders.length - 1 ? '1px solid #f0f0f0' : 'none' }}>\n                  <div>\n                    <Text strong>{order.id}</Text>\n                    <div style={{ marginTop: 4 }}>\n                      <Text type=\"secondary\">客户: {order.customer}</Text>\n                    </div>\n                  </div>\n                  <div style={{ textAlign: 'right' }}>\n                    <Text strong>${order.amount.toFixed(2)}</Text>\n                    <div style={{ marginTop: 4 }}>\n                      <Text type=\"secondary\">{order.platform}</Text>\n                    </div>\n                  </div>\n                </div>\n              ))}\n            </div>\n          </Card>\n        </Col>\n      </Row>\n\n      {/* 快速导航 */}\n      <Card title=\"快速导航\" style={{ marginBottom: 24 }}>\n        <Row gutter={[16, 16]}>\n          <Col span={8}>\n            <Card hoverable onClick={() => window.location.href = '/Orders/OrderList'}>\n              <div style={{ textAlign: 'center' }}>\n                <FileTextOutlined style={{ fontSize: 32, color: '#1890ff', marginBottom: 8 }} />\n                <div>\n                  <Text strong>订单列表</Text>\n                  <p style={{ color: '#999', marginTop: 4 }}>查看和管理所有订单</p>\n                </div>\n              </div>\n            </Card>\n          </Col>\n          <Col span={8}>\n            <Card hoverable onClick={() => window.location.href = '/Orders/ExceptionOrder'}>\n              <div style={{ textAlign: 'center' }}>\n                <AlertOutlined style={{ fontSize: 32, color: '#ff4d4f', marginBottom: 8 }} />\n                <div>\n                  <Text strong>异常订单</Text>\n                  <p style={{ color: '#999', marginTop: 4 }}>处理退款和取消订单</p>\n                </div>\n              </div>\n            </Card>\n          </Col>\n          <Col span={8}>\n            <Card hoverable onClick={() => window.location.href = '/Orders/OrderAggregation'}>\n              <div style={{ textAlign: 'center' }}>\n                <BarChartOutlined style={{ fontSize: 32, color: '#52c41a', marginBottom: 8 }} />\n                <div>\n                  <Text strong>订单统计</Text>\n                  <p style={{ color: '#999', marginTop: 4 }}>分析订单数据和趋势</p>\n                </div>\n              </div>\n            </Card>\n          </Col>\n        </Row>\n      </Card>\n\n      {/* 订单状态概览 */}\n      <Card title=\"订单状态概览\">\n        <Tabs \n          defaultActiveKey=\"all\"\n          items={[\n            { key: 'all', label: '全部', children: (\n              <>\n                <Paragraph>\n                  查看所有订单，包括待处理、已确认、已发货、已完成等状态。\n                </Paragraph>\n                <Button type=\"primary\" style={{ marginTop: 16 }}>\n                  <Link to=\"/Orders/OrderList\">查看全部订单</Link>\n                </Button>\n              </>\n            )},\n            { key: 'pending', label: '待处理', children: (\n              <>\n                <Paragraph>\n                  待处理订单需要您的确认，包括新订单和未处理的订单。\n                </Paragraph>\n                <Button type=\"primary\" style={{ marginTop: 16 }}>\n                  <Link to=\"/Orders/OrderList?status=PENDING\">处理待处理订单</Link>\n                </Button>\n              </>\n            )},\n            { key: 'shipped', label: '已发货', children: (\n              <>\n                <Paragraph>\n                  已发货订单正在运输中，您可以查看物流信息和预计送达时间。\n                </Paragraph>\n                <Button type=\"primary\" style={{ marginTop: 16 }}>\n                  <Link to=\"/Orders/OrderList?status=SHIPPED\">查看已发货订单</Link>\n                </Button>\n              </>\n            )},\n            { key: 'exception', label: '异常', children: (\n              <>\n                <Paragraph>\n                  异常订单包括已取消和退款中的订单，需要您的关注和处理。\n                </Paragraph>\n                <Button type=\"primary\" style={{ marginTop: 16 }}>\n                  <Link to=\"/Orders/ExceptionOrder\">处理异常订单</Link>\n                </Button>\n              </>\n            )},\n          ]}\n        />\n      </Card>\n    </div>\n  );\n};\n\nexport default OrderManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Orders/index.tsx"
    },
    "26": {
      "path": "/dashboard/orders/exception",
      "file": "@/pages/Orders/ExceptionOrder.tsx",
      "parentId": "4",
      "id": "26",
      "absPath": "/dashboard/orders/exception",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Table,\r\n  Tag,\r\n  Button,\r\n  Space,\r\n  Modal,\r\n  Form,\r\n  Input,\r\n  Select,\r\n  message,\r\n  Tooltip,\r\n  Row,\r\n  Col,\r\n  Statistic,\r\n  Badge,\r\n  Tabs,\r\n  Descriptions,\r\n  Divider,\r\n  Alert,\r\n  Popconfirm,\r\n  WarningOutlined,\r\n  CheckCircleOutlined,\r\n  CloseCircleOutlined,\r\n  SyncOutlined,\r\n  EyeOutlined,\r\n  ReloadOutlined,\r\n  ExclamationCircleOutlined,\r\n  Option,\r\n  TextArea,\r\n  FC,\r\n} from '@/imports';\r\nimport type { ColumnsType } from 'antd/es/table';\r\nimport { orderDataSource } from '@/services/orderDataSource';\r\n\r\ninterface ExceptionOrderData {\r\n  id: string;\r\n  orderId: string;\r\n  platform: string;\r\n  customerName: string;\r\n  totalAmount: number;\r\n  exceptionType: 'PAYMENT_FAILED' | 'OUT_OF_STOCK' | 'ADDRESS_INVALID' | 'FRAUD_SUSPECTED' | 'SHIPPING_FAILED' | 'OTHER';\r\n  severity: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';\r\n  status: 'OPEN' | 'IN_PROGRESS' | 'RESOLVED' | 'ESCALATED';\r\n  description: string;\r\n  createdAt: string;\r\n  assignedTo?: string;\r\n  resolution?: string;\r\n}\r\n\r\nconst EXCEPTION_TYPE_MAP: Record<string, { color: string; text: string }> = {\r\n  PAYMENT_FAILED: { color: 'red', text: 'Payment Failed' },\r\n  OUT_OF_STOCK: { color: 'orange', text: 'Out of Stock' },\r\n  ADDRESS_INVALID: { color: 'blue', text: 'Invalid Address' },\r\n  FRAUD_SUSPECTED: { color: 'purple', text: 'Fraud Suspected' },\r\n  SHIPPING_FAILED: { color: 'cyan', text: 'Shipping Failed' },\r\n  OTHER: { color: 'default', text: 'Other' },\r\n};\r\n\r\nconst SEVERITY_MAP: Record<string, { color: string; text: string }> = {\r\n  LOW: { color: 'default', text: 'Low' },\r\n  MEDIUM: { color: 'blue', text: 'Medium' },\r\n  HIGH: { color: 'orange', text: 'High' },\r\n  CRITICAL: { color: 'red', text: 'Critical' },\r\n};\r\n\r\nconst EXCEPTION_STATUS_MAP: Record<string, { color: string; text: string }> = {\r\n  OPEN: { color: 'error', text: 'Open' },\r\n  IN_PROGRESS: { color: 'processing', text: 'In Progress' },\r\n  RESOLVED: { color: 'success', text: 'Resolved' },\r\n  ESCALATED: { color: 'warning', text: 'Escalated' },\r\n};\r\n\r\nconst ExceptionOrder: FC = () => {\n  const [form] = Form.useForm();\n  const [loading, setLoading] = useState(false);\n  const [exceptions, setExceptions] = useState<ExceptionOrderData[]>([]);\n  const [selectedException, setSelectedException] = useState<ExceptionOrderData | null>(null);\r\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\r\n  const [resolveModalVisible, setResolveModalVisible] = useState(false);\r\n  const [activeTab, setActiveTab] = useState('all');\r\n  const [stats, setStats] = useState({\r\n    total: 0,\r\n    open: 0,\r\n    critical: 0,\r\n    resolved: 0,\r\n  });\r\n\r\n  useEffect(() => {\r\n    fetchExceptions();\r\n  }, []);\r\n\r\n  const fetchExceptions = async () => {\r\n    setLoading(true);\r\n    try {\r\n      const mockExceptions: ExceptionOrder[] = [\r\n        {\r\n          id: '1',\r\n          orderId: 'ORD-2026-001',\r\n          platform: 'AMAZON',\r\n          customerName: 'John Smith',\r\n          totalAmount: 159.99,\r\n          exceptionType: 'PAYMENT_FAILED',\r\n          severity: 'HIGH',\r\n          status: 'OPEN',\r\n          description: 'Payment authorization failed. Customer card was declined.',\r\n          createdAt: '2026-03-18 10:30:00',\r\n        },\r\n        {\r\n          id: '2',\r\n          orderId: 'ORD-2026-002',\r\n          platform: 'EBAY',\r\n          customerName: 'Emma Wilson',\r\n          totalAmount: 89.50,\r\n          exceptionType: 'OUT_OF_STOCK',\r\n          severity: 'MEDIUM',\r\n          status: 'IN_PROGRESS',\r\n          description: 'Item SKU-001 is out of stock. Need to source from supplier.',\r\n          createdAt: '2026-03-18 09:15:00',\r\n          assignedTo: 'Agent_001',\r\n        },\r\n        {\r\n          id: '3',\r\n          orderId: 'ORD-2026-003',\r\n          platform: 'SHOPIFY',\r\n          customerName: 'Michael Brown',\r\n          totalAmount: 245.00,\r\n          exceptionType: 'ADDRESS_INVALID',\r\n          severity: 'LOW',\r\n          status: 'RESOLVED',\r\n          description: 'Shipping address incomplete. Missing zip code.',\r\n          createdAt: '2026-03-17 16:45:00',\r\n          resolution: 'Contacted customer and obtained correct address.',\r\n        },\r\n        {\r\n          id: '4',\r\n          orderId: 'ORD-2026-004',\r\n          platform: 'SHOPEE',\r\n          customerName: 'Sarah Davis',\r\n          totalAmount: 780.00,\r\n          exceptionType: 'FRAUD_SUSPECTED',\r\n          severity: 'CRITICAL',\r\n          status: 'ESCALATED',\r\n          description: 'Multiple high-value orders from same IP address. Possible fraud.',\r\n          createdAt: '2026-03-18 08:00:00',\r\n          assignedTo: 'Fraud_Team',\r\n        },\r\n        {\r\n          id: '5',\r\n          orderId: 'ORD-2026-005',\r\n          platform: 'AMAZON',\r\n          customerName: 'David Lee',\r\n          totalAmount: 120.00,\r\n          exceptionType: 'SHIPPING_FAILED',\r\n          severity: 'HIGH',\r\n          status: 'OPEN',\r\n          description: 'Carrier returned package. Address undeliverable.',\r\n          createdAt: '2026-03-17 14:20:00',\r\n        },\r\n      ];\r\n\r\n      setExceptions(mockExceptions);\r\n      calculateStats(mockExceptions);\r\n    } catch (error) {\r\n      message.error('Failed to load exception orders');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const calculateStats = (exceptionList: ExceptionOrder[]) => {\r\n    setStats({\r\n      total: exceptionList.length,\r\n      open: exceptionList.filter((e) => e.status === 'OPEN').length,\r\n      critical: exceptionList.filter((e) => e.severity === 'CRITICAL').length,\r\n      resolved: exceptionList.filter((e) => e.status === 'RESOLVED').length,\r\n    });\r\n  };\r\n\r\n  const handleViewDetail = (exception: ExceptionOrder) => {\r\n    setSelectedException(exception);\r\n    setDetailModalVisible(true);\r\n  };\r\n\r\n  const handleResolve = (exception: ExceptionOrder) => {\r\n    setSelectedException(exception);\r\n    form.resetFields();\r\n    setResolveModalVisible(true);\r\n  };\r\n\r\n  const handleSubmitResolution = async () => {\r\n    try {\r\n      const values = await form.validateFields();\r\n      setLoading(true);\r\n\r\n      console.log('Resolving exception:', {\r\n        exceptionId: selectedException?.id,\r\n        resolution: values.resolution,\r\n        action: values.action,\r\n      });\r\n\r\n      await new Promise((resolve) => setTimeout(resolve, 1000));\r\n\r\n      message.success('Exception resolved successfully');\r\n      setResolveModalVisible(false);\r\n      fetchExceptions();\r\n    } catch (error) {\r\n      message.error('Failed to resolve exception');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleEscalate = async (exceptionId: string) => {\r\n    setLoading(true);\r\n    try {\r\n      console.log('Escalating exception:', exceptionId);\r\n      await new Promise((resolve) => setTimeout(resolve, 500));\r\n      message.success('Exception escalated to supervisor');\r\n      fetchExceptions();\r\n    } catch (error) {\r\n      message.error('Failed to escalate exception');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleAutoResolve = async (exceptionId: string) => {\r\n    setLoading(true);\r\n    try {\r\n      console.log('Auto-resolving exception:', exceptionId);\r\n      await new Promise((resolve) => setTimeout(resolve, 500));\r\n      message.success('Auto-resolution applied');\r\n      fetchExceptions();\r\n    } catch (error) {\r\n      message.error('Failed to auto-resolve');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const getFilteredExceptions = () => {\r\n    if (activeTab === 'all') return exceptions;\r\n    if (activeTab === 'open') return exceptions.filter((e) => e.status === 'OPEN');\r\n    if (activeTab === 'in_progress') return exceptions.filter((e) => e.status === 'IN_PROGRESS');\r\n    if (activeTab === 'escalated') return exceptions.filter((e) => e.severity === 'CRITICAL' || e.status === 'ESCALATED');\r\n    if (activeTab === 'resolved') return exceptions.filter((e) => e.status === 'RESOLVED');\r\n    return exceptions;\r\n  };\r\n\r\n  const columns: ColumnsType<ExceptionOrder> = [\r\n    {\r\n      title: 'Order ID',\r\n      dataIndex: 'orderId',\r\n      key: 'orderId',\r\n      width: 130,\r\n      render: (text: string, record) => (\r\n        <a onClick={() => handleViewDetail(record)}>{text}</a>\r\n      ),\r\n    },\r\n    {\r\n      title: 'Type',\r\n      dataIndex: 'exceptionType',\r\n      key: 'exceptionType',\r\n      width: 140,\r\n      render: (type: string) => {\r\n        const config = EXCEPTION_TYPE_MAP[type];\r\n        return <Tag color={config.color}>{config.text}</Tag>;\r\n      },\r\n    },\r\n    {\r\n      title: 'Severity',\r\n      dataIndex: 'severity',\r\n      key: 'severity',\r\n      width: 90,\r\n      render: (severity: string) => {\r\n        const config = SEVERITY_MAP[severity];\r\n        return (\r\n          <Tag\r\n            color={config.color}\r\n            icon={severity === 'CRITICAL' ? <WarningOutlined /> : undefined}\r\n          >\r\n            {config.text}\r\n          </Tag>\r\n        );\r\n      },\r\n    },\r\n    {\r\n      title: 'Status',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      width: 110,\r\n      render: (status: string) => {\r\n        const config = EXCEPTION_STATUS_MAP[status];\r\n        return <Tag color={config.color}>{config.text}</Tag>;\r\n      },\r\n    },\r\n    {\r\n      title: 'Customer',\r\n      dataIndex: 'customerName',\r\n      key: 'customerName',\r\n      width: 120,\r\n    },\r\n    {\r\n      title: 'Amount',\r\n      dataIndex: 'totalAmount',\r\n      key: 'totalAmount',\r\n      width: 90,\r\n      render: (amount: number) => <strong>${amount.toFixed(2)}</strong>,\r\n    },\r\n    {\r\n      title: 'Description',\r\n      dataIndex: 'description',\r\n      key: 'description',\r\n      ellipsis: true,\r\n      width: 200,\r\n    },\r\n    {\r\n      title: 'Created',\r\n      dataIndex: 'createdAt',\r\n      key: 'createdAt',\r\n      width: 150,\r\n    },\r\n    {\r\n      title: 'Actions',\r\n      key: 'action',\r\n      width: 150,\r\n      fixed: 'right',\r\n      render: (_, record) => (\r\n        <Space>\r\n          <Tooltip title=\"View Details\">\r\n            <Button type=\"link\" icon={<EyeOutlined />} onClick={() => handleViewDetail(record)} />\r\n          </Tooltip>\r\n          {record.status !== 'RESOLVED' && (\r\n            <>\r\n              <Tooltip title=\"Resolve\">\r\n                <Button type=\"link\" icon={<CheckCircleOutlined />} onClick={() => handleResolve(record)} />\r\n              </Tooltip>\r\n              <Popconfirm\r\n                title=\"Escalate this exception?\"\r\n                onConfirm={() => handleEscalate(record.id)}\r\n              >\r\n                <Tooltip title=\"Escalate\">\r\n                  <Button type=\"link\" icon={<ExclamationCircleOutlined />} />\r\n                </Tooltip>\r\n              </Popconfirm>\r\n            </>\r\n          )}\r\n        </Space>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <div className=\"exception-order-page\">\r\n      {stats.critical > 0 && (\r\n        <Alert\r\n          message={`${stats.critical} Critical Exception${stats.critical > 1 ? 's' : ''} Require Immediate Attention`}\r\n          type=\"error\"\r\n          showIcon\r\n          icon={<WarningOutlined />}\r\n          style={{ marginBottom: 16 }}\r\n        />\r\n      )}\r\n\r\n      <Row gutter={16} style={{ marginBottom: 24 }}>\r\n        <Col span={6}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Total Exceptions\"\r\n              value={stats.total}\r\n              prefix={<WarningOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={6}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Open\"\r\n              value={stats.open}\r\n              valueStyle={{ color: '#f5222d' }}\r\n              prefix={<ExclamationCircleOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={6}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Critical\"\r\n              value={stats.critical}\r\n              valueStyle={{ color: '#faad14' }}\r\n              prefix={<WarningOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={6}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Resolved\"\r\n              value={stats.resolved}\r\n              valueStyle={{ color: '#52c41a' }}\r\n              prefix={<CheckCircleOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n      </Row>\r\n\r\n      <Card\r\n        title=\"Exception Order Management\"\r\n        extra={\r\n          <Space>\r\n            <Button icon={<ReloadOutlined />} onClick={fetchExceptions}>\r\n              Refresh\r\n            </Button>\r\n          </Space>\r\n        }\r\n      >\r\n        <Tabs \r\n          activeKey={activeTab} \r\n          onChange={setActiveTab}\r\n          items={[\r\n            { key: 'all', label: <Badge count={stats.open} offset={[10, 0]} size=\"small\">All</Badge> },\r\n            { key: 'open', label: 'Open' },\r\n            { key: 'in_progress', label: 'In Progress' },\r\n            { key: 'escalated', label: 'Escalated' },\r\n            { key: 'resolved', label: 'Resolved' },\r\n          ]}\r\n        />\r\n\r\n        <Table\r\n          columns={columns}\r\n          dataSource={getFilteredExceptions()}\r\n          rowKey=\"id\"\r\n          loading={loading}\r\n          scroll={{ x: 1300 }}\r\n          pagination={{\r\n            showSizeChanger: true,\r\n            showTotal: (total) => `Total ${total} exceptions`,\r\n          }}\r\n        />\r\n      </Card>\r\n\r\n      <Modal\r\n        title=\"Exception Details\"\r\n        open={detailModalVisible}\r\n        onCancel={() => setDetailModalVisible(false)}\r\n        footer={[\r\n          <Button key=\"close\" onClick={() => setDetailModalVisible(false)}>\r\n            Close\r\n          </Button>,\r\n          selectedException?.status !== 'RESOLVED' && (\r\n            <Button\r\n              key=\"resolve\"\r\n              type=\"primary\"\r\n              onClick={() => {\r\n                setDetailModalVisible(false);\r\n                handleResolve(selectedException!);\r\n              }}\r\n            >\r\n              Resolve\r\n            </Button>\r\n          ),\r\n        ]}\r\n        width={700}\r\n      >\r\n        {selectedException && (\r\n          <>\r\n            <Descriptions bordered column={2}>\r\n              <Descriptions.Item label=\"Order ID\">{selectedException.orderId}</Descriptions.Item>\r\n              <Descriptions.Item label=\"Platform\">{selectedException.platform}</Descriptions.Item>\r\n              <Descriptions.Item label=\"Exception Type\">\r\n                <Tag color={EXCEPTION_TYPE_MAP[selectedException.exceptionType].color}>\r\n                  {EXCEPTION_TYPE_MAP[selectedException.exceptionType].text}\r\n                </Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"Severity\">\r\n                <Tag color={SEVERITY_MAP[selectedException.severity].color}>\r\n                  {SEVERITY_MAP[selectedException.severity].text}\r\n                </Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"Status\">\r\n                <Tag color={EXCEPTION_STATUS_MAP[selectedException.status].color}>\r\n                  {EXCEPTION_STATUS_MAP[selectedException.status].text}\r\n                </Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"Amount\">${selectedException.totalAmount.toFixed(2)}</Descriptions.Item>\r\n              <Descriptions.Item label=\"Customer\">{selectedException.customerName}</Descriptions.Item>\r\n              <Descriptions.Item label=\"Assigned To\">{selectedException.assignedTo || 'Unassigned'}</Descriptions.Item>\r\n              <Descriptions.Item label=\"Created\">{selectedException.createdAt}</Descriptions.Item>\r\n            </Descriptions>\r\n\r\n            <Divider>Description</Divider>\r\n            <p>{selectedException.description}</p>\r\n\r\n            {selectedException.resolution && (\r\n              <>\r\n                <Divider>Resolution</Divider>\r\n                <p style={{ color: '#52c41a' }}>{selectedException.resolution}</p>\r\n              </>\r\n            )}\r\n          </>\r\n        )}\r\n      </Modal>\r\n\r\n      <Modal\r\n        title=\"Resolve Exception\"\r\n        open={resolveModalVisible}\r\n        onCancel={() => setResolveModalVisible(false)}\r\n        onOk={handleSubmitResolution}\r\n        confirmLoading={loading}\r\n        width={600}\r\n      >\r\n        {selectedException && (\r\n          <>\r\n            <Alert\r\n              message={`${EXCEPTION_TYPE_MAP[selectedException.exceptionType].text} - ${selectedException.orderId}`}\r\n              description={selectedException.description}\r\n              type=\"info\"\r\n              showIcon\r\n              style={{ marginBottom: 16 }}\r\n            />\r\n\r\n            <Form form={form} layout=\"vertical\">\r\n              <Form.Item name=\"action\" label=\"Action Taken\" rules={[{ required: true }]}>\r\n                <Select placeholder=\"Select action\">\r\n                  <Option value=\"CONTACT_CUSTOMER\">Contact Customer</Option>\r\n                  <Option value=\"REFUND_ISSUED\">Refund Issued</Option>\r\n                  <Option value=\"REPLACEMENT_SENT\">Replacement Sent</Option>\r\n                  <Option value=\"ADDRESS_UPDATED\">Address Updated</Option>\r\n                  <Option value=\"STOCK_ALLOCATED\">Stock Allocated</Option>\r\n                  <Option value=\"ORDER_CANCELLED\">Order Cancelled</Option>\r\n                  <Option value=\"OTHER\">Other</Option>\r\n                </Select>\r\n              </Form.Item>\r\n              <Form.Item name=\"resolution\" label=\"Resolution Notes\" rules={[{ required: true }]}>\r\n                <TextArea rows={4} placeholder=\"Describe how the exception was resolved...\" />\r\n              </Form.Item>\r\n            </Form>\r\n          </>\r\n        )}\r\n      </Modal>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default ExceptionOrder;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Orders/ExceptionOrder.tsx"
    },
    "27": {
      "path": "/dashboard/after-sales",
      "file": "@/pages/AfterSales/index.tsx",
      "parentId": "4",
      "id": "27",
      "absPath": "/dashboard/after-sales",
      "__content": "import { Card, Typography, Row, Col, Button, AlertOutlined, PlusOutlined, Title, Text, FC } from '@/imports';\n\nconst AfterSalesManagement: FC = () => {\n  return (\n    <div>\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <Title level={4}>售后服务</Title>\n        <Button type=\"primary\" icon={<PlusOutlined />}>\n          添加售后记录\n        </Button>\n      </div>\n\n      <Row gutter={[16, 16]}>\n        <Col span={24}>\n          <Card title=\"售后列表\">\n            <Text>售后服务页面内容</Text>\n          </Card>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nexport default AfterSalesManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/AfterSales/index.tsx"
    },
    "28": {
      "path": "/dashboard/after-sales/refund",
      "file": "@/pages/AfterSales/RefundProcess.tsx",
      "parentId": "4",
      "id": "28",
      "absPath": "/dashboard/after-sales/refund",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Table,\r\n  Tag,\r\n  Button,\r\n  Space,\r\n  Modal,\r\n  Form,\r\n  Input,\r\n  Select,\r\n  InputNumber,\r\n  Descriptions,\r\n  Divider,\r\n  message,\r\n  Tabs,\r\n  Badge,\r\n  Tooltip,\r\n  Row,\r\n  Col,\r\n  Statistic,\r\n  DollarOutlined,\r\n  CheckCircleOutlined,\r\n  CloseCircleOutlined,\r\n  ClockCircleOutlined,\r\n  SyncOutlined,\r\n  EyeOutlined,\r\n  AuditOutlined,\r\n  TextArea,\r\n  Option,\r\n  FC,\r\n} from '@/imports';\r\nimport type { ColumnsType } from 'antd/es/table';\r\nimport { afterSalesDataSource } from '@/services/afterSalesDataSource';\r\nimport type { RefundRecord as RefundRecordType } from '@/services/afterSalesDataSource';\r\n\r\ntype RefundRecord = RefundRecordType;\r\n\r\nconst REFUND_STATUS_MAP: Record<string, { color: string; text: string; icon: React.ReactNode }> = {\r\n  PENDING: { color: 'warning', text: 'Pending', icon: <ClockCircleOutlined /> },\r\n  APPROVED: { color: 'success', text: 'Approved', icon: <CheckCircleOutlined /> },\r\n  REJECTED: { color: 'error', text: 'Rejected', icon: <CloseCircleOutlined /> },\r\n  PROCESSING: { color: 'processing', text: 'Processing', icon: <SyncOutlined spin /> },\r\n  COMPLETED: { color: 'success', text: 'Completed', icon: <CheckCircleOutlined /> },\r\n  FAILED: { color: 'error', text: 'Failed', icon: <CloseCircleOutlined /> },\r\n};\r\n\r\nconst REFUND_METHODS = [\r\n  { value: 'ORIGINAL', label: 'Original Payment Method' },\r\n  { value: 'STORE_CREDIT', label: 'Store Credit' },\r\n  { value: 'BANK_TRANSFER', label: 'Bank Transfer' },\r\n  { value: 'OTHER', label: 'Other' },\r\n];\r\n\r\nconst RefundProcess: FC = () => {\r\n  const [form] = Form.useForm();\r\n  const [loading, setLoading] = useState(false);\r\n  const [refundRecords, setRefundRecords] = useState<RefundRecord[]>([]);\r\n  const [selectedRecord, setSelectedRecord] = useState<RefundRecord | null>(null);\r\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\r\n  const [processModalVisible, setProcessModalVisible] = useState(false);\r\n  const [activeTab, setActiveTab] = useState('all');\r\n  const [stats, setStats] = useState({\r\n    total: 0,\r\n    pending: 0,\r\n    processing: 0,\r\n    completed: 0,\r\n    totalAmount: 0,\r\n  });\r\n\r\n  useEffect(() => {\r\n    fetchRefundRecords();\r\n  }, []);\r\n\r\n  const fetchRefundRecords = async () => {\r\n    setLoading(true);\r\n    try {\r\n      const mockRecords: RefundRecord[] = [\r\n        {\r\n          id: '1',\r\n          orderId: 'ORD-2026-001',\r\n          refundId: 'REF-2026-001',\r\n          customerId: 'CUST_001',\r\n          customerName: 'John Smith',\r\n          amount: 59.98,\r\n          currency: 'USD',\r\n          reason: 'DEFECTIVE',\r\n          status: 'PENDING',\r\n          createdAt: '2026-03-18 10:30:00',\r\n          updatedAt: '2026-03-18 10:30:00',\r\n          platform: 'Amazon',\r\n          refundMethod: 'ORIGINAL',\r\n        },\r\n        {\r\n          id: '2',\r\n          orderId: 'ORD-2026-002',\r\n          refundId: 'REF-2026-002',\r\n          customerId: 'CUST_002',\r\n          customerName: 'Emma Wilson',\r\n          amount: 125.50,\r\n          currency: 'USD',\r\n          reason: 'WRONG_ITEM',\r\n          status: 'PROCESSING',\r\n          createdAt: '2026-03-17 14:20:00',\r\n          updatedAt: '2026-03-18 09:00:00',\r\n          platform: 'eBay',\r\n          refundMethod: 'ORIGINAL',\r\n          transactionId: 'TXN_123456',\r\n        },\r\n        {\r\n          id: '3',\r\n          orderId: 'ORD-2026-003',\r\n          refundId: 'REF-2026-003',\r\n          customerId: 'CUST_003',\r\n          customerName: 'Michael Brown',\r\n          amount: 45.00,\r\n          currency: 'USD',\r\n          reason: 'QUALITY_ISSUE',\r\n          status: 'COMPLETED',\r\n          createdAt: '2026-03-16 09:15:00',\r\n          updatedAt: '2026-03-17 16:30:00',\r\n          platform: 'Shopify',\r\n          refundMethod: 'ORIGINAL',\r\n          transactionId: 'TXN_789012',\r\n          processedBy: 'admin',\r\n        },\r\n        {\r\n          id: '4',\r\n          orderId: 'ORD-2026-004',\r\n          refundId: 'REF-2026-004',\r\n          customerId: 'CUST_004',\r\n          customerName: 'Sarah Davis',\r\n          amount: 89.99,\r\n          currency: 'USD',\r\n          reason: 'NOT_AS_DESCRIBED',\r\n          status: 'REJECTED',\r\n          createdAt: '2026-03-15 11:45:00',\r\n          updatedAt: '2026-03-16 10:00:00',\r\n          platform: 'Amazon',\r\n          refundMethod: 'ORIGINAL',\r\n          processedBy: 'manager',\r\n          remark: 'Customer did not provide sufficient evidence',\r\n        },\r\n      ];\r\n\r\n      setRefundRecords(mockRecords);\r\n      calculateStats(mockRecords);\r\n    } catch (error) {\r\n      message.error('Failed to load refund records');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const calculateStats = (records: RefundRecord[]) => {\r\n    setStats({\r\n      total: records.length,\r\n      pending: records.filter((r) => r.status === 'PENDING').length,\r\n      processing: records.filter((r) => r.status === 'PROCESSING').length,\r\n      completed: records.filter((r) => r.status === 'COMPLETED').length,\r\n      totalAmount: records\r\n        .filter((r) => r.status === 'COMPLETED')\r\n        .reduce((sum, r) => sum + r.amount, 0),\r\n    });\r\n  };\r\n\r\n  const handleViewDetail = (record: RefundRecord) => {\r\n    setSelectedRecord(record);\r\n    setDetailModalVisible(true);\r\n  };\r\n\r\n  const handleProcess = (record: RefundRecord) => {\r\n    setSelectedRecord(record);\r\n    form.setFieldsValue({\r\n      refundMethod: record.refundMethod,\r\n      amount: record.amount,\r\n    });\r\n    setProcessModalVisible(true);\r\n  };\r\n\r\n  const handleApprove = async () => {\r\n    try {\r\n      const values = await form.validateFields();\r\n      setLoading(true);\r\n\r\n      console.log('Approving refund:', {\r\n        refundId: selectedRecord?.refundId,\r\n        ...values,\r\n      });\r\n\r\n      await new Promise((resolve) => setTimeout(resolve, 1000));\r\n\r\n      message.success('Refund approved successfully');\r\n      setProcessModalVisible(false);\r\n      fetchRefundRecords();\r\n    } catch (error) {\r\n      message.error('Failed to approve refund');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleReject = async () => {\r\n    try {\r\n      const values = await form.validateFields(['remark']);\r\n      setLoading(true);\r\n\r\n      console.log('Rejecting refund:', {\r\n        refundId: selectedRecord?.refundId,\r\n        remark: values.remark,\r\n      });\r\n\r\n      await new Promise((resolve) => setTimeout(resolve, 1000));\r\n\r\n      message.success('Refund rejected');\r\n      setProcessModalVisible(false);\r\n      fetchRefundRecords();\r\n    } catch (error) {\r\n      message.error('Failed to reject refund');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const getFilteredRecords = () => {\r\n    if (activeTab === 'all') return refundRecords;\r\n    return refundRecords.filter((r) => r.status === activeTab.toUpperCase());\r\n  };\r\n\r\n  const columns: ColumnsType<RefundRecord> = [\r\n    {\r\n      title: 'Refund ID',\r\n      dataIndex: 'refundId',\r\n      key: 'refundId',\r\n      width: 140,\r\n      render: (text: string) => (\r\n        <a onClick={() => handleViewDetail(refundRecords.find((r) => r.refundId === text)!)}>\r\n          {text}\r\n        </a>\r\n      ),\r\n    },\r\n    {\r\n      title: 'Order ID',\r\n      dataIndex: 'orderId',\r\n      key: 'orderId',\r\n      width: 140,\r\n    },\r\n    {\r\n      title: 'Customer',\r\n      dataIndex: 'customerName',\r\n      key: 'customerName',\r\n      width: 120,\r\n    },\r\n    {\r\n      title: 'Platform',\r\n      dataIndex: 'platform',\r\n      key: 'platform',\r\n      width: 100,\r\n      render: (platform: string) => <Tag>{platform}</Tag>,\r\n    },\r\n    {\r\n      title: 'Amount',\r\n      dataIndex: 'amount',\r\n      key: 'amount',\r\n      width: 100,\r\n      render: (amount: number, record: RefundRecord) => (\r\n        <span style={{ fontWeight: 'bold' }}>\r\n          {record.currency} ${amount.toFixed(2)}\r\n        </span>\r\n      ),\r\n    },\r\n    {\r\n      title: 'Reason',\r\n      dataIndex: 'reason',\r\n      key: 'reason',\r\n      width: 150,\r\n      render: (reason: string) => reason.replace(/_/g, ' '),\r\n    },\r\n    {\r\n      title: 'Status',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      width: 120,\r\n      render: (status: string) => {\r\n        const config = REFUND_STATUS_MAP[status];\r\n        return (\r\n          <Tag icon={config.icon} color={config.color}>\r\n            {config.text}\r\n          </Tag>\r\n        );\r\n      },\r\n    },\r\n    {\r\n      title: 'Created',\r\n      dataIndex: 'createdAt',\r\n      key: 'createdAt',\r\n      width: 160,\r\n    },\r\n    {\r\n      title: 'Actions',\r\n      key: 'action',\r\n      width: 150,\r\n      fixed: 'right',\r\n      render: (_, record) => (\r\n        <Space>\r\n          <Tooltip title=\"View Details\">\r\n            <Button\r\n              type=\"link\"\r\n              icon={<EyeOutlined />}\r\n              onClick={() => handleViewDetail(record)}\r\n            />\r\n          </Tooltip>\r\n          {(record.status === 'PENDING' || record.status === 'PROCESSING') && (\r\n            <Tooltip title=\"Process\">\r\n              <Button\r\n                type=\"link\"\r\n                icon={<AuditOutlined />}\r\n                onClick={() => handleProcess(record)}\r\n              />\r\n            </Tooltip>\r\n          )}\r\n        </Space>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <div className=\"refund-process-page\">\r\n      <Row gutter={16} style={{ marginBottom: 24 }}>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Total Refunds\"\r\n              value={stats.total}\r\n              prefix={<DollarOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Pending\"\r\n              value={stats.pending}\r\n              valueStyle={{ color: '#faad14' }}\r\n              prefix={<ClockCircleOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Processing\"\r\n              value={stats.processing}\r\n              valueStyle={{ color: '#1890ff' }}\r\n              prefix={<SyncOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Completed\"\r\n              value={stats.completed}\r\n              valueStyle={{ color: '#52c41a' }}\r\n              prefix={<CheckCircleOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={8}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Total Refunded Amount\"\r\n              value={stats.totalAmount}\r\n              precision={2}\r\n              prefix=\"$\"\r\n              valueStyle={{ color: '#52c41a' }}\r\n            />\r\n          </Card>\r\n        </Col>\r\n      </Row>\r\n\r\n      <Card title=\"Refund Management\">\r\n        <Tabs \r\n          activeKey={activeTab} \r\n          onChange={setActiveTab}\r\n          items={[\r\n            {\r\n              key: 'all',\r\n              label: (\r\n                <span>\r\n                  <Badge count={stats.pending} offset={[10, 0]} size=\"small\">\r\n                    All\r\n                  </Badge>\r\n                </span>\r\n              ),\r\n            },\r\n            {\r\n              key: 'pending',\r\n              label: (\r\n                <span>\r\n                  <Badge count={stats.pending} offset={[10, 0]} size=\"small\">\r\n                    Pending\r\n                  </Badge>\r\n                </span>\r\n              ),\r\n            },\r\n            {\r\n              key: 'processing',\r\n              label: 'Processing',\r\n            },\r\n            {\r\n              key: 'completed',\r\n              label: 'Completed',\r\n            },\r\n            {\r\n              key: 'rejected',\r\n              label: 'Rejected',\r\n            },\r\n          ]}\r\n        />\r\n\r\n        <Table\r\n          columns={columns}\r\n          dataSource={getFilteredRecords()}\r\n          rowKey=\"id\"\r\n          loading={loading}\r\n          scroll={{ x: 1200 }}\r\n          pagination={{\r\n            showSizeChanger: true,\r\n            showTotal: (total) => `Total ${total} records`,\r\n          }}\r\n        />\r\n      </Card>\r\n\r\n      <Modal\r\n        title=\"Refund Details\"\r\n        open={detailModalVisible}\r\n        onCancel={() => setDetailModalVisible(false)}\r\n        footer={[\r\n          <Button key=\"close\" onClick={() => setDetailModalVisible(false)}>\r\n            Close\r\n          </Button>,\r\n        ]}\r\n        width={700}\r\n      >\r\n        {selectedRecord && (\r\n          <Descriptions bordered column={2}>\r\n            <Descriptions.Item label=\"Refund ID\" span={2}>\r\n              {selectedRecord.refundId}\r\n            </Descriptions.Item>\r\n            <Descriptions.Item label=\"Order ID\">{selectedRecord.orderId}</Descriptions.Item>\r\n            <Descriptions.Item label=\"Platform\">{selectedRecord.platform}</Descriptions.Item>\r\n            <Descriptions.Item label=\"Customer ID\">{selectedRecord.customerId}</Descriptions.Item>\r\n            <Descriptions.Item label=\"Customer Name\">\r\n              {selectedRecord.customerName}\r\n            </Descriptions.Item>\r\n            <Descriptions.Item label=\"Amount\" span={2}>\r\n              <span style={{ fontSize: 18, fontWeight: 'bold', color: '#1890ff' }}>\r\n                {selectedRecord.currency} ${selectedRecord.amount.toFixed(2)}\r\n              </span>\r\n            </Descriptions.Item>\r\n            <Descriptions.Item label=\"Reason\">\r\n              {selectedRecord.reason.replace(/_/g, ' ')}\r\n            </Descriptions.Item>\r\n            <Descriptions.Item label=\"Status\">\r\n              <Tag color={REFUND_STATUS_MAP[selectedRecord.status].color}>\r\n                {REFUND_STATUS_MAP[selectedRecord.status].text}\r\n              </Tag>\r\n            </Descriptions.Item>\r\n            <Descriptions.Item label=\"Refund Method\">\r\n              {REFUND_METHODS.find((m) => m.value === selectedRecord.refundMethod)?.label}\r\n            </Descriptions.Item>\r\n            <Descriptions.Item label=\"Transaction ID\">\r\n              {selectedRecord.transactionId || '-'}\r\n            </Descriptions.Item>\r\n            <Descriptions.Item label=\"Created At\">\r\n              {selectedRecord.createdAt}\r\n            </Descriptions.Item>\r\n            <Descriptions.Item label=\"Updated At\">\r\n              {selectedRecord.updatedAt}\r\n            </Descriptions.Item>\r\n            {selectedRecord.processedBy && (\r\n              <Descriptions.Item label=\"Processed By\">\r\n                {selectedRecord.processedBy}\r\n              </Descriptions.Item>\r\n            )}\r\n            {selectedRecord.remark && (\r\n              <Descriptions.Item label=\"Remark\" span={2}>\r\n                {selectedRecord.remark}\r\n              </Descriptions.Item>\r\n            )}\r\n          </Descriptions>\r\n        )}\r\n      </Modal>\r\n\r\n      <Modal\r\n        title=\"Process Refund\"\r\n        open={processModalVisible}\r\n        onCancel={() => setProcessModalVisible(false)}\r\n        footer={null}\r\n        width={600}\r\n      >\r\n        {selectedRecord && (\r\n          <>\r\n            <Descriptions bordered column={2} size=\"small\" style={{ marginBottom: 24 }}>\r\n              <Descriptions.Item label=\"Refund ID\">\r\n                {selectedRecord.refundId}\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"Order ID\">{selectedRecord.orderId}</Descriptions.Item>\r\n              <Descriptions.Item label=\"Customer\">\r\n                {selectedRecord.customerName}\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"Amount\">\r\n                ${selectedRecord.amount.toFixed(2)}\r\n              </Descriptions.Item>\r\n            </Descriptions>\r\n\r\n            <Divider />\r\n\r\n            <Form form={form} layout=\"vertical\">\r\n              <Form.Item\r\n                name=\"refundMethod\"\r\n                label=\"Refund Method\"\r\n                rules={[{ required: true }]}\r\n              >\r\n                <Select>\r\n                  {REFUND_METHODS.map((method) => (\r\n                    <Option key={method.value} value={method.value}>\r\n                      {method.label}\r\n                    </Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n\r\n              <Form.Item\r\n                name=\"amount\"\r\n                label=\"Refund Amount\"\r\n                rules={[{ required: true }]}\r\n              >\r\n                <InputNumber\r\n                  prefix=\"$\"\r\n                  precision={2}\r\n                  min={0}\r\n                  max={selectedRecord.amount}\r\n                  style={{ width: '100%' }}\r\n                />\r\n              </Form.Item>\r\n\r\n              <Form.Item name=\"remark\" label=\"Remark\">\r\n                <TextArea rows={3} placeholder=\"Enter remark (optional)\" />\r\n              </Form.Item>\r\n\r\n              <div style={{ textAlign: 'right' }}>\r\n                <Space>\r\n                  <Button onClick={() => setProcessModalVisible(false)}>Cancel</Button>\r\n                  <Button danger onClick={handleReject} loading={loading}>\r\n                    Reject\r\n                  </Button>\r\n                  <Button type=\"primary\" onClick={handleApprove} loading={loading}>\r\n                    Approve\r\n                  </Button>\r\n                </Space>\r\n              </div>\r\n            </Form>\r\n          </>\r\n        )}\r\n      </Modal>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default RefundProcess;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/AfterSales/RefundProcess.tsx"
    },
    "29": {
      "path": "/dashboard/logistics",
      "file": "@/pages/Logistics/index.tsx",
      "parentId": "4",
      "id": "29",
      "absPath": "/dashboard/logistics",
      "__content": "import { Card, Typography, Row, Col, Button, TruckOutlined, PlusOutlined, Title, Text, FC } from '@/imports';\n\nconst LogisticsManagement: FC = () => {\n  return (\n    <div>\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <Title level={4}>物流管理</Title>\n        <Button type=\"primary\" icon={<PlusOutlined />}>\n          添加物流信息\n        </Button>\n      </div>\n\n      <Row gutter={[16, 16]}>\n        <Col span={24}>\n          <Card title=\"物流列表\">\n            <Text>物流管理页面内容</Text>\n          </Card>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nexport default LogisticsManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Logistics/index.tsx"
    },
    "30": {
      "path": "/dashboard/logistics/freight-calc",
      "file": "@/pages/Logistics/FreightCalc.tsx",
      "parentId": "4",
      "id": "30",
      "absPath": "/dashboard/logistics/freight-calc",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Table,\r\n  Button,\r\n  Space,\r\n  Form,\r\n  Input,\r\n  InputNumber,\r\n  Select,\r\n  Radio,\r\n  Tag,\r\n  Row,\r\n  Col,\r\n  Statistic,\r\n  message,\r\n  Divider,\r\n  Alert,\r\n  Tooltip,\r\n  DollarOutlined,\r\n  CalculatorOutlined,\r\n  TruckOutlined,\r\n  InfoCircleOutlined,\r\n  EnvironmentOutlined,\r\n  RightOutlined,\r\n  ThunderboltOutlined,\r\n  Option,\r\n  TextArea,\r\n  FC,\r\n} from '@/imports';\r\nimport type { ColumnsType } from 'antd/es/table';\r\nimport { logisticsDataSource, Shipment, FreightQuote } from '@/services/logisticsDataSource';\r\n\r\ntype LogisticsChannel = 'EXPRESS' | 'STANDARD' | 'ECONOMY' | 'SPECIAL';\r\n\r\ninterface FreightCalculation {\r\n  totalWithDuty: number;\r\n}\r\n\r\ninterface ProductInfo {\r\n  productId: string;\r\n  name: string;\r\n  weight: number;\r\n  length: number;\r\n  width: number;\r\n  height: number;\r\n  quantity: number;\r\n  declaredValue: number;\r\n  hsCode: string;\r\n}\r\n\r\ninterface DestinationInfo {\r\n  country: string;\r\n  city: string;\r\n  postalCode: string;\r\n  isRemoteArea: boolean;\r\n  customsRate: number;\r\n}\r\n\r\nconst CHANNEL_COLORS: Record<LogisticsChannel, string> = {\r\n  EXPRESS: 'red',\r\n  STANDARD: 'blue',\r\n  ECONOMY: 'green',\r\n  SPECIAL: 'purple',\r\n};\r\n\r\nconst COUNTRIES = [\r\n  { code: 'US', name: 'United States', customsRate: 0.06, remoteAreas: ['AK', 'HI', 'PR', 'VI'] },\r\n  { code: 'GB', name: 'United Kingdom', customsRate: 0.12, remoteAreas: [] },\r\n  { code: 'DE', name: 'Germany', customsRate: 0.19, remoteAreas: [] },\r\n  { code: 'FR', name: 'France', customsRate: 0.20, remoteAreas: [] },\r\n  { code: 'JP', name: 'Japan', customsRate: 0.08, remoteAreas: ['OKinawa', 'Hokkaido'] },\r\n  { code: 'AU', name: 'Australia', customsRate: 0.10, remoteAreas: ['NT', 'TAS'] },\r\n  { code: 'CA', name: 'Canada', customsRate: 0.05, remoteAreas: ['YT', 'NT', 'NU'] },\r\n];\r\n\r\nconst CARRIERS = [\r\n  {\r\n    channel: 'EXPRESS',\r\n    name: 'DHL Express',\r\n    basePrice: 25.0,\r\n    pricePerKg: 8.5,\r\n    pricePerVol: 150,\r\n    fuelRate: 0.15,\r\n  },\r\n  {\r\n    channel: 'EXPRESS',\r\n    name: 'FedEx',\r\n    basePrice: 22.0,\r\n    pricePerKg: 7.8,\r\n    pricePerVol: 140,\r\n    fuelRate: 0.12,\r\n  },\r\n  {\r\n    channel: 'STANDARD',\r\n    name: 'UPS',\r\n    basePrice: 15.0,\r\n    pricePerKg: 5.5,\r\n    pricePerVol: 100,\r\n    fuelRate: 0.10,\r\n  },\r\n  {\r\n    channel: 'STANDARD',\r\n    name: 'TNT',\r\n    basePrice: 14.0,\r\n    pricePerKg: 5.0,\r\n    pricePerVol: 95,\r\n    fuelRate: 0.10,\r\n  },\r\n  {\r\n    channel: 'ECONOMY',\r\n    name: 'China Post',\r\n    basePrice: 5.0,\r\n    pricePerKg: 2.0,\r\n    pricePerVol: 40,\r\n    fuelRate: 0.05,\r\n  },\r\n  {\r\n    channel: 'ECONOMY',\r\n    name: 'Sea Freight',\r\n    basePrice: 50.0,\r\n    pricePerKg: 0.8,\r\n    pricePerVol: 15,\r\n    fuelRate: 0.08,\r\n  },\r\n  {\r\n    channel: 'SPECIAL',\r\n    name: '4PX Special Line',\r\n    basePrice: 12.0,\r\n    pricePerKg: 4.0,\r\n    pricePerVol: 80,\r\n    fuelRate: 0.08,\r\n  },\r\n];\r\n\r\nconst FreightCalc: FC = () => {\r\n  const [form] = Form.useForm();\r\n  const [loading, setLoading] = useState(false);\r\n  const [quotes, setQuotes] = useState<FreightQuote[]>([]);\r\n  const [selectedCountry, setSelectedCountry] = useState<string>('');\r\n  const [isRemoteArea, setIsRemoteArea] = useState(false);\r\n  const [totalWeight, setTotalWeight] = useState(0);\r\n  const [totalVolume, setTotalVolume] = useState(0);\r\n  const [totalDeclaredValue, setTotalDeclaredValue] = useState(0);\r\n\r\n  useEffect(() => {\r\n    const values = form.getFieldsValue();\r\n    calculateTotals(values);\r\n  }, []);\r\n\r\n  const calculateTotals = (values: any) => {\r\n    const products = values.products || [];\r\n    const weight = products.reduce((sum: number, p: ProductInfo) => sum + (p.weight || 0) * (p.quantity || 1), 0);\r\n    const volume = products.reduce((sum: number, p: ProductInfo) => \r\n      sum + ((p.length || 0) * (p.width || 0) * (p.height || 0) / 1000000) * (p.quantity || 1), 0\r\n    );\r\n    const value = products.reduce((sum: number, p: ProductInfo) => sum + (p.declaredValue || 0) * (p.quantity || 1), 0);\r\n    \r\n    setTotalWeight(weight);\r\n    setTotalVolume(volume);\r\n    setTotalDeclaredValue(value);\r\n  };\r\n\r\n  const handleCalculate = async () => {\r\n    const values = await form.validateFields();\r\n    const { country, products, isInsured } = values;\r\n\r\n    const countryInfo = COUNTRIES.find(c => c.code === country);\r\n    if (!countryInfo) {\r\n      message.error('Please select a destination country');\r\n      return;\r\n    }\r\n\r\n    if (!products || products.length === 0) {\r\n      message.error('Please add at least one product');\r\n      return;\r\n    }\r\n\r\n    setLoading(true);\r\n    try {\r\n      await new Promise(resolve => setTimeout(resolve, 1000));\r\n\r\n      const calculatedQuotes: FreightQuote[] = CARRIERS.map(carrier => {\r\n        const weightCharge = Math.max(totalWeight, totalVolume * 167) * carrier.pricePerVol / carrier.pricePerVol * carrier.pricePerKg;\r\n        const baseFreight = carrier.basePrice + weightCharge;\r\n        const fuelSurcharge = baseFreight * carrier.fuelRate;\r\n        const remoteSurcharge = isRemoteArea ? baseFreight * 0.25 : 0;\r\n        const customsDuty = totalDeclaredValue * (countryInfo.customsRate / 100);\r\n        const insurance = isInsured ? Math.max(totalDeclaredValue * 0.005, 10) : 0;\r\n        const subtotal = baseFreight + fuelSurcharge + remoteSurcharge;\r\n        const totalWithDuty = subtotal + customsDuty + insurance;\r\n\r\n        return {\r\n          id: `QUOTE-${carrier.channel}-${Date.now()}`,\r\n          channel: carrier.channel,\r\n          carrier: carrier.name,\r\n          name: carrier.name,\r\n          basePrice: carrier.basePrice,\r\n          pricePerKg: carrier.pricePerKg,\r\n          pricePerVol: carrier.pricePerVol,\r\n          estimatedDays: carrier.channel === 'EXPRESS' ? 3 + Math.floor(Math.random() * 3) :\r\n                        carrier.channel === 'STANDARD' ? 7 + Math.floor(Math.random() * 5) :\r\n                        carrier.channel === 'ECONOMY' ? 15 + Math.floor(Math.random() * 10) : 10,\r\n          totalPrice: Number(subtotal.toFixed(2)),\r\n          fuelSurcharge: Number(fuelSurcharge.toFixed(2)),\r\n          remoteAreaSurcharge: Number(remoteSurcharge.toFixed(2)),\r\n          customsDuty: Number(customsDuty.toFixed(2)),\r\n          insurance: Number(insurance.toFixed(2)),\r\n          totalWithDuty: Number(totalWithDuty.toFixed(2)),\r\n        };\r\n      });\r\n\r\n      calculatedQuotes.sort((a, b) => a.totalWithDuty - b.totalWithDuty);\r\n      setQuotes(calculatedQuotes);\r\n    } catch (error) {\r\n      message.error('Failed to calculate freight');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleCountryChange = (countryCode: string) => {\r\n    setSelectedCountry(countryCode);\r\n    const countryInfo = COUNTRIES.find(c => c.code === countryCode);\r\n    if (countryInfo && countryInfo.remoteAreas.length > 0) {\r\n      setIsRemoteArea(false);\r\n    }\r\n  };\r\n\r\n  const columns: ColumnsType<FreightQuote> = [\r\n    {\r\n      title: 'Carrier',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      width: 180,\r\n      render: (name: string, record: FreightQuote) => (\r\n        <Space direction=\"vertical\" size={0}>\r\n          <strong>{name}</strong>\r\n          <Tag color={CHANNEL_COLORS[record.channel as LogisticsChannel]}>{record.channel}</Tag>\r\n        </Space>\r\n      ),\r\n    },\r\n    {\r\n      title: 'Est. Days',\r\n      dataIndex: 'estimatedDays',\r\n      key: 'estimatedDays',\r\n      width: 100,\r\n      render: (days: number) => `${days} days`,\r\n    },\r\n    {\r\n      title: 'Base Freight',\r\n      dataIndex: 'totalPrice',\r\n      key: 'totalPrice',\r\n      width: 120,\r\n      render: (price: number) => `$${price.toFixed(2)}`,\r\n    },\r\n    {\r\n      title: 'Fuel Surcharge',\r\n      dataIndex: 'fuelSurcharge',\r\n      key: 'fuelSurcharge',\r\n      width: 120,\r\n      render: (price: number) => `$${price.toFixed(2)}`,\r\n    },\r\n    {\r\n      title: 'Remote Area',\r\n      dataIndex: 'remoteAreaSurcharge',\r\n      key: 'remoteAreaSurcharge',\r\n      width: 100,\r\n      render: (price: number) => price > 0 ? `$${price.toFixed(2)}` : '-',\r\n    },\r\n    {\r\n      title: 'Customs Duty',\r\n      dataIndex: 'customsDuty',\r\n      key: 'customsDuty',\r\n      width: 100,\r\n      render: (price: number) => `$${price.toFixed(2)}`,\r\n    },\r\n    {\r\n      title: 'Insurance',\r\n      dataIndex: 'insurance',\r\n      key: 'insurance',\r\n      width: 80,\r\n      render: (price: number) => price > 0 ? `$${price.toFixed(2)}` : '-',\r\n    },\r\n    {\r\n      title: 'Total',\r\n      dataIndex: 'totalWithDuty',\r\n      key: 'totalWithDuty',\r\n      width: 120,\r\n      render: (price: number, record, index) => (\r\n        <strong style={{ \r\n          color: index === 0 ? '#52c41a' : '#1890ff',\r\n          fontSize: index === 0 ? 16 : 14 \r\n        }}>\r\n          ${price.toFixed(2)}\r\n          {index === 0 && <Tag color=\"green\" style={{ marginLeft: 8 }}>Best</Tag>}\r\n        </strong>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  const countryInfo = COUNTRIES.find(c => c.code === selectedCountry);\r\n\r\n  return (\r\n    <div className=\"freight-calc-page\">\r\n      <Row gutter={16} style={{ marginBottom: 24 }}>\r\n        <Col span={6}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Total Weight\"\r\n              value={totalWeight}\r\n              suffix=\"kg\"\r\n              prefix={<CalculatorOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={6}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Total Volume\"\r\n              value={totalVolume}\r\n              suffix=\"m³\"\r\n              prefix={<TruckOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={6}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Declared Value\"\r\n              value={totalDeclaredValue}\r\n              precision={2}\r\n              prefix=\"$\"\r\n              valueStyle={{ color: '#1890ff' }}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={6}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Quotes Received\"\r\n              value={quotes.length}\r\n              prefix={<CalculatorOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n      </Row>\r\n\r\n      <Card title=\"Freight Calculator\" style={{ marginBottom: 16 }}>\r\n        <Form form={form} layout=\"vertical\" onValuesChange={calculateTotals}>\r\n          <Row gutter={16}>\r\n            <Col span={8}>\r\n              <Form.Item\r\n                name=\"country\"\r\n                label=\"Destination Country\"\r\n                rules={[{ required: true, message: 'Please select country' }]}\r\n              >\r\n                <Select placeholder=\"Select country\" onChange={handleCountryChange}>\r\n                  {COUNTRIES.map(country => (\r\n                    <Option key={country.code} value={country.code}>\r\n                      {country.name} (Duty: {country.customsRate}%)\r\n                    </Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={8}>\r\n              <Form.Item name=\"city\" label=\"City\">\r\n                <Input placeholder=\"Enter city\" />\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={8}>\r\n              <Form.Item name=\"postalCode\" label=\"Postal Code\">\r\n                <Input placeholder=\"Enter postal code\" />\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          {countryInfo && countryInfo.remoteAreas.length > 0 && (\r\n            <Alert\r\n              message={\r\n                <Space>\r\n                  <InfoCircleOutlined />\r\n                  <span>\r\n                    Remote areas for {countryInfo.name}: {countryInfo.remoteAreas.join(', ')}\r\n                  </span>\r\n                </Space>\r\n              }\r\n              type=\"info\"\r\n              showIcon\r\n              style={{ marginBottom: 16 }}\r\n            />\r\n          )}\r\n\r\n          <Form.Item\r\n            name=\"isRemoteArea\"\r\n            label=\"Remote Area Surcharge\"\r\n            valuePropName=\"checked\"\r\n          >\r\n            <Radio.Group>\r\n              <Radio value={false}>Regular Area</Radio>\r\n              <Radio value={true}>Remote Area (+25%)</Radio>\r\n            </Radio.Group>\r\n          </Form.Item>\r\n\r\n          <Form.Item\r\n            name=\"isInsured\"\r\n            label=\"Insurance\"\r\n            valuePropName=\"checked\"\r\n          >\r\n            <Radio.Group>\r\n              <Radio value={false}>No Insurance</Radio>\r\n              <Radio value={true}>With Insurance (0.5%, min $10)</Radio>\r\n            </Radio.Group>\r\n          </Form.Item>\r\n\r\n          <Divider>Product Information</Divider>\r\n\r\n          <Form.List name=\"products\" initialValue={[{}]}>\r\n            {(fields, { add, remove }) => (\r\n              <>\r\n                {fields.map(({ key, name, ...restField }) => (\r\n                  <Row key={key} gutter={16} align=\"middle\">\r\n                    <Col span={4}>\r\n                      <Form.Item\r\n                        {...restField}\r\n                        name={[name, 'productId']}\r\n                        label=\"Product ID\"\r\n                      >\r\n                        <Input placeholder=\"ID\" />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={3}>\r\n                      <Form.Item\r\n                        {...restField}\r\n                        name={[name, 'quantity']}\r\n                        label=\"Qty\"\r\n                      >\r\n                        <InputNumber min={1} placeholder=\"1\" style={{ width: '100%' }} />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={3}>\r\n                      <Form.Item\r\n                        {...restField}\r\n                        name={[name, 'weight']}\r\n                        label=\"Weight(kg)\"\r\n                      >\r\n                        <InputNumber min={0.1} step={0.1} placeholder=\"0.5\" style={{ width: '100%' }} />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={3}>\r\n                      <Form.Item\r\n                        {...restField}\r\n                        name={[name, 'length']}\r\n                        label=\"L(cm)\"\r\n                      >\r\n                        <InputNumber min={1} placeholder=\"10\" style={{ width: '100%' }} />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={3}>\r\n                      <Form.Item\r\n                        {...restField}\r\n                        name={[name, 'width']}\r\n                        label=\"W(cm)\"\r\n                      >\r\n                        <InputNumber min={1} placeholder=\"10\" style={{ width: '100%' }} />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={3}>\r\n                      <Form.Item\r\n                        {...restField}\r\n                        name={[name, 'height']}\r\n                        label=\"H(cm)\"\r\n                      >\r\n                        <InputNumber min={1} placeholder=\"10\" style={{ width: '100%' }} />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={3}>\r\n                      <Form.Item\r\n                        {...restField}\r\n                        name={[name, 'declaredValue']}\r\n                        label=\"Value($)\"\r\n                      >\r\n                        <InputNumber min={0} placeholder=\"0\" style={{ width: '100%' }} />\r\n                      </Form.Item>\r\n                    </Col>\r\n                    <Col span={2}>\r\n                      <Button type=\"link\" danger onClick={() => remove(name)}>\r\n                        Remove\r\n                      </Button>\r\n                    </Col>\r\n                  </Row>\r\n                ))}\r\n                <Form.Item>\r\n                  <Button type=\"dashed\" onClick={() => add()} style={{ width: '100%' }}>\r\n                    + Add Product\r\n                  </Button>\r\n                </Form.Item>\r\n              </>\r\n            )}\r\n          </Form.List>\r\n\r\n          <Form.Item>\r\n            <Button \r\n              type=\"primary\" \r\n              icon={<CalculatorOutlined />} \r\n              onClick={handleCalculate}\r\n              loading={loading}\r\n              size=\"large\"\r\n            >\r\n              Calculate Freight\r\n            </Button>\r\n          </Form.Item>\r\n        </Form>\r\n      </Card>\r\n\r\n      {quotes.length > 0 && (\r\n        <Card title=\"Freight Quotes\">\r\n          <Table\r\n            columns={columns}\r\n            dataSource={quotes}\r\n            rowKey=\"id\"\r\n            pagination={false}\r\n            scroll={{ x: 1100 }}\r\n          />\r\n        </Card>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default FreightCalc;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Logistics/FreightCalc.tsx"
    },
    "31": {
      "path": "/dashboard/finance",
      "file": "@/pages/Finance/index.tsx",
      "parentId": "4",
      "id": "31",
      "absPath": "/dashboard/finance",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Row,\n  Col,\n  Statistic,\n  Button,\n  Table,\n  Tag,\n  Space,\n  DatePicker,\n  Select,\n  Tabs,\n  Typography,\n  Progress,\n  ArrowUpOutlined,\n  ArrowDownOutlined,\n  DollarOutlined,\n  CreditCardOutlined,\n  BarChartOutlined,\n  TransactionOutlined,\n  ReloadOutlined,\n  DownloadOutlined,\n  useNavigate,\n  Line,\n  Column,\n  Pie,\n  Title,\n  Text,\n  RangePicker,\n  Option,\n  message,\n  FC,\n} from '@/imports';\nimport type { ColumnsType } from 'antd/es/table';\nimport moment from 'moment';\nimport { financeDataSource } from '@/services/financeDataSource';\nimport type { Transaction as FinanceTransaction } from '@/services/financeDataSource';\n\ninterface FinanceStats {\n  totalIncome: number;\n  totalExpense: number;\n  netProfit: number;\n  pendingAmount: number;\n  monthlyIncome: number;\n  monthlyExpense: number;\n  monthlyProfit: number;\n  incomeGrowth: number;\n  expenseGrowth: number;\n  profitGrowth: number;\n}\n\nconst MOCK_STATS: FinanceStats = {\n  totalIncome: 1250000,\n  totalExpense: 850000,\n  netProfit: 400000,\n  pendingAmount: 15000,\n  monthlyIncome: 125000,\n  monthlyExpense: 85000,\n  monthlyProfit: 40000,\n  incomeGrowth: 12.5,\n  expenseGrowth: 8.3,\n  profitGrowth: 18.2,\n};\n\nconst TREND_DATA = [\n  { date: '2026-03-12', income: 45000, expense: 28000, profit: 17000 },\n  { date: '2026-03-13', income: 52000, expense: 32000, profit: 20000 },\n  { date: '2026-03-14', income: 48000, expense: 30000, profit: 18000 },\n  { date: '2026-03-15', income: 61000, expense: 38000, profit: 23000 },\n  { date: '2026-03-16', income: 55000, expense: 35000, profit: 20000 },\n  { date: '2026-03-17', income: 67000, expense: 42000, profit: 25000 },\n  { date: '2026-03-18', income: 72000, expense: 45000, profit: 27000 },\n];\n\nconst Finance: FC = () => {\n  const navigate = useNavigate();\n  const [loading, setLoading] = useState(false);\n  const [transactions, setTransactions] = useState<FinanceTransaction[]>([]);\n  const [stats, setStats] = useState<FinanceStats>(MOCK_STATS);\n  const [activeTab, setActiveTab] = useState('overview');\n  const [timeRange, setTimeRange] = useState<any>(null);\n  const [platform, setPlatform] = useState<string>('all');\n  const [incomeSources, setIncomeSources] = useState<any[]>([]);\n  const [costStructure, setCostStructure] = useState<any[]>([]);\n\n  useEffect(() => {\n    loadData();\n  }, [timeRange, platform]);\n\n  const loadData = async () => {\n    setLoading(true);\n    try {\n      // 加载交易记录\n      const transactionData = await financeDataSource.fetchTransactions({\n        startDate: timeRange?.[0]?.format('YYYY-MM-DD'),\n        endDate: timeRange?.[1]?.format('YYYY-MM-DD'),\n      });\n      setTransactions(transactionData);\n\n      // 计算统计数据\n      calculateStats(transactionData);\n\n      // 准备财务分析数据\n      prepareAnalysisData(transactionData);\n    } catch (error) {\n      console.error('Failed to load finance data:', error);\n      message.error('加载财务数据失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const calculateStats = (transactionData: FinanceTransaction[]) => {\n    const totalIncome = transactionData\n      .filter(t => t.type === 'income')\n      .reduce((sum, t) => sum + t.amount, 0);\n    const totalExpense = transactionData\n      .filter(t => ['expense', 'fee', 'refund'].includes(t.type))\n      .reduce((sum, t) => sum + t.amount, 0);\n    const netProfit = totalIncome - totalExpense;\n    const pendingAmount = transactionData\n      .filter(t => t.status === 'pending')\n      .reduce((sum, t) => sum + t.amount, 0);\n\n    setStats({\n      ...MOCK_STATS,\n      totalIncome,\n      totalExpense,\n      netProfit,\n      pendingAmount,\n    });\n  };\n\n  const prepareAnalysisData = (transactionData: FinanceTransaction[]) => {\n    // 收入来源分析\n    const incomeByCategory = transactionData\n      .filter(t => t.type === 'income')\n      .reduce((acc, t) => {\n        acc[t.category] = (acc[t.category] || 0) + t.amount;\n        return acc;\n      }, {} as Record<string, number>);\n\n    const incomeSourceData = Object.entries(incomeByCategory).map(([category, value]) => ({\n      category,\n      value,\n    }));\n    setIncomeSources(incomeSourceData);\n\n    // 成本结构分析\n    const expenseByCategory = transactionData\n      .filter(t => ['expense', 'fee'].includes(t.type))\n      .reduce((acc, t) => {\n        acc[t.category] = (acc[t.category] || 0) + t.amount;\n        return acc;\n      }, {} as Record<string, number>);\n\n    const costStructureData = Object.entries(expenseByCategory).map(([category, value]) => ({\n      category,\n      value,\n    }));\n    setCostStructure(costStructureData);\n  };\n\n  const handleTimeRangeChange = (dates: any) => {\n    setTimeRange(dates);\n  };\n\n  const handlePlatformChange = (value: string) => {\n    setPlatform(value);\n  };\n\n  const handleRefresh = () => {\n    loadData();\n  };\n\n  const handleExport = async () => {\n    try {\n      message.success('导出成功');\n    } catch (error) {\n      console.error('Failed to export:', error);\n      message.error('导出失败');\n    }\n  };\n\n  const typeColors: Record<string, string> = {\n    income: 'success',\n    expense: 'error',\n    refund: 'warning',\n    fee: 'processing',\n  };\n\n  const typeTexts: Record<string, string> = {\n    income: '收入',\n    expense: '支出',\n    refund: '退款',\n    fee: '费用',\n  };\n\n  const statusColors: Record<string, string> = {\n    pending: 'warning',\n    completed: 'success',\n    failed: 'error',\n  };\n\n  const columns: ColumnsType<FinanceTransaction> = [\n    {\n      title: '交易号',\n      dataIndex: 'id',\n      key: 'id',\n      render: (text) => <Text strong>{text}</Text>,\n    },\n    {\n      title: '类型',\n      dataIndex: 'type',\n      key: 'type',\n      render: (type) => <Tag color={typeColors[type]}>{typeTexts[type]}</Tag>,\n    },\n    {\n      title: '金额',\n      dataIndex: 'amount',\n      key: 'amount',\n      render: (amount, record) => (\n        <Text style={{ color: record.type === 'income' ? '#52c41a' : '#ff4d4f' }}>\n          {record.type === 'income' ? '+' : '-'}{$amount.toFixed(2)}\n        </Text>\n      ),\n    },\n    {\n      title: '类别',\n      dataIndex: 'category',\n      key: 'category',\n    },\n    {\n      title: '描述',\n      dataIndex: 'description',\n      key: 'description',\n      ellipsis: true,\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status) => <Tag color={statusColors[status]}>{status}</Tag>,\n    },\n    {\n      title: '时间',\n      dataIndex: 'createdAt',\n      key: 'createdAt',\n    },\n  ];\n\n  const trendConfig = {\n    data: TREND_DATA.flatMap(item => [\n      { date: item.date, value: item.income, type: '收入' },\n      { date: item.date, value: item.expense, type: '支出' },\n      { date: item.date, value: item.profit, type: '利润' },\n    ]),\n    xField: 'date',\n    yField: 'value',\n    seriesField: 'type',\n    smooth: true,\n    legend: { position: 'top' as const },\n  };\n\n  const categoryConfig = {\n    data: [\n      { category: '销售收入', value: 850000 },\n      { category: '采购成本', value: 450000 },\n      { category: '物流费用', value: 120000 },\n      { category: '平台费用', value: 95000 },\n      { category: '广告费用', value: 85000 },\n      { category: '其他', value: 100000 },\n    ],\n    xField: 'value',\n    yField: 'category',\n    seriesField: 'category',\n    legend: false,\n  };\n\n  const incomeSourceConfig = {\n    data: incomeSources,\n    angleField: 'value',\n    colorField: 'category',\n    radius: 0.8,\n    label: {\n      type: 'outer',\n      content: '{category}: {value}',\n    },\n    legend: { position: 'bottom' as const },\n  };\n\n  const costStructureConfig = {\n    data: costStructure,\n    angleField: 'value',\n    colorField: 'category',\n    radius: 0.8,\n    label: {\n      type: 'outer',\n      content: '{category}: {value}',\n    },\n    legend: { position: 'bottom' as const },\n  };\n\n  const tabItems = [\n    { key: 'overview', label: '财务概览' },\n    { key: 'transactions', label: '交易记录' },\n    { key: 'analysis', label: '财务分析' },\n  ];\n\n  return (\n    <div className=\"finance\">\n      <Row justify=\"space-between\" align=\"middle\" style={{ marginBottom: 24 }}>\n        <Col>\n          <Title level={4}>财务管理</Title>\n          <Text type=\"secondary\">实时监控财务数据和资金流向</Text>\n        </Col>\n        <Col>\n          <Space>\n            <RangePicker onChange={handleTimeRangeChange} />\n            <Select value={platform} style={{ width: 120 }} onChange={handlePlatformChange}>\n              <Option value=\"all\">全部平台</Option>\n              <Option value=\"amazon\">Amazon</Option>\n              <Option value=\"ebay\">eBay</Option>\n              <Option value=\"shopify\">Shopify</Option>\n            </Select>\n            <Button icon={<ReloadOutlined />} onClick={handleRefresh} loading={loading}>\n              刷新\n            </Button>\n            <Button icon={<DownloadOutlined />} onClick={handleExport}>\n              导出\n            </Button>\n          </Space>\n        </Col>\n      </Row>\n\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col xs={24} sm={12} lg={6}>\n          <Card>\n            <Statistic\n              title=\"总收入\"\n              value={stats.totalIncome}\n              precision={2}\n              prefix={<DollarOutlined />}\n              valueStyle={{ color: '#3f8600' }}\n              suffix={\n                <Text style={{ fontSize: 14, marginLeft: 8 }}>\n                  <ArrowUpOutlined /> {stats.incomeGrowth}%\n                </Text>\n              }\n            />\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} lg={6}>\n          <Card>\n            <Statistic\n              title=\"总支出\"\n              value={stats.totalExpense}\n              precision={2}\n              prefix={<CreditCardOutlined />}\n              valueStyle={{ color: '#cf1322' }}\n              suffix={\n                <Text style={{ fontSize: 14, marginLeft: 8 }}>\n                  <ArrowUpOutlined /> {stats.expenseGrowth}%\n                </Text>\n              }\n            />\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} lg={6}>\n          <Card>\n            <Statistic\n              title=\"净利润\"\n              value={stats.netProfit}\n              precision={2}\n              prefix={<BarChartOutlined />}\n              valueStyle={{ color: '#3f8600' }}\n              suffix={\n                <Text style={{ fontSize: 14, marginLeft: 8 }}>\n                  <ArrowUpOutlined /> {stats.profitGrowth}%\n                </Text>\n              }\n            />\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} lg={6}>\n          <Card>\n            <Statistic\n              title=\"待结算\"\n              value={stats.pendingAmount}\n              precision={2}\n              prefix={<TransactionOutlined />}\n              valueStyle={{ color: '#faad14' }}\n            />\n            <Progress percent={60} size=\"small\" showInfo={false} style={{ marginTop: 8 }} />\n          </Card>\n        </Col>\n      </Row>\n\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col xs={24} sm={8}>\n          <Card size=\"small\">\n            <Statistic\n              title=\"本月收入\"\n              value={stats.monthlyIncome}\n              precision={2}\n              prefix={<ArrowUpOutlined style={{ color: '#52c41a' }} />}\n              valueStyle={{ fontSize: 18, color: '#52c41a' }}\n            />\n          </Card>\n        </Col>\n        <Col xs={24} sm={8}>\n          <Card size=\"small\">\n            <Statistic\n              title=\"本月支出\"\n              value={stats.monthlyExpense}\n              precision={2}\n              prefix={<ArrowDownOutlined style={{ color: '#ff4d4f' }} />}\n              valueStyle={{ fontSize: 18, color: '#ff4d4f' }}\n            />\n          </Card>\n        </Col>\n        <Col xs={24} sm={8}>\n          <Card size=\"small\">\n            <Statistic\n              title=\"本月利润\"\n              value={stats.monthlyProfit}\n              precision={2}\n              prefix={<BarChartOutlined style={{ color: '#1890ff' }} />}\n              valueStyle={{ fontSize: 18, color: '#1890ff' }}\n            />\n          </Card>\n        </Col>\n      </Row>\n\n      <Tabs activeKey={activeTab} onChange={setActiveTab} items={tabItems} style={{ marginBottom: 24 }} />\n\n      {activeTab === 'overview' && (\n        <Row gutter={16}>\n          <Col xs={24} lg={16}>\n            <Card title=\"收支趋势\">\n              <Line {...trendConfig} height={300} />\n            </Card>\n          </Col>\n          <Col xs={24} lg={8}>\n            <Card title=\"支出分类\">\n              <Column {...categoryConfig} height={300} />\n            </Card>\n          </Col>\n        </Row>\n      )}\n\n      {activeTab === 'transactions' && (\n        <Card title=\"最近交易\">\n          <Table\n            columns={columns}\n            dataSource={transactions}\n            rowKey=\"id\"\n            pagination={{ pageSize: 10 }}\n            loading={loading}\n          />\n        </Card>\n      )}\n\n      {activeTab === 'analysis' && (\n        <Row gutter={16}>\n          <Col span={12}>\n            <Card title=\"收入来源分析\">\n              {incomeSources.length > 0 ? (\n                <Pie {...incomeSourceConfig} height={300} />\n              ) : (\n                <div style={{ padding: '40px 0', textAlign: 'center' }}>\n                  <Text type=\"secondary\">暂无数据</Text>\n                </div>\n              )}\n            </Card>\n          </Col>\n          <Col span={12}>\n            <Card title=\"成本结构分析\">\n              {costStructure.length > 0 ? (\n                <Pie {...costStructureConfig} height={300} />\n              ) : (\n                <div style={{ padding: '40px 0', textAlign: 'center' }}>\n                  <Text type=\"secondary\">暂无数据</Text>\n                </div>\n              )}\n            </Card>\n          </Col>\n        </Row>\n      )}\n\n      <Row gutter={16} style={{ marginTop: 24 }}>\n        <Col span={8}>\n          <Button type=\"primary\" block onClick={() => navigate('/dashboard/finance/transactions')}>\n            查看交易记录\n          </Button>\n        </Col>\n        <Col span={8}>\n          <Button type=\"primary\" block onClick={() => navigate('/dashboard/finance/reconciliation')}>\n            查看对账记录\n          </Button>\n        </Col>\n        <Col span={8}>\n          <Button type=\"primary\" block onClick={() => navigate('/dashboard/reports/profit')}>\n            查看利润报表\n          </Button>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nexport default Finance;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Finance/index.tsx"
    },
    "32": {
      "path": "/dashboard/finance/transactions",
      "file": "@/pages/Finance/Transactions.tsx",
      "parentId": "4",
      "id": "32",
      "absPath": "/dashboard/finance/transactions",
      "__content": "import {\n  useState,\n  useEffect,\n  useMemo,\n  Table,\n  Button,\n  Input,\n  Select,\n  DatePicker,\n  message,\n  Card,\n  Row,\n  Col,\n  Tag,\n  Space,\n  Modal,\n  Drawer,\n  Descriptions,\n  Typography,\n  Alert,\n  Statistic,\n  Tooltip,\n  SearchOutlined,\n  FilterOutlined,\n  ExportOutlined,\n  DownloadOutlined,\n  EyeOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  SyncOutlined,\n  DollarOutlined,\n  ArrowUpOutlined,\n  ArrowDownOutlined,\n  ReloadOutlined,\n  LineChart,\n  Line,\n  Bar,\n  RechartsPie,\n  ResponsiveContainer,\n  Legend,\n  XAxis,\n  YAxis,\n  CartesianGrid,\n  Cell,\n  useNavigate,\n  Option,\n  RangePicker,\n  Search,\n  Title,\n  Text,\n  FC,\n} from '@/imports';\nimport moment from 'moment';\nimport { financeDataSource } from '@/services/financeDataSource';\nimport type { Transaction } from '@/services/financeDataSource';\n\nconst Transactions: FC = () => {\n  const navigate = useNavigate();\n  const [transactions, setTransactions] = useState<Transaction[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [selectedRows, setSelectedRows] = useState<Transaction[]>([]);\n  const [detailDrawerVisible, setDetailDrawerVisible] = useState(false);\n  const [currentTransaction, setCurrentTransaction] = useState<Transaction | null>(null);\n  const [filters, setFilters] = useState({\n    type: '',\n    category: '',\n    status: '',\n    search: '',\n    dateRange: null as any,\n    minAmount: null as number | null,\n    maxAmount: null as number | null,\n  });\n\n  const fetchTransactions = async (filterParams?: any) => {\n    setLoading(true);\n    try {\n      // 转换过滤参数以匹配 financeDataSource 期望的格式\n      const params = {\n        type: filterParams?.type || filters.type,\n        startDate: filterParams?.dateRange?.[0]?.format('YYYY-MM-DD'),\n        endDate: filterParams?.dateRange?.[1]?.format('YYYY-MM-DD'),\n      };\n      const data = await financeDataSource.fetchTransactions(params);\n      setTransactions(data);\n    } catch (error) {\n      message.error('Failed to load transactions');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  useEffect(() => {\n    fetchTransactions();\n  }, []); // 只在组件挂载时执行一次\n\n  const handleExport = () => {\n    message.success('交易记录已导出');\n  };\n\n  const handleBatchExport = () => {\n    if (selectedRows.length === 0) {\n      message.warning('请先选择要导出的交易');\n      return;\n    }\n    message.success(`成功导出 ${selectedRows.length} 条交易记录`);\n  };\n\n  const handleViewDetail = (record: Transaction) => {\n    setCurrentTransaction(record);\n    setDetailDrawerVisible(true);\n  };\n\n  const handleRefresh = () => {\n    fetchTransactions();\n    message.success('数据已刷新');\n  };\n\n  const stats = useMemo(() => {\n    const income = transactions.filter(t => t.type === 'income').reduce((sum, t) => sum + t.amount, 0);\n    const expense = transactions.filter(t => t.type === 'expense').reduce((sum, t) => sum + t.amount, 0);\n    const pending = transactions.filter(t => t.status === 'pending').reduce((sum, t) => sum + t.amount, 0);\n    return {\n      income,\n      expense,\n      profit: income - expense,\n      pending,\n      total: transactions.length,\n    };\n  }, [transactions]);\n\n  const trendData = useMemo(() => {\n    const trendData = Array.from({ length: 7 }, (_, i) => {\n        const date = moment().subtract(i, 'days').format('YYYY-MM-DD');\n        const dayTransactions = transactions.filter(t => moment(t.createdAt).format('YYYY-MM-DD') === date);\n        return {\n          date,\n          income: dayTransactions.filter(t => t.type === 'income').reduce((sum, t) => sum + t.amount, 0),\n          expense: dayTransactions.filter(t => t.type === 'expense').reduce((sum, t) => sum + t.amount, 0),\n        };\n      }).reverse();\n    return trendData;\n  }, [transactions]);\n\n  const categoryData = useMemo(() => {\n    const categoryMap: Record<string, number> = {};\n    transactions.filter(t => t.type === 'expense').forEach(t => {\n      categoryMap[t.category] = (categoryMap[t.category] || 0) + t.amount;\n    });\n    return Object.entries(categoryMap).map(([name, value]) => ({ name, value }));\n  }, [transactions]);\n\n  const columns = [\n    {\n      title: '交易ID',\n      dataIndex: 'transactionId',\n      key: 'transactionId',\n      render: (text: string) => <Text strong>{text}</Text>,\n    },\n    {\n      title: '金额',\n      dataIndex: 'amount',\n      key: 'amount',\n      sorter: (a: Transaction, b: Transaction) => a.amount - b.amount,\n      render: (amount: number, record: Transaction) => (\n        <Text style={{ color: record.type === 'income' ? '#52c41a' : '#ff4d4f', fontWeight: 500 }}>\n          {record.type === 'income' ? '+' : '-'}${(amount || 0).toFixed(2)}\n        </Text>\n      ),\n    },\n    {\n      title: '类型',\n      dataIndex: 'type',\n      key: 'type',\n      filters: [\n        { text: '收入', value: 'income' },\n        { text: '支出', value: 'expense' },\n        { text: '退款', value: 'refund' },\n        { text: '费用', value: 'fee' },\n      ],\n      render: (type: string) => {\n        const typeConfig = {\n          income: { text: '收入', color: 'success' },\n          expense: { text: '支出', color: 'error' },\n          refund: { text: '退款', color: 'warning' },\n          fee: { text: '费用', color: 'processing' },\n        };\n        const config = typeConfig[type as keyof typeof typeConfig] || { text: type, color: 'default' };\n        return <Tag color={config.color}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: '分类',\n      dataIndex: 'category',\n      key: 'category',\n      filters: [\n        { text: '销售', value: 'Sales' },\n        { text: '供应商', value: 'Suppliers' },\n        { text: '营销', value: 'Marketing' },\n        { text: '物流', value: 'Shipping' },\n        { text: '平台费用', value: 'Platform' },\n        { text: '退款', value: 'Refund' },\n      ],\n    },\n    {\n      title: '描述',\n      dataIndex: 'description',\n      key: 'description',\n      ellipsis: true,\n    },\n    {\n      title: '日期',\n      dataIndex: 'date',\n      key: 'date',\n      sorter: (a: Transaction, b: Transaction) => moment(a.createdAt).unix() - moment(b.createdAt).unix(),\n      render: (date: string) => moment(date).format('YYYY-MM-DD HH:mm'),\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      filters: [\n        { text: '已完成', value: 'completed' },\n        { text: '待处理', value: 'pending' },\n        { text: '失败', value: 'failed' },\n      ],\n      render: (status: string) => {\n        const statusConfig = {\n          completed: { text: '已完成', color: 'success', icon: <CheckCircleOutlined /> },\n          pending: { text: '待处理', color: 'warning', icon: <SyncOutlined spin /> },\n          failed: { text: '失败', color: 'error', icon: <CloseCircleOutlined /> },\n        };\n        const config = statusConfig[status as keyof typeof statusConfig];\n        return <Tag color={config.color} icon={config.icon}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: any, record: Transaction) => (\n        <Space>\n          <Button type=\"link\" size=\"small\" icon={<EyeOutlined />} onClick={() => handleViewDetail(record)}>\n            查看\n          </Button>\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"transactions\">\n      <Row justify=\"space-between\" align=\"middle\" style={{ marginBottom: 24 }}>\n        <Col>\n          <Title level={4}>交易记录</Title>\n          <Text type=\"secondary\">查看和管理所有财务交易</Text>\n        </Col>\n        <Col>\n          <Space>\n            <Button icon={<ReloadOutlined />} onClick={handleRefresh}>\n              刷新\n            </Button>\n            <Button icon={<ExportOutlined />} onClick={handleExport}>\n              导出全部\n            </Button>\n          </Space>\n        </Col>\n      </Row>\n\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col xs={24} sm={12} lg={6}>\n          <Card size=\"small\">\n            <Statistic\n              title=\"总收入\"\n              value={stats.income}\n              precision={2}\n              prefix={<ArrowUpOutlined />}\n              valueStyle={{ color: '#52c41a' }}\n              suffix=\"USD\"\n            />\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} lg={6}>\n          <Card size=\"small\">\n            <Statistic\n              title=\"总支出\"\n              value={stats.expense}\n              precision={2}\n              prefix={<ArrowDownOutlined />}\n              valueStyle={{ color: '#ff4d4f' }}\n              suffix=\"USD\"\n            />\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} lg={6}>\n          <Card size=\"small\">\n            <Statistic\n              title=\"净利润\"\n              value={stats.profit}\n              precision={2}\n              prefix={<DollarOutlined />}\n              valueStyle={{ color: stats.profit >= 0 ? '#52c41a' : '#ff4d4f' }}\n              suffix=\"USD\"\n            />\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} lg={6}>\n          <Card size=\"small\">\n            <Statistic\n              title=\"待处理\"\n              value={stats.pending}\n              precision={2}\n              prefix={<SyncOutlined />}\n              valueStyle={{ color: '#faad14' }}\n              suffix=\"USD\"\n            />\n          </Card>\n        </Col>\n      </Row>\n\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={16}>\n          <Card title=\"收支趋势（最近7天）\" size=\"small\">\n            <ResponsiveContainer width=\"100%\" height={250}>\n              <LineChart\n                data={trendData}\n                margin={{ top: 5, right: 30, left: 20, bottom: 5 }}\n              >\n                <CartesianGrid strokeDasharray=\"3 3\" />\n                <XAxis dataKey=\"date\" />\n                <YAxis />\n                <Tooltip />\n                <Legend />\n                <Line type=\"monotone\" dataKey=\"income\" name=\"收入\" stroke=\"#52c41a\" activeDot={{ r: 8 }} />\n                <Line type=\"monotone\" dataKey=\"expense\" name=\"支出\" stroke=\"#ff4d4f\" />\n              </LineChart>\n            </ResponsiveContainer>\n          </Card>\n        </Col>\n        <Col span={8}>\n          <Card title=\"支出分类\" size=\"small\">\n            <ResponsiveContainer width=\"100%\" height={250}>\n              <RechartsPie\n                data={categoryData}\n                cx=\"50%\"\n                cy=\"50%\"\n                labelLine={false}\n                outerRadius={80}\n                fill=\"#8884d8\"\n                dataKey=\"value\"\n                label={({ name, percent }) => `${name}: ${((percent || 0) * 100).toFixed(0)}%`}\n              >\n                {categoryData.map((entry, index) => (\n                  <Cell key={`cell-${index}`} fill={['#1890ff', '#52c41a', '#faad14', '#ff4d4f', '#722ed1', '#eb2f96'][index % 6]} />\n                ))}\n              </RechartsPie>\n            </ResponsiveContainer>\n          </Card>\n        </Col>\n      </Row>\n\n      {selectedRows.length > 0 && (\n        <Alert\n          message={`已选择 ${selectedRows.length} 项`}\n          action={\n            <Space>\n              <Button icon={<ExportOutlined />} onClick={handleBatchExport}>\n                批量导出\n              </Button>\n              <Button onClick={() => setSelectedRows([])}>\n                取消选择\n              </Button>\n            </Space>\n          }\n          style={{ marginBottom: 16 }}\n        />\n      )}\n\n      <Card>\n        <div style={{ marginBottom: 16, display: 'flex', gap: 16, flexWrap: 'wrap' }}>\n          <Search\n            placeholder=\"搜索交易ID或描述\"\n            style={{ width: 300 }}\n            onSearch={(value) => setFilters({ ...filters, search: value })}\n            allowClear\n          />\n          <Select\n            placeholder=\"类型\"\n            style={{ width: 120 }}\n            value={filters.type}\n            onChange={(value) => setFilters({ ...filters, type: value })}\n            allowClear\n          >\n            <Option value=\"income\">收入</Option>\n            <Option value=\"expense\">支出</Option>\n          </Select>\n          <Select\n            placeholder=\"分类\"\n            style={{ width: 120 }}\n            value={filters.category}\n            onChange={(value) => setFilters({ ...filters, category: value })}\n            allowClear\n          >\n            <Option value=\"Sales\">销售</Option>\n            <Option value=\"Suppliers\">供应商</Option>\n            <Option value=\"Marketing\">营销</Option>\n            <Option value=\"Shipping\">物流</Option>\n            <Option value=\"Platform\">平台费用</Option>\n            <Option value=\"Refund\">退款</Option>\n          </Select>\n          <Select\n            placeholder=\"状态\"\n            style={{ width: 120 }}\n            value={filters.status}\n            onChange={(value) => setFilters({ ...filters, status: value })}\n            allowClear\n          >\n            <Option value=\"completed\">已完成</Option>\n            <Option value=\"pending\">待处理</Option>\n            <Option value=\"failed\">失败</Option>\n          </Select>\n          <RangePicker\n            style={{ width: 300 }}\n            value={filters.dateRange}\n            onChange={(dates) => setFilters({ ...filters, dateRange: dates })}\n          />\n          <Button\n            icon={<FilterOutlined />}\n            onClick={() => fetchTransactions(filters)}\n          >\n            筛选\n          </Button>\n        </div>\n\n        <Table\n          columns={columns}\n          dataSource={transactions}\n          loading={loading}\n          rowKey=\"id\"\n          rowSelection={{\n            selectedRowKeys: selectedRows.map(r => r.id),\n            onChange: (selectedRowKeys: React.Key[], selectedRows: Transaction[]) => {\n              setSelectedRows(selectedRows);\n            },\n          }}\n          pagination={{\n            pageSize: 20,\n            showSizeChanger: true,\n            showQuickJumper: true,\n            showTotal: (total) => `共 ${total} 条`,\n            pageSizeOptions: ['10', '20', '50', '100'],\n          }}\n          scroll={{ x: 1200 }}\n        />\n      </Card>\n\n      <Drawer\n        title=\"交易详情\"\n        placement=\"right\"\n        onClose={() => setDetailDrawerVisible(false)}\n        open={detailDrawerVisible}\n        width={600}\n      >\n        {currentTransaction && (\n          <Descriptions column={1} bordered>\n            <Descriptions.Item label=\"交易ID\">{currentTransaction.id}</Descriptions.Item>\n            <Descriptions.Item label=\"金额\">\n              <Text style={{ color: currentTransaction.type === 'income' ? '#52c41a' : '#ff4d4f', fontSize: 18, fontWeight: 500 }}>\n                {currentTransaction.type === 'income' ? '+' : '-'}${currentTransaction.amount.toFixed(2)}\n              </Text>\n            </Descriptions.Item>\n            <Descriptions.Item label=\"类型\">\n              <Tag color={currentTransaction.type === 'income' ? 'success' : 'error'}>\n                {currentTransaction.type === 'income' ? '收入' : '支出'}\n              </Tag>\n            </Descriptions.Item>\n            <Descriptions.Item label=\"分类\">{currentTransaction.category}</Descriptions.Item>\n            <Descriptions.Item label=\"描述\">{currentTransaction.description}</Descriptions.Item>\n            <Descriptions.Item label=\"日期\">{moment(currentTransaction.createdAt).format('YYYY-MM-DD HH:mm:ss')}</Descriptions.Item>\n            <Descriptions.Item label=\"状态\">\n              <Tag color={currentTransaction.status === 'completed' ? 'success' : currentTransaction.status === 'pending' ? 'warning' : 'error'}>\n                {currentTransaction.status === 'completed' ? '已完成' : currentTransaction.status === 'pending' ? '待处理' : '失败'}\n              </Tag>\n            </Descriptions.Item>\n          </Descriptions>\n        )}\n      </Drawer>\n    </div>\n  );\n};\n\nexport default Transactions;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Finance/Transactions.tsx"
    },
    "33": {
      "path": "/dashboard/finance/reconciliation",
      "file": "@/pages/Finance/Reconciliation.tsx",
      "parentId": "4",
      "id": "33",
      "absPath": "/dashboard/finance/reconciliation",
      "__content": "import {\n  useState,\n  useEffect,\n  Table,\n  Button,\n  Input,\n  Select,\n  DatePicker,\n  message,\n  Card,\n  Tabs,\n  SearchOutlined,\n  FilterOutlined,\n  ExportOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  useNavigate,\n  Option,\n  RangePicker,\n  Search,\n  FC,\n} from '@/imports';\nimport { financeDataSource, ReconciliationRecord } from '@/services/financeDataSource';\n\nconst Reconciliation: FC = () => {\n  const navigate = useNavigate();\n  const [reconciliations, setReconciliations] = useState<ReconciliationRecord[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [filters, setFilters] = useState({\n    platform: '',\n    status: '',\n    search: '',\n    dateRange: null as any,\n  });\n\n  useEffect(() => {\n    fetchReconciliations();\n  }, [filters]);\n\n  const fetchReconciliations = async () => {\n    setLoading(true);\n    try {\n      const data = await financeDataSource.fetchReconciliation(filters);\n      setReconciliations(data);\n    } catch (error) {\n      message.error('Failed to load reconciliations');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleExport = () => {\n    message.success('对账记录已导出');\n  };\n\n  const handleReconcile = (id: string) => {\n    message.success('对账完成');\n    fetchReconciliations();\n  };\n\n  const columns = [\n    {\n      title: '对账ID',\n      dataIndex: 'reconciliationId',\n      key: 'reconciliationId',\n    },\n    {\n      title: '平台',\n      dataIndex: 'platform',\n      key: 'platform',\n    },\n    {\n      title: '对账期间',\n      dataIndex: 'period',\n      key: 'period',\n    },\n    {\n      title: '预期金额',\n      dataIndex: 'expectedAmount',\n      key: 'expectedAmount',\n      render: (amount: number) => `$${(amount || 0).toFixed(2)}`,\n    },\n    {\n      title: '实际金额',\n      dataIndex: 'actualAmount',\n      key: 'actualAmount',\n      render: (amount: number) => `$${(amount || 0).toFixed(2)}`,\n    },\n    {\n      title: '差异',\n      dataIndex: 'difference',\n      key: 'difference',\n      render: (difference: number) => (\n        <span style={{ color: (difference || 0) === 0 ? '#3f8600' : '#cf1322' }}>\n          ${(difference || 0).toFixed(2)}\n        </span>\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => {\n        const statusMap = {\n          reconciled: { text: '已对账', icon: <CheckCircleOutlined style={{ color: '#3f8600' }} />, color: '#3f8600' },\n          unreconciled: { text: '未对账', icon: <CloseCircleOutlined style={{ color: '#cf1322' }} />, color: '#cf1322' },\n          partial: { text: '部分对账', icon: <CloseCircleOutlined style={{ color: '#fa8c16' }} />, color: '#fa8c16' },\n        };\n        const statusInfo = statusMap[status as keyof typeof statusMap] || { text: status, icon: null, color: '#000' };\n        return (\n          <span style={{ color: statusInfo.color }}>\n            {statusInfo.icon} {statusInfo.text}\n          </span>\n        );\n      },\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: any, record: ReconciliationRecord) => (\n        <div>\n          {record.status === 'pending' && (\n            <Button\n              type=\"primary\"\n              size=\"small\"\n              onClick={() => handleReconcile(record.id)}\n            >\n              对账\n            </Button>\n          )}\n        </div>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"reconciliation\">\n      <div className=\"page-header\">\n        <h1>对账记录</h1>\n        <Button\n          type=\"primary\"\n          icon={<ExportOutlined />}\n          onClick={handleExport}\n        >\n          导出\n        </Button>\n      </div>\n\n      <div className=\"filter-section\" style={{ marginBottom: 24, display: 'flex', gap: 16, flexWrap: 'wrap' }}>\n        <Search\n          placeholder=\"搜索对账ID或平台\"\n          style={{ width: 300 }}\n          onChange={(e) => setFilters({ ...filters, search: e.target.value })}\n        />\n        <Select\n          placeholder=\"平台\"\n          style={{ width: 120 }}\n          onChange={(value) => setFilters({ ...filters, platform: value })}\n        >\n          <Option value=\"\">全部</Option>\n          <Option value=\"Shopify\">Shopify</Option>\n          <Option value=\"Amazon\">Amazon</Option>\n          <Option value=\"eBay\">eBay</Option>\n        </Select>\n        <Select\n          placeholder=\"状态\"\n          style={{ width: 120 }}\n          onChange={(value) => setFilters({ ...filters, status: value })}\n        >\n          <Option value=\"\">全部</Option>\n          <Option value=\"reconciled\">已对账</Option>\n          <Option value=\"unreconciled\">未对账</Option>\n          <Option value=\"partial\">部分对账</Option>\n        </Select>\n        <RangePicker\n          style={{ width: 300 }}\n          onChange={(dates) => setFilters({ ...filters, dateRange: dates })}\n        />\n        <Button\n          icon={<FilterOutlined />}\n          onClick={fetchReconciliations}\n        >\n          筛选\n        </Button>\n      </div>\n\n      <Table\n        columns={columns}\n        dataSource={reconciliations}\n        loading={loading}\n        rowKey=\"id\"\n        pagination={{\n          pageSize: 10,\n          showSizeChanger: true,\n        }}\n      />\n    </div>\n  );\n};\n\nexport default Reconciliation;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Finance/Reconciliation.tsx"
    },
    "34": {
      "path": "/dashboard/user-asset",
      "file": "@/pages/UserAsset/UserAssets.tsx",
      "parentId": "4",
      "id": "34",
      "absPath": "/dashboard/user-asset",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Table,\r\n  Button,\r\n  Space,\r\n  Modal,\r\n  Form,\r\n  Input,\r\n  InputNumber,\r\n  Select,\r\n  Tag,\r\n  Tooltip,\r\n  Row,\r\n  Col,\r\n  Statistic,\r\n  message,\r\n  Badge,\r\n  Progress,\r\n  Descriptions,\r\n  DatePicker,\r\n  Tabs,\r\n  List,\r\n  Avatar,\r\n  Divider,\r\n  UserOutlined,\r\n  DollarOutlined,\r\n  TrophyOutlined,\r\n  CrownOutlined,\r\n  GiftOutlined,\r\n  FireOutlined,\r\n  StarOutlined,\r\n  WalletOutlined,\r\n  ShoppingCartOutlined,\r\n  ClockCircleOutlined,\r\n  RiseOutlined,\r\n  Option,\r\n  RangePicker,\r\n  FC,\r\n} from '@/imports';\r\nimport type { ColumnsType } from 'antd/es/table';\r\nimport dayjs from 'dayjs';\r\nimport { userAssetDataSource, UserAsset, MemberLevel } from '@/services/userAssetDataSource';\r\n\r\ninterface AssetStatistics {\r\n  totalUsers: number;\r\n  totalPoints: number;\r\n  totalSpent: number;\r\n  levelDistribution: Record<MemberLevel, number>;\r\n}\r\n\r\nconst LEVEL_COLORS: Record<MemberLevel, string> = {\r\n  BRONZE: '#cd7f32',\r\n  SILVER: '#c0c0c0',\r\n  GOLD: '#ffd700',\r\n  PLATINUM: '#e5e4e2',\r\n  DIAMOND: '#b9f2ff',\r\n};\r\n\r\nconst LEVEL_NAMES: Record<MemberLevel, string> = {\r\n  BRONZE: '青铜会员',\r\n  SILVER: '白银会员',\r\n  GOLD: '黄金会员',\r\n  PLATINUM: '铂金会员',\r\n  DIAMOND: '钻石会员',\r\n};\r\n\r\nconst LEVEL_ICONS: Record<MemberLevel, React.ReactNode> = {\r\n  BRONZE: <StarOutlined />,\r\n  SILVER: <StarOutlined />,\r\n  GOLD: <CrownOutlined />,\r\n  PLATINUM: <CrownOutlined />,\r\n  DIAMOND: <CrownOutlined />,\r\n};\r\n\r\nconst MOCK_USER_ASSETS: UserAsset[] = [\r\n  {\r\n    id: 'UA001',\r\n    tenantId: 'T001',\r\n    userId: 'U001',\r\n    userName: '张三',\r\n    email: 'zhangsan@example.com',\r\n    memberLevel: 'GOLD',\r\n    points: 5680,\r\n    totalSpent: 12580.50,\r\n    availableBalance: 125.80,\r\n    frozenBalance: 0,\r\n    totalOrders: 28,\r\n    joinDate: '2025-06-15',\r\n    lastActiveDate: '2026-03-18',\r\n    status: 'ACTIVE',\r\n  },\r\n  {\r\n    id: 'UA002',\r\n    tenantId: 'T001',\r\n    userId: 'U002',\r\n    userName: '李四',\r\n    email: 'lisi@example.com',\r\n    memberLevel: 'SILVER',\r\n    points: 2300,\r\n    totalSpent: 5620.00,\r\n    availableBalance: 56.20,\r\n    frozenBalance: 0,\r\n    totalOrders: 15,\r\n    joinDate: '2025-08-20',\r\n    lastActiveDate: '2026-03-17',\r\n    status: 'ACTIVE',\r\n  },\r\n  {\r\n    id: 'UA003',\r\n    tenantId: 'T001',\r\n    userId: 'U003',\r\n    userName: '王五',\r\n    email: 'wangwu@example.com',\r\n    memberLevel: 'DIAMOND',\r\n    points: 15800,\r\n    totalSpent: 35680.00,\r\n    availableBalance: 356.80,\r\n    frozenBalance: 0,\r\n    totalOrders: 52,\r\n    joinDate: '2024-12-01',\r\n    lastActiveDate: '2026-03-18',\r\n    status: 'ACTIVE',\r\n  },\r\n  {\r\n    id: 'UA004',\r\n    tenantId: 'T001',\r\n    userId: 'U004',\r\n    userName: '赵六',\r\n    email: 'zhaoliu@example.com',\r\n    memberLevel: 'BRONZE',\r\n    points: 850,\r\n    totalSpent: 1850.00,\r\n    availableBalance: 18.50,\r\n    frozenBalance: 0,\r\n    totalOrders: 6,\r\n    joinDate: '2026-01-10',\r\n    lastActiveDate: '2026-03-15',\r\n    status: 'ACTIVE',\r\n  },\r\n];\r\n\r\nconst MOCK_STATISTICS: AssetStatistics = {\r\n  totalUsers: 1256,\r\n  totalPoints: 2856000,\r\n  totalSpent: 5689250.00,\r\n  levelDistribution: {\r\n    BRONZE: 580,\r\n    SILVER: 420,\r\n    GOLD: 180,\r\n    PLATINUM: 60,\r\n    DIAMOND: 16,\r\n  },\r\n};\r\n\r\nconst UserAssets: FC = () => {\r\n  const [form] = Form.useForm();\r\n  const [loading, setLoading] = useState(false);\r\n  const [userAssets, setUserAssets] = useState<UserAsset[]>(MOCK_USER_ASSETS);\r\n  const [statistics, setStatistics] = useState<AssetStatistics>(MOCK_STATISTICS);\r\n  const [selectedUser, setSelectedUser] = useState<UserAsset | null>(null);\r\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\r\n  const [searchParams, setSearchParams] = useState({\r\n    keyword: '',\r\n    memberLevel: undefined as MemberLevel | undefined,\r\n  });\r\n\r\n  useEffect(() => {\r\n    loadUserAssets();\r\n  }, []);\r\n\r\n  const loadUserAssets = async () => {\r\n    setLoading(true);\r\n    try {\r\n      await new Promise(resolve => setTimeout(resolve, 500));\r\n      setUserAssets(MOCK_USER_ASSETS);\r\n      setStatistics(MOCK_STATISTICS);\r\n    } catch (error) {\r\n      message.error('加载用户资产数据失败');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleSearch = () => {\r\n    let filtered = [...MOCK_USER_ASSETS];\r\n    \r\n    if (searchParams.keyword) {\r\n      filtered = filtered.filter(\r\n        u => u.userName.includes(searchParams.keyword) || \r\n             u.email.includes(searchParams.keyword) ||\r\n             u.userId.includes(searchParams.keyword)\r\n      );\r\n    }\r\n    \r\n    if (searchParams.memberLevel) {\r\n      filtered = filtered.filter(u => u.memberLevel === searchParams.memberLevel);\r\n    }\r\n    \r\n    setUserAssets(filtered);\r\n  };\r\n\r\n  const handleReset = () => {\r\n    setSearchParams({ keyword: '', memberLevel: undefined });\r\n    setUserAssets(MOCK_USER_ASSETS);\r\n  };\r\n\r\n  const showUserDetail = (user: UserAsset) => {\r\n    setSelectedUser(user);\r\n    setDetailModalVisible(true);\r\n  };\r\n\r\n  const columns: ColumnsType<UserAsset> = [\r\n    {\r\n      title: '用户信息',\r\n      key: 'userInfo',\r\n      width: 200,\r\n      render: (_, record) => (\r\n        <Space>\r\n          <Avatar icon={<UserOutlined />} style={{ backgroundColor: LEVEL_COLORS[record.memberLevel] }} />\r\n          <div>\r\n            <div style={{ fontWeight: 500 }}>{record.userName}</div>\r\n            <div style={{ fontSize: 12, color: '#999' }}>{record.email}</div>\r\n          </div>\r\n        </Space>\r\n      ),\r\n    },\r\n    {\r\n      title: '会员等级',\r\n      dataIndex: 'memberLevel',\r\n      key: 'memberLevel',\r\n      width: 120,\r\n      render: (level: MemberLevel) => (\r\n        <Tag color={LEVEL_COLORS[level]} icon={LEVEL_ICONS[level]}>\r\n          {LEVEL_NAMES[level]}\r\n        </Tag>\r\n      ),\r\n      filters: Object.entries(LEVEL_NAMES).map(([key, name]) => ({\r\n        text: name,\r\n        value: key,\r\n      })),\r\n      onFilter: (value, record) => record.memberLevel === value,\r\n    },\r\n    {\r\n      title: '积分',\r\n      dataIndex: 'points',\r\n      key: 'points',\r\n      width: 120,\r\n      align: 'right',\r\n      render: (points: number) => (\r\n        <span style={{ color: '#1890ff', fontWeight: 500 }}>\r\n          {points.toLocaleString()}\r\n        </span>\r\n      ),\r\n      sorter: (a, b) => a.points - b.points,\r\n    },\r\n    {\r\n      title: '冻结余额',\r\n      dataIndex: 'frozenBalance',\r\n      key: 'frozenBalance',\r\n      width: 100,\r\n      align: 'right',\r\n      render: (balance: number) => (\r\n        <span style={{ color: '#999' }}>¥{balance.toFixed(2)}</span>\r\n      ),\r\n    },\r\n    {\r\n      title: '累计消费',\r\n      dataIndex: 'totalSpent',\r\n      key: 'totalSpent',\r\n      width: 130,\r\n      align: 'right',\r\n      render: (spent: number) => (\r\n        <span style={{ color: '#52c41a' }}>\r\n          ¥{spent.toLocaleString('zh-CN', { minimumFractionDigits: 2 })}\r\n        </span>\r\n      ),\r\n      sorter: (a, b) => a.totalSpent - b.totalSpent,\r\n    },\r\n    {\r\n      title: '订单数',\r\n      dataIndex: 'totalOrders',\r\n      key: 'totalOrders',\r\n      width: 90,\r\n      align: 'center',\r\n      render: (orders: number) => (\r\n        <Badge count={orders} showZero style={{ backgroundColor: '#1890ff' }} />\r\n      ),\r\n      sorter: (a, b) => a.totalOrders - b.totalOrders,\r\n    },\r\n    {\r\n      title: '可用余额',\r\n      dataIndex: 'availableBalance',\r\n      key: 'availableBalance',\r\n      width: 110,\r\n      align: 'right',\r\n      render: (balance: number) => (\r\n        <span style={{ color: '#faad14' }}>\r\n          ¥{balance.toFixed(2)}\r\n        </span>\r\n      ),\r\n    },\r\n    {\r\n      title: '最后活跃',\r\n      dataIndex: 'lastActiveDate',\r\n      key: 'lastActiveDate',\r\n      width: 160,\r\n      render: (time: string) => (\r\n        <Tooltip title={time}>\r\n          <span><ClockCircleOutlined /> {dayjs(time).format('MM-DD')}</span>\r\n        </Tooltip>\r\n      ),\r\n      sorter: (a, b) => new Date(a.lastActiveDate).getTime() - new Date(b.lastActiveDate).getTime(),\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      width: 120,\r\n      fixed: 'right',\r\n      render: (_, record) => (\r\n        <Space>\r\n          <Button type=\"link\" size=\"small\" onClick={() => showUserDetail(record)}>\r\n            详情\r\n          </Button>\r\n        </Space>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  const renderStatistics = () => (\r\n    <Row gutter={16}>\r\n      <Col span={4}>\r\n        <Card>\r\n          <Statistic\r\n            title=\"总用户数\"\r\n            value={statistics.totalUsers}\r\n            prefix={<UserOutlined />}\r\n            valueStyle={{ color: '#1890ff' }}\r\n          />\r\n        </Card>\r\n      </Col>\r\n      <Col span={4}>\r\n        <Card>\r\n          <Statistic\r\n            title=\"总积分\"\r\n            value={statistics.totalPoints}\r\n            prefix={<StarOutlined />}\r\n            valueStyle={{ color: '#722ed1' }}\r\n          />\r\n        </Card>\r\n      </Col>\r\n      <Col span={4}>\r\n        <Card>\r\n          <Statistic\r\n            title=\"累计消费\"\r\n            value={statistics.totalSpent}\r\n            precision={2}\r\n            prefix={<DollarOutlined />}\r\n            valueStyle={{ color: '#52c41a' }}\r\n          />\r\n        </Card>\r\n      </Col>\r\n      <Col span={12}>\r\n        <Card title=\"会员等级分布\">\r\n          <Row gutter={8}>\r\n            {Object.entries(statistics.levelDistribution).map(([level, count]) => (\r\n              <Col span={4} key={level}>\r\n                <div style={{ textAlign: 'center' }}>\r\n                  <Tag color={LEVEL_COLORS[level as MemberLevel]} style={{ marginBottom: 4 }}>\r\n                    {LEVEL_NAMES[level as MemberLevel]}\r\n                  </Tag>\r\n                  <div style={{ fontWeight: 500 }}>{count}</div>\r\n                  <Progress \r\n                    percent={Math.round((count / statistics.totalUsers) * 100)} \r\n                    size=\"small\" \r\n                    showInfo={false}\r\n                    strokeColor={LEVEL_COLORS[level as MemberLevel]}\r\n                  />\r\n                </div>\r\n              </Col>\r\n            ))}\r\n          </Row>\r\n        </Card>\r\n      </Col>\r\n    </Row>\r\n  );\r\n\r\n  const renderUserDetail = () => {\r\n    if (!selectedUser) return null;\r\n\r\n    return (\r\n      <Modal\r\n        title=\"用户资产详情\"\r\n        open={detailModalVisible}\r\n        onCancel={() => setDetailModalVisible(false)}\r\n        footer={null}\r\n        width={800}\r\n      >\r\n        <Tabs \r\n          defaultActiveKey=\"overview\"\r\n          items={[\r\n            { key: 'overview', label: '资产概览', children: (\r\n              <>\r\n                <Descriptions bordered column={2}>\r\n                  <Descriptions.Item label=\"用户ID\">{selectedUser.userId}</Descriptions.Item>\r\n                  <Descriptions.Item label=\"用户名\">{selectedUser.userName}</Descriptions.Item>\r\n                  <Descriptions.Item label=\"邮箱\">{selectedUser.email}</Descriptions.Item>\r\n                  <Descriptions.Item label=\"会员等级\">\r\n                    <Tag color={LEVEL_COLORS[selectedUser.memberLevel]} icon={LEVEL_ICONS[selectedUser.memberLevel]}>\r\n                      {LEVEL_NAMES[selectedUser.memberLevel]}\r\n                    </Tag>\r\n                  </Descriptions.Item>\r\n                  <Descriptions.Item label=\"积分\">{selectedUser.points.toLocaleString()}</Descriptions.Item>\r\n                  <Descriptions.Item label=\"状态\">\r\n                    <Tag color={selectedUser.status === 'ACTIVE' ? 'green' : selectedUser.status === 'INACTIVE' ? 'gray' : 'red'}>\r\n                      {selectedUser.status === 'ACTIVE' ? '活跃' : selectedUser.status === 'INACTIVE' ? '非活跃' : '暂停'}\r\n                    </Tag>\r\n                  </Descriptions.Item>\r\n                </Descriptions>\r\n\r\n                <Divider />\r\n\r\n                <Row gutter={16}>\r\n                  <Col span={6}>\r\n                    <Statistic\r\n                      title=\"可用余额\"\r\n                      value={selectedUser.availableBalance}\r\n                      precision={2}\r\n                      prefix=\"¥\"\r\n                      valueStyle={{ color: '#1890ff' }}\r\n                    />\r\n                  </Col>\r\n                  <Col span={6}>\r\n                    <Statistic\r\n                      title=\"冻结余额\"\r\n                      value={selectedUser.frozenBalance}\r\n                      precision={2}\r\n                      prefix=\"¥\"\r\n                      valueStyle={{ color: '#999' }}\r\n                    />\r\n                  </Col>\r\n                  <Col span={6}>\r\n                    <Statistic\r\n                      title=\"累计消费\"\r\n                      value={selectedUser.totalSpent}\r\n                      precision={2}\r\n                      prefix=\"¥\"\r\n                      valueStyle={{ color: '#52c41a' }}\r\n                    />\r\n                  </Col>\r\n                  <Col span={6}>\r\n                    <Statistic\r\n                      title=\"订单数\"\r\n                      value={selectedUser.totalOrders}\r\n                      prefix={<ShoppingCartOutlined />}\r\n                    />\r\n                  </Col>\r\n                </Row>\r\n              </>\r\n            )},\r\n            { key: 'spending', label: '消费统计', children: (\r\n              <Row gutter={16}>\r\n                <Col span={12}>\r\n                  <Card>\r\n                    <Statistic\r\n                      title=\"总订单数\"\r\n                      value={selectedUser.totalOrders}\r\n                      prefix={<ShoppingCartOutlined />}\r\n                    />\r\n                  </Card>\r\n                </Col>\r\n                <Col span={12}>\r\n                  <Card>\r\n                    <Statistic\r\n                      title=\"客单价\"\r\n                      value={selectedUser.totalSpent / selectedUser.totalOrders}\r\n                      precision={2}\r\n                      prefix=\"¥\"\r\n                    />\r\n                  </Card>\r\n                </Col>\r\n              </Row>\r\n            )},\r\n          ]}\r\n        />\r\n      </Modal>\r\n    );\r\n  };\r\n\r\n  return (\r\n    <div style={{ padding: 24 }}>\r\n      <Card title=\"用户资产管理\" style={{ marginBottom: 16 }}>\r\n        {renderStatistics()}\r\n      </Card>\r\n\r\n      <Card>\r\n        <Row gutter={16} style={{ marginBottom: 16 }}>\r\n          <Col span={6}>\r\n            <Input\r\n              placeholder=\"搜索用户名/邮箱/ID\"\r\n              value={searchParams.keyword}\r\n              onChange={e => setSearchParams({ ...searchParams, keyword: e.target.value })}\r\n              onPressEnter={handleSearch}\r\n            />\r\n          </Col>\r\n          <Col span={4}>\r\n            <Select\r\n              placeholder=\"会员等级\"\r\n              value={searchParams.memberLevel}\r\n              onChange={value => setSearchParams({ ...searchParams, memberLevel: value })}\r\n              allowClear\r\n              style={{ width: '100%' }}\r\n            >\r\n              {Object.entries(LEVEL_NAMES).map(([key, name]) => (\r\n                <Option key={key} value={key}>\r\n                  <Tag color={LEVEL_COLORS[key as MemberLevel]}>{name}</Tag>\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Col>\r\n          <Col span={4}>\r\n            <Space>\r\n              <Button type=\"primary\" onClick={handleSearch}>搜索</Button>\r\n              <Button onClick={handleReset}>重置</Button>\r\n            </Space>\r\n          </Col>\r\n        </Row>\r\n\r\n        <Table\r\n          columns={columns}\r\n          dataSource={userAssets}\r\n          rowKey=\"id\"\r\n          loading={loading}\r\n          scroll={{ x: 1400 }}\r\n          pagination={{\r\n            showSizeChanger: true,\r\n            showQuickJumper: true,\r\n            showTotal: (total) => `共 ${total} 条记录`,\r\n          }}\r\n        />\r\n      </Card>\r\n\r\n      {renderUserDetail()}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default UserAssets;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/UserAsset/UserAssets.tsx"
    },
    "35": {
      "path": "/dashboard/ad",
      "file": "@/pages/Ad/index.tsx",
      "parentId": "4",
      "id": "35",
      "absPath": "/dashboard/ad",
      "__content": "import {\n  useState,\n  useEffect,\n  Table,\n  Button,\n  Input,\n  Select,\n  DatePicker,\n  message,\n  Card,\n  Modal,\n  Form,\n  InputNumber,\n  Row,\n  Col,\n  Switch,\n  Tag,\n  Divider,\n  Alert,\n  Tooltip,\n  Tabs,\n  PlusOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  SearchOutlined,\n  PlayCircleOutlined,\n  PauseCircleOutlined,\n  InfoCircleOutlined,\n  RocketOutlined,\n  VideoCameraOutlined,\n  BarChartOutlined,\n  ScheduleOutlined,\n  ThunderboltOutlined,\n  marketingDataSource,\n  Option,\n  RangePicker,\n  Search,\n  TextArea,\n  FC,\n} from '@/imports';\nimport type { Ad } from '@/services/marketingDataSource';\nimport AdPlanPage from './AdPlanPage';\nimport AdDelivery from './AdDelivery';\n\nconst Ads: FC = () => {\n  const [ads, setAds] = useState<Ad[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [modalVisible, setModalVisible] = useState(false);\n  const [editingAd, setEditingAd] = useState<Ad | null>(null);\n  const [form] = Form.useForm();\n  const [selectedPlatform, setSelectedPlatform] = useState<string>('');\n  const [gmvMaxType, setGmvMaxType] = useState<string>('product');\n  const [filters, setFilters] = useState({\n    platform: '',\n    status: '',\n    search: '',\n    dateRange: null as any,\n  });\n\n  useEffect(() => {\n    fetchAds();\n  }, [filters]);\n\n  const fetchAds = async () => {\n    setLoading(true);\n    try {\n      const data = await marketingDataSource.fetchAds(filters);\n      setAds(data);\n    } catch (error) {\n      message.error('Failed to load ads');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleAddAd = () => {\n    setEditingAd(null);\n    setSelectedPlatform('');\n    setGmvMaxType('product');\n    form.resetFields();\n    form.setFieldsValue({\n      status: 'paused',\n      budget: 100,\n      dailyBudget: 10,\n      bidStrategy: 'auto',\n      targetAudience: 'all',\n      gmvMaxType: 'product',\n      optimizationGoal: 'gmv',\n      autoCreative: true,\n      autoTargeting: true,\n    });\n    setModalVisible(true);\n  };\n\n  const handleEditAd = (id: string) => {\n    const ad = ads.find(a => a.id === id);\n    if (ad) {\n      setEditingAd(ad);\n      setSelectedPlatform(ad.platform || '');\n      setGmvMaxType(ad.gmvMaxType || 'product');\n      form.setFieldsValue(ad);\n      setModalVisible(true);\n    }\n  };\n\n  const handleSaveAd = async () => {\n    try {\n      const values = await form.validateFields();\n      if (editingAd) {\n        const updatedAds = ads.map(ad => \n          ad.id === editingAd.id ? { ...ad, ...values } : ad\n        );\n        setAds(updatedAds);\n        message.success('广告已更新');\n      } else {\n        const newAd: Ad = {\n          id: `ad-${Date.now()}`,\n          ...values,\n          spend: 0,\n          clicks: 0,\n          conversions: 0,\n          roi: 0,\n          createdAt: new Date().toISOString(),\n        };\n        setAds([...ads, newAd]);\n        message.success('广告已创建');\n      }\n      setModalVisible(false);\n    } catch (error) {\n      message.error('保存失败');\n    }\n  };\n\n  const handleStartAd = (id: string) => {\n    const updatedAds = ads.map(ad =>\n      ad.id === id ? { ...ad, status: 'active' as const } : ad\n    );\n    setAds(updatedAds);\n    message.success('广告已启动');\n  };\n\n  const handlePauseAd = (id: string) => {\n    const updatedAds = ads.map(ad =>\n      ad.id === id ? { ...ad, status: 'paused' as const } : ad\n    );\n    setAds(updatedAds);\n    message.success('广告已暂停');\n  };\n\n  const handleDeleteAd = (id: string) => {\n    const updatedAds = ads.filter(ad => ad.id !== id);\n    setAds(updatedAds);\n    message.success('广告已删除');\n  };\n\n  const handlePlatformChange = (value: string) => {\n    setSelectedPlatform(value);\n    if (value === 'TikTok GMV Max') {\n      form.setFieldsValue({\n        bidStrategy: 'gmv_max',\n        autoCreative: true,\n        autoTargeting: true,\n        optimizationGoal: 'gmv',\n      });\n    }\n  };\n\n  const isGMVMax = selectedPlatform === 'TikTok GMV Max';\n\n  const columns = [\n    {\n      title: '广告名称',\n      dataIndex: 'name',\n      key: 'name',\n    },\n    {\n      title: '平台',\n      dataIndex: 'platform',\n      key: 'platform',\n      render: (platform: string, record: Ad) => {\n        const colorMap: Record<string, string> = {\n          Facebook: 'blue',\n          Google: 'red',\n          Instagram: 'purple',\n          TikTok: 'magenta',\n          'TikTok GMV Max': 'gold',\n        };\n        return (\n          <div>\n            <Tag color={colorMap[platform] || 'default'}>{platform}</Tag>\n            {platform === 'TikTok GMV Max' && record.gmvMaxType && (\n              <Tag color=\"cyan\" style={{ marginLeft: 4 }}>\n                {record.gmvMaxType === 'product' ? '商品推广' : '直播推广'}\n              </Tag>\n            )}\n          </div>\n        );\n      },\n    },\n    {\n      title: '活动',\n      dataIndex: 'campaign',\n      key: 'campaign',\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => {\n        const statusMap: Record<string, { label: string; color: string }> = {\n          active: { label: '活跃', color: 'success' },\n          paused: { label: '暂停', color: 'warning' },\n          completed: { label: '已完成', color: 'default' },\n        };\n        const config = statusMap[status] || { label: status, color: 'default' };\n        return <Tag color={config.color}>{config.label}</Tag>;\n      },\n    },\n    {\n      title: '预算',\n      dataIndex: 'budget',\n      key: 'budget',\n      render: (budget: number) => `$${budget?.toFixed(2) || '0.00'}`,\n    },\n    {\n      title: '支出',\n      dataIndex: 'spend',\n      key: 'spend',\n      render: (spend: number) => `$${spend?.toFixed(2) || '0.00'}`,\n    },\n    {\n      title: 'GMV',\n      dataIndex: 'gmv',\n      key: 'gmv',\n      render: (gmv: number, record: Ad) => {\n        if (record.platform === 'TikTok GMV Max') {\n          return <Tag color=\"green\">${(gmv || 0).toFixed(2)}</Tag>;\n        }\n        return '-';\n      },\n    },\n    {\n      title: '点击量',\n      dataIndex: 'clicks',\n      key: 'clicks',\n    },\n    {\n      title: '转化数',\n      dataIndex: 'conversions',\n      key: 'conversions',\n    },\n    {\n      title: 'ROI',\n      dataIndex: 'roi',\n      key: 'roi',\n      render: (roi: number) => `${(roi || 0).toFixed(2)}x`,\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: unknown, record: Ad) => (\n        <div>\n          {record.status === 'active' ? (\n            <Button\n              type=\"link\"\n              icon={<PauseCircleOutlined />}\n              onClick={() => handlePauseAd(record.id)}\n            >\n              暂停\n            </Button>\n          ) : (\n            <Button\n              type=\"link\"\n              icon={<PlayCircleOutlined />}\n              onClick={() => handleStartAd(record.id)}\n            >\n              启动\n            </Button>\n          )}\n          <Button\n            type=\"link\"\n            icon={<EditOutlined />}\n            onClick={() => handleEditAd(record.id)}\n          >\n            编辑\n          </Button>\n          <Button\n            type=\"link\"\n            danger\n            icon={<DeleteOutlined />}\n            onClick={() => handleDeleteAd(record.id)}\n          >\n            删除\n          </Button>\n        </div>\n      ),\n    },\n  ];\n\n  const tabItems = [\n    {\n      key: 'ads',\n      label: (\n        <span>\n          <BarChartOutlined />\n          广告列表\n        </span>\n      ),\n      children: (\n        <>\n          <div className=\"filter-section\" style={{ marginBottom: 24, display: 'flex', gap: 16, flexWrap: 'wrap' }}>\n            <Search\n              placeholder=\"搜索广告名称或活动\"\n              style={{ width: 300 }}\n              onChange={(e) => setFilters({ ...filters, search: e.target.value })}\n            />\n            <Select\n              placeholder=\"平台\"\n              style={{ width: 150 }}\n              onChange={(value) => setFilters({ ...filters, platform: value })}\n            >\n              <Option value=\"\">全部</Option>\n              <Option value=\"Facebook\">Facebook</Option>\n              <Option value=\"Google\">Google</Option>\n              <Option value=\"Instagram\">Instagram</Option>\n              <Option value=\"TikTok\">TikTok</Option>\n              <Option value=\"TikTok GMV Max\">TikTok GMV Max</Option>\n            </Select>\n            <Select\n              placeholder=\"状态\"\n              style={{ width: 120 }}\n              onChange={(value) => setFilters({ ...filters, status: value })}\n            >\n              <Option value=\"\">全部</Option>\n              <Option value=\"active\">活跃</Option>\n              <Option value=\"paused\">暂停</Option>\n              <Option value=\"completed\">已完成</Option>\n            </Select>\n            <RangePicker\n              style={{ width: 300 }}\n              onChange={(dates) => setFilters({ ...filters, dateRange: dates })}\n            />\n            <Button\n              icon={<SearchOutlined />}\n              onClick={fetchAds}\n            >\n              筛选\n            </Button>\n          </div>\n\n          <Table\n            columns={columns}\n            dataSource={ads}\n            loading={loading}\n            rowKey=\"id\"\n            pagination={{\n              pageSize: 10,\n              showSizeChanger: true,\n            }}\n          />\n        </>\n      ),\n    },\n    {\n      key: 'plans',\n      label: (\n        <span>\n          <ScheduleOutlined />\n          广告计划\n        </span>\n      ),\n      children: <AdPlanPage />,\n    },\n    {\n      key: 'delivery',\n      label: (\n        <span>\n          <ThunderboltOutlined />\n          广告投放\n        </span>\n      ),\n      children: <AdDelivery />,\n    },\n  ];\n\n  return (\n    <div className=\"ads\">\n      <div className=\"page-header\" style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <h1>广告管理</h1>\n        <Button\n          type=\"primary\"\n          icon={<PlusOutlined />}\n          onClick={handleAddAd}\n        >\n          创建广告\n        </Button>\n      </div>\n\n      <Card>\n        <Tabs \n          defaultActiveKey=\"ads\" \n          items={tabItems}\n          tabBarExtraContent={\n            <Button icon={<BarChartOutlined />}>数据报表</Button>\n          }\n        />\n      </Card>\n\n      <Modal\n        title={editingAd ? '编辑广告' : '创建广告'}\n        open={modalVisible}\n        onCancel={() => setModalVisible(false)}\n        onOk={handleSaveAd}\n        width={900}\n      >\n        <Form\n          form={form}\n          layout=\"vertical\"\n        >\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"name\"\n                label=\"广告名称\"\n                rules={[{ required: true, message: '请输入广告名称' }]}\n              >\n                <Input placeholder=\"输入广告名称\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"platform\"\n                label=\"平台\"\n                rules={[{ required: true, message: '请选择平台' }]}\n              >\n                <Select placeholder=\"选择平台\" onChange={handlePlatformChange}>\n                  <Option value=\"Facebook\">Facebook</Option>\n                  <Option value=\"Google\">Google</Option>\n                  <Option value=\"Instagram\">Instagram</Option>\n                  <Option value=\"TikTok\">TikTok</Option>\n                  <Option value=\"TikTok GMV Max\">\n                    <Tag color=\"gold\">NEW</Tag> TikTok GMV Max\n                  </Option>\n                </Select>\n              </Form.Item>\n            </Col>\n          </Row>\n\n          {isGMVMax && (\n            <>\n              <Alert\n                message=\"GMV Max - TikTok AI自动化广告解决方案\"\n                description=\"GMV Max 是 TikTok 2025年推出的 AI 自动化广告解决方案，旨在最大化 GMV（总交易额）。系统将自动优化创意、定向和出价，无需手动调整。\"\n                type=\"info\"\n                showIcon\n                icon={<RocketOutlined />}\n                style={{ marginBottom: 16 }}\n              />\n\n              <Divider orientation=\"left\">GMV Max 配置</Divider>\n\n              <Row gutter={16}>\n                <Col span={12}>\n                  <Form.Item\n                    name=\"gmvMaxType\"\n                    label={\n                      <span>\n                        GMV Max 类型\n                        <Tooltip title=\"Product GMV Max 用于商品推广，LIVE GMV Max 用于直播推广\">\n                          <InfoCircleOutlined style={{ marginLeft: 4, color: '#999' }} />\n                        </Tooltip>\n                      </span>\n                    }\n                    rules={[{ required: true, message: '请选择 GMV Max 类型' }]}\n                  >\n                    <Select placeholder=\"选择类型\" onChange={(v) => setGmvMaxType(v)}>\n                      <Option value=\"product\">\n                        <RocketOutlined style={{ marginRight: 8 }} />\n                        Product GMV Max - 商品推广\n                      </Option>\n                      <Option value=\"live\">\n                        <VideoCameraOutlined style={{ marginRight: 8 }} />\n                        LIVE GMV Max - 直播推广\n                      </Option>\n                    </Select>\n                  </Form.Item>\n                </Col>\n                <Col span={12}>\n                  <Form.Item\n                    name=\"optimizationGoal\"\n                    label=\"优化目标\"\n                  >\n                    <Select placeholder=\"选择优化目标\">\n                      <Option value=\"gmv\">最大化 GMV</Option>\n                      <Option value=\"roas\">最大化 ROAS</Option>\n                      <Option value=\"conversion\">最大化转化数</Option>\n                    </Select>\n                  </Form.Item>\n                </Col>\n              </Row>\n\n              {gmvMaxType === 'product' && (\n                <Row gutter={16}>\n                  <Col span={12}>\n                    <Form.Item\n                      name=\"productIds\"\n                      label=\"推广商品ID\"\n                      rules={[{ required: true, message: '请输入商品ID' }]}\n                    >\n                      <Input placeholder=\"输入商品ID，多个用逗号分隔\" />\n                    </Form.Item>\n                  </Col>\n                  <Col span={12}>\n                    <Form.Item\n                      name=\"productCategory\"\n                      label=\"商品类目\"\n                    >\n                      <Select placeholder=\"选择商品类目\">\n                        <Option value=\"fashion\">服饰鞋包</Option>\n                        <Option value=\"beauty\">美妆护肤</Option>\n                        <Option value=\"electronics\">电子产品</Option>\n                        <Option value=\"home\">家居生活</Option>\n                        <Option value=\"food\">食品饮料</Option>\n                        <Option value=\"other\">其他</Option>\n                      </Select>\n                    </Form.Item>\n                  </Col>\n                </Row>\n              )}\n\n              {gmvMaxType === 'live' && (\n                <Row gutter={16}>\n                  <Col span={12}>\n                    <Form.Item\n                      name=\"liveRoomId\"\n                      label=\"直播间ID\"\n                      rules={[{ required: true, message: '请输入直播间ID' }]}\n                    >\n                      <Input placeholder=\"输入直播间ID\" />\n                    </Form.Item>\n                  </Col>\n                  <Col span={12}>\n                    <Form.Item\n                      name=\"liveSchedule\"\n                      label=\"直播时间\"\n                    >\n                      <RangePicker \n                        showTime \n                        style={{ width: '100%' }}\n                        placeholder={['开始时间', '结束时间']}\n                      />\n                    </Form.Item>\n                  </Col>\n                </Row>\n              )}\n\n              <Row gutter={16}>\n                <Col span={8}>\n                  <Form.Item\n                    name=\"autoCreative\"\n                    label=\"自动创意优化\"\n                    valuePropName=\"checked\"\n                  >\n                    <Switch checkedChildren=\"开\" unCheckedChildren=\"关\" />\n                  </Form.Item>\n                </Col>\n                <Col span={8}>\n                  <Form.Item\n                    name=\"autoTargeting\"\n                    label=\"自动定向优化\"\n                    valuePropName=\"checked\"\n                  >\n                    <Switch checkedChildren=\"开\" unCheckedChildren=\"关\" />\n                  </Form.Item>\n                </Col>\n                <Col span={8}>\n                  <Form.Item\n                    name=\"autoBid\"\n                    label=\"自动出价优化\"\n                    valuePropName=\"checked\"\n                  >\n                    <Switch checkedChildren=\"开\" unCheckedChildren=\"关\" defaultChecked />\n                  </Form.Item>\n                </Col>\n              </Row>\n\n              <Divider orientation=\"left\">预算设置</Divider>\n            </>\n          )}\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"campaign\"\n                label=\"活动名称\"\n                rules={[{ required: true, message: '请输入活动名称' }]}\n              >\n                <Input placeholder=\"输入活动名称\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"status\"\n                label=\"状态\"\n                rules={[{ required: true, message: '请选择状态' }]}\n              >\n                <Select placeholder=\"选择状态\">\n                  <Option value=\"active\">活跃</Option>\n                  <Option value=\"paused\">暂停</Option>\n                  <Option value=\"completed\">已完成</Option>\n                </Select>\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"budget\"\n                label={isGMVMax ? \"GMV Max 总预算 ($)\" : \"总预算 ($)\"}\n                rules={[{ required: true, message: '请输入总预算' }]}\n              >\n                <InputNumber\n                  min={0}\n                  precision={2}\n                  style={{ width: '100%' }}\n                  placeholder=\"输入总预算\"\n                />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"dailyBudget\"\n                label=\"日预算 ($)\"\n                rules={[{ required: true, message: '请输入日预算' }]}\n              >\n                <InputNumber\n                  min={0}\n                  precision={2}\n                  style={{ width: '100%' }}\n                  placeholder=\"输入日预算\"\n                />\n              </Form.Item>\n            </Col>\n          </Row>\n\n          {!isGMVMax && (\n            <>\n              <Row gutter={16}>\n                <Col span={12}>\n                  <Form.Item\n                    name=\"bidStrategy\"\n                    label=\"出价策略\"\n                  >\n                    <Select placeholder=\"选择出价策略\">\n                      <Option value=\"auto\">自动出价</Option>\n                      <Option value=\"manual\">手动出价</Option>\n                      <Option value=\"target_cpa\">目标CPA</Option>\n                      <Option value=\"target_roas\">目标ROAS</Option>\n                    </Select>\n                  </Form.Item>\n                </Col>\n                <Col span={12}>\n                  <Form.Item\n                    name=\"targetAudience\"\n                    label=\"目标受众\"\n                  >\n                    <Select placeholder=\"选择目标受众\">\n                      <Option value=\"all\">所有用户</Option>\n                      <Option value=\"new\">新用户</Option>\n                      <Option value=\"returning\">回访用户</Option>\n                      <Option value=\"similar\">相似受众</Option>\n                    </Select>\n                  </Form.Item>\n                </Col>\n              </Row>\n            </>\n          )}\n\n          <Form.Item\n            name=\"description\"\n            label=\"广告描述\"\n          >\n            <TextArea rows={3} placeholder=\"输入广告描述\" />\n          </Form.Item>\n\n          {!isGMVMax && (\n            <Form.Item\n              name=\"targetUrl\"\n              label=\"目标URL\"\n              rules={[{ type: 'url', message: '请输入有效的URL' }]}\n            >\n              <Input placeholder=\"https://example.com\" />\n            </Form.Item>\n          )}\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default Ads;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Ad/index.tsx"
    },
    "36": {
      "path": "/dashboard/marketing/competitors",
      "file": "@/pages/Marketing/Competitors.tsx",
      "parentId": "4",
      "id": "36",
      "absPath": "/dashboard/marketing/competitors",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Row,\n  Col,\n  Table,\n  Input,\n  Select,\n  DatePicker,\n  Button,\n  SearchOutlined,\n  BarChartOutlined,\n  LineChartOutlined,\n  PieChartOutlined,\n  Option,\n  RangePicker,\n  Search,\n  FC,\n} from '@/imports';\nimport { BarChart, Bar, LineChart, Line, PieChart, Pie, Cell, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';\nimport { marketingDataSource, Competitor } from '@/services/marketingDataSource';\n\ninterface ProductComparison {\n  product: string;\n  ourPrice: number;\n  competitorPrice: number;\n  priceDifference: number;\n  ourRating: number;\n  competitorRating: number;\n}\n\nconst Competitors: FC = () => {\n  const [competitors, setCompetitors] = useState<Competitor[]>([]);\n  const [productComparisons, setProductComparisons] = useState<ProductComparison[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [filters, setFilters] = useState({\n    category: '',\n    search: '',\n    dateRange: null as any,\n  });\n\n  useEffect(() => {\n    fetchCompetitorData();\n  }, [filters]);\n\n  const fetchCompetitorData = async () => {\n    setLoading(true);\n    // 模拟API调用\n    setTimeout(() => {\n      // 模拟竞争对手数据\n      const mockCompetitors: Competitor[] = [\n        {\n          id: '1',\n          name: 'Competitor A',\n          platform: 'Amazon',\n          products: 150,\n          marketShare: 30,\n          avgPrice: 199.99,\n          avgRating: 4.5,\n          reviewCount: 1000,\n          lastUpdated: '2026-03-20',\n          trackedProducts: ['SKU-001', 'SKU-002'],\n          website: 'https://competitor-a.com',\n          socialFollowers: 100000,\n        },\n        {\n          id: '2',\n          name: 'Competitor B',\n          platform: 'Amazon',\n          products: 120,\n          marketShare: 25,\n          avgPrice: 189.99,\n          avgRating: 4.2,\n          reviewCount: 800,\n          lastUpdated: '2026-03-19',\n          trackedProducts: ['SKU-003', 'SKU-004'],\n          website: 'https://competitor-b.com',\n          socialFollowers: 80000,\n        },\n        {\n          id: '3',\n          name: 'Competitor C',\n          platform: 'eBay',\n          products: 200,\n          marketShare: 20,\n          avgPrice: 209.99,\n          avgRating: 4.7,\n          reviewCount: 1200,\n          lastUpdated: '2026-03-18',\n          trackedProducts: ['SKU-005'],\n          website: 'https://competitor-c.com',\n          socialFollowers: 120000,\n        },\n        {\n          id: '4',\n          name: 'Competitor D',\n          platform: 'Shopify',\n          products: 80,\n          marketShare: 15,\n          avgPrice: 179.99,\n          avgRating: 4.0,\n          reviewCount: 600,\n          lastUpdated: '2026-03-17',\n          trackedProducts: ['SKU-006', 'SKU-007'],\n          website: 'https://competitor-d.com',\n          socialFollowers: 60000,\n        },\n        {\n          id: '5',\n          name: 'Competitor E',\n          platform: 'Walmart',\n          products: 100,\n          marketShare: 10,\n          avgPrice: 219.99,\n          avgRating: 4.8,\n          reviewCount: 1500,\n          lastUpdated: '2026-03-16',\n          trackedProducts: ['SKU-008'],\n          website: 'https://competitor-e.com',\n          socialFollowers: 150000,\n        },\n      ];\n\n      // 模拟产品比较数据\n      const mockProductComparisons: ProductComparison[] = [\n        {\n          product: 'Product 1',\n          ourPrice: 99.99,\n          competitorPrice: 109.99,\n          priceDifference: -10,\n          ourRating: 4.5,\n          competitorRating: 4.2,\n        },\n        {\n          product: 'Product 2',\n          ourPrice: 199.99,\n          competitorPrice: 189.99,\n          priceDifference: 10,\n          ourRating: 4.3,\n          competitorRating: 4.5,\n        },\n        {\n          product: 'Product 3',\n          ourPrice: 299.99,\n          competitorPrice: 319.99,\n          priceDifference: -20,\n          ourRating: 4.7,\n          competitorRating: 4.4,\n        },\n        {\n          product: 'Product 4',\n          ourPrice: 149.99,\n          competitorPrice: 149.99,\n          priceDifference: 0,\n          ourRating: 4.4,\n          competitorRating: 4.3,\n        },\n      ];\n\n      setCompetitors(mockCompetitors);\n      setProductComparisons(mockProductComparisons);\n      setLoading(false);\n    }, 500);\n  };\n\n  const columns = [\n    {\n      title: '竞争对手',\n      dataIndex: 'name',\n      key: 'name',\n    },\n    {\n      title: '平台',\n      dataIndex: 'platform',\n      key: 'platform',\n    },\n    {\n      title: '产品数',\n      dataIndex: 'products',\n      key: 'products',\n    },\n    {\n      title: '市场份额',\n      dataIndex: 'marketShare',\n      key: 'marketShare',\n      render: (share: number | undefined) => share != null ? `${share}%` : '-',\n    },\n    {\n      title: '平均价格',\n      dataIndex: 'avgPrice',\n      key: 'avgPrice',\n      render: (price: number | undefined) => price != null ? `$${price.toFixed(2)}` : '-',\n    },\n    {\n      title: '平均评分',\n      dataIndex: 'avgRating',\n      key: 'avgRating',\n      render: (rating: number | undefined) => rating != null ? rating.toFixed(1) : '-',\n    },\n    {\n      title: '评论数',\n      dataIndex: 'reviewCount',\n      key: 'reviewCount',\n      render: (count: number | undefined) => count != null ? count.toLocaleString() : '-',\n    },\n    {\n      title: '社交媒体粉丝',\n      dataIndex: 'socialFollowers',\n      key: 'socialFollowers',\n      render: (followers: number | undefined) => followers != null ? followers.toLocaleString() : '-',\n    },\n  ];\n\n  const marketShareData = competitors.map(competitor => ({\n    name: competitor.name,\n    value: competitor.marketShare,\n  }));\n\n  const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042', '#8884d8'];\n\n  return (\n    <div className=\"competitors\">\n      <div className=\"page-header\">\n        <h1>竞争对手分析</h1>\n      </div>\n\n      <div className=\"filter-section\" style={{ marginBottom: 24, display: 'flex', gap: 16, flexWrap: 'wrap' }}>\n        <Search\n          placeholder=\"搜索竞争对手名称\"\n          style={{ width: 300 }}\n          onChange={(e) => setFilters({ ...filters, search: e.target.value })}\n        />\n        <Select\n          placeholder=\"类别\"\n          style={{ width: 120 }}\n          onChange={(value) => setFilters({ ...filters, category: value })}\n        >\n          <Option value=\"\">全部</Option>\n          <Option value=\"Electronics\">Electronics</Option>\n          <Option value=\"Clothing\">Clothing</Option>\n          <Option value=\"Home Goods\">Home Goods</Option>\n        </Select>\n        <RangePicker\n          style={{ width: 300 }}\n          onChange={(dates) => setFilters({ ...filters, dateRange: dates })}\n        />\n        <Button\n          icon={<SearchOutlined />}\n          onClick={fetchCompetitorData}\n        >\n          筛选\n        </Button>\n      </div>\n\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={12}>\n          <Card title=\"市场份额分析\">\n            <ResponsiveContainer width=\"100%\" height={400}>\n              <PieChart>\n                <Pie\n                  data={marketShareData}\n                  cx=\"50%\"\n                  cy=\"50%\"\n                  labelLine={false}\n                  label={({ name, percent }) => `${name}: ${((percent || 0) * 100).toFixed(0)}%`}\n                  outerRadius={150}\n                  fill=\"#8884d8\"\n                  dataKey=\"value\"\n                >\n                  {marketShareData.map((entry, index) => (\n                    <Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />\n                  ))}\n                </Pie>\n                <Tooltip />\n                <Legend />\n              </PieChart>\n            </ResponsiveContainer>\n          </Card>\n        </Col>\n        <Col span={12}>\n          <Card title=\"价格比较\">\n            <ResponsiveContainer width=\"100%\" height={400}>\n              <BarChart data={productComparisons}>\n                <CartesianGrid strokeDasharray=\"3 3\" />\n                <XAxis dataKey=\"product\" />\n                <YAxis />\n                <Tooltip />\n                <Legend />\n                <Bar dataKey=\"ourPrice\" fill=\"#8884d8\" name=\"我们的价格\" />\n                <Bar dataKey=\"competitorPrice\" fill=\"#82ca9d\" name=\"竞争对手价格\" />\n              </BarChart>\n            </ResponsiveContainer>\n          </Card>\n        </Col>\n      </Row>\n\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={12}>\n          <Card title=\"评分比较\">\n            <ResponsiveContainer width=\"100%\" height={400}>\n              <BarChart data={productComparisons}>\n                <CartesianGrid strokeDasharray=\"3 3\" />\n                <XAxis dataKey=\"product\" />\n                <YAxis />\n                <Tooltip />\n                <Legend />\n                <Bar dataKey=\"ourRating\" fill=\"#8884d8\" name=\"我们的评分\" />\n                <Bar dataKey=\"competitorRating\" fill=\"#82ca9d\" name=\"竞争对手评分\" />\n              </BarChart>\n            </ResponsiveContainer>\n          </Card>\n        </Col>\n        <Col span={12}>\n          <Card title=\"价格差异\">\n            <ResponsiveContainer width=\"100%\" height={400}>\n              <LineChart data={productComparisons}>\n                <CartesianGrid strokeDasharray=\"3 3\" />\n                <XAxis dataKey=\"product\" />\n                <YAxis />\n                <Tooltip />\n                <Legend />\n                <Line type=\"monotone\" dataKey=\"priceDifference\" stroke=\"#ff7300\" name=\"价格差异\" />\n              </LineChart>\n            </ResponsiveContainer>\n          </Card>\n        </Col>\n      </Row>\n\n      <Card title=\"竞争对手列表\">\n        <Table\n          columns={columns}\n          dataSource={competitors}\n          loading={loading}\n          rowKey=\"id\"\n          pagination={{\n            pageSize: 10,\n            showSizeChanger: true,\n          }}\n        />\n      </Card>\n    </div>\n  );\n};\n\nexport default Competitors;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Marketing/Competitors.tsx"
    },
    "37": {
      "path": "/dashboard/dynamic-pricing",
      "file": "@/pages/DynamicPricing/index.tsx",
      "parentId": "4",
      "id": "37",
      "absPath": "/dashboard/dynamic-pricing",
      "__content": "import {\n  useState,\n  useEffect,\n  useCallback,\n  Card,\n  Row,\n  Col,\n  Table,\n  Button,\n  Space,\n  Tag,\n  Statistic,\n  Progress,\n  Tabs,\n  Form,\n  InputNumber,\n  Select,\n  Switch,\n  Modal,\n  message,\n  Badge,\n  Tooltip,\n  Typography,\n  Divider,\n  List,\n  Avatar,\n  Alert,\n  Spin,\n  DollarOutlined,\n  RiseOutlined,\n  FallOutlined,\n  LineChartOutlined,\n  BellOutlined,\n  SettingOutlined,\n  SyncOutlined,\n  EyeOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  WarningOutlined,\n  TrophyOutlined,\n  AimOutlined,\n  Title,\n  Text,\n  Paragraph,\n  Option,\n  FC,\n} from '@/imports';\nimport moment from 'moment';\n\ninterface PricingConfig {\n  id: string;\n  product_id: string;\n  product_name: string;\n  base_price: number;\n  min_price: number;\n  max_price: number;\n  cost_price: number;\n  strategy: 'GAME_THEORY' | 'COMPETITION' | 'DEMAND_BASED' | 'COST_PLUS' | 'DYNAMIC';\n  auto_adjust: boolean;\n  adjust_frequency: 'HOURLY' | 'DAILY' | 'WEEKLY';\n  max_adjust_percent: number;\n  min_profit_margin: number;\n  enabled: boolean;\n}\n\ninterface PricingDecision {\n  id: string;\n  product_id: string;\n  product_name: string;\n  current_price: number;\n  suggested_price: number;\n  price_change: number;\n  change_percent: number;\n  adjustment_direction: 'INCREASE' | 'DECREASE' | 'MAINTAIN';\n  strategy_used: string;\n  predicted_impact: {\n    revenue_change: number;\n    profit_change: number;\n    sales_change: number;\n    confidence: number;\n  };\n  status: 'PENDING' | 'EXECUTED' | 'REJECTED' | 'EXPIRED';\n  created_at: string;\n}\n\ninterface CompetitorPrice {\n  id: string;\n  competitor_name: string;\n  platform: string;\n  price: number;\n  shipping_cost: number;\n  total_price: number;\n  stock_status: 'IN_STOCK' | 'LOW_STOCK' | 'OUT_OF_STOCK';\n  rating: number;\n  review_count: number;\n  last_checked: string;\n}\n\ninterface PriceAlert {\n  id: string;\n  alert_type: 'PRICE_DROP' | 'PRICE_INCREASE' | 'OUT_OF_STOCK' | 'BACK_IN_STOCK' | 'NEW_COMPETITOR';\n  severity: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';\n  competitor_name: string;\n  change_description: string;\n  is_read: boolean;\n  created_at: string;\n}\n\ninterface MarketAnalysis {\n  price_range: {\n    min: number;\n    max: number;\n    avg: number;\n    median: number;\n  };\n  our_position: {\n    rank: number;\n    percentile: number;\n    price_gap_to_lowest: number;\n    price_gap_to_avg: number;\n  };\n  recommendations: {\n    optimal_price: number;\n    expected_position: number;\n    reasoning: string;\n  };\n}\n\nconst MOCK_CONFIGS: PricingConfig[] = [\n  {\n    id: 'PC-001',\n    product_id: 'P-001',\n    product_name: 'Wireless Bluetooth Earbuds Pro',\n    base_price: 49.99,\n    min_price: 39.99,\n    max_price: 69.99,\n    cost_price: 25.00,\n    strategy: 'COMPETITION',\n    auto_adjust: true,\n    adjust_frequency: 'DAILY',\n    max_adjust_percent: 10,\n    min_profit_margin: 20,\n    enabled: true,\n  },\n  {\n    id: 'PC-002',\n    product_id: 'P-002',\n    product_name: 'Smart Watch Series X',\n    base_price: 199.99,\n    min_price: 149.99,\n    max_price: 299.99,\n    cost_price: 95.00,\n    strategy: 'GAME_THEORY',\n    auto_adjust: true,\n    adjust_frequency: 'HOURLY',\n    max_adjust_percent: 15,\n    min_profit_margin: 25,\n    enabled: true,\n  },\n  {\n    id: 'PC-003',\n    product_id: 'P-003',\n    product_name: 'Portable Power Bank 20000mAh',\n    base_price: 29.99,\n    min_price: 24.99,\n    max_price: 39.99,\n    cost_price: 12.00,\n    strategy: 'DEMAND_BASED',\n    auto_adjust: false,\n    adjust_frequency: 'WEEKLY',\n    max_adjust_percent: 8,\n    min_profit_margin: 15,\n    enabled: true,\n  },\n];\n\nconst MOCK_DECISIONS: PricingDecision[] = [\n  {\n    id: 'PD-001',\n    product_id: 'P-001',\n    product_name: 'Wireless Bluetooth Earbuds Pro',\n    current_price: 49.99,\n    suggested_price: 47.49,\n    price_change: -2.50,\n    change_percent: -5.0,\n    adjustment_direction: 'DECREASE',\n    strategy_used: 'COMPETITION',\n    predicted_impact: {\n      revenue_change: 3.2,\n      profit_change: -1.5,\n      sales_change: 8.5,\n      confidence: 0.85,\n    },\n    status: 'PENDING',\n    created_at: '2026-03-19T10:30:00Z',\n  },\n  {\n    id: 'PD-002',\n    product_id: 'P-002',\n    product_name: 'Smart Watch Series X',\n    current_price: 199.99,\n    suggested_price: 219.99,\n    price_change: 20.00,\n    change_percent: 10.0,\n    adjustment_direction: 'INCREASE',\n    strategy_used: 'GAME_THEORY',\n    predicted_impact: {\n      revenue_change: 8.5,\n      profit_change: 12.3,\n      sales_change: -2.1,\n      confidence: 0.78,\n    },\n    status: 'PENDING',\n    created_at: '2026-03-19T11:00:00Z',\n  },\n];\n\nconst MOCK_COMPETITORS: CompetitorPrice[] = [\n  {\n    id: 'CP-001',\n    competitor_name: 'TechMart Official',\n    platform: 'Amazon',\n    price: 44.99,\n    shipping_cost: 0,\n    total_price: 44.99,\n    stock_status: 'IN_STOCK',\n    rating: 4.5,\n    review_count: 1250,\n    last_checked: '2026-03-19T09:00:00Z',\n  },\n  {\n    id: 'CP-002',\n    competitor_name: 'GadgetWorld',\n    platform: 'Amazon',\n    price: 46.99,\n    shipping_cost: 2.99,\n    total_price: 49.98,\n    stock_status: 'IN_STOCK',\n    rating: 4.3,\n    review_count: 856,\n    last_checked: '2026-03-19T09:00:00Z',\n  },\n  {\n    id: 'CP-003',\n    competitor_name: 'ElectroDeal',\n    platform: 'eBay',\n    price: 42.50,\n    shipping_cost: 4.99,\n    total_price: 47.49,\n    stock_status: 'LOW_STOCK',\n    rating: 4.1,\n    review_count: 423,\n    last_checked: '2026-03-19T08:30:00Z',\n  },\n  {\n    id: 'CP-004',\n    competitor_name: 'BestBuy Direct',\n    platform: 'Walmart',\n    price: 48.99,\n    shipping_cost: 0,\n    total_price: 48.99,\n    stock_status: 'IN_STOCK',\n    rating: 4.6,\n    review_count: 2100,\n    last_checked: '2026-03-19T09:15:00Z',\n  },\n];\n\nconst MOCK_ALERTS: PriceAlert[] = [\n  {\n    id: 'PA-001',\n    alert_type: 'PRICE_DROP',\n    severity: 'HIGH',\n    competitor_name: 'TechMart Official',\n    change_description: 'TechMart Official 价格下降 8.2%，从 $48.99 降至 $44.99',\n    is_read: false,\n    created_at: '2026-03-19T08:45:00Z',\n  },\n  {\n    id: 'PA-002',\n    alert_type: 'NEW_COMPETITOR',\n    severity: 'MEDIUM',\n    competitor_name: 'BudgetElectronics',\n    change_description: '发现新竞品: BudgetElectronics 在 Amazon 上架',\n    is_read: false,\n    created_at: '2026-03-19T07:30:00Z',\n  },\n  {\n    id: 'PA-003',\n    alert_type: 'OUT_OF_STOCK',\n    severity: 'LOW',\n    competitor_name: 'ElectroDeal',\n    change_description: 'ElectroDeal 库存紧张，仅剩少量库存',\n    is_read: true,\n    created_at: '2026-03-18T16:20:00Z',\n  },\n];\n\nconst MOCK_MARKET_ANALYSIS: MarketAnalysis = {\n  price_range: {\n    min: 42.50,\n    max: 54.99,\n    avg: 47.74,\n    median: 47.49,\n  },\n  our_position: {\n    rank: 3,\n    percentile: 60,\n    price_gap_to_lowest: 7.49,\n    price_gap_to_avg: 2.25,\n  },\n  recommendations: {\n    optimal_price: 45.35,\n    expected_position: 2,\n    reasoning: '建议定价低于市场均价5%，可在保持利润的同时获得价格竞争优势',\n  },\n};\n\nconst strategyOptions = [\n  { value: 'GAME_THEORY', label: '博弈定价', desc: '基于博弈论的最优定价策略' },\n  { value: 'COMPETITION', label: '竞争定价', desc: '根据竞争对手价格调整' },\n  { value: 'DEMAND_BASED', label: '需求定价', desc: '基于需求弹性动态定价' },\n  { value: 'COST_PLUS', label: '成本加成', desc: '成本基础上加固定利润率' },\n  { value: 'DYNAMIC', label: '动态定价', desc: '综合多因素的智能定价' },\n];\n\nconst DynamicPricing: FC = () => {\n  const [loading, setLoading] = useState(false);\n  const [activeTab, setActiveTab] = useState('overview');\n  const [configs, setConfigs] = useState<PricingConfig[]>(MOCK_CONFIGS);\n  const [decisions, setDecisions] = useState<PricingDecision[]>(MOCK_DECISIONS);\n  const [competitors, setCompetitors] = useState<CompetitorPrice[]>(MOCK_COMPETITORS);\n  const [alerts, setAlerts] = useState<PriceAlert[]>(MOCK_ALERTS);\n  const [marketAnalysis] = useState<MarketAnalysis>(MOCK_MARKET_ANALYSIS);\n  const [selectedProduct, setSelectedProduct] = useState<string | null>(null);\n  const [configModalVisible, setConfigModalVisible] = useState(false);\n  const [decisionModalVisible, setDecisionModalVisible] = useState(false);\n  const [selectedDecision, setSelectedDecision] = useState<PricingDecision | null>(null);\n  const [form] = Form.useForm();\n\n  const fetchData = useCallback(async () => {\n    setLoading(true);\n    try {\n      await new Promise(resolve => setTimeout(resolve, 500));\n    } catch (error) {\n      message.error('加载数据失败');\n    } finally {\n      setLoading(false);\n    }\n  }, []);\n\n  useEffect(() => {\n    fetchData();\n  }, [fetchData]);\n\n  const handleExecuteDecision = (decisionId: string) => {\n    Modal.confirm({\n      title: '确认执行定价决策',\n      content: '执行后将自动调整商品价格，是否继续？',\n      onOk: () => {\n        setDecisions(prev =>\n          prev.map(d =>\n            d.id === decisionId ? { ...d, status: 'EXECUTED' } : d\n          )\n        );\n        message.success('定价决策已执行');\n      },\n    });\n  };\n\n  const handleRejectDecision = (decisionId: string) => {\n    setDecisions(prev =>\n      prev.map(d =>\n        d.id === decisionId ? { ...d, status: 'REJECTED' } : d\n      )\n    );\n    message.info('定价决策已拒绝');\n  };\n\n  const handleMarkAlertRead = (alertId: string) => {\n    setAlerts(prev =>\n      prev.map(a =>\n        a.id === alertId ? { ...a, is_read: true } : a\n      )\n    );\n  };\n\n  const handleSaveConfig = () => {\n    form.validateFields().then(values => {\n      message.success('定价配置已保存');\n      setConfigModalVisible(false);\n    });\n  };\n\n  const renderOverview = () => (\n    <div>\n      <Row gutter={[16, 16]}>\n        <Col xs={24} sm={12} lg={6}>\n          <Card>\n            <Statistic\n              title=\"监控商品数\"\n              value={configs.length}\n              prefix={<EyeOutlined />}\n              valueStyle={{ color: '#1890ff' }}\n            />\n            <div style={{ marginTop: 8 }}>\n              <Text type=\"secondary\">已启用自动调价: {configs.filter(c => c.auto_adjust).length}</Text>\n            </div>\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} lg={6}>\n          <Card>\n            <Statistic\n              title=\"待审核决策\"\n              value={decisions.filter(d => d.status === 'PENDING').length}\n              prefix={<AimOutlined />}\n              valueStyle={{ color: '#faad14' }}\n            />\n            <div style={{ marginTop: 8 }}>\n              <Progress\n                percent={75}\n                size=\"small\"\n                format={() => '今日完成率'}\n              />\n            </div>\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} lg={6}>\n          <Card>\n            <Statistic\n              title=\"竞品监控\"\n              value={competitors.length}\n              prefix={<LineChartOutlined />}\n              valueStyle={{ color: '#52c41a' }}\n            />\n            <div style={{ marginTop: 8 }}>\n              <Text type=\"secondary\">覆盖 {new Set(competitors.map(c => c.platform)).size} 个平台</Text>\n            </div>\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} lg={6}>\n          <Card>\n            <Statistic\n              title=\"未读预警\"\n              value={alerts.filter(a => !a.is_read).length}\n              prefix={<BellOutlined />}\n              valueStyle={{ color: alerts.filter(a => !a.is_read).length > 0 ? '#ff4d4f' : '#52c41a' }}\n            />\n            <div style={{ marginTop: 8 }}>\n              <Badge status={alerts.filter(a => !a.is_read).length > 0 ? 'error' : 'success'} text=\"预警状态\" />\n            </div>\n          </Card>\n        </Col>\n      </Row>\n\n      <Card\n        title=\"待审核定价决策\"\n        style={{ marginTop: 16 }}\n        extra={\n          <Space>\n            <Button icon={<SyncOutlined />} onClick={fetchData}>\n              刷新\n            </Button>\n          </Space>\n        }\n      >\n        <Table\n          dataSource={decisions.filter(d => d.status === 'PENDING')}\n          rowKey=\"id\"\n          pagination={false}\n          columns={[\n            {\n              title: '商品名称',\n              dataIndex: 'product_name',\n              key: 'product_name',\n              width: 200,\n            },\n            {\n              title: '当前价格',\n              dataIndex: 'current_price',\n              key: 'current_price',\n              width: 100,\n              render: (v: number) => `$${v.toFixed(2)}`,\n            },\n            {\n              title: '建议价格',\n              dataIndex: 'suggested_price',\n              key: 'suggested_price',\n              width: 100,\n              render: (v: number, record: PricingDecision) => (\n                <Text type={record.adjustment_direction === 'INCREASE' ? 'success' : record.adjustment_direction === 'DECREASE' ? 'danger' : undefined}>\n                  ${v.toFixed(2)}\n                </Text>\n              ),\n            },\n            {\n              title: '变化',\n              dataIndex: 'change_percent',\n              key: 'change_percent',\n              width: 100,\n              render: (v: number, record: PricingDecision) => (\n                <Tag color={record.adjustment_direction === 'INCREASE' ? 'green' : record.adjustment_direction === 'DECREASE' ? 'red' : 'default'}>\n                  {record.adjustment_direction === 'INCREASE' ? <RiseOutlined /> : <FallOutlined />} {v.toFixed(1)}%\n                </Tag>\n              ),\n            },\n            {\n              title: '策略',\n              dataIndex: 'strategy_used',\n              key: 'strategy_used',\n              width: 120,\n              render: (v: string) => {\n                const strategy = strategyOptions.find(s => s.value === v);\n                return <Tag>{strategy?.label || v}</Tag>;\n              },\n            },\n            {\n              title: '预测影响',\n              key: 'impact',\n              width: 200,\n              render: (_: any, record: PricingDecision) => (\n                <Space direction=\"vertical\" size=\"small\">\n                  <Text type=\"secondary\" style={{ fontSize: 12 }}>\n                    收益: <Text type={record.predicted_impact.revenue_change > 0 ? 'success' : 'danger'}>+{record.predicted_impact.revenue_change}%</Text>\n                  </Text>\n                  <Text type=\"secondary\" style={{ fontSize: 12 }}>\n                    利润: <Text type={record.predicted_impact.profit_change > 0 ? 'success' : 'danger'}>{record.predicted_impact.profit_change > 0 ? '+' : ''}{record.predicted_impact.profit_change}%</Text>\n                  </Text>\n                </Space>\n              ),\n            },\n            {\n              title: '置信度',\n              dataIndex: ['predicted_impact', 'confidence'],\n              key: 'confidence',\n              width: 100,\n              render: (v: number) => (\n                <Progress\n                  percent={v * 100}\n                  size=\"small\"\n                  format={percent => `${percent?.toFixed(0)}%`}\n                  strokeColor={v >= 0.8 ? '#52c41a' : v >= 0.6 ? '#faad14' : '#ff4d4f'}\n                />\n              ),\n            },\n            {\n              title: '创建时间',\n              dataIndex: 'created_at',\n              key: 'created_at',\n              width: 150,\n              render: (v: string) => moment(v).format('MM-DD HH:mm'),\n            },\n            {\n              title: '操作',\n              key: 'action',\n              width: 180,\n              fixed: 'right',\n              render: (_: any, record: PricingDecision) => (\n                <Space>\n                  <Button\n                    type=\"primary\"\n                    size=\"small\"\n                    icon={<CheckCircleOutlined />}\n                    onClick={() => handleExecuteDecision(record.id)}\n                  >\n                    执行\n                  </Button>\n                  <Button\n                    size=\"small\"\n                    icon={<CloseCircleOutlined />}\n                    onClick={() => handleRejectDecision(record.id)}\n                  >\n                    拒绝\n                  </Button>\n                </Space>\n              ),\n            },\n          ]}\n        />\n      </Card>\n\n      <Row gutter={16} style={{ marginTop: 16 }}>\n        <Col xs={24} lg={12}>\n          <Card title=\"市场分析\" extra={<Tag color=\"blue\">实时</Tag>}>\n            <Row gutter={16}>\n              <Col span={12}>\n                <Statistic\n                  title=\"市场最低价\"\n                  value={marketAnalysis.price_range.min}\n                  prefix=\"$\"\n                  precision={2}\n                />\n              </Col>\n              <Col span={12}>\n                <Statistic\n                  title=\"市场均价\"\n                  value={marketAnalysis.price_range.avg}\n                  prefix=\"$\"\n                  precision={2}\n                />\n              </Col>\n            </Row>\n            <Divider />\n            <Row gutter={16}>\n              <Col span={12}>\n                <Statistic\n                  title=\"我们的排名\"\n                  value={marketAnalysis.our_position.rank}\n                  suffix={`/ ${competitors.length + 1}`}\n                  prefix={<TrophyOutlined />}\n                />\n              </Col>\n              <Col span={12}>\n                <Statistic\n                  title=\"价格百分位\"\n                  value={marketAnalysis.our_position.percentile}\n                  suffix=\"%\"\n                />\n              </Col>\n            </Row>\n            <Divider />\n            <Alert\n              message=\"AI定价建议\"\n              description={\n                <div>\n                  <Paragraph>\n                    <Text strong>建议价格: </Text>\n                    <Text type=\"success\">${marketAnalysis.recommendations.optimal_price.toFixed(2)}</Text>\n                  </Paragraph>\n                  <Paragraph>\n                    <Text type=\"secondary\">{marketAnalysis.recommendations.reasoning}</Text>\n                  </Paragraph>\n                </div>\n              }\n              type=\"info\"\n              showIcon\n              icon={<DollarOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col xs={24} lg={12}>\n          <Card\n            title=\"价格预警\"\n            extra={\n              <Badge count={alerts.filter(a => !a.is_read).length}>\n                <BellOutlined />\n              </Badge>\n            }\n          >\n            <List\n              dataSource={alerts.slice(0, 5)}\n              renderItem={item => (\n                <List.Item\n                  actions={[\n                    !item.is_read && (\n                      <Button type=\"link\" size=\"small\" onClick={() => handleMarkAlertRead(item.id)}>\n                        标记已读\n                      </Button>\n                    ),\n                  ]}\n                >\n                  <List.Item.Meta\n                    avatar={\n                      <Avatar\n                        style={{\n                          backgroundColor:\n                            item.severity === 'CRITICAL'\n                              ? '#ff4d4f'\n                              : item.severity === 'HIGH'\n                              ? '#faad14'\n                              : item.severity === 'MEDIUM'\n                              ? '#1890ff'\n                              : '#52c41a',\n                        }}\n                        icon={\n                          item.alert_type === 'PRICE_DROP' ? (\n                            <FallOutlined />\n                          ) : item.alert_type === 'PRICE_INCREASE' ? (\n                            <RiseOutlined />\n                          ) : (\n                            <WarningOutlined />\n                          )\n                        }\n                      />\n                    }\n                    title={\n                      <Space>\n                        <Text strong={!item.is_read}>{item.competitor_name}</Text>\n                        <Tag color={item.severity === 'CRITICAL' ? 'red' : item.severity === 'HIGH' ? 'orange' : 'blue'}>\n                          {item.severity}\n                        </Tag>\n                      </Space>\n                    }\n                    description={item.change_description}\n                  />\n                </List.Item>\n              )}\n            />\n          </Card>\n        </Col>\n      </Row>\n    </div>\n  );\n\n  const renderCompetitors = () => (\n    <Card\n      title=\"竞品价格监控\"\n      extra={\n        <Space>\n          <Select defaultValue=\"all\" style={{ width: 120 }}>\n            <Option value=\"all\">全部平台</Option>\n            <Option value=\"Amazon\">Amazon</Option>\n            <Option value=\"eBay\">eBay</Option>\n            <Option value=\"Walmart\">Walmart</Option>\n          </Select>\n          <Button type=\"primary\" icon={<SyncOutlined />}>\n            同步数据\n          </Button>\n        </Space>\n      }\n    >\n      <Table\n        dataSource={competitors}\n        rowKey=\"id\"\n        columns={[\n          {\n            title: '竞品名称',\n            dataIndex: 'competitor_name',\n            key: 'competitor_name',\n            render: (v: string) => <Text strong>{v}</Text>,\n          },\n          {\n            title: '平台',\n            dataIndex: 'platform',\n            key: 'platform',\n            render: (v: string) => <Tag>{v}</Tag>,\n          },\n          {\n            title: '商品价格',\n            dataIndex: 'price',\n            key: 'price',\n            render: (v: number) => `$${v.toFixed(2)}`,\n          },\n          {\n            title: '运费',\n            dataIndex: 'shipping_cost',\n            key: 'shipping_cost',\n            render: (v: number) => (v > 0 ? `$${v.toFixed(2)}` : <Tag color=\"green\">免运费</Tag>),\n          },\n          {\n            title: '总价',\n            dataIndex: 'total_price',\n            key: 'total_price',\n            render: (v: number, record: CompetitorPrice) => {\n              const ourPrice = 49.99;\n              const diff = v - ourPrice;\n              return (\n                <Space>\n                  <Text strong>${v.toFixed(2)}</Text>\n                  {diff !== 0 && (\n                    <Tag color={diff > 0 ? 'green' : 'red'}>\n                      {diff > 0 ? '+' : ''}{diff.toFixed(2)}\n                    </Tag>\n                  )}\n                </Space>\n              );\n            },\n          },\n          {\n            title: '库存状态',\n            dataIndex: 'stock_status',\n            key: 'stock_status',\n            render: (v: string) => {\n              const colors: Record<string, string> = {\n                IN_STOCK: 'green',\n                LOW_STOCK: 'orange',\n                OUT_OF_STOCK: 'red',\n              };\n              const labels: Record<string, string> = {\n                IN_STOCK: '有货',\n                LOW_STOCK: '库存紧张',\n                OUT_OF_STOCK: '缺货',\n              };\n              return <Tag color={colors[v]}>{labels[v]}</Tag>;\n            },\n          },\n          {\n            title: '评分',\n            dataIndex: 'rating',\n            key: 'rating',\n            render: (v: number, record: CompetitorPrice) => (\n              <Space>\n                <Text>{v.toFixed(1)}</Text>\n                <Text type=\"secondary\">({record.review_count})</Text>\n              </Space>\n            ),\n          },\n          {\n            title: '最后检查',\n            dataIndex: 'last_checked',\n            key: 'last_checked',\n            render: (v: string) => moment(v).fromNow(),\n          },\n        ]}\n      />\n    </Card>\n  );\n\n  const renderConfigs = () => (\n    <Card\n      title=\"定价策略配置\"\n      extra={\n        <Button type=\"primary\" icon={<SettingOutlined />} onClick={() => setConfigModalVisible(true)}>\n          新增配置\n        </Button>\n      }\n    >\n      <Table\n        dataSource={configs}\n        rowKey=\"id\"\n        columns={[\n          {\n            title: '商品名称',\n            dataIndex: 'product_name',\n            key: 'product_name',\n          },\n          {\n            title: '基础价格',\n            dataIndex: 'base_price',\n            key: 'base_price',\n            render: (v: number) => `$${v.toFixed(2)}`,\n          },\n          {\n            title: '价格区间',\n            key: 'price_range',\n            render: (_: any, record: PricingConfig) => (\n              <Text>\n                ${record.min_price.toFixed(2)} - ${record.max_price.toFixed(2)}\n              </Text>\n            ),\n          },\n          {\n            title: '成本价',\n            dataIndex: 'cost_price',\n            key: 'cost_price',\n            render: (v: number) => `$${v.toFixed(2)}`,\n          },\n          {\n            title: '定价策略',\n            dataIndex: 'strategy',\n            key: 'strategy',\n            render: (v: string) => {\n              const strategy = strategyOptions.find(s => s.value === v);\n              return (\n                <Tooltip title={strategy?.desc}>\n                  <Tag color=\"blue\">{strategy?.label || v}</Tag>\n                </Tooltip>\n              );\n            },\n          },\n          {\n            title: '自动调价',\n            dataIndex: 'auto_adjust',\n            key: 'auto_adjust',\n            render: (v: boolean, record: PricingConfig) => (\n              <Switch\n                checked={v}\n                onChange={checked => {\n                  setConfigs(prev =>\n                    prev.map(c =>\n                      c.id === record.id ? { ...c, auto_adjust: checked } : c\n                    )\n                  );\n                }}\n              />\n            ),\n          },\n          {\n            title: '调价频率',\n            dataIndex: 'adjust_frequency',\n            key: 'adjust_frequency',\n            render: (v: string) => {\n              const labels: Record<string, string> = {\n                HOURLY: '每小时',\n                DAILY: '每天',\n                WEEKLY: '每周',\n              };\n              return labels[v] || v;\n            },\n          },\n          {\n            title: '最低利润率',\n            dataIndex: 'min_profit_margin',\n            key: 'min_profit_margin',\n            render: (v: number) => <Tag color=\"orange\">{v}%</Tag>,\n          },\n          {\n            title: '状态',\n            dataIndex: 'enabled',\n            key: 'enabled',\n            render: (v: boolean) => (\n              <Tag color={v ? 'green' : 'default'}>{v ? '启用' : '禁用'}</Tag>\n            ),\n          },\n          {\n            title: '操作',\n            key: 'action',\n            render: (_: any, record: PricingConfig) => (\n              <Space>\n                <Button\n                  type=\"link\"\n                  size=\"small\"\n                  onClick={() => {\n                    setSelectedProduct(record.product_id);\n                    form.setFieldsValue(record);\n                    setConfigModalVisible(true);\n                  }}\n                >\n                  编辑\n                </Button>\n                <Button type=\"link\" size=\"small\" onClick={() => message.info('生成定价建议')}>\n                  生成建议\n                </Button>\n              </Space>\n            ),\n          },\n        ]}\n      />\n    </Card>\n  );\n\n  const renderHistory = () => (\n    <Card title=\"定价历史记录\">\n      <Table\n        dataSource={decisions}\n        rowKey=\"id\"\n        columns={[\n          {\n            title: '商品名称',\n            dataIndex: 'product_name',\n            key: 'product_name',\n          },\n          {\n            title: '原价格',\n            dataIndex: 'current_price',\n            key: 'current_price',\n            render: (v: number) => `$${v.toFixed(2)}`,\n          },\n          {\n            title: '调整后价格',\n            dataIndex: 'suggested_price',\n            key: 'suggested_price',\n            render: (v: number) => `$${v.toFixed(2)}`,\n          },\n          {\n            title: '变化幅度',\n            dataIndex: 'change_percent',\n            key: 'change_percent',\n            render: (v: number, record: PricingDecision) => (\n              <Tag color={record.adjustment_direction === 'INCREASE' ? 'green' : 'red'}>\n                {v > 0 ? '+' : ''}{v.toFixed(1)}%\n              </Tag>\n            ),\n          },\n          {\n            title: '策略',\n            dataIndex: 'strategy_used',\n            key: 'strategy_used',\n            render: (v: string) => {\n              const strategy = strategyOptions.find(s => s.value === v);\n              return <Tag>{strategy?.label || v}</Tag>;\n            },\n          },\n          {\n            title: '状态',\n            dataIndex: 'status',\n            key: 'status',\n            render: (v: string) => {\n              const colors: Record<string, string> = {\n                PENDING: 'blue',\n                EXECUTED: 'green',\n                REJECTED: 'red',\n                EXPIRED: 'default',\n              };\n              const labels: Record<string, string> = {\n                PENDING: '待审核',\n                EXECUTED: '已执行',\n                REJECTED: '已拒绝',\n                EXPIRED: '已过期',\n              };\n              return <Tag color={colors[v]}>{labels[v]}</Tag>;\n            },\n          },\n          {\n            title: '创建时间',\n            dataIndex: 'created_at',\n            key: 'created_at',\n            render: (v: string) => moment(v).format('YYYY-MM-DD HH:mm'),\n          },\n          {\n            title: '操作',\n            key: 'action',\n            render: (_: any, record: PricingDecision) => (\n              <Button\n                type=\"link\"\n                size=\"small\"\n                onClick={() => {\n                  setSelectedDecision(record);\n                  setDecisionModalVisible(true);\n                }}\n              >\n                详情\n              </Button>\n            ),\n          },\n        ]}\n      />\n    </Card>\n  );\n\n  return (\n    <div style={{ padding: 24 }}>\n      <Row justify=\"space-between\" align=\"middle\" style={{ marginBottom: 16 }}>\n        <Col>\n          <Title level={2}>AI动态定价系统</Title>\n          <Text type=\"secondary\">智能定价决策、竞品监控与市场分析</Text>\n        </Col>\n        <Col>\n          <Space>\n            <Button icon={<SyncOutlined />} onClick={fetchData}>\n              刷新数据\n            </Button>\n            <Button type=\"primary\" icon={<SettingOutlined />}>\n              全局设置\n            </Button>\n          </Space>\n        </Col>\n      </Row>\n\n      <Spin spinning={loading}>\n        <Tabs \n          activeKey={activeTab} \n          onChange={setActiveTab} \n          size=\"large\"\n          items={[\n            { key: 'overview', label: <span><DollarOutlined /> 总览</span>, children: renderOverview() },\n            { key: 'competitors', label: <span><LineChartOutlined /> 竞品监控</span>, children: renderCompetitors() },\n            { key: 'configs', label: <span><SettingOutlined /> 策略配置</span>, children: renderConfigs() },\n            { key: 'alerts', label: <span><BellOutlined /> 价格预警 <Badge count={alerts.filter(a => !a.is_read).length} style={{ marginLeft: 8 }} /></span>, children: (\n              <Card>\n                <List\n                  dataSource={alerts}\n                  renderItem={item => (\n                    <List.Item\n                      actions={[\n                        !item.is_read && (\n                          <Button type=\"primary\" size=\"small\" onClick={() => handleMarkAlertRead(item.id)}>\n                            标记已读\n                          </Button>\n                        ),\n                        <Button size=\"small\">查看详情</Button>,\n                      ]}\n                    >\n                      <List.Item.Meta\n                        avatar={\n                          <Avatar\n                            style={{\n                              backgroundColor:\n                                item.severity === 'CRITICAL'\n                                  ? '#ff4d4f'\n                                  : item.severity === 'HIGH'\n                                  ? '#faad14'\n                                  : item.severity === 'MEDIUM'\n                                  ? '#1890ff'\n                                  : '#52c41a',\n                            }}\n                            icon={\n                              item.alert_type === 'PRICE_DROP' ? (\n                                <FallOutlined />\n                              ) : item.alert_type === 'PRICE_INCREASE' ? (\n                                <RiseOutlined />\n                              ) : (\n                                <WarningOutlined />\n                              )\n                            }\n                          />\n                        }\n                        title={\n                          <Space>\n                            <Text strong={!item.is_read}>{item.competitor_name}</Text>\n                            <Tag color={item.severity === 'CRITICAL' ? 'red' : item.severity === 'HIGH' ? 'orange' : 'blue'}>\n                              {item.severity}\n                            </Tag>\n                            <Tag>\n                              {item.alert_type === 'PRICE_DROP'\n                                ? '降价'\n                                : item.alert_type === 'PRICE_INCREASE'\n                                ? '涨价'\n                                : item.alert_type === 'NEW_COMPETITOR'\n                                ? '新竞品'\n                                : '库存变化'}\n                            </Tag>\n                          </Space>\n                        }\n                        description={\n                          <Space direction=\"vertical\">\n                            <Text>{item.change_description}</Text>\n                            <Text type=\"secondary\">{moment(item.created_at).format('YYYY-MM-DD HH:mm:ss')}</Text>\n                          </Space>\n                        }\n                      />\n                    </List.Item>\n                  )}\n                />\n              </Card>\n            )},\n            { key: 'history', label: <span><LineChartOutlined /> 历史记录</span>, children: renderHistory() },\n          ]}\n        />\n      </Spin>\n\n      <Modal\n        title=\"定价策略配置\"\n        open={configModalVisible}\n        onOk={handleSaveConfig}\n        onCancel={() => setConfigModalVisible(false)}\n        width={600}\n      >\n        <Form form={form} layout=\"vertical\">\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item name=\"base_price\" label=\"基础价格\" rules={[{ required: true }]}>\n                <InputNumber\n                  prefix=\"$\"\n                  precision={2}\n                  style={{ width: '100%' }}\n                  min={0}\n                />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item name=\"cost_price\" label=\"成本价格\" rules={[{ required: true }]}>\n                <InputNumber\n                  prefix=\"$\"\n                  precision={2}\n                  style={{ width: '100%' }}\n                  min={0}\n                />\n              </Form.Item>\n            </Col>\n          </Row>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item name=\"min_price\" label=\"最低价格\" rules={[{ required: true }]}>\n                <InputNumber\n                  prefix=\"$\"\n                  precision={2}\n                  style={{ width: '100%' }}\n                  min={0}\n                />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item name=\"max_price\" label=\"最高价格\" rules={[{ required: true }]}>\n                <InputNumber\n                  prefix=\"$\"\n                  precision={2}\n                  style={{ width: '100%' }}\n                  min={0}\n                />\n              </Form.Item>\n            </Col>\n          </Row>\n          <Form.Item name=\"strategy\" label=\"定价策略\" rules={[{ required: true }]}>\n            <Select>\n              {strategyOptions.map(opt => (\n                <Option key={opt.value} value={opt.value}>\n                  <Tooltip title={opt.desc}>{opt.label}</Tooltip>\n                </Option>\n              ))}\n            </Select>\n          </Form.Item>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item name=\"auto_adjust\" label=\"自动调价\" valuePropName=\"checked\">\n                <Switch />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item name=\"adjust_frequency\" label=\"调价频率\">\n                <Select>\n                  <Option value=\"HOURLY\">每小时</Option>\n                  <Option value=\"DAILY\">每天</Option>\n                  <Option value=\"WEEKLY\">每周</Option>\n                </Select>\n              </Form.Item>\n            </Col>\n          </Row>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item name=\"max_adjust_percent\" label=\"最大调整比例 (%)\">\n                <InputNumber min={1} max={50} style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item name=\"min_profit_margin\" label=\"最低利润率 (%)\">\n                <InputNumber min={5} max={100} style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n          </Row>\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"定价决策详情\"\n        open={decisionModalVisible}\n        onCancel={() => setDecisionModalVisible(false)}\n        footer={[\n          <Button key=\"close\" onClick={() => setDecisionModalVisible(false)}>\n            关闭\n          </Button>,\n        ]}\n        width={600}\n      >\n        {selectedDecision && (\n          <div>\n            <Row gutter={[16, 16]}>\n              <Col span={12}>\n                <Statistic\n                  title=\"当前价格\"\n                  value={selectedDecision.current_price}\n                  prefix=\"$\"\n                  precision={2}\n                />\n              </Col>\n              <Col span={12}>\n                <Statistic\n                  title=\"建议价格\"\n                  value={selectedDecision.suggested_price}\n                  prefix=\"$\"\n                  precision={2}\n                  valueStyle={{\n                    color:\n                      selectedDecision.adjustment_direction === 'INCREASE'\n                        ? '#52c41a'\n                        : selectedDecision.adjustment_direction === 'DECREASE'\n                        ? '#ff4d4f'\n                        : undefined,\n                  }}\n                />\n              </Col>\n            </Row>\n            <Divider />\n            <Title level={5}>预测影响</Title>\n            <Row gutter={[16, 16]}>\n              <Col span={8}>\n                <Statistic\n                  title=\"收益变化\"\n                  value={selectedDecision.predicted_impact.revenue_change}\n                  suffix=\"%\"\n                  valueStyle={{\n                    color:\n                      selectedDecision.predicted_impact.revenue_change > 0 ? '#52c41a' : '#ff4d4f',\n                  }}\n                />\n              </Col>\n              <Col span={8}>\n                <Statistic\n                  title=\"利润变化\"\n                  value={selectedDecision.predicted_impact.profit_change}\n                  suffix=\"%\"\n                  valueStyle={{\n                    color:\n                      selectedDecision.predicted_impact.profit_change > 0 ? '#52c41a' : '#ff4d4f',\n                  }}\n                />\n              </Col>\n              <Col span={8}>\n                <Statistic\n                  title=\"销量变化\"\n                  value={selectedDecision.predicted_impact.sales_change}\n                  suffix=\"%\"\n                  valueStyle={{\n                    color:\n                      selectedDecision.predicted_impact.sales_change > 0 ? '#52c41a' : '#ff4d4f',\n                  }}\n                />\n              </Col>\n            </Row>\n            <Divider />\n            <Title level={5}>决策信息</Title>\n            <Row gutter={[16, 8]}>\n              <Col span={12}>\n                <Text type=\"secondary\">策略: </Text>\n                <Tag>{strategyOptions.find(s => s.value === selectedDecision.strategy_used)?.label}</Tag>\n              </Col>\n              <Col span={12}>\n                <Text type=\"secondary\">置信度: </Text>\n                <Text>{(selectedDecision.predicted_impact.confidence * 100).toFixed(0)}%</Text>\n              </Col>\n              <Col span={12}>\n                <Text type=\"secondary\">创建时间: </Text>\n                <Text>{moment(selectedDecision.created_at).format('YYYY-MM-DD HH:mm:ss')}</Text>\n              </Col>\n              <Col span={12}>\n                <Text type=\"secondary\">状态: </Text>\n                <Tag color={selectedDecision.status === 'EXECUTED' ? 'green' : 'blue'}>\n                  {selectedDecision.status}\n                </Tag>\n              </Col>\n            </Row>\n          </div>\n        )}\n      </Modal>\n    </div>\n  );\n};\n\nexport default DynamicPricing;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/DynamicPricing/index.tsx"
    },
    "38": {
      "path": "/dashboard/ab-test",
      "file": "@/pages/ABTest/ABTestConfig.tsx",
      "parentId": "4",
      "id": "38",
      "absPath": "/dashboard/ab-test",
      "__content": "import {\r\n  useState,\r\n  Card,\r\n  Form,\r\n  Input,\r\n  Button,\r\n  Select,\r\n  Slider,\r\n  DatePicker,\r\n  Typography,\r\n  Alert,\r\n  Space,\r\n  Divider,\r\n  Steps,\r\n  Radio,\r\n  InputNumber,\r\n  Tag,\r\n  Tooltip,\r\n  ExperimentOutlined,\r\n  PlusOutlined,\r\n  DeleteOutlined,\r\n  InfoCircleOutlined,\r\n  SaveOutlined,\r\n  PlayCircleOutlined,\r\n  Title,\r\n  Text,\r\n  Paragraph,\r\n  Option,\r\n  Step,\r\n  RangePicker,\r\n  FC,\r\n} from '@/imports';\r\nimport type { Dayjs } from 'dayjs';\r\nimport { abTestDataSource, ABTestConfig as ABTestConfigData, TestVariant } from '@/services/abTestDataSource';\r\n\r\ninterface ABTestFormData {\r\n  name: string;\r\n  description: string;\r\n  type: string;\r\n  startDate?: Dayjs;\r\n  endDate?: Dayjs;\r\n  audience: {\r\n    segments: string[];\r\n    platforms: string[];\r\n    countries: string[];\r\n  };\r\n  successCriteria: {\r\n    metric: string;\r\n    threshold: number;\r\n    confidenceLevel: number;\r\n  };\r\n}\r\n\r\nconst ABTestConfigPage: FC = () => {\r\n  const [form] = Form.useForm();\r\n  const [currentStep, setCurrentStep] = useState(0);\r\n  const [loading, setLoading] = useState(false);\r\n  const [error, setError] = useState<string | null>(null);\r\n  const [variants, setVariants] = useState<TestVariant[]>([\r\n    { id: 'control', name: 'Control (A)', description: 'Current version', trafficAllocation: 50, configuration: {} },\r\n    { id: 'variant-1', name: 'Variant B', description: 'Test version', trafficAllocation: 50, configuration: {} },\r\n  ]);\r\n\r\n  const testTypes = [\r\n    { value: 'UI', label: 'UI/UX Test', description: 'Test different user interface designs' },\r\n    { value: 'PRICE', label: 'Pricing Test', description: 'Test different pricing strategies' },\r\n    { value: 'CONTENT', label: 'Content Test', description: 'Test different content variations' },\r\n    { value: 'FEATURE', label: 'Feature Test', description: 'Test new feature adoption' },\r\n  ];\r\n\r\n  const targetMetrics = [\r\n    { value: 'conversion_rate', label: 'Conversion Rate' },\r\n    { value: 'revenue_per_user', label: 'Revenue Per User' },\r\n    { value: 'click_through_rate', label: 'Click-Through Rate' },\r\n    { value: 'bounce_rate', label: 'Bounce Rate' },\r\n    { value: 'session_duration', label: 'Session Duration' },\r\n    { value: 'add_to_cart_rate', label: 'Add to Cart Rate' },\r\n  ];\r\n\r\n  const audienceSegments = [\r\n    'New Visitors',\r\n    'Returning Customers',\r\n    'High Value Customers',\r\n    'Mobile Users',\r\n    'Desktop Users',\r\n    'VIP Members',\r\n  ];\r\n\r\n  const platforms = ['Amazon', 'Temu', 'TikTok', 'Shopee', 'Lazada'];\r\n  const countries = ['US', 'CA', 'UK', 'DE', 'FR', 'JP', 'AU'];\r\n\r\n  const steps = [\r\n    { title: 'Basic Info', description: 'Test details' },\r\n    { title: 'Variants', description: 'Test variations' },\r\n    { title: 'Audience', description: 'Target users' },\r\n    { title: 'Review', description: 'Final check' },\r\n  ];\r\n\r\n  const addVariant = () => {\r\n    const newVariant: TestVariant = {\r\n      id: `variant-${variants.length}`,\r\n      name: `Variant ${String.fromCharCode(66 + variants.length - 1)}`,\r\n      description: '',\r\n      trafficAllocation: 0,\r\n      configuration: {},\r\n    };\r\n    setVariants([...variants, newVariant]);\r\n  };\r\n\r\n  const removeVariant = (index: number) => {\r\n    if (variants.length <= 2) {\r\n      setError('At least 2 variants are required');\r\n      return;\r\n    }\r\n    const newVariants = variants.filter((_, i) => i !== index);\r\n    // Redistribute traffic evenly\r\n    const equalAllocation = Math.floor(100 / newVariants.length);\r\n    newVariants.forEach((v, i) => {\r\n      v.trafficAllocation = i === newVariants.length - 1 \r\n        ? 100 - (equalAllocation * (newVariants.length - 1))\r\n        : equalAllocation;\r\n    });\r\n    setVariants(newVariants);\r\n  };\r\n\r\n  const updateVariantAllocation = (index: number, value: number) => {\r\n    const newVariants = [...variants];\r\n    const oldValue = newVariants[index].trafficAllocation;\r\n    const diff = value - oldValue;\r\n    \r\n    newVariants[index].trafficAllocation = value;\r\n    \r\n    // Distribute the difference to other variants\r\n    const otherIndices = newVariants.map((_, i) => i).filter(i => i !== index);\r\n    const diffPerVariant = Math.floor(diff / otherIndices.length);\r\n    \r\n    otherIndices.forEach(i => {\r\n      newVariants[i].trafficAllocation = Math.max(0, newVariants[i].trafficAllocation - diffPerVariant);\r\n    });\r\n    \r\n    // Ensure total is 100\r\n    const total = newVariants.reduce((sum, v) => sum + v.trafficAllocation, 0);\r\n    if (total !== 100) {\r\n      newVariants[otherIndices[0]].trafficAllocation += (100 - total);\r\n    }\r\n    \r\n    setVariants(newVariants);\r\n  };\r\n\r\n  const handleNext = async () => {\r\n    try {\r\n      if (currentStep === 0) {\r\n        await form.validateFields(['name', 'type', 'targetMetric']);\r\n      } else if (currentStep === 1) {\r\n        const totalAllocation = variants.reduce((sum, v) => sum + v.trafficAllocation, 0);\r\n        if (totalAllocation !== 100) {\r\n          setError(`Traffic allocation must total 100%. Current: ${totalAllocation}%`);\r\n          return;\r\n        }\r\n      }\r\n      setError(null);\r\n      setCurrentStep(currentStep + 1);\r\n    } catch (err) {\r\n      // Validation failed\r\n    }\r\n  };\r\n\r\n  const handlePrev = () => {\r\n    setCurrentStep(currentStep - 1);\r\n    setError(null);\r\n  };\r\n\r\n  const handleSave = async () => {\r\n    setLoading(true);\r\n    try {\r\n      const values = await form.validateFields();\r\n      const config: ABTestConfigData = {\r\n        ...values,\r\n        variants,\r\n      };\r\n      \r\n      // Simulate API call\r\n      await new Promise(resolve => setTimeout(resolve, 1500));\r\n      \r\n      // Success\r\n      setCurrentStep(4); // Success step\r\n    } catch (err) {\r\n      setError('Failed to save A/B test configuration');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const renderStepContent = () => {\r\n    switch (currentStep) {\r\n      case 0:\r\n        return (\r\n          <Space direction=\"vertical\" style={{ width: '100%' }} size=\"large\">\r\n            <Form.Item\r\n              name=\"name\"\r\n              label=\"Test Name\"\r\n              rules={[{ required: true, message: 'Please enter test name' }]}\r\n            >\r\n              <Input placeholder=\"e.g., Homepage Banner Test Q1 2024\" />\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name=\"description\"\r\n              label=\"Description\"\r\n              rules={[{ required: true, message: 'Please enter test description' }]}\r\n            >\r\n              <Input.TextArea \r\n                rows={3} \r\n                placeholder=\"Describe the purpose and hypothesis of this A/B test\"\r\n              />\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name=\"type\"\r\n              label=\"Test Type\"\r\n              rules={[{ required: true, message: 'Please select test type' }]}\r\n            >\r\n              <Select placeholder=\"Select test type\">\r\n                {testTypes.map(type => (\r\n                  <Option key={type.value} value={type.value}>\r\n                    <Space direction=\"vertical\" size={0}>\r\n                      <Text strong>{type.label}</Text>\r\n                      <Text type=\"secondary\" style={{ fontSize: 12 }}>{type.description}</Text>\r\n                    </Space>\r\n                  </Option>\r\n                ))}\r\n              </Select>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name=\"targetMetric\"\r\n              label=\"Primary Metric\"\r\n              rules={[{ required: true, message: 'Please select target metric' }]}\r\n            >\r\n              <Select placeholder=\"Select primary success metric\">\r\n                {targetMetrics.map(metric => (\r\n                  <Option key={metric.value} value={metric.value}>\r\n                    {metric.label}\r\n                  </Option>\r\n                ))}\r\n              </Select>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name=\"duration\"\r\n              label=\"Test Duration (days)\"\r\n              rules={[{ required: true, message: 'Please enter test duration' }]}\r\n            >\r\n              <InputNumber min={7} max={90} style={{ width: 200 }} />\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name=\"dateRange\"\r\n              label=\"Schedule\"\r\n            >\r\n              <RangePicker style={{ width: '100%' }} />\r\n            </Form.Item>\r\n          </Space>\r\n        );\r\n\r\n      case 1:\r\n        return (\r\n          <Space direction=\"vertical\" style={{ width: '100%' }} size=\"large\">\r\n            <Alert\r\n              message=\"Traffic Allocation\"\r\n              description=\"Distribute traffic percentage across variants. Total must equal 100%.\"\r\n              type=\"info\"\r\n              showIcon\r\n            />\r\n\r\n            {variants.map((variant, index) => (\r\n              <Card \r\n                key={variant.id}\r\n                size=\"small\"\r\n                title={\r\n                  <Space>\r\n                    <Tag color={index === 0 ? 'blue' : 'green'}>\r\n                      {variant.name}\r\n                    </Tag>\r\n                    {index === 0 && <Tag color=\"default\">Control</Tag>}\r\n                  </Space>\r\n                }\r\n                extra={\r\n                  index > 0 && (\r\n                    <Button\r\n                      type=\"text\"\r\n                      danger\r\n                      icon={<DeleteOutlined />}\r\n                      onClick={() => removeVariant(index)}\r\n                    />\r\n                  )\r\n                }\r\n              >\r\n                <Space direction=\"vertical\" style={{ width: '100%' }}>\r\n                  <Form.Item label=\"Description\" style={{ marginBottom: 8 }}>\r\n                    <Input\r\n                      value={variant.description}\r\n                      onChange={e => {\r\n                        const newVariants = [...variants];\r\n                        newVariants[index].description = e.target.value;\r\n                        setVariants(newVariants);\r\n                      }}\r\n                      placeholder=\"Describe this variant\"\r\n                    />\r\n                  </Form.Item>\r\n\r\n                  <Form.Item label=\"Traffic Allocation\" style={{ marginBottom: 8 }}>\r\n                    <Slider\r\n                      min={0}\r\n                      max={100}\r\n                      value={variant.trafficAllocation}\r\n                      onChange={value => updateVariantAllocation(index, value)}\r\n                      marks={{ 0: '0%', 50: '50%', 100: '100%' }}\r\n                    />\r\n                    <Text>{variant.trafficAllocation}%</Text>\r\n                  </Form.Item>\r\n                </Space>\r\n              </Card>\r\n            ))}\r\n\r\n            <Button\r\n              type=\"dashed\"\r\n              onClick={addVariant}\r\n              block\r\n              icon={<PlusOutlined />}\r\n            >\r\n              Add Variant\r\n            </Button>\r\n\r\n            <div style={{ textAlign: 'center' }}>\r\n              <Text type=\"secondary\">\r\n                Total Allocation: {' '}\r\n                <Text \r\n                  type={variants.reduce((sum, v) => sum + v.trafficAllocation, 0) === 100 ? 'success' : 'danger'}\r\n                  strong\r\n                >\r\n                  {variants.reduce((sum, v) => sum + v.trafficAllocation, 0)}%\r\n                </Text>\r\n              </Text>\r\n            </div>\r\n          </Space>\r\n        );\r\n\r\n      case 2:\r\n        return (\r\n          <Space direction=\"vertical\" style={{ width: '100%' }} size=\"large\">\r\n            <Form.Item\r\n              name={['audience', 'segments']}\r\n              label=\"Audience Segments\"\r\n            >\r\n              <Select mode=\"multiple\" placeholder=\"Select audience segments\">\r\n                {audienceSegments.map(segment => (\r\n                  <Option key={segment} value={segment}>{segment}</Option>\r\n                ))}\r\n              </Select>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name={['audience', 'platforms']}\r\n              label=\"Target Platforms\"\r\n            >\r\n              <Select mode=\"multiple\" placeholder=\"Select platforms\">\r\n                {platforms.map(platform => (\r\n                  <Option key={platform} value={platform}>{platform}</Option>\r\n                ))}\r\n              </Select>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name={['audience', 'countries']}\r\n              label=\"Target Countries\"\r\n            >\r\n              <Select mode=\"multiple\" placeholder=\"Select countries\">\r\n                {countries.map(country => (\r\n                  <Option key={country} value={country}>{country}</Option>\r\n                ))}\r\n              </Select>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name=\"trafficPercentage\"\r\n              label=\"Traffic Percentage\"\r\n              tooltip=\"Percentage of eligible traffic to include in the test\"\r\n            >\r\n              <Slider\r\n                min={1}\r\n                max={100}\r\n                marks={{ 1: '1%', 25: '25%', 50: '50%', 75: '75%', 100: '100%' }}\r\n              />\r\n            </Form.Item>\r\n\r\n            <Divider />\r\n\r\n            <Title level={5}>Success Criteria</Title>\r\n\r\n            <Form.Item\r\n              name={['successCriteria', 'metric']}\r\n              label=\"Success Metric\"\r\n            >\r\n              <Select placeholder=\"Select success metric\">\r\n                {targetMetrics.map(metric => (\r\n                  <Option key={metric.value} value={metric.value}>\r\n                    {metric.label}\r\n                  </Option>\r\n                ))}\r\n              </Select>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name={['successCriteria', 'threshold']}\r\n              label=\"Minimum Improvement (%)\"\r\n              tooltip=\"Minimum percentage improvement to declare a winner\"\r\n            >\r\n              <InputNumber min={1} max={50} suffix=\"%\" style={{ width: 200 }} />\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name={['successCriteria', 'confidenceLevel']}\r\n              label=\"Confidence Level\"\r\n            >\r\n              <Radio.Group>\r\n                <Radio.Button value={90}>90%</Radio.Button>\r\n                <Radio.Button value={95}>95%</Radio.Button>\r\n                <Radio.Button value={99}>99%</Radio.Button>\r\n              </Radio.Group>\r\n            </Form.Item>\r\n          </Space>\r\n        );\r\n\r\n      case 3:\r\n        const values = form.getFieldsValue();\r\n        return (\r\n          <Space direction=\"vertical\" style={{ width: '100%' }} size=\"large\">\r\n            <Alert\r\n              message=\"Review Configuration\"\r\n              description=\"Please review all settings before launching the test.\"\r\n              type=\"warning\"\r\n              showIcon\r\n            />\r\n\r\n            <Card title=\"Test Details\" size=\"small\">\r\n              <Paragraph>\r\n                <Text strong>Name: </Text>{values.name}\r\n              </Paragraph>\r\n              <Paragraph>\r\n                <Text strong>Type: </Text>{testTypes.find(t => t.value === values.type)?.label}\r\n              </Paragraph>\r\n              <Paragraph>\r\n                <Text strong>Target Metric: </Text>\r\n                {targetMetrics.find(m => m.value === values.targetMetric)?.label}\r\n              </Paragraph>\r\n              <Paragraph>\r\n                <Text strong>Duration: </Text>{values.duration} days\r\n              </Paragraph>\r\n            </Card>\r\n\r\n            <Card title=\"Variants\" size=\"small\">\r\n              {variants.map((variant, index) => (\r\n                <Paragraph key={variant.id}>\r\n                  <Tag color={index === 0 ? 'blue' : 'green'}>{variant.name}</Tag>\r\n                  <Text> - {variant.trafficAllocation}% traffic</Text>\r\n                  {variant.description && (\r\n                    <Text type=\"secondary\"> ({variant.description})</Text>\r\n                  )}\r\n                </Paragraph>\r\n              ))}\r\n            </Card>\r\n\r\n            <Card title=\"Audience\" size=\"small\">\r\n              <Paragraph>\r\n                <Text strong>Platforms: </Text>\r\n                {values.audience?.platforms?.join(', ') || 'All platforms'}\r\n              </Paragraph>\r\n              <Paragraph>\r\n                <Text strong>Countries: </Text>\r\n                {values.audience?.countries?.join(', ') || 'All countries'}\r\n              </Paragraph>\r\n              <Paragraph>\r\n                <Text strong>Traffic: </Text>\r\n                {values.trafficPercentage || 100}% of eligible users\r\n              </Paragraph>\r\n            </Card>\r\n          </Space>\r\n        );\r\n\r\n      case 4:\r\n        return (\r\n          <Alert\r\n            message=\"A/B Test Created Successfully!\"\r\n            description=\"Your test has been configured and is ready to launch. You can start the test from the test management page.\"\r\n            type=\"success\"\r\n            showIcon\r\n            action={\r\n              <Button type=\"primary\" href=\"/ab-test/results\">\r\n                View Test Dashboard\r\n              </Button>\r\n            }\r\n          />\r\n        );\r\n\r\n      default:\r\n        return null;\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div style={{ padding: 24, maxWidth: 800, margin: '0 auto' }}>\r\n      <Card>\r\n        <Title level={3}>\r\n          <ExperimentOutlined /> Create A/B Test\r\n        </Title>\r\n        <Paragraph type=\"secondary\">\r\n          Configure and launch A/B tests to optimize your business metrics\r\n        </Paragraph>\r\n\r\n        <Steps current={currentStep} style={{ marginBottom: 32 }}>\r\n          {steps.map(step => (\r\n            <Step key={step.title} title={step.title} description={step.description} />\r\n          ))}\r\n        </Steps>\r\n\r\n        {error && (\r\n          <Alert\r\n            message={error}\r\n            type=\"error\"\r\n            showIcon\r\n            style={{ marginBottom: 16 }}\r\n            closable\r\n            onClose={() => setError(null)}\r\n          />\r\n        )}\r\n\r\n        <Form form={form} layout=\"vertical\">\r\n          {renderStepContent()}\r\n        </Form>\r\n\r\n        {currentStep < 4 && (\r\n          <div style={{ marginTop: 24, display: 'flex', justifyContent: 'space-between' }}>\r\n            <Button onClick={handlePrev} disabled={currentStep === 0}>\r\n              Previous\r\n            </Button>\r\n            <Space>\r\n              {currentStep < 3 ? (\r\n                <Button type=\"primary\" onClick={handleNext}>\r\n                  Next\r\n                </Button>\r\n              ) : (\r\n                <Button \r\n                  type=\"primary\" \r\n                  icon={<SaveOutlined />}\r\n                  onClick={handleSave}\r\n                  loading={loading}\r\n                >\r\n                  Save & Launch\r\n                </Button>\r\n              )}\r\n            </Space>\r\n          </div>\r\n        )}\r\n      </Card>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default ABTestConfigPage;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/ABTest/ABTestConfig.tsx"
    },
    "39": {
      "path": "/dashboard/analytics",
      "file": "@/pages/Analytics/index.tsx",
      "parentId": "4",
      "id": "39",
      "absPath": "/dashboard/analytics",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Row,\r\n  Col,\r\n  Button,\r\n  Tabs,\r\n  Table,\r\n  DatePicker,\r\n  Select,\r\n  Space,\r\n  Statistic,\r\n  Progress,\r\n  message,\r\n  Modal,\r\n  Form,\r\n  Input,\r\n  Radio,\r\n  Tooltip,\r\n  Badge,\r\n  Dropdown,\r\n  Alert,\r\n  Descriptions,\r\n  Tag,\r\n  Timeline,\r\n  List,\r\n  Avatar,\r\n  Divider,\r\n  Empty,\r\n  Spin,\r\n  Switch,\r\n  Slider,\r\n  Checkbox,\r\n  Collapse,\r\n  Steps,\r\n  Drawer,\r\n  Popover,\r\n  Typography,\r\n  BarChartOutlined,\r\n  LineChartOutlined,\r\n  PieChartOutlined,\r\n  DollarOutlined,\r\n  RiseOutlined,\r\n  FallOutlined,\r\n  DownloadOutlined,\r\n  SearchOutlined,\r\n  FilterOutlined,\r\n  ReloadOutlined,\r\n  FileTextOutlined,\r\n  SettingOutlined,\r\n  ShareAltOutlined,\r\n  CalendarOutlined,\r\n  ShopOutlined,\r\n  ProductOutlined,\r\n  OrderedListOutlined,\r\n  EyeOutlined,\r\n  EditOutlined,\r\n  DeleteOutlined,\r\n  PlusOutlined,\r\n  AreaChartOutlined,\r\n  FundOutlined,\r\n  DashboardOutlined,\r\n  GlobalOutlined,\r\n  TeamOutlined,\r\n  ShoppingCartOutlined,\r\n  InboxOutlined,\r\n  CheckCircleOutlined,\r\n  WarningOutlined,\r\n  InfoCircleOutlined,\r\n  ArrowUpOutlined,\r\n  ArrowDownOutlined,\r\n  MoreOutlined,\r\n  ExportOutlined,\r\n  PrinterOutlined,\r\n  MailOutlined,\r\n  BellOutlined,\r\n  ClockCircleOutlined,\r\n  Line,\r\n  Column,\r\n  Pie,\r\n  Area,\r\n  DualAxes,\r\n  Title,\r\n  Text,\r\n  RangePicker,\r\n  Option,\r\n  Panel,\r\n  Step,\r\n  FC,\r\n} from '@/imports';\r\nimport type { ColumnsType } from 'antd/es/table';\r\nimport { analyticsDataSource, ProductAnalytics, OrderAnalytics, ProfitAnalytics, RealtimeMetrics, AlertRule, Dashboard } from '@/services/analyticsDataSource';\r\n\r\ninterface LocalChartData {\r\n  date: string;\r\n  sales: number;\r\n  orders: number;\r\n  visitors: number;\r\n  conversion: number;\r\n}\r\n\r\ninterface LocalMetricData {\r\n  key: string;\r\n  label: string;\r\n  value: number;\r\n  unit: string;\r\n  change: number;\r\n  changeType: 'up' | 'down' | 'neutral';\r\n  icon: React.ReactNode;\r\n  color: string;\r\n}\r\n\r\nconst PLATFORM_MAP: Record<string, { color: string; text: string }> = {\r\n  AMAZON: { color: 'orange', text: 'Amazon' },\r\n  EBAY: { color: 'blue', text: 'eBay' },\r\n  SHOPIFY: { color: 'green', text: 'Shopify' },\r\n  SHOPEE: { color: 'red', text: 'Shopee' },\r\n  LAZADA: { color: 'purple', text: 'Lazada' },\r\n};\r\n\r\nconst ORDER_STATUS_MAP: Record<string, { color: string; text: string }> = {\r\n  PENDING: { color: 'default', text: '待处理' },\r\n  CONFIRMED: { color: 'blue', text: '已确认' },\r\n  SHIPPED: { color: 'processing', text: '已发货' },\r\n  DELIVERED: { color: 'cyan', text: '已送达' },\r\n  COMPLETED: { color: 'success', text: '已完成' },\r\n  CANCELLED: { color: 'error', text: '已取消' },\r\n};\r\n\r\nconst TREND_MAP: Record<string, { color: string; icon: React.ReactNode }> = {\r\n  up: { color: '#52c41a', icon: <RiseOutlined /> },\r\n  down: { color: '#ff4d4f', icon: <FallOutlined /> },\r\n  stable: { color: '#faad14', icon: <LineChartOutlined /> },\r\n};\r\n\r\nconst SALES_TREND_DATA = [\r\n  { date: '2026-03-01', sales: 45000, orders: 120, visitors: 3500 },\r\n  { date: '2026-03-02', sales: 52000, orders: 145, visitors: 4200 },\r\n  { date: '2026-03-03', sales: 48000, orders: 132, visitors: 3800 },\r\n  { date: '2026-03-04', sales: 61000, orders: 168, visitors: 4800 },\r\n  { date: '2026-03-05', sales: 55000, orders: 152, visitors: 4100 },\r\n  { date: '2026-03-06', sales: 67000, orders: 185, visitors: 5200 },\r\n  { date: '2026-03-07', sales: 72000, orders: 198, visitors: 5800 },\r\n  { date: '2026-03-08', sales: 68000, orders: 187, visitors: 5100 },\r\n  { date: '2026-03-09', sales: 75000, orders: 205, visitors: 6000 },\r\n  { date: '2026-03-10', sales: 82000, orders: 225, visitors: 6500 },\r\n];\r\n\r\nconst PLATFORM_REVENUE_DATA = [\r\n  { platform: 'Amazon', revenue: 125000, orders: 450, growth: 15.2 },\r\n  { platform: 'eBay', revenue: 89000, orders: 320, growth: 8.5 },\r\n  { platform: 'Shopify', revenue: 71000, orders: 280, growth: 22.3 },\r\n  { platform: 'Shopee', revenue: 53000, orders: 190, growth: 35.1 },\r\n  { platform: 'Lazada', revenue: 28000, orders: 95, growth: 12.8 },\r\n];\r\n\r\nconst CATEGORY_DATA = [\r\n  { category: '电子产品', sales: 180000, percentage: 35 },\r\n  { category: '服装', sales: 120000, percentage: 23 },\r\n  { category: '家居', sales: 95000, percentage: 18 },\r\n  { category: '美妆', sales: 75000, percentage: 14 },\r\n  { category: '运动', sales: 52000, percentage: 10 },\r\n];\r\n\r\nconst HOURLY_TRAFFIC_DATA = [\r\n  { hour: '00:00', visitors: 120, orders: 3 },\r\n  { hour: '02:00', visitors: 80, orders: 2 },\r\n  { hour: '04:00', visitors: 50, orders: 1 },\r\n  { hour: '06:00', visitors: 90, orders: 4 },\r\n  { hour: '08:00', visitors: 250, orders: 12 },\r\n  { hour: '10:00', visitors: 420, orders: 25 },\r\n  { hour: '12:00', visitors: 580, orders: 35 },\r\n  { hour: '14:00', visitors: 520, orders: 30 },\r\n  { hour: '16:00', visitors: 480, orders: 28 },\r\n  { hour: '18:00', visitors: 650, orders: 42 },\r\n  { hour: '20:00', visitors: 720, orders: 48 },\r\n  { hour: '22:00', visitors: 380, orders: 22 },\r\n];\r\n\r\nconst Analytics: FC = () => {\r\n  const [loading, setLoading] = useState(false);\r\n  const [activeTab, setActiveTab] = useState('overview');\r\n  const [dateRange, setDateRange] = useState<[string, string] | null>(null);\r\n  const [selectedShop, setSelectedShop] = useState<string>('');\r\n  const [selectedPlatform, setSelectedPlatform] = useState<string>('');\r\n  \r\n  const userRole = 'OPERATOR';\r\n  \r\n  const roleTabPermissions: Record<string, string[]> = {\r\n    ADMIN: ['overview', 'products', 'orders', 'profit', 'alerts'],\r\n    MANAGER: ['overview', 'products', 'orders', 'profit'],\r\n    OPERATOR: ['overview', 'products', 'orders'],\r\n  };\r\n  \r\n  const accessibleTabs = roleTabPermissions[userRole] || ['overview'];\r\n  \r\n  const [metrics, setMetrics] = useState<LocalMetricData[]>([]);\r\n  const [chartData, setChartData] = useState<LocalChartData[]>([]);\r\n  const [productAnalytics, setProductAnalytics] = useState<ProductAnalytics[]>([]);\r\n  const [orderAnalytics, setOrderAnalytics] = useState<OrderAnalytics[]>([]);\r\n  const [profitAnalytics, setProfitAnalytics] = useState<ProfitAnalytics[]>([]);\r\n  const [realtimeMetrics, setRealtimeMetrics] = useState<RealtimeMetrics[]>([]);\r\n  const [alertRules, setAlertRules] = useState<AlertRule[]>([]);\r\n  const [dashboards, setDashboards] = useState<Dashboard[]>([]);\r\n  \r\n  const [alertModalVisible, setAlertModalVisible] = useState(false);\r\n  const [dashboardModalVisible, setDashboardModalVisible] = useState(false);\r\n  const [exportModalVisible, setExportModalVisible] = useState(false);\r\n  const [detailDrawerVisible, setDetailDrawerVisible] = useState(false);\r\n  const [selectedItem, setSelectedItem] = useState<Record<string, unknown> | null>(null);\r\n  \r\n  const [alertForm] = Form.useForm();\r\n  const [dashboardForm] = Form.useForm();\r\n\r\n  useEffect(() => {\r\n    fetchAllData();\r\n    const interval = setInterval(fetchRealtimeData, 30000);\r\n    return () => clearInterval(interval);\r\n  }, []);\r\n\r\n  const iconMap: Record<string, React.ReactNode> = {\r\n    DollarOutlined: <DollarOutlined />,\r\n    ShoppingCartOutlined: <ShoppingCartOutlined />,\r\n    TeamOutlined: <TeamOutlined />,\r\n    FundOutlined: <FundOutlined />,\r\n    BarChartOutlined: <BarChartOutlined />,\r\n    LineChartOutlined: <LineChartOutlined />,\r\n  };\r\n\r\n  const fetchAllData = async () => {\r\n    setLoading(true);\r\n    try {\r\n      const data = await analyticsDataSource.fetchAllData();\r\n      const localMetrics: LocalMetricData[] = data.metrics.map(m => ({\r\n        ...m,\r\n        icon: iconMap[m.icon] || <BarChartOutlined />,\r\n      }));\r\n      setMetrics(localMetrics);\r\n      setChartData(data.chartData);\r\n      setProductAnalytics(data.productAnalytics);\r\n      setOrderAnalytics(data.orderAnalytics);\r\n      setProfitAnalytics(data.profitAnalytics);\r\n      setRealtimeMetrics(data.realtimeMetrics);\r\n      setAlertRules(data.alertRules);\r\n      setDashboards(data.dashboards);\r\n    } catch (error) {\r\n      message.error('加载数据失败');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const fetchRealtimeData = async () => {\r\n    try {\r\n      const data = await analyticsDataSource.fetchRealtimeData();\r\n      setRealtimeMetrics(data);\r\n    } catch (error) {\r\n      console.error('加载实时数据失败', error);\r\n    }\r\n  };\r\n\r\n  const fetchAlertRules = async () => {\r\n    try {\r\n      const data = await analyticsDataSource.fetchAlertRules();\r\n      setAlertRules(data);\r\n    } catch (error) {\r\n      message.error('加载告警规则失败');\r\n    }\r\n  };\r\n\r\n  const handleRefresh = () => {\r\n    fetchAllData();\r\n    message.success('数据已刷新');\r\n  };\r\n\r\n  const handleExport = () => {\r\n    setExportModalVisible(true);\r\n  };\r\n\r\n  const handleCreateAlert = () => {\r\n    alertForm.resetFields();\r\n    setAlertModalVisible(true);\r\n  };\r\n\r\n  const handleSaveAlert = async () => {\r\n    try {\r\n      const values = await alertForm.validateFields();\r\n      console.log('Creating alert rule:', values);\r\n      message.success('告警规则已创建');\r\n      setAlertModalVisible(false);\r\n      fetchAlertRules();\r\n    } catch (error) {\r\n      message.error('创建失败');\r\n    }\r\n  };\r\n\r\n  const handleToggleAlert = (id: string, enabled: boolean) => {\r\n    setAlertRules(prev => prev.map(rule => \r\n      rule.id === id ? { ...rule, enabled } : rule\r\n    ));\r\n    message.success(`告警规则已${enabled ? '启用' : '禁用'}`);\r\n  };\r\n\r\n  const handleDeleteAlert = (id: string) => {\r\n    setAlertRules(prev => prev.filter(rule => rule.id !== id));\r\n    message.success('告警规则已删除');\r\n  };\r\n\r\n  const handleViewDetail = (item: unknown, type: string) => {\r\n    setSelectedItem({ ...(item as object), type });\r\n    setDetailDrawerVisible(true);\r\n  };\r\n\r\n  const productColumns: ColumnsType<ProductAnalytics> = [\r\n    {\r\n      title: '商品信息',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      render: (text, record) => (\r\n        <Space>\r\n          <Avatar src={record.image} shape=\"square\" size={48} />\r\n          <div>\r\n            <div style={{ fontWeight: 500 }}>{text}</div>\r\n            <div style={{ fontSize: 12, color: '#999' }}>{record.productId}</div>\r\n            <Tag style={{ fontSize: 11 }}>{record.category}</Tag>\r\n          </div>\r\n        </Space>\r\n      ),\r\n    },\r\n    { title: '销量', dataIndex: 'sales', key: 'sales', sorter: (a, b) => a.sales - b.sales },\r\n    { title: '销售额', dataIndex: 'revenue', key: 'revenue', render: (v) => `¥${v.toLocaleString()}`, sorter: (a, b) => a.revenue - b.revenue },\r\n    { title: '利润', dataIndex: 'profit', key: 'profit', render: (v) => `¥${v.toLocaleString()}`, sorter: (a, b) => a.profit - b.profit },\r\n    { title: '利润率', dataIndex: 'profitMargin', key: 'profitMargin', render: (v) => `${v}%`, sorter: (a, b) => a.profitMargin - b.profitMargin },\r\n    { title: '浏览量', dataIndex: 'views', key: 'views', sorter: (a, b) => a.views - b.views },\r\n    { title: '转化率', dataIndex: 'conversionRate', key: 'conversionRate', render: (v) => `${v}%`, sorter: (a, b) => a.conversionRate - b.conversionRate },\r\n    { title: '退货率', dataIndex: 'returnRate', key: 'returnRate', render: (v) => <Tag color={v > 5 ? 'error' : 'success'}>{v}%</Tag>, sorter: (a, b) => a.returnRate - b.returnRate },\r\n    {\r\n      title: '趋势',\r\n      dataIndex: 'trend',\r\n      key: 'trend',\r\n      render: (trend) => (\r\n        <Tag icon={TREND_MAP[trend].icon} color={TREND_MAP[trend].color}>\r\n          {trend === 'up' ? '上升' : trend === 'down' ? '下降' : '平稳'}\r\n        </Tag>\r\n      ),\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      render: (_, record) => (\r\n        <Button type=\"link\" icon={<EyeOutlined />} onClick={() => handleViewDetail(record, 'product')}>\r\n          详情\r\n        </Button>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  const orderColumns: ColumnsType<OrderAnalytics> = [\r\n    { title: '订单号', dataIndex: 'orderId', key: 'orderId' },\r\n    { title: '平台', dataIndex: 'platform', key: 'platform', render: (p) => <Tag color={PLATFORM_MAP[p]?.color}>{PLATFORM_MAP[p]?.text}</Tag> },\r\n    { title: '状态', dataIndex: 'status', key: 'status', render: (s) => <Tag color={ORDER_STATUS_MAP[s]?.color}>{ORDER_STATUS_MAP[s]?.text}</Tag> },\r\n    { title: '金额', dataIndex: 'amount', key: 'amount', render: (v) => `¥${v.toFixed(2)}` },\r\n    { title: '利润', dataIndex: 'profit', key: 'profit', render: (v) => `¥${v.toFixed(2)}` },\r\n    { title: '客户类型', dataIndex: 'customerType', key: 'customerType', render: (t) => <Tag color={t === 'new' ? 'blue' : 'green'}>{t === 'new' ? '新客户' : '回头客'}</Tag> },\r\n    { title: '物流成本', dataIndex: 'shippingCost', key: 'shippingCost', render: (v) => `¥${v.toFixed(2)}` },\r\n    { title: '平台费用', dataIndex: 'platformFee', key: 'platformFee', render: (v) => `¥${v.toFixed(2)}` },\r\n    { title: '创建时间', dataIndex: 'createdAt', key: 'createdAt' },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      render: (_, record) => (\r\n        <Button type=\"link\" icon={<EyeOutlined />} onClick={() => handleViewDetail(record, 'order')}>\r\n          详情\r\n        </Button>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  const profitColumns: ColumnsType<ProfitAnalytics> = [\r\n    { title: '日期', dataIndex: 'period', key: 'period' },\r\n    { title: '收入', dataIndex: 'revenue', key: 'revenue', render: (v) => `¥${v.toLocaleString()}` },\r\n    { title: '成本', dataIndex: 'cost', key: 'cost', render: (v) => `¥${v.toLocaleString()}` },\r\n    { title: '毛利润', dataIndex: 'grossProfit', key: 'grossProfit', render: (v) => `¥${v.toLocaleString()}` },\r\n    { title: '净利润', dataIndex: 'netProfit', key: 'netProfit', render: (v) => <span style={{ color: '#52c41a', fontWeight: 500 }}>¥{v.toLocaleString()}</span> },\r\n    { title: '利润率', dataIndex: 'margin', key: 'margin', render: (v) => `${v}%` },\r\n    { title: '平台费', dataIndex: 'platformFees', key: 'platformFees', render: (v) => `¥${v.toLocaleString()}` },\r\n    { title: '物流费', dataIndex: 'shippingCost', key: 'shippingCost', render: (v) => `¥${v.toLocaleString()}` },\r\n    { title: '广告费', dataIndex: 'adSpend', key: 'adSpend', render: (v) => `¥${v.toLocaleString()}` },\r\n  ];\r\n\r\n  const alertColumns: ColumnsType<AlertRule> = [\r\n    { title: '规则名称', dataIndex: 'name', key: 'name' },\r\n    { title: '指标', dataIndex: 'metric', key: 'metric' },\r\n    { title: '条件', dataIndex: 'condition', key: 'condition', render: (c) => `${c}` },\r\n    { title: '阈值', dataIndex: 'threshold', key: 'threshold' },\r\n    { title: '通知渠道', dataIndex: 'notifyChannels', key: 'notifyChannels', render: (channels) => channels?.map((c: string) => <Tag key={c}>{c}</Tag>) || '-', },\r\n    { title: '最后触发', dataIndex: 'lastTriggered', key: 'lastTriggered', render: (v) => v || '-' },\r\n    {\r\n      title: '状态',\r\n      dataIndex: 'enabled',\r\n      key: 'enabled',\r\n      render: (enabled, record) => (\r\n        <Switch checked={enabled} onChange={(checked) => handleToggleAlert(record.id, checked)} />\r\n      ),\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'action',\r\n      render: (_, record) => (\r\n        <Space>\r\n          <Button type=\"link\" icon={<EditOutlined />}>编辑</Button>\r\n          <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={() => handleDeleteAlert(record.id)}>删除</Button>\r\n        </Space>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  const salesTrendConfig = {\r\n    data: SALES_TREND_DATA.flatMap(item => [\r\n      { date: item.date, value: item.sales, type: '销售额' },\r\n      { date: item.date, value: item.orders * 100, type: '订单数' },\r\n    ]),\r\n    xField: 'date',\r\n    yField: 'value',\r\n    seriesField: 'type',\r\n    smooth: true,\r\n    legend: { position: 'top' as const },\r\n    yAxis: { label: { formatter: (v: number) => `¥${v / 1000}k` } },\r\n  };\r\n\r\n  const platformRevenueConfig = {\r\n    data: PLATFORM_REVENUE_DATA,\r\n    xField: 'platform',\r\n    yField: 'revenue',\r\n    color: '#1890ff',\r\n    label: { text: 'revenue', position: 'top' as const },\r\n  };\r\n\r\n  const categoryPieConfig = {\r\n    data: CATEGORY_DATA,\r\n    angleField: 'percentage',\r\n    colorField: 'category',\r\n    radius: 0.8,\r\n    innerRadius: 0.6,\r\n    label: { text: 'category', position: 'outside' },\r\n    legend: { position: 'bottom' as const },\r\n  };\r\n\r\n  const hourlyTrafficConfig = {\r\n    data: [HOURLY_TRAFFIC_DATA, HOURLY_TRAFFIC_DATA],\r\n    xField: 'hour',\r\n    yField: ['visitors', 'orders'],\r\n    geometryOptions: [\r\n      { geometry: 'line', color: '#1890ff' },\r\n      { geometry: 'line', color: '#52c41a' },\r\n    ],\r\n    legend: { position: 'top' as const },\r\n  };\r\n\r\n  const tabItems = [\r\n    ...(accessibleTabs.includes('overview') ? [{\r\n      key: 'overview',\r\n      label: <span><DashboardOutlined />数据概览</span>,\r\n      children: (\r\n        <Spin spinning={loading}>\r\n          <Row gutter={[16, 16]} style={{ marginBottom: 24 }}>\r\n            {metrics.map(metric => (\r\n              <Col xs={12} sm={6} lg={4} key={metric.key}>\r\n                <Card hoverable size=\"small\">\r\n                  <Statistic\r\n                    title={metric.label}\r\n                    value={metric.value}\r\n                    prefix={metric.icon}\r\n                    suffix={metric.unit}\r\n                    valueStyle={{ color: metric.color, fontSize: 18 }}\r\n                  />\r\n                  <div style={{ marginTop: 8 }}>\r\n                    {metric.changeType === 'up' ? (\r\n                      <span style={{ color: '#52c41a' }}><ArrowUpOutlined /> {metric.change}%</span>\r\n                    ) : metric.changeType === 'down' ? (\r\n                      <span style={{ color: '#ff4d4f' }}><ArrowDownOutlined /> {Math.abs(metric.change)}%</span>\r\n                    ) : (\r\n                      <span style={{ color: '#faad14' }}>-</span>\r\n                    )}\r\n                    <span style={{ color: '#999', marginLeft: 8 }}>环比</span>\r\n                  </div>\r\n                </Card>\r\n              </Col>\r\n            ))}\r\n          </Row>\r\n\r\n          <Card title=\"实时监控\" style={{ marginBottom: 24 }} size=\"small\">\r\n            <Row gutter={16}>\r\n              <Col span={6}>\r\n                <Statistic title=\"当前在线用户\" value={realtimeMetrics[0]?.activeUsers || 1250} prefix={<TeamOutlined />} valueStyle={{ color: '#1890ff' }} />\r\n              </Col>\r\n              <Col span={6}>\r\n                <Statistic title=\"每分钟订单\" value={realtimeMetrics[0]?.ordersPerMinute || 8} prefix={<ShoppingCartOutlined />} valueStyle={{ color: '#52c41a' }} />\r\n              </Col>\r\n              <Col span={6}>\r\n                <Statistic title=\"每分钟收入\" value={realtimeMetrics[0]?.revenuePerMinute || 1250} prefix={<DollarOutlined />} suffix=\"¥\" valueStyle={{ color: '#fa8c16' }} />\r\n              </Col>\r\n              <Col span={6}>\r\n                <Statistic title=\"实时转化率\" value={realtimeMetrics[0]?.conversionRate || 4.2} prefix={<FundOutlined />} suffix=\"%\" valueStyle={{ color: '#722ed1' }} />\r\n              </Col>\r\n            </Row>\r\n          </Card>\r\n\r\n          <Row gutter={16}>\r\n            <Col xs={24} lg={16}>\r\n              <Card title=\"销售趋势\" extra={<RangePicker />}>\r\n                <Line {...salesTrendConfig} height={280} />\r\n              </Card>\r\n            </Col>\r\n            <Col xs={24} lg={8}>\r\n              <Card title=\"品类占比\">\r\n                <Pie {...categoryPieConfig} height={280} />\r\n              </Card>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Row gutter={16} style={{ marginTop: 16 }}>\r\n            <Col xs={24} lg={12}>\r\n              <Card title=\"平台收入对比\">\r\n                <Column {...platformRevenueConfig} height={250} />\r\n              </Card>\r\n            </Col>\r\n            <Col xs={24} lg={12}>\r\n              <Card title=\"流量时段分布\">\r\n                <DualAxes {...hourlyTrafficConfig} height={250} />\r\n              </Card>\r\n            </Col>\r\n          </Row>\r\n        </Spin>\r\n      ),\r\n    }] : []),\r\n    ...(accessibleTabs.includes('products') ? [{\r\n      key: 'products',\r\n      label: <span><ProductOutlined />商品分析</span>,\r\n      children: (\r\n        <Card>\r\n          <Row justify=\"space-between\" style={{ marginBottom: 16 }}>\r\n            <Col>\r\n              <Space>\r\n                <Input.Search placeholder=\"搜索商品\" style={{ width: 200 }} />\r\n                <Select defaultValue=\"all\" style={{ width: 120 }}>\r\n                  <Option value=\"all\">全部品类</Option>\r\n                  <Option value=\"electronics\">电子产品</Option>\r\n                  <Option value=\"clothing\">服装</Option>\r\n                  <Option value=\"home\">家居</Option>\r\n                </Select>\r\n              </Space>\r\n            </Col>\r\n            <Col>\r\n              <Space>\r\n                <Button icon={<ReloadOutlined />}>刷新</Button>\r\n                <Button icon={<ExportOutlined />}>导出</Button>\r\n              </Space>\r\n            </Col>\r\n          </Row>\r\n          <Table columns={productColumns} dataSource={productAnalytics} rowKey=\"productId\" pagination={{ pageSize: 10 }} loading={loading} scroll={{ x: 1200 }} />\r\n        </Card>\r\n      ),\r\n    }] : []),\r\n    ...(accessibleTabs.includes('orders') ? [{\r\n      key: 'orders',\r\n      label: <span><OrderedListOutlined />订单分析</span>,\r\n      children: (\r\n        <Card>\r\n          <Row justify=\"space-between\" style={{ marginBottom: 16 }}>\r\n            <Col>\r\n              <Space>\r\n                <Input.Search placeholder=\"搜索订单\" style={{ width: 200 }} />\r\n                <Select defaultValue=\"all\" style={{ width: 120 }}>\r\n                  <Option value=\"all\">全部平台</Option>\r\n                  {Object.keys(PLATFORM_MAP).map(key => (\r\n                    <Option key={key} value={key}>{PLATFORM_MAP[key].text}</Option>\r\n                  ))}\r\n                </Select>\r\n                <Select defaultValue=\"all\" style={{ width: 120 }}>\r\n                  <Option value=\"all\">全部状态</Option>\r\n                  {Object.keys(ORDER_STATUS_MAP).map(key => (\r\n                    <Option key={key} value={key}>{ORDER_STATUS_MAP[key].text}</Option>\r\n                  ))}\r\n                </Select>\r\n              </Space>\r\n            </Col>\r\n            <Col>\r\n              <Space>\r\n                <Button icon={<ReloadOutlined />}>刷新</Button>\r\n                <Button icon={<ExportOutlined />}>导出</Button>\r\n              </Space>\r\n            </Col>\r\n          </Row>\r\n          <Table columns={orderColumns} dataSource={orderAnalytics} rowKey=\"orderId\" pagination={{ pageSize: 10 }} loading={loading} scroll={{ x: 1200 }} />\r\n        </Card>\r\n      ),\r\n    }] : []),\r\n    ...(accessibleTabs.includes('profit') ? [{\r\n      key: 'profit',\r\n      label: <span><FundOutlined />利润分析</span>,\r\n      children: (\r\n        <Card>\r\n          <Row justify=\"space-between\" style={{ marginBottom: 16 }}>\r\n            <Col>\r\n              <RangePicker />\r\n            </Col>\r\n            <Col>\r\n              <Space>\r\n                <Button icon={<ReloadOutlined />}>刷新</Button>\r\n                <Button icon={<ExportOutlined />}>导出</Button>\r\n              </Space>\r\n            </Col>\r\n          </Row>\r\n          <Table columns={profitColumns} dataSource={profitAnalytics} rowKey=\"period\" pagination={{ pageSize: 10 }} loading={loading} scroll={{ x: 1000 }} />\r\n        </Card>\r\n      ),\r\n    }] : []),\r\n    ...(accessibleTabs.includes('alerts') ? [{\r\n      key: 'alerts',\r\n      label: <span><BellOutlined />告警规则</span>,\r\n      children: (\r\n        <Card>\r\n          <Row justify=\"space-between\" style={{ marginBottom: 16 }}>\r\n            <Col>\r\n              <Title level={5}>告警规则管理</Title>\r\n            </Col>\r\n            <Col>\r\n              <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleCreateAlert}>新建规则</Button>\r\n            </Col>\r\n          </Row>\r\n          <Table columns={alertColumns} dataSource={alertRules} rowKey=\"id\" pagination={{ pageSize: 10 }} loading={loading} />\r\n        </Card>\r\n      ),\r\n    }] : []),\r\n  ];\r\n\r\n  return (\r\n    <div className=\"analytics-page\" style={{ padding: 24 }}>\r\n      <Card\r\n        title={<Space><BarChartOutlined /> 数据中心</Space>}\r\n        extra={\r\n          <Space>\r\n            <Select placeholder=\"选择店铺\" value={selectedShop} onChange={setSelectedShop} allowClear style={{ width: 150 }}>\r\n              <Option value=\"shop1\">Amazon US Store</Option>\r\n              <Option value=\"shop2\">eBay Outlet</Option>\r\n              <Option value=\"shop3\">Shopify Brand</Option>\r\n            </Select>\r\n            <Select placeholder=\"选择平台\" value={selectedPlatform} onChange={setSelectedPlatform} allowClear style={{ width: 120 }}>\r\n              {Object.keys(PLATFORM_MAP).map(key => (\r\n                <Option key={key} value={key}>{PLATFORM_MAP[key].text}</Option>\r\n              ))}\r\n            </Select>\r\n            <RangePicker onChange={(dates) => setDateRange(dates ? [dates[0]?.format('YYYY-MM-DD') || '', dates[1]?.format('YYYY-MM-DD') || ''] : null)} />\r\n            <Button icon={<ReloadOutlined />} onClick={handleRefresh}>刷新</Button>\r\n            <Button type=\"primary\" icon={<DownloadOutlined />} onClick={handleExport}>导出</Button>\r\n          </Space>\r\n        }\r\n      >\r\n        <Tabs activeKey={activeTab} onChange={setActiveTab} items={tabItems} />\r\n      </Card>\r\n\r\n      <Modal\r\n        title=\"新建告警规则\"\r\n        open={alertModalVisible}\r\n        onOk={handleSaveAlert}\r\n        onCancel={() => setAlertModalVisible(false)}\r\n        width={600}\r\n      >\r\n        <Form form={alertForm} layout=\"vertical\">\r\n          <Form.Item name=\"name\" label=\"规则名称\" rules={[{ required: true }]}>\r\n            <Input placeholder=\"请输入规则名称\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"metric\" label=\"监控指标\" rules={[{ required: true }]}>\r\n            <Select placeholder=\"选择监控指标\">\r\n              <Option value=\"sales\">销售额</Option>\r\n              <Option value=\"orders\">订单数</Option>\r\n              <Option value=\"profit\">利润率</Option>\r\n              <Option value=\"conversion\">转化率</Option>\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item name=\"condition\" label=\"触发条件\" rules={[{ required: true }]}>\r\n            <Select placeholder=\"选择条件\">\r\n              <Option value=\"gt\">大于</Option>\r\n              <Option value=\"lt\">小于</Option>\r\n              <Option value=\"eq\">等于</Option>\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item name=\"threshold\" label=\"阈值\" rules={[{ required: true }]}>\r\n            <Input type=\"number\" placeholder=\"请输入阈值\" />\r\n          </Form.Item>\r\n          <Form.Item name=\"notifyChannels\" label=\"通知渠道\" rules={[{ required: true }]}>\r\n            <Checkbox.Group>\r\n              <Checkbox value=\"email\">邮件</Checkbox>\r\n              <Checkbox value=\"sms\">短信</Checkbox>\r\n              <Checkbox value=\"wechat\">微信</Checkbox>\r\n            </Checkbox.Group>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title=\"导出数据\"\r\n        open={exportModalVisible}\r\n        onCancel={() => setExportModalVisible(false)}\r\n        footer={[\r\n          <Button key=\"cancel\" onClick={() => setExportModalVisible(false)}>取消</Button>,\r\n          <Button key=\"export\" type=\"primary\" icon={<ExportOutlined />}>导出</Button>,\r\n        ]}\r\n      >\r\n        <Form layout=\"vertical\">\r\n          <Form.Item label=\"导出格式\">\r\n            <Radio.Group defaultValue=\"excel\">\r\n              <Radio value=\"excel\">Excel</Radio>\r\n              <Radio value=\"csv\">CSV</Radio>\r\n              <Radio value=\"pdf\">PDF</Radio>\r\n            </Radio.Group>\r\n          </Form.Item>\r\n          <Form.Item label=\"导出范围\">\r\n            <Checkbox.Group defaultValue={['overview', 'products', 'orders']}>\r\n              <Checkbox value=\"overview\">数据概览</Checkbox>\r\n              <Checkbox value=\"products\">商品分析</Checkbox>\r\n              <Checkbox value=\"orders\">订单分析</Checkbox>\r\n              <Checkbox value=\"profit\">利润分析</Checkbox>\r\n            </Checkbox.Group>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Drawer\r\n        title=\"详情\"\r\n        placement=\"right\"\r\n        width={600}\r\n        onClose={() => setDetailDrawerVisible(false)}\r\n        open={detailDrawerVisible}\r\n      >\r\n        {selectedItem && (\r\n          <Descriptions column={1} bordered>\r\n            {Object.entries(selectedItem).map(([key, value]) => (\r\n              <Descriptions.Item key={key} label={key}>\r\n                {typeof value === 'object' ? JSON.stringify(value) : String(value)}\r\n              </Descriptions.Item>\r\n            ))}\r\n          </Descriptions>\r\n        )}\r\n      </Drawer>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Analytics;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Analytics/index.tsx"
    },
    "40": {
      "path": "/dashboard/reports",
      "file": "@/pages/Reports/index.tsx",
      "parentId": "4",
      "id": "40",
      "absPath": "/dashboard/reports",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Row,\r\n  Col,\r\n  Button,\r\n  Tabs,\r\n  Table,\r\n  DatePicker,\r\n  Select,\r\n  Space,\r\n  Statistic,\r\n  Progress,\r\n  message,\r\n  Modal,\r\n  Form,\r\n  Input,\r\n  Radio,\r\n  Tooltip,\r\n  Badge,\r\n  Dropdown,\r\n  Menu,\r\n  Alert,\r\n  Descriptions,\r\n  Tag,\r\n  BarChartOutlined,\r\n  LineChartOutlined,\r\n  PieChartOutlined,\r\n  DollarOutlined,\r\n  RiseOutlined,\r\n  DownloadOutlined,\r\n  SearchOutlined,\r\n  FilterOutlined,\r\n  ReloadOutlined,\r\n  FileTextOutlined,\r\n  SettingOutlined,\r\n  ShareAltOutlined,\r\n  CalendarOutlined,\r\n  ShopOutlined,\r\n  ProductOutlined,\r\n  OrderedListOutlined,\r\n  FallOutlined,\r\n  EyeOutlined,\r\n  EditOutlined,\r\n  DeleteOutlined,\r\n  PlusOutlined,\r\n  RangePicker,\r\n  Option,\r\n  FC,\r\n} from '@/imports';\r\nimport type { ColumnsType } from 'antd/es/table';\r\n\r\ninterface Report {\r\n  id: string;\r\n  reportId: string;\r\n  name: string;\r\n  type: 'PROFIT' | 'PERFORMANCE' | 'SALES' | 'INVENTORY' | 'CUSTOM';\r\n  status: 'GENERATING' | 'COMPLETED' | 'FAILED';\r\n  period: 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'CUSTOM';\r\n  startDate: string;\r\n  endDate: string;\r\n  createdAt: string;\r\n  createdBy: string;\r\n  shopId?: string;\r\n  shopName?: string;\r\n  fileSize?: string;\r\n  downloadUrl?: string;\r\n  errorMessage?: string;\r\n}\r\n\r\nconst REPORT_TYPE_MAP: Record<string, { color: string; text: string; icon: React.ReactNode }> = {\r\n  PROFIT: { color: 'green', text: 'Profit Report', icon: <DollarOutlined /> },\r\n  PERFORMANCE: { color: 'blue', text: 'Performance Report', icon: <RiseOutlined /> },\r\n  SALES: { color: 'orange', text: 'Sales Report', icon: <BarChartOutlined /> },\r\n  INVENTORY: { color: 'purple', text: 'Inventory Report', icon: <PieChartOutlined /> },\r\n  CUSTOM: { color: 'default', text: 'Custom Report', icon: <SettingOutlined /> },\r\n};\r\n\r\nconst REPORT_STATUS_MAP: Record<string, { color: string; text: string; icon: React.ReactNode }> = {\r\n  GENERATING: { color: 'processing', text: 'Generating', icon: <ReloadOutlined spin /> },\r\n  COMPLETED: { color: 'success', text: 'Completed', icon: <FileTextOutlined /> },\r\n  FAILED: { color: 'error', text: 'Failed', icon: <FallOutlined /> },\r\n};\r\n\r\nconst PERIOD_MAP: Record<string, { color: string; text: string }> = {\r\n  DAILY: { color: 'default', text: 'Daily' },\r\n  WEEKLY: { color: 'blue', text: 'Weekly' },\r\n  MONTHLY: { color: 'green', text: 'Monthly' },\r\n  CUSTOM: { color: 'orange', text: 'Custom' },\r\n};\r\n\r\nconst Reports: FC = () => {\r\n  const [loading, setLoading] = useState(false);\r\n  const [reports, setReports] = useState<Report[]>([]);\r\n  const [selectedReport, setSelectedReport] = useState<Report | null>(null);\r\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\r\n  const [createModalVisible, setCreateModalVisible] = useState(false);\r\n  const [editModalVisible, setEditModalVisible] = useState(false);\r\n  const [activeTab, setActiveTab] = useState('overview');\r\n  const [searchText, setSearchText] = useState('');\r\n  const [filterType, setFilterType] = useState<string>('');\r\n  const [filterStatus, setFilterStatus] = useState<string>('');\r\n  const [filterPeriod, setFilterPeriod] = useState<string>('');\r\n  const [stats, setStats] = useState({\r\n    totalRevenue: 0,\r\n    totalProfit: 0,\r\n    totalOrders: 0,\r\n    profitMargin: 0,\r\n    revenueGrowth: 0,\r\n    profitGrowth: 0,\r\n  });\r\n  const [createForm] = Form.useForm();\r\n  const [editForm] = Form.useForm();\r\n\r\n  useEffect(() => {\r\n    fetchReports();\r\n    fetchStats();\r\n  }, []);\r\n\r\n  const fetchReports = async () => {\r\n    setLoading(true);\r\n    try {\r\n      const mockReports: Report[] = [\r\n        {\r\n          id: '1',\r\n          reportId: 'RPT-2026-001',\r\n          name: 'Weekly Profit Report - Week 11',\r\n          type: 'PROFIT',\r\n          status: 'COMPLETED',\r\n          period: 'WEEKLY',\r\n          startDate: '2026-03-11',\r\n          endDate: '2026-03-17',\r\n          createdAt: '2026-03-18 09:00:00',\r\n          createdBy: 'admin',\r\n          shopId: 'SHOP_001',\r\n          shopName: 'Amazon US Store',\r\n          fileSize: '2.5MB',\r\n          downloadUrl: '/api/v1/reports/RPT-2026-001/download',\r\n        },\r\n        {\r\n          id: '2',\r\n          reportId: 'RPT-2026-002',\r\n          name: 'Monthly Performance Report - March',\r\n          type: 'PERFORMANCE',\r\n          status: 'GENERATING',\r\n          period: 'MONTHLY',\r\n          startDate: '2026-03-01',\r\n          endDate: '2026-03-31',\r\n          createdAt: '2026-03-18 10:00:00',\r\n          createdBy: 'admin',\r\n          shopId: 'SHOP_002',\r\n          shopName: 'eBay Outlet',\r\n        },\r\n        {\r\n          id: '3',\r\n          reportId: 'RPT-2026-003',\r\n          name: 'Daily Sales Report - 2026-03-17',\r\n          type: 'SALES',\r\n          status: 'COMPLETED',\r\n          period: 'DAILY',\r\n          startDate: '2026-03-17',\r\n          endDate: '2026-03-17',\r\n          createdAt: '2026-03-18 08:00:00',\r\n          createdBy: 'admin',\r\n          shopId: 'SHOP_003',\r\n          shopName: 'Shopify Brand Store',\r\n          fileSize: '1.2MB',\r\n          downloadUrl: '/api/v1/reports/RPT-2026-003/download',\r\n        },\r\n        {\r\n          id: '4',\r\n          reportId: 'RPT-2026-004',\r\n          name: 'Inventory Report - All Warehouses',\r\n          type: 'INVENTORY',\r\n          status: 'FAILED',\r\n          period: 'WEEKLY',\r\n          startDate: '2026-03-11',\r\n          endDate: '2026-03-17',\r\n          createdAt: '2026-03-18 07:00:00',\r\n          createdBy: 'admin',\r\n          errorMessage: 'Failed to fetch inventory data from warehouse API',\r\n        },\r\n        {\r\n          id: '5',\r\n          reportId: 'RPT-2026-005',\r\n          name: 'Custom Sales Analysis - Q1 2026',\r\n          type: 'CUSTOM',\r\n          status: 'COMPLETED',\r\n          period: 'CUSTOM',\r\n          startDate: '2026-01-01',\r\n          endDate: '2026-03-31',\r\n          createdAt: '2026-03-18 06:00:00',\r\n          createdBy: 'user1',\r\n          shopId: 'SHOP_004',\r\n          shopName: 'Shopee Mall',\r\n          fileSize: '5.8MB',\r\n          downloadUrl: '/api/v1/reports/RPT-2026-005/download',\r\n        },\r\n      ];\r\n      setReports(mockReports);\r\n    } catch (error) {\r\n      message.error('Failed to load reports');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const fetchStats = async () => {\r\n    try {\r\n      setStats({\r\n        totalRevenue: 1250000,\r\n        totalProfit: 375000,\r\n        totalOrders: 8500,\r\n        profitMargin: 30,\r\n        revenueGrowth: 15.5,\r\n        profitGrowth: 12.3,\r\n      });\r\n    } catch (error) {\r\n      message.error('Failed to load stats');\r\n    }\r\n  };\r\n\r\n  const handleViewDetail = (report: Report) => {\r\n    setSelectedReport(report);\r\n    setDetailModalVisible(true);\r\n  };\r\n\r\n  const handleDownload = async (report: Report) => {\r\n    try {\r\n      message.loading('Downloading report...');\r\n      await new Promise((resolve) => setTimeout(resolve, 1000));\r\n      message.success('Report downloaded successfully');\r\n    } catch (error) {\r\n      message.error('Failed to download report');\r\n    }\r\n  };\r\n\r\n  const handleCreate = () => {\r\n    createForm.resetFields();\r\n    setCreateModalVisible(true);\r\n  };\r\n\r\n  const handleCreateSubmit = async () => {\r\n    try {\r\n      const values = await createForm.validateFields();\r\n      console.log('Creating report:', values);\r\n      message.success('Report generation started');\r\n      setCreateModalVisible(false);\r\n      fetchReports();\r\n    } catch (error) {\r\n      message.error('Failed to create report');\r\n    }\r\n  };\r\n\r\n  const handleEdit = (report: Report) => {\r\n    setSelectedReport(report);\r\n    editForm.setFieldsValue({\r\n      name: report.name,\r\n      type: report.type,\r\n      period: report.period,\r\n      startDate: report.startDate,\r\n      endDate: report.endDate,\r\n    });\r\n    setEditModalVisible(true);\r\n  };\r\n\r\n  const handleEditSubmit = async () => {\r\n    try {\r\n      const values = await editForm.validateFields();\r\n      console.log('Updating report:', { reportId: selectedReport?.id, ...values });\r\n      message.success('Report updated successfully');\r\n      setEditModalVisible(false);\r\n      fetchReports();\r\n    } catch (error) {\r\n      message.error('Failed to update report');\r\n    }\r\n  };\r\n\r\n  const handleDelete = async (reportId: string) => {\r\n    try {\r\n      console.log('Deleting report:', reportId);\r\n      message.success('Report deleted successfully');\r\n      fetchReports();\r\n    } catch (error) {\r\n      message.error('Failed to delete report');\r\n    }\r\n  };\r\n\r\n  const handleSearch = (value: string) => {\r\n    setSearchText(value);\r\n  };\r\n\r\n  const handleFilter = (value: string) => {\r\n    setFilterType(value);\r\n  };\r\n\r\n  const handleRefresh = () => {\r\n    fetchReports();\r\n  };\r\n\r\n  const getFilteredReports = () => {\r\n    let filtered = reports;\r\n\r\n    if (searchText) {\r\n      filtered = filtered.filter(\r\n        (r) =>\r\n          r.reportId.toLowerCase().includes(searchText.toLowerCase()) ||\r\n          r.name.toLowerCase().includes(searchText.toLowerCase())\r\n      );\r\n    }\r\n\r\n    if (filterType) {\r\n      filtered = filtered.filter((r) => r.type === filterType);\r\n    }\r\n\r\n    if (filterStatus) {\r\n      filtered = filtered.filter((r) => r.status === filterStatus);\r\n    }\r\n\r\n    if (filterPeriod) {\r\n      filtered = filtered.filter((r) => r.period === filterPeriod);\r\n    }\r\n\r\n    return filtered;\r\n  };\r\n\r\n  const columns: ColumnsType<Report> = [\r\n    {\r\n      title: 'Report ID',\r\n      dataIndex: 'reportId',\r\n      key: 'reportId',\r\n      width: 140,\r\n      render: (text: string, record) => (\r\n        <a onClick={() => handleViewDetail(record)}>{text}</a>\r\n      ),\r\n    },\r\n    {\r\n      title: 'Name',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      width: 250,\r\n    },\r\n    {\r\n      title: 'Type',\r\n      dataIndex: 'type',\r\n      key: 'type',\r\n      width: 150,\r\n      filters: Object.keys(REPORT_TYPE_MAP).map((key) => ({\r\n        text: REPORT_TYPE_MAP[key].text,\r\n        value: key,\r\n      })),\r\n      render: (type: string) => {\r\n        const config = REPORT_TYPE_MAP[type];\r\n        return <Tag icon={config.icon} color={config.color}>{config.text}</Tag>;\r\n      },\r\n    },\r\n    {\r\n      title: 'Status',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      width: 120,\r\n      filters: Object.keys(REPORT_STATUS_MAP).map((key) => ({\r\n        text: REPORT_STATUS_MAP[key].text,\r\n        value: key,\r\n      })),\r\n      render: (status: string) => {\r\n        const config = REPORT_STATUS_MAP[status];\r\n        return <Tag icon={config.icon} color={config.color}>{config.text}</Tag>;\r\n      },\r\n    },\r\n    {\r\n      title: 'Period',\r\n      dataIndex: 'period',\r\n      key: 'period',\r\n      width: 100,\r\n      filters: Object.keys(PERIOD_MAP).map((key) => ({\r\n        text: PERIOD_MAP[key].text,\r\n        value: key,\r\n      })),\r\n      render: (period: string) => {\r\n        const config = PERIOD_MAP[period];\r\n        return <Tag color={config.color}>{config.text}</Tag>;\r\n      },\r\n    },\r\n    {\r\n      title: 'Date Range',\r\n      key: 'dateRange',\r\n      width: 180,\r\n      render: (_, record) => (\r\n        <span>{record.startDate} ~ {record.endDate}</span>\r\n      ),\r\n    },\r\n    {\r\n      title: 'Shop',\r\n      dataIndex: 'shopName',\r\n      key: 'shopName',\r\n      width: 150,\r\n    },\r\n    {\r\n      title: 'Created',\r\n      dataIndex: 'createdAt',\r\n      key: 'createdAt',\r\n      width: 160,\r\n    },\r\n    {\r\n      title: 'Actions',\r\n      key: 'action',\r\n      width: 180,\r\n      fixed: 'right',\r\n      render: (_, record) => (\r\n        <Space size=\"small\">\r\n          <Tooltip title=\"View Details\">\r\n            <Button type=\"link\" icon={<EyeOutlined />} onClick={() => handleViewDetail(record)} />\r\n          </Tooltip>\r\n          {record.status === 'COMPLETED' && (\r\n            <Tooltip title=\"Download\">\r\n              <Button type=\"link\" icon={<DownloadOutlined />} onClick={() => handleDownload(record)} />\r\n            </Tooltip>\r\n          )}\r\n          <Tooltip title=\"Edit\">\r\n            <Button type=\"link\" icon={<EditOutlined />} onClick={() => handleEdit(record)} />\r\n          </Tooltip>\r\n          <Tooltip title=\"Delete\">\r\n            <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={() => handleDelete(record.reportId)} />\r\n          </Tooltip>\r\n        </Space>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  const tabItems = [\r\n    {\r\n      key: 'overview',\r\n      label: '报表概览',\r\n      children: (\r\n        <Card>\r\n          <Row gutter={[16, 16]}>\r\n            <Col span={6}>\r\n              <Card>\r\n                <Statistic\r\n                  title=\"Total Reports\"\r\n                  value={stats.totalOrders}\r\n                  prefix={<FileTextOutlined />}\r\n                />\r\n              </Card>\r\n            </Col>\r\n            <Col span={6}>\r\n              <Card>\r\n                <Statistic\r\n                  title=\"Active Reports\"\r\n                  value={stats.totalOrders}\r\n                  prefix={<BarChartOutlined />}\r\n                />\r\n              </Card>\r\n            </Col>\r\n            <Col span={6}>\r\n              <Card>\r\n                <Statistic\r\n                  title=\"Total Views\"\r\n                  value={stats.totalOrders}\r\n                  prefix={<EyeOutlined />}\r\n                />\r\n              </Card>\r\n            </Col>\r\n            <Col span={6}>\r\n              <Card>\r\n                <Statistic\r\n                  title=\"Profit Growth\"\r\n                  value={stats.profitGrowth}\r\n                  precision={1}\r\n                  suffix=\"%\"\r\n                  valueStyle={{ color: '#1890ff' }}\r\n                  prefix={<RiseOutlined />}\r\n                />\r\n              </Card>\r\n            </Col>\r\n          </Row>\r\n        </Card>\r\n      ),\r\n    },\r\n    {\r\n      key: 'reports',\r\n      label: '报表管理',\r\n      children: (\r\n        <Card>\r\n          <Space style={{ marginBottom: 16 }}>\r\n            <Input.Search\r\n              placeholder=\"搜索报表\"\r\n              allowClear\r\n              onSearch={handleSearch}\r\n              style={{ width: 200 }}\r\n              prefix={<SearchOutlined />}\r\n            />\r\n            <Select\r\n              defaultValue=\"all\"\r\n              style={{ width: 120 }}\r\n              onChange={handleFilter}\r\n            >\r\n              <Option value=\"all\">全部</Option>\r\n              <Option value=\"sales\">销售</Option>\r\n              <Option value=\"inventory\">库存</Option>\r\n              <Option value=\"finance\">财务</Option>\r\n            </Select>\r\n            <Button icon={<ReloadOutlined />} onClick={handleRefresh}>\r\n              刷新\r\n            </Button>\r\n            <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleCreate}>\r\n              新建报表\r\n            </Button>\r\n          </Space>\r\n          <Table\r\n            columns={columns}\r\n            dataSource={getFilteredReports()}\r\n            rowKey=\"reportId\"\r\n            pagination={{ pageSize: 10 }}\r\n          />\r\n        </Card>\r\n      ),\r\n    },\r\n    {\r\n      key: 'custom',\r\n      label: '自定义报表',\r\n      children: (\r\n        <Card>\r\n          <Alert\r\n            message=\"自定义报表功能\"\r\n            description=\"您可以创建自定义报表来满足特定的业务需求。\"\r\n            type=\"info\"\r\n            showIcon\r\n            style={{ marginBottom: 16 }}\r\n          />\r\n          <Button type=\"primary\" icon={<PlusOutlined />}>\r\n            创建自定义报表          </Button>\r\n        </Card>\r\n      ),\r\n    },\r\n    {\r\n      key: 'schedule',\r\n      label: '报表计划',\r\n      children: (\r\n        <Card>\r\n          <Alert\r\n            message=\"报表计划功能\"\r\n            description=\"您可以设置报表的自动生成和发送计划。\"\r\n            type=\"info\"\r\n            showIcon\r\n            style={{ marginBottom: 16 }}\r\n          />\r\n          <Button type=\"primary\" icon={<PlusOutlined />}>\r\n            创建报表计划\r\n          </Button>\r\n        </Card>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <div className=\"reports-page\">\r\n      <div className=\"page-header\">\r\n        <h1>报表中心</h1>\r\n      </div>\r\n\r\n      <Row gutter={16} style={{ marginBottom: 24 }}>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Total Revenue\"\r\n              value={stats.totalRevenue}\r\n              precision={2}\r\n              prefix=\"$\"\r\n              valueStyle={{ color: '#52c41a' }}\r\n              suffix={<RiseOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Total Profit\"\r\n              value={stats.totalProfit}\r\n              precision={2}\r\n              prefix=\"$\"\r\n              valueStyle={{ color: '#1890ff' }}\r\n              suffix={<RiseOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Total Orders\"\r\n              value={stats.totalOrders}\r\n              valueStyle={{ color: '#722ed1' }}\r\n              prefix={<OrderedListOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Profit Margin\"\r\n              value={stats.profitMargin}\r\n              precision={1}\r\n              suffix=\"%\"\r\n              valueStyle={{ color: '#faad14' }}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Revenue Growth\"\r\n              value={stats.revenueGrowth}\r\n              precision={1}\r\n              suffix=\"%\"\r\n              valueStyle={{ color: '#52c41a' }}\r\n              prefix={<RiseOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic\r\n              title=\"Profit Growth\"\r\n              value={stats.profitGrowth}\r\n              precision={1}\r\n              suffix=\"%\"\r\n              valueStyle={{ color: '#1890ff' }}\r\n              prefix={<RiseOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n      </Row>\r\n\r\n      <Tabs activeKey={activeTab} onChange={setActiveTab} items={tabItems} />\r\n\r\n      <Modal\r\n        title=\"报表详情\"\r\n        open={detailModalVisible}\r\n        onCancel={() => setDetailModalVisible(false)}\r\n        footer={[\r\n          <Button key=\"close\" onClick={() => setDetailModalVisible(false)}>\r\n            关闭\r\n          </Button>,\r\n        ]}\r\n        width={800}\r\n      >\r\n        {selectedReport && (\r\n          <>\r\n            {selectedReport.status === 'FAILED' && (\r\n              <Alert\r\n                message=\"报表生成失败\"\r\n                description={selectedReport.errorMessage}\r\n                type=\"error\"\r\n                showIcon\r\n                style={{ marginBottom: 16 }}\r\n              />\r\n            )}\r\n            <Descriptions column={2} bordered>\r\n              <Descriptions.Item label=\"报表ID\">{selectedReport.reportId}</Descriptions.Item>\r\n              <Descriptions.Item label=\"报表名称\">{selectedReport.name}</Descriptions.Item>\r\n              <Descriptions.Item label=\"报表类型\">\r\n                <Tag icon={REPORT_TYPE_MAP[selectedReport.type].icon} color={REPORT_TYPE_MAP[selectedReport.type].color}>\r\n                  {REPORT_TYPE_MAP[selectedReport.type].text}\r\n                </Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"报表状态\">\r\n                <Tag icon={REPORT_STATUS_MAP[selectedReport.status].icon} color={REPORT_STATUS_MAP[selectedReport.status].color}>\r\n                  {REPORT_STATUS_MAP[selectedReport.status].text}\r\n                </Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"报表周期\">\r\n                <Tag color={PERIOD_MAP[selectedReport.period].color}>\r\n                  {PERIOD_MAP[selectedReport.period].text}\r\n                </Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"创建人\">{selectedReport.createdBy}</Descriptions.Item>\r\n              <Descriptions.Item label=\"开始日期\">{selectedReport.startDate}</Descriptions.Item>\r\n              <Descriptions.Item label=\"结束日期\">{selectedReport.endDate}</Descriptions.Item>\r\n              <Descriptions.Item label=\"创建时间\">{selectedReport.createdAt}</Descriptions.Item>\r\n              <Descriptions.Item label=\"店铺\">{selectedReport.shopName || '-'}</Descriptions.Item>\r\n              {selectedReport.fileSize && (\r\n                <Descriptions.Item label=\"文件大小\">{selectedReport.fileSize}</Descriptions.Item>\r\n              )}\r\n            </Descriptions>\r\n            {selectedReport.status === 'COMPLETED' && (\r\n              <div style={{ marginTop: 16 }}>\r\n                <Button type=\"primary\" icon={<DownloadOutlined />} onClick={() => handleDownload(selectedReport)}>\r\n                  下载报表\r\n                </Button>\r\n              </div>\r\n            )}\r\n          </>\r\n        )}\r\n      </Modal>\r\n\r\n      <Modal\r\n        title=\"创建报表\"\r\n        open={createModalVisible}\r\n        onOk={handleCreateSubmit}\r\n        onCancel={() => setCreateModalVisible(false)}\r\n        width={600}\r\n      >\r\n        <Form form={createForm} layout=\"vertical\">\r\n          <Form.Item\r\n            name=\"name\"\r\n            label=\"报表名称\"\r\n            rules={[{ required: true, message: '请输入报表名称' }]}\r\n          >\r\n            <Input placeholder=\"请输入报表名称\" />\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"type\"\r\n            label=\"报表类型\"\r\n            rules={[{ required: true, message: '请选择报表类型' }]}\r\n          >\r\n            <Select placeholder=\"请选择报表类型\">\r\n              {Object.keys(REPORT_TYPE_MAP).map((key) => (\r\n                <Option key={key} value={key}>\r\n                  {REPORT_TYPE_MAP[key].text}\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"period\"\r\n            label=\"报表周期\"\r\n            rules={[{ required: true, message: '请选择报表周期' }]}\r\n          >\r\n            <Select placeholder=\"请选择报表周期\">\r\n              {Object.keys(PERIOD_MAP).map((key) => (\r\n                <Option key={key} value={key}>\r\n                  {PERIOD_MAP[key].text}\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"dateRange\"\r\n            label=\"日期范围\"\r\n            rules={[{ required: true, message: '请选择日期范围' }]}\r\n          >\r\n            <RangePicker style={{ width: '100%' }} />\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"shopId\"\r\n            label=\"店铺\"\r\n          >\r\n            <Select placeholder=\"请选择店铺\" allowClear>\r\n              <Option value=\"SHOP_001\">Amazon US Store</Option>\r\n              <Option value=\"SHOP_002\">eBay Outlet</Option>\r\n              <Option value=\"SHOP_003\">Shopify Brand Store</Option>\r\n              <Option value=\"SHOP_004\">Shopee Mall</Option>\r\n              <Option value=\"SHOP_005\">Lazada Store</Option>\r\n            </Select>\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n\r\n      <Modal\r\n        title=\"编辑报表\"\r\n        open={editModalVisible}\r\n        onOk={handleEditSubmit}\r\n        onCancel={() => setEditModalVisible(false)}\r\n        width={600}\r\n      >\r\n        <Form form={editForm} layout=\"vertical\">\r\n          <Form.Item\r\n            name=\"name\"\r\n            label=\"报表名称\"\r\n            rules={[{ required: true, message: '请输入报表名称' }]}\r\n          >\r\n            <Input placeholder=\"请输入报表名称\" />\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"type\"\r\n            label=\"报表类型\"\r\n            rules={[{ required: true, message: '请选择报表类型' }]}\r\n          >\r\n            <Select placeholder=\"请选择报表类型\">\r\n              {Object.keys(REPORT_TYPE_MAP).map((key) => (\r\n                <Option key={key} value={key}>\r\n                  {REPORT_TYPE_MAP[key].text}\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"period\"\r\n            label=\"报表周期\"\r\n            rules={[{ required: true, message: '请选择报表周期' }]}\r\n          >\r\n            <Select placeholder=\"请选择报表周期\">\r\n              {Object.keys(PERIOD_MAP).map((key) => (\r\n                <Option key={key} value={key}>\r\n                  {PERIOD_MAP[key].text}\r\n                </Option>\r\n              ))}\r\n            </Select>\r\n          </Form.Item>\r\n          <Form.Item\r\n            name=\"dateRange\"\r\n            label=\"日期范围\"\r\n            rules={[{ required: true, message: '请选择日期范围' }]}\r\n          >\r\n            <RangePicker style={{ width: '100%' }} />\r\n          </Form.Item>\r\n        </Form>\r\n      </Modal>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Reports;\r\n\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Reports/index.tsx"
    },
    "41": {
      "path": "/dashboard/multi-shop-report",
      "file": "@/pages/MultiShopReport/index.tsx",
      "parentId": "4",
      "id": "41",
      "absPath": "/dashboard/multi-shop-report",
      "__content": "/**\n * [FE-SHOP-REP001] 多店铺报表聚合页面\n * 支持销售报表、利润报表、库存报表、流量报表、转化报表\n * AI注意: 此页面用于多店铺报表统一展示和分析\n */\n\nimport {\n  useState,\n  useEffect,\n  useCallback,\n  Card,\n  Tabs,\n  Row,\n  Col,\n  Statistic,\n  Table,\n  Tag,\n  Space,\n  Button,\n  DatePicker,\n  Select,\n  Typography,\n  Progress,\n  List,\n  Avatar,\n  Spin,\n  message,\n  Dropdown,\n  Menu,\n  Tooltip,\n  Badge,\n  DollarOutlined,\n  ShoppingCartOutlined,\n  RiseOutlined,\n  FallOutlined,\n  DownloadOutlined,\n  ShopOutlined,\n  StockOutlined,\n  EyeOutlined,\n  PercentageOutlined,\n  AlertOutlined,\n  ArrowUpOutlined,\n  ArrowDownOutlined,\n  RangePicker,\n  Option,\n  Title,\n  Text,\n  FC,\n} from '@/imports';\nimport { Line, Column, Pie, Area, Funnel } from '@ant-design/charts';\nimport moment from 'moment';\nimport HierarchySelector from '../../components/HierarchySelector';\n\n// 平台颜色\nconst PLATFORM_COLORS: Record<string, string> = {\n  TikTok: 'pink',\n  Shopee: 'orange',\n  Lazada: 'blue',\n  Amazon: 'cyan',\n  eBay: 'yellow',\n  '1688': 'red',\n};\n\n// Mock数据 - 销售报表\nconst MOCK_SALES_REPORT = {\n  totalSales: 568900.50,\n  totalOrders: 2856,\n  totalProducts: 8920,\n  avgOrderValue: 199.33,\n  salesGrowth: 18.5,\n  orderGrowth: 12.3,\n  byShop: [\n    { shopId: 'shop-001', shopName: '上海旗舰店', platform: 'TikTok', sales: 198000, orders: 980, growth: 22.5, contribution: 34.8 },\n    { shopId: 'shop-002', shopName: '杭州分店', platform: 'Shopee', sales: 156000, orders: 820, growth: 15.2, contribution: 27.4 },\n    { shopId: 'shop-003', shopName: '广州店', platform: 'Lazada', sales: 125000, orders: 610, growth: 8.5, contribution: 22.0 },\n    { shopId: 'shop-004', shopName: '深圳店', platform: 'Amazon', sales: 89900.50, orders: 446, growth: 28.1, contribution: 15.8 },\n  ],\n  byPlatform: [\n    { platform: 'TikTok', sales: 198000, orders: 980, growth: 22.5 },\n    { platform: 'Shopee', sales: 156000, orders: 820, growth: 15.2 },\n    { platform: 'Lazada', sales: 125000, orders: 610, growth: 8.5 },\n    { platform: 'Amazon', sales: 89900.50, orders: 446, growth: 28.1 },\n  ],\n  byCategory: [\n    { categoryId: 'cat-001', categoryName: '电子产品', sales: 199115.18, quantity: 3122 },\n    { categoryId: 'cat-002', categoryName: '服装配饰', sales: 142225.13, quantity: 2230 },\n    { categoryId: 'cat-003', categoryName: '家居用品', sales: 113780.10, quantity: 1784 },\n    { categoryId: 'cat-004', categoryName: '美妆护肤', sales: 85335.08, quantity: 1338 },\n    { categoryId: 'cat-005', categoryName: '其他', sales: 28445.01, quantity: 446 },\n  ],\n  trend: Array.from({ length: 30 }, (_, i) => ({\n    date: moment().subtract(29 - i, 'days').format('YYYY-MM-DD'),\n    sales: Math.floor(Math.random() * 30000) + 15000,\n    orders: Math.floor(Math.random() * 150) + 80,\n  })),\n};\n\n// Mock数据 - 利润报表\nconst MOCK_PROFIT_REPORT = {\n  totalRevenue: 568900.50,\n  totalCost: 398230.35,\n  totalProfit: 170670.15,\n  profitMargin: 30.0,\n  roi: 42.9,\n  byShop: [\n    { shopId: 'shop-001', shopName: '上海旗舰店', revenue: 198000, cost: 138600, profit: 59400, margin: 30.0 },\n    { shopId: 'shop-002', shopName: '杭州分店', revenue: 156000, cost: 109200, profit: 46800, margin: 30.0 },\n    { shopId: 'shop-003', shopName: '广州店', revenue: 125000, cost: 87500, profit: 37500, margin: 30.0 },\n    { shopId: 'shop-004', shopName: '深圳店', revenue: 89900.50, cost: 62930.35, profit: 26970.15, margin: 30.0 },\n  ],\n  byPlatform: [\n    { platform: 'TikTok', revenue: 198000, cost: 138600, profit: 59400, margin: 30.0 },\n    { platform: 'Shopee', revenue: 156000, cost: 109200, profit: 46800, margin: 30.0 },\n    { platform: 'Lazada', revenue: 125000, cost: 87500, profit: 37500, margin: 30.0 },\n    { platform: 'Amazon', revenue: 89900.50, cost: 62930.35, profit: 26970.15, margin: 30.0 },\n  ],\n  costBreakdown: {\n    productCost: 219026.69,\n    shippingCost: 59734.55,\n    platformFee: 47787.64,\n    advertisingCost: 39823.04,\n    otherCost: 31858.43,\n  },\n  trend: Array.from({ length: 30 }, (_, i) => ({\n    date: moment().subtract(29 - i, 'days').format('YYYY-MM-DD'),\n    revenue: Math.floor(Math.random() * 25000) + 15000,\n    cost: Math.floor(Math.random() * 15000) + 10000,\n    profit: Math.floor(Math.random() * 10000) + 5000,\n  })),\n};\n\n// Mock数据 - 库存报表\nconst MOCK_INVENTORY_REPORT = {\n  totalStock: 45680,\n  totalValue: 1289500.00,\n  lowStockCount: 23,\n  overStockCount: 15,\n  turnoverRate: 3.8,\n  byShop: [\n    { shopId: 'shop-001', shopName: '上海旗舰店', stock: 15680, value: 456000, turnoverRate: 4.2, lowStockItems: 8 },\n    { shopId: 'shop-002', shopName: '杭州分店', stock: 12500, value: 356000, turnoverRate: 3.5, lowStockItems: 6 },\n    { shopId: 'shop-003', shopName: '广州店', stock: 10500, value: 289000, turnoverRate: 3.8, lowStockItems: 5 },\n    { shopId: 'shop-004', shopName: '深圳店', stock: 7000, value: 188500, turnoverRate: 4.0, lowStockItems: 4 },\n  ],\n  topSelling: [\n    { productId: 'P001', productName: '智能手表Pro', stock: 580, soldQuantity: 1250, turnoverDays: 12 },\n    { productId: 'P002', productName: '无线耳机', stock: 420, soldQuantity: 980, turnoverDays: 15 },\n    { productId: 'P003', productName: '手机壳套装', stock: 890, soldQuantity: 890, turnoverDays: 18 },\n    { productId: 'P004', productName: '运动鞋', stock: 320, soldQuantity: 780, turnoverDays: 20 },\n    { productId: 'P005', productName: 'T恤', stock: 560, soldQuantity: 720, turnoverDays: 22 },\n  ],\n  lowStockAlerts: [\n    { productId: 'P010', productName: '蓝牙音箱', shopName: '上海旗舰店', currentStock: 5, minStock: 20, daysUntilOut: 3 },\n    { productId: 'P011', productName: '充电宝', shopName: '杭州分店', currentStock: 8, minStock: 25, daysUntilOut: 5 },\n    { productId: 'P012', productName: '数据线', shopName: '广州店', currentStock: 12, minStock: 30, daysUntilOut: 7 },\n  ],\n};\n\n// Mock数据 - 流量报表\nconst MOCK_TRAFFIC_REPORT = {\n  totalViews: 856000,\n  totalVisitors: 599200,\n  avgTimeOnSite: 4.2,\n  bounceRate: 35.5,\n  byShop: [\n    { shopId: 'shop-001', shopName: '上海旗舰店', views: 299600, visitors: 209720, avgTime: 4.5, bounceRate: 32.5 },\n    { shopId: 'shop-002', shopName: '杭州分店', views: 242000, visitors: 169400, avgTime: 4.0, bounceRate: 36.0 },\n    { shopId: 'shop-003', shopName: '广州店', views: 185600, visitors: 129920, avgTime: 4.2, bounceRate: 37.5 },\n    { shopId: 'shop-004', shopName: '深圳店', views: 128800, visitors: 90160, avgTime: 4.0, bounceRate: 38.0 },\n  ],\n  bySource: [\n    { source: '自然搜索', views: 299600, visitors: 209720, conversionRate: 3.2 },\n    { source: '付费广告', views: 214000, visitors: 149800, conversionRate: 4.5 },\n    { source: '社交媒体', views: 171200, visitors: 119840, conversionRate: 2.8 },\n    { source: '直接访问', views: 128400, visitors: 89880, conversionRate: 5.1 },\n    { source: '其他', views: 42800, visitors: 29960, conversionRate: 1.5 },\n  ],\n  trend: Array.from({ length: 30 }, (_, i) => ({\n    date: moment().subtract(29 - i, 'days').format('YYYY-MM-DD'),\n    views: Math.floor(Math.random() * 35000) + 25000,\n    visitors: Math.floor(Math.random() * 25000) + 17500,\n  })),\n};\n\n// Mock数据 - 转化报表\nconst MOCK_CONVERSION_REPORT = {\n  totalConversions: 2856,\n  conversionRate: 4.76,\n  avgCartValue: 199.33,\n  cartAbandonRate: 45.2,\n  byShop: [\n    { shopId: 'shop-001', shopName: '上海旗舰店', conversions: 980, rate: 4.67, avgValue: 202.04 },\n    { shopId: 'shop-002', shopName: '杭州分店', conversions: 820, rate: 4.84, avgValue: 190.24 },\n    { shopId: 'shop-003', shopName: '广州店', conversions: 610, rate: 4.70, avgValue: 204.92 },\n    { shopId: 'shop-004', shopName: '深圳店', conversions: 446, rate: 4.95, avgValue: 201.57 },\n  ],\n  byFunnel: [\n    { stage: '访问', count: 100000, dropoff: 0 },\n    { stage: '浏览商品', count: 60000, dropoff: 40 },\n    { stage: '加入购物车', count: 15000, dropoff: 75 },\n    { stage: '开始结账', count: 8000, dropoff: 47 },\n    { stage: '完成购买', count: 4760, dropoff: 41 },\n  ],\n  trend: Array.from({ length: 30 }, (_, i) => ({\n    date: moment().subtract(29 - i, 'days').format('YYYY-MM-DD'),\n    conversions: Math.floor(Math.random() * 150) + 80,\n    rate: Math.random() * 2 + 3.5,\n  })),\n};\n\nconst MultiShopReport: React.FC = () => {\n  const [loading, setLoading] = useState(false);\n  const [activeTab, setActiveTab] = useState('sales');\n  const [salesReport, setSalesReport] = useState<any>(null);\n  const [profitReport, setProfitReport] = useState<any>(null);\n  const [inventoryReport, setInventoryReport] = useState<any>(null);\n  const [trafficReport, setTrafficReport] = useState<any>(null);\n  const [conversionReport, setConversionReport] = useState<any>(null);\n  const [dateRange, setDateRange] = useState<any>([\n    moment().subtract(29, 'days'),\n    moment(),\n  ]);\n  const [hierarchySelection, setHierarchySelection] = useState<any>(null);\n\n  // 加载数据\n  const fetchData = useCallback(async () => {\n    setLoading(true);\n    try {\n      await new Promise(resolve => setTimeout(resolve, 500));\n      setSalesReport(MOCK_SALES_REPORT);\n      setProfitReport(MOCK_PROFIT_REPORT);\n      setInventoryReport(MOCK_INVENTORY_REPORT);\n      setTrafficReport(MOCK_TRAFFIC_REPORT);\n      setConversionReport(MOCK_CONVERSION_REPORT);\n    } catch (error) {\n      message.error('加载数据失败');\n    } finally {\n      setLoading(false);\n    }\n  }, [activeTab, dateRange]);\n\n  useEffect(() => {\n    fetchData();\n  }, [fetchData]);\n\n  // 导出报表\n  const handleExport = (format: string) => {\n    message.success(`正在导出${activeTab === 'sales' ? '销售' : activeTab === 'profit' ? '利润' : activeTab === 'inventory' ? '库存' : activeTab === 'traffic' ? '流量' : '转化'}报表 (${format})`);\n  };\n\n  // 导出菜单\n  const exportMenu = (\n    <Menu>\n      <Menu.Item key=\"csv\" onClick={() => handleExport('CSV')}>\n        导出 CSV\n      </Menu.Item>\n      <Menu.Item key=\"excel\" onClick={() => handleExport('EXCEL')}>\n        导出 Excel\n      </Menu.Item>\n      <Menu.Item key=\"pdf\" onClick={() => handleExport('PDF')}>\n        导出 PDF\n      </Menu.Item>\n    </Menu>\n  );\n\n  // 销售报表内容\n  const renderSalesReport = () => {\n    if (!salesReport) return null;\n\n    const salesTrendConfig = {\n      data: salesReport.trend,\n      xField: 'date',\n      yField: 'sales',\n      smooth: true,\n      point: { size: 3 },\n    };\n\n    const shopColumnConfig = {\n      data: salesReport.byShop,\n      xField: 'shopName',\n      yField: 'sales',\n      label: { position: 'top' },\n      color: '#1890ff',\n    };\n\n    const categoryPieConfig = {\n      data: salesReport.byCategory.map((c: any) => ({ type: c.categoryName, value: c.sales })),\n      angleField: 'value',\n      colorField: 'type',\n      radius: 0.8,\n      label: { type: 'outer', content: '{name} {percentage}' },\n    };\n\n    return (\n      <>\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"总销售额\"\n                value={salesReport.totalSales}\n                precision={2}\n                prefix={<DollarOutlined />}\n                suffix=\"元\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"总订单数\"\n                value={salesReport.totalOrders}\n                prefix={<ShoppingCartOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"客单价\"\n                value={salesReport.avgOrderValue}\n                precision={2}\n                prefix=\"¥\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"销售增长\"\n                value={salesReport.salesGrowth}\n                precision={1}\n                suffix=\"%\"\n                valueStyle={{ color: salesReport.salesGrowth >= 0 ? '#3f8600' : '#cf1322' }}\n                prefix={salesReport.salesGrowth >= 0 ? <ArrowUpOutlined /> : <ArrowDownOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"订单增长\"\n                value={salesReport.orderGrowth}\n                precision={1}\n                suffix=\"%\"\n                valueStyle={{ color: salesReport.orderGrowth >= 0 ? '#3f8600' : '#cf1322' }}\n                prefix={salesReport.orderGrowth >= 0 ? <ArrowUpOutlined /> : <ArrowDownOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"商品销量\"\n                value={salesReport.totalProducts}\n              />\n            </Card>\n          </Col>\n        </Row>\n\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={16}>\n            <Card title=\"销售趋势\">\n              <Line {...salesTrendConfig} />\n            </Card>\n          </Col>\n          <Col span={8}>\n            <Card title=\"品类分布\">\n              <Pie {...categoryPieConfig} />\n            </Card>\n          </Col>\n        </Row>\n\n        <Card title=\"店铺销售排行\">\n          <Table\n            dataSource={salesReport.byShop}\n            rowKey=\"shopId\"\n            pagination={false}\n            columns={[\n              { title: '店铺', dataIndex: 'shopName', key: 'shopName', render: (name, record: any) => (\n                <Space>\n                  <ShopOutlined />\n                  <span>{name}</span>\n                  <Tag color={PLATFORM_COLORS[record.platform] || 'default'}>{record.platform}</Tag>\n                </Space>\n              )},\n              { title: '销售额', dataIndex: 'sales', key: 'sales', align: 'right', render: (v: number) => `¥${v.toLocaleString()}` },\n              { title: '订单数', dataIndex: 'orders', key: 'orders', align: 'center' },\n              { title: '贡献率', dataIndex: 'contribution', key: 'contribution', align: 'center', render: (v: number) => (\n                <Progress percent={v} size=\"small\" />\n              )},\n              { title: '增长率', dataIndex: 'growth', key: 'growth', align: 'center', render: (v: number) => (\n                <Text style={{ color: v >= 0 ? '#3f8600' : '#cf1322' }}>\n                  {v >= 0 ? <RiseOutlined /> : <FallOutlined />} {Math.abs(v)}%\n                </Text>\n              )},\n            ]}\n          />\n        </Card>\n      </>\n    );\n  };\n\n  // 利润报表内容\n  const renderProfitReport = () => {\n    if (!profitReport) return null;\n\n    const profitTrendConfig = {\n      data: [\n        ...profitReport.trend.map((d: any) => ({ ...d, type: '收入', value: d.revenue })),\n        ...profitReport.trend.map((d: any) => ({ ...d, type: '成本', value: d.cost })),\n        ...profitReport.trend.map((d: any) => ({ ...d, type: '利润', value: d.profit })),\n      ],\n      xField: 'date',\n      yField: 'value',\n      seriesField: 'type',\n      smooth: true,\n    };\n\n    const costBreakdownConfig = {\n      data: [\n        { type: '商品成本', value: profitReport.costBreakdown.productCost },\n        { type: '物流成本', value: profitReport.costBreakdown.shippingCost },\n        { type: '平台费用', value: profitReport.costBreakdown.platformFee },\n        { type: '广告成本', value: profitReport.costBreakdown.advertisingCost },\n        { type: '其他成本', value: profitReport.costBreakdown.otherCost },\n      ],\n      angleField: 'value',\n      colorField: 'type',\n      radius: 0.8,\n      label: { type: 'outer', content: '{name} {percentage}' },\n    };\n\n    return (\n      <>\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"总收入\"\n                value={profitReport.totalRevenue}\n                precision={2}\n                prefix=\"¥\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"总成本\"\n                value={profitReport.totalCost}\n                precision={2}\n                prefix=\"¥\"\n                valueStyle={{ color: '#cf1322' }}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"总利润\"\n                value={profitReport.totalProfit}\n                precision={2}\n                prefix=\"¥\"\n                valueStyle={{ color: '#3f8600' }}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"利润率\"\n                value={profitReport.profitMargin}\n                precision={1}\n                suffix=\"%\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"ROI\"\n                value={profitReport.roi}\n                precision={1}\n                suffix=\"%\"\n                valueStyle={{ color: '#3f8600' }}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"利润增长\"\n                value={18.5}\n                precision={1}\n                suffix=\"%\"\n                valueStyle={{ color: '#3f8600' }}\n                prefix={<RiseOutlined />}\n              />\n            </Card>\n          </Col>\n        </Row>\n\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={16}>\n            <Card title=\"利润趋势\">\n              <Area {...profitTrendConfig} />\n            </Card>\n          </Col>\n          <Col span={8}>\n            <Card title=\"成本构成\">\n              <Pie {...costBreakdownConfig} />\n            </Card>\n          </Col>\n        </Row>\n\n        <Card title=\"店铺利润排行\">\n          <Table\n            dataSource={profitReport.byShop}\n            rowKey=\"shopId\"\n            pagination={false}\n            columns={[\n              { title: '店铺', dataIndex: 'shopName', key: 'shopName' },\n              { title: '收入', dataIndex: 'revenue', key: 'revenue', align: 'right', render: (v: number) => `¥${v.toLocaleString()}` },\n              { title: '成本', dataIndex: 'cost', key: 'cost', align: 'right', render: (v: number) => `¥${v.toLocaleString()}` },\n              { title: '利润', dataIndex: 'profit', key: 'profit', align: 'right', render: (v: number) => (\n                <Text strong style={{ color: '#3f8600' }}>¥{v.toLocaleString()}</Text>\n              )},\n              { title: '利润率', dataIndex: 'margin', key: 'margin', align: 'center', render: (v: number) => (\n                <Tag color={v >= 30 ? 'success' : v >= 20 ? 'warning' : 'error'}>{v.toFixed(1)}%</Tag>\n              )},\n            ]}\n          />\n        </Card>\n      </>\n    );\n  };\n\n  // 库存报表内容\n  const renderInventoryReport = () => {\n    if (!inventoryReport) return null;\n\n    return (\n      <>\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"总库存\"\n                value={inventoryReport.totalStock}\n                prefix={<StockOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"库存价值\"\n                value={inventoryReport.totalValue}\n                precision={2}\n                prefix=\"¥\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"周转率\"\n                value={inventoryReport.turnoverRate}\n                precision={1}\n                suffix=\"次/月\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"低库存预警\"\n                value={inventoryReport.lowStockCount}\n                valueStyle={{ color: '#faad14' }}\n                prefix={<AlertOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"高库存商品\"\n                value={inventoryReport.overStockCount}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"平均周转天数\"\n                value={12}\n                suffix=\"天\"\n              />\n            </Card>\n          </Col>\n        </Row>\n\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={12}>\n            <Card title=\"店铺库存分布\">\n              <Table\n                dataSource={inventoryReport.byShop}\n                rowKey=\"shopId\"\n                pagination={false}\n                size=\"small\"\n                columns={[\n                  { title: '店铺', dataIndex: 'shopName', key: 'shopName' },\n                  { title: '库存', dataIndex: 'stock', key: 'stock', align: 'right' },\n                  { title: '价值', dataIndex: 'value', key: 'value', align: 'right', render: (v: number) => `¥${v.toLocaleString()}` },\n                  { title: '周转率', dataIndex: 'turnoverRate', key: 'turnoverRate', align: 'center', render: (v: number) => `${v.toFixed(1)}次` },\n                  { title: '低库存', dataIndex: 'lowStockItems', key: 'lowStockItems', align: 'center', render: (v: number) => (\n                    <Badge count={v} showZero color={v > 0 ? '#faad14' : '#52c41a'} />\n                  )},\n                ]}\n              />\n            </Card>\n          </Col>\n          <Col span={12}>\n            <Card title=\"低库存预警\" extra={<Tag color=\"warning\">{inventoryReport.lowStockAlerts.length} 项</Tag>}>\n              <List\n                dataSource={inventoryReport.lowStockAlerts}\n                renderItem={(item: any) => (\n                  <List.Item>\n                    <List.Item.Meta\n                      avatar={<Avatar style={{ backgroundColor: '#faad14' }}><AlertOutlined /></Avatar>}\n                      title={item.productName}\n                      description={`${item.shopName} | 当前: ${item.currentStock} | 最低: ${item.minStock}`}\n                    />\n                    <Tag color=\"error\">{item.daysUntilOut}天后缺货</Tag>\n                  </List.Item>\n                )}\n              />\n            </Card>\n          </Col>\n        </Row>\n\n        <Card title=\"热销商品TOP5\">\n          <Table\n            dataSource={inventoryReport.topSelling}\n            rowKey=\"productId\"\n            pagination={false}\n            columns={[\n              { title: '商品', dataIndex: 'productName', key: 'productName' },\n              { title: '当前库存', dataIndex: 'stock', key: 'stock', align: 'center' },\n              { title: '已售数量', dataIndex: 'soldQuantity', key: 'soldQuantity', align: 'center' },\n              { title: '周转天数', dataIndex: 'turnoverDays', key: 'turnoverDays', align: 'center', render: (v: number) => `${v}天` },\n              { title: '状态', key: 'status', render: () => <Tag color=\"success\">热销</Tag> },\n            ]}\n          />\n        </Card>\n      </>\n    );\n  };\n\n  // 流量报表内容\n  const renderTrafficReport = () => {\n    if (!trafficReport) return null;\n\n    const trafficTrendConfig = {\n      data: [\n        ...trafficReport.trend.map((d: any) => ({ ...d, type: '浏览量', value: d.views })),\n        ...trafficReport.trend.map((d: any) => ({ ...d, type: '访客数', value: d.visitors })),\n      ],\n      xField: 'date',\n      yField: 'value',\n      seriesField: 'type',\n      smooth: true,\n    };\n\n    const sourceColumnConfig = {\n      data: trafficReport.bySource,\n      xField: 'source',\n      yField: 'views',\n      label: { position: 'top' },\n      color: '#1890ff',\n    };\n\n    return (\n      <>\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"总浏览量\"\n                value={trafficReport.totalViews}\n                prefix={<EyeOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"总访客数\"\n                value={trafficReport.totalVisitors}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"平均停留时间\"\n                value={trafficReport.avgTimeOnSite}\n                precision={1}\n                suffix=\"分钟\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"跳出率\"\n                value={trafficReport.bounceRate}\n                precision={1}\n                suffix=\"%\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"人均浏览\"\n                value={trafficReport.totalViews / trafficReport.totalVisitors}\n                precision={1}\n                suffix=\"页\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"流量增长\"\n                value={15.8}\n                precision={1}\n                suffix=\"%\"\n                valueStyle={{ color: '#3f8600' }}\n                prefix={<RiseOutlined />}\n              />\n            </Card>\n          </Col>\n        </Row>\n\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={16}>\n            <Card title=\"流量趋势\">\n              <Line {...trafficTrendConfig} />\n            </Card>\n          </Col>\n          <Col span={8}>\n            <Card title=\"流量来源\">\n              <Column {...sourceColumnConfig} />\n            </Card>\n          </Col>\n        </Row>\n\n        <Card title=\"店铺流量分布\">\n          <Table\n            dataSource={trafficReport.byShop}\n            rowKey=\"shopId\"\n            pagination={false}\n            columns={[\n              { title: '店铺', dataIndex: 'shopName', key: 'shopName' },\n              { title: '浏览量', dataIndex: 'views', key: 'views', align: 'right' },\n              { title: '访客数', dataIndex: 'visitors', key: 'visitors', align: 'right' },\n              { title: '平均停留', dataIndex: 'avgTime', key: 'avgTime', align: 'center', render: (v: number) => `${v.toFixed(1)}分钟` },\n              { title: '跳出率', dataIndex: 'bounceRate', key: 'bounceRate', align: 'center', render: (v: number) => (\n                <Progress percent={v} size=\"small\" status={v > 40 ? 'exception' : 'normal'} />\n              )},\n            ]}\n          />\n        </Card>\n      </>\n    );\n  };\n\n  // 转化报表内容\n  const renderConversionReport = () => {\n    if (!conversionReport) return null;\n\n    const funnelConfig = {\n      data: conversionReport.byFunnel.map((d: any) => ({ ...d, value: d.count })),\n      xField: 'count',\n      yField: 'stage',\n      legend: false,\n    };\n\n    const conversionTrendConfig = {\n      data: conversionReport.trend,\n      xField: 'date',\n      yField: 'conversions',\n      smooth: true,\n    };\n\n    return (\n      <>\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"总转化数\"\n                value={conversionReport.totalConversions}\n                prefix={<PercentageOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"转化率\"\n                value={conversionReport.conversionRate}\n                precision={2}\n                suffix=\"%\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"平均客单价\"\n                value={conversionReport.avgCartValue}\n                precision={2}\n                prefix=\"¥\"\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"购物车放弃率\"\n                value={conversionReport.cartAbandonRate}\n                precision={1}\n                suffix=\"%\"\n                valueStyle={{ color: '#cf1322' }}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"转化增长\"\n                value={12.5}\n                precision={1}\n                suffix=\"%\"\n                valueStyle={{ color: '#3f8600' }}\n                prefix={<RiseOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic\n                title=\"转化价值\"\n                value={conversionReport.totalConversions * conversionReport.avgCartValue}\n                precision={2}\n                prefix=\"¥\"\n              />\n            </Card>\n          </Col>\n        </Row>\n\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={12}>\n            <Card title=\"转化漏斗\">\n              <Funnel {...funnelConfig} />\n            </Card>\n          </Col>\n          <Col span={12}>\n            <Card title=\"转化趋势\">\n              <Line {...conversionTrendConfig} />\n            </Card>\n          </Col>\n        </Row>\n\n        <Card title=\"店铺转化分析\">\n          <Table\n            dataSource={conversionReport.byShop}\n            rowKey=\"shopId\"\n            pagination={false}\n            columns={[\n              { title: '店铺', dataIndex: 'shopName', key: 'shopName' },\n              { title: '转化数', dataIndex: 'conversions', key: 'conversions', align: 'center' },\n              { title: '转化率', dataIndex: 'rate', key: 'rate', align: 'center', render: (v: number) => (\n                <Tag color={v >= 5 ? 'success' : v >= 3 ? 'warning' : 'error'}>{v.toFixed(2)}%</Tag>\n              )},\n              { title: '平均客单价', dataIndex: 'avgValue', key: 'avgValue', align: 'right', render: (v: number) => `¥${v.toFixed(2)}` },\n              { title: '转化价值', key: 'totalValue', align: 'right', render: (_: any, record: any) => `¥${(record.conversions * record.avgValue).toFixed(2)}` },\n            ]}\n          />\n        </Card>\n      </>\n    );\n  };\n\n  return (\n    <div style={{ padding: 24 }}>\n      <Row justify=\"space-between\" align=\"middle\" style={{ marginBottom: 16 }}>\n        <Col>\n          <Title level={2}>多店铺报表聚合</Title>\n          <Text type=\"secondary\">统一查看多店铺销售、利润、库存、流量、转化报表</Text>\n        </Col>\n        <Col>\n          <Space>\n            <Dropdown overlay={exportMenu}>\n              <Button icon={<DownloadOutlined />}>导出报表</Button>\n            </Dropdown>\n          </Space>\n        </Col>\n      </Row>\n\n      {/* 筛选区域 */}\n      <Card style={{ marginBottom: 24 }}>\n        <Row gutter={16} align=\"middle\">\n          <Col span={8}>\n            <Space>\n              <Text strong>选择范围：</Text>\n              <HierarchySelector\n                mode=\"cascader\"\n                maxLevel=\"SHOP\"\n                onChange={setHierarchySelection}\n                placeholder=\"选择部门/店铺\"\n                style={{ width: 280 }}\n              />\n            </Space>\n          </Col>\n          <Col span={8}>\n            <Space>\n              <Text strong>时间范围：</Text>\n              <RangePicker\n                value={dateRange}\n                onChange={setDateRange}\n                allowClear={false}\n              />\n            </Space>\n          </Col>\n          <Col span={8} style={{ textAlign: 'right' }}>\n            <Button type=\"primary\" onClick={fetchData} loading={loading}>\n              查询\n            </Button>\n          </Col>\n        </Row>\n      </Card>\n\n      {/* 报表内容 */}\n      <Spin spinning={loading}>\n        <Tabs \n          activeKey={activeTab} \n          onChange={setActiveTab} \n          size=\"large\"\n          items={[\n            { key: 'sales', label: <span><DollarOutlined /> 销售报表</span>, children: renderSalesReport() },\n            { key: 'profit', label: <span><RiseOutlined /> 利润报表</span>, children: renderProfitReport() },\n            { key: 'inventory', label: <span><StockOutlined /> 库存报表</span>, children: renderInventoryReport() },\n            { key: 'traffic', label: <span><EyeOutlined /> 流量报表</span>, children: renderTrafficReport() },\n            { key: 'conversion', label: <span><PercentageOutlined /> 转化报表</span>, children: renderConversionReport() },\n          ]}\n        />\n      </Spin>\n    </div>\n  );\n};\n\nexport default MultiShopReport;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/MultiShopReport/index.tsx"
    },
    "42": {
      "path": "/dashboard/leaderboard",
      "file": "@/pages/Leaderboard/index.tsx",
      "parentId": "4",
      "id": "42",
      "absPath": "/dashboard/leaderboard",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Tabs,\n  Table,\n  Tag,\n  Statistic,\n  Row,\n  Col,\n  Spin,\n  message,\n  Select,\n  Button,\n  Tooltip,\n  Badge,\n  TrophyOutlined,\n  RiseOutlined,\n  DollarOutlined,\n  PercentageOutlined,\n  CrownOutlined,\n  FireOutlined,\n  StarOutlined,\n  Option,\n  FC,\n} from '@/imports';\nimport type { ColumnsType } from 'antd/es/table';\nimport { leaderboardDataSource, LeaderboardEntry, LeaderboardData, MyRank } from '@/services/leaderboardDataSource';\n\nconst LeaderboardPage: FC = () => {\n  const [loading, setLoading] = useState(true);\n  const [leaderboardData, setLeaderboardData] = useState<LeaderboardData | null>(null);\n  const [myRank, setMyRank] = useState<MyRank | null>(null);\n  const [period, setPeriod] = useState<'DAILY' | 'WEEKLY' | 'MONTHLY' | 'ALL_TIME'>('MONTHLY');\n  const [activeTab, setActiveTab] = useState('revenue');\n\n  useEffect(() => {\n    fetchLeaderboardData();\n    fetchMyRank();\n  }, [period]);\n\n  const fetchLeaderboardData = async () => {\n    setLoading(true);\n    try {\n      const response = await fetch(`/api/v1/leaderboard/all?period=${period}`, {\n        headers: {\n          'Authorization': `Bearer ${localStorage.getItem('token')}`\n        }\n      });\n      const result = await response.json();\n      if (result.success) {\n        setLeaderboardData(result.data);\n      } else {\n        message.error(result.message || 'Failed to fetch leaderboard data');\n      }\n    } catch (error) {\n      console.error('Error fetching leaderboard:', error);\n      message.error('Failed to fetch leaderboard data');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const fetchMyRank = async () => {\n    try {\n      const response = await fetch(`/api/v1/leaderboard/my-rank?period=${period}`, {\n        headers: {\n          'Authorization': `Bearer ${localStorage.getItem('token')}`\n        }\n      });\n      const result = await response.json();\n      if (result.success) {\n        setMyRank(result.data);\n      }\n    } catch (error) {\n      console.error('Error fetching my rank:', error);\n    }\n  };\n\n  const getTierColor = (tier: string): string => {\n    const colors: Record<string, string> = {\n      'DIAMOND': '#b9f2ff',\n      'PLATINUM': '#e5e4e2',\n      'GOLD': '#ffd700',\n      'SILVER': '#c0c0c0',\n      'BRONZE': '#cd7f32'\n    };\n    return colors[tier] || '#default';\n  };\n\n  const getTierIcon = (tier: string) => {\n    switch (tier) {\n      case 'DIAMOND':\n        return <CrownOutlined style={{ color: '#b9f2ff' }} />;\n      case 'PLATINUM':\n        return <StarOutlined style={{ color: '#e5e4e2' }} />;\n      case 'GOLD':\n        return <TrophyOutlined style={{ color: '#ffd700' }} />;\n      case 'SILVER':\n        return <StarOutlined style={{ color: '#c0c0c0' }} />;\n      default:\n        return null;\n    }\n  };\n\n  const getRankBadge = (rank: number) => {\n    if (rank === 1) return <CrownOutlined style={{ fontSize: 24, color: '#ffd700' }} />;\n    if (rank === 2) return <TrophyOutlined style={{ fontSize: 20, color: '#c0c0c0' }} />;\n    if (rank === 3) return <TrophyOutlined style={{ fontSize: 18, color: '#cd7f32' }} />;\n    return <span style={{ fontWeight: 'bold', fontSize: 16 }}>#{rank}</span>;\n  };\n\n  const formatValue = (value: number, type: string): string => {\n    if (type === 'roi') {\n      return `${(value * 100).toFixed(2)}%`;\n    }\n    if (type === 'growth') {\n      return `${(value * 100).toFixed(2)}%`;\n    }\n    return `$${value.toLocaleString()}`;\n  };\n\n  const columns: ColumnsType<LeaderboardEntry> = [\n    {\n      title: 'Rank',\n      dataIndex: 'rank',\n      key: 'rank',\n      width: 80,\n      render: (rank: number) => (\n        <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n          {getRankBadge(rank)}\n        </div>\n      )\n    },\n    {\n      title: 'Merchant',\n      dataIndex: 'tenant_name',\n      key: 'tenant_name',\n      render: (name: string, record) => (\n        <div>\n          <div style={{ fontWeight: 500 }}>{name}</div>\n          <div style={{ fontSize: 12, color: '#999' }}>{record.shop_name}</div>\n        </div>\n      )\n    },\n    {\n      title: 'Tier',\n      dataIndex: 'tier',\n      key: 'tier',\n      width: 100,\n      render: (tier: string) => (\n        <Tag color={getTierColor(tier)} icon={getTierIcon(tier)}>\n          {tier}\n        </Tag>\n      )\n    },\n    {\n      title: activeTab === 'revenue' ? 'Profit' : activeTab === 'roi' ? 'ROI' : 'Growth Rate',\n      dataIndex: 'value',\n      key: 'value',\n      sorter: (a, b) => a.value - b.value,\n      render: (value: number) => (\n        <span style={{ fontWeight: 'bold', fontSize: 16, color: '#52c41a' }}>\n          {formatValue(value, activeTab)}\n        </span>\n      )\n    },\n    {\n      title: 'Growth',\n      dataIndex: 'growth_rate',\n      key: 'growth_rate',\n      width: 100,\n      render: (rate: number) => (\n        <span style={{ color: rate >= 0 ? '#52c41a' : '#ff4d4f' }}>\n          {rate >= 0 ? <RiseOutlined /> : null} {(rate * 100).toFixed(1)}%\n        </span>\n      )\n    },\n    {\n      title: 'Verified',\n      dataIndex: 'is_verified',\n      key: 'is_verified',\n      width: 80,\n      render: (verified: boolean) => (\n        verified ? (\n          <Badge status=\"success\" text=\"Verified\" />\n        ) : (\n          <Badge status=\"default\" text=\"Pending\" />\n        )\n      )\n    }\n  ];\n\n  const renderMyRankCard = () => {\n    if (!myRank) return null;\n\n    const rankData = myRank[activeTab as keyof MyRank] as { rank: number; percentile: number } | null;\n\n    return (\n      <Card style={{ marginBottom: 16 }}>\n        <Row gutter={24}>\n          <Col span={8}>\n            <Statistic\n              title=\"My Revenue Rank\"\n              value={myRank.revenue?.rank || '-'}\n              suffix={myRank.revenue ? `/ ${leaderboardData?.revenue.total || 0}` : ''}\n              prefix={<DollarOutlined />}\n            />\n            {myRank.revenue && (\n              <div style={{ marginTop: 8, color: '#999' }}>\n                Top {myRank.revenue.percentile.toFixed(1)}%\n              </div>\n            )}\n          </Col>\n          <Col span={8}>\n            <Statistic\n              title=\"My ROI Rank\"\n              value={myRank.roi?.rank || '-'}\n              suffix={myRank.roi ? `/ ${leaderboardData?.roi.total || 0}` : ''}\n              prefix={<PercentageOutlined />}\n            />\n            {myRank.roi && (\n              <div style={{ marginTop: 8, color: '#999' }}>\n                Top {myRank.roi.percentile.toFixed(1)}%\n              </div>\n            )}\n          </Col>\n          <Col span={8}>\n            <Statistic\n              title=\"My Growth Rank\"\n              value={myRank.growth?.rank || '-'}\n              suffix={myRank.growth ? `/ ${leaderboardData?.growth.total || 0}` : ''}\n              prefix={<RiseOutlined />}\n            />\n            {myRank.growth && (\n              <div style={{ marginTop: 8, color: '#999' }}>\n                Top {myRank.growth.percentile.toFixed(1)}%\n              </div>\n            )}\n          </Col>\n        </Row>\n      </Card>\n    );\n  };\n\n  const renderLeaderboardTable = (data: LeaderboardEntry[], type: string) => {\n    return (\n      <Table\n        columns={columns}\n        dataSource={data}\n        rowKey=\"tenant_id\"\n        pagination={{ pageSize: 10 }}\n        loading={loading}\n        scroll={{ x: 800 }}\n      />\n    );\n  };\n\n  return (\n    <div style={{ padding: 24 }}>\n      <Card>\n        <div style={{ marginBottom: 24, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n          <div>\n            <h1 style={{ margin: 0 }}>\n              <TrophyOutlined style={{ marginRight: 8, color: '#ffd700' }} />\n              Merchant Leaderboard\n            </h1>\n            <p style={{ color: '#999', margin: '8px 0 0 0' }}>\n              See how you compare with other merchants\n            </p>\n          </div>\n          <div>\n            <Select\n              value={period}\n              onChange={(value) => setPeriod(value)}\n              style={{ width: 150, marginRight: 16 }}\n            >\n              <Option value=\"DAILY\">Daily</Option>\n              <Option value=\"WEEKLY\">Weekly</Option>\n              <Option value=\"MONTHLY\">Monthly</Option>\n              <Option value=\"ALL_TIME\">All Time</Option>\n            </Select>\n            <Button type=\"primary\" onClick={fetchLeaderboardData}>\n              Refresh\n            </Button>\n          </div>\n        </div>\n\n        {renderMyRankCard()}\n\n        <Tabs \n          activeKey={activeTab} \n          onChange={setActiveTab}\n          items={[\n            { key: 'revenue', label: <span><DollarOutlined /> Revenue Ranking</span>, children: leaderboardData && renderLeaderboardTable(leaderboardData.revenue.rankings, 'revenue') },\n            { key: 'roi', label: <span><PercentageOutlined /> ROI Ranking</span>, children: leaderboardData && renderLeaderboardTable(leaderboardData.roi.rankings, 'roi') },\n            { key: 'growth', label: <span><RiseOutlined /> Growth Ranking</span>, children: leaderboardData && renderLeaderboardTable(leaderboardData.growth.rankings, 'growth') },\n          ]}\n        />\n\n        {leaderboardData && (\n          <div style={{ marginTop: 16, color: '#999', fontSize: 12 }}>\n            Last updated: {new Date(leaderboardData.updatedAt).toLocaleString()}\n          </div>\n        )}\n      </Card>\n\n      <Card style={{ marginTop: 16 }}>\n        <h3>\n          <FireOutlined style={{ marginRight: 8, color: '#ff4d4f' }} />\n          TOP 10 Merchants Showcase\n        </h3>\n        <Row gutter={[16, 16]}>\n          {leaderboardData?.revenue.rankings.slice(0, 10).map((entry, index) => (\n            <Col span={4} key={entry.tenant_id}>\n              <Card\n                hoverable\n                style={{\n                  textAlign: 'center',\n                  background: index === 0 ? 'linear-gradient(135deg, #ffd700 0%, #ffecb3 100%)' : undefined\n                }}\n              >\n                <div style={{ fontSize: 24, marginBottom: 8 }}>\n                  {getRankBadge(entry.rank)}\n                </div>\n                <div style={{ fontWeight: 'bold', marginBottom: 4 }}>\n                  {entry.tenant_name}\n                </div>\n                <Tag color={getTierColor(entry.tier)} icon={getTierIcon(entry.tier)}>\n                  {entry.tier}\n                </Tag>\n                <div style={{ marginTop: 8, color: '#52c41a', fontWeight: 'bold' }}>\n                  ${entry.value.toLocaleString()}\n                </div>\n                {entry.is_verified && (\n                  <Badge status=\"success\" style={{ marginTop: 4 }} />\n                )}\n              </Card>\n            </Col>\n          ))}\n        </Row>\n      </Card>\n    </div>\n  );\n};\n\nexport default LeaderboardPage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Leaderboard/index.tsx"
    },
    "43": {
      "path": "/dashboard/merchant",
      "file": "@/pages/Merchant/index.tsx",
      "parentId": "4",
      "id": "43",
      "absPath": "/dashboard/merchant",
      "__content": "import { Card, Typography, Row, Col, Button, PlusOutlined, Title, Text, FC } from '@/imports';\n\nconst MerchantManagement: FC = () => {\n  return (\n    <div>\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <Title level={4}>商户管理</Title>\n        <Button type=\"primary\" icon={<PlusOutlined />}>\n          添加商户\n        </Button>\n      </div>\n\n      <Row gutter={[16, 16]}>\n        <Col span={24}>\n          <Card title=\"商户列表\">\n            <Text>商户管理页面内容</Text>\n          </Card>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nexport default MerchantManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Merchant/index.tsx"
    },
    "44": {
      "path": "/dashboard/b2b",
      "file": "@/pages/B2B/index.tsx",
      "parentId": "4",
      "id": "44",
      "absPath": "/dashboard/b2b",
      "__content": "import { useNavigate, useLocation, FC } from '@/imports';\n\nconst B2BIndex: FC = () => {\n  const navigate = useNavigate();\n  const location = useLocation();\n  const { pathname } = location;\n  \n  if (pathname === '/dashboard/b2b' || pathname === '/dashboard/b2b/') {\n    navigate('/dashboard/b2b-trade', { replace: true });\n    return null;\n  }\n  if (pathname.includes('/batch-order')) {\n    navigate('/dashboard/b2b-trade', { replace: true });\n    return null;\n  }\n  if (pathname.includes('/enterprise-quote')) {\n    navigate('/dashboard/b2b-trade', { replace: true });\n    return null;\n  }\n  if (pathname.includes('/contract-manage')) {\n    navigate('/dashboard/b2b-trade', { replace: true });\n    return null;\n  }\n  navigate('/dashboard/b2b-trade', { replace: true });\n  return null;\n};\n\nexport default B2BIndex;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/B2B/index.tsx"
    },
    "45": {
      "path": "/dashboard/b2b/batch-order",
      "file": "@/pages/B2B/BatchOrder.tsx",
      "parentId": "4",
      "id": "45",
      "absPath": "/dashboard/b2b/batch-order",
      "__content": "import { useNavigate, FC } from '@/imports';\n\nconst BatchOrder: FC = () => {\n  const navigate = useNavigate();\n  navigate('/dashboard/b2b-trade', { replace: true });\n  return null;\n};\n\nexport default BatchOrder;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/B2B/BatchOrder.tsx"
    },
    "46": {
      "path": "/dashboard/b2b/enterprise-quote",
      "file": "@/pages/B2B/EnterpriseQuote.tsx",
      "parentId": "4",
      "id": "46",
      "absPath": "/dashboard/b2b/enterprise-quote",
      "__content": "import { useNavigate, FC } from '@/imports';\n\nconst EnterpriseQuote: FC = () => {\n  const navigate = useNavigate();\n  navigate('/dashboard/b2b-trade', { replace: true });\n  return null;\n};\n\nexport default EnterpriseQuote;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/B2B/EnterpriseQuote.tsx"
    },
    "47": {
      "path": "/dashboard/b2b/contract-manage",
      "file": "@/pages/B2B/ContractManage.tsx",
      "parentId": "4",
      "id": "47",
      "absPath": "/dashboard/b2b/contract-manage",
      "__content": "import { useNavigate, FC } from '@/imports';\n\nconst ContractManage: FC = () => {\n  const navigate = useNavigate();\n  navigate('/dashboard/b2b-trade', { replace: true });\n  return null;\n};\n\nexport default ContractManage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/B2B/ContractManage.tsx"
    },
    "48": {
      "path": "/dashboard/procurement",
      "file": "@/pages/Procurement/index.tsx",
      "parentId": "4",
      "id": "48",
      "absPath": "/dashboard/procurement",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Button,\n  Space,\n  Tag,\n  Row,\n  Col,\n  Statistic,\n  Modal,\n  Form,\n  Input,\n  InputNumber,\n  Select,\n  DatePicker,\n  Tabs,\n  Tooltip,\n  Badge,\n  message,\n  Descriptions,\n  Divider,\n  Alert,\n  Popconfirm,\n  Rate,\n  Progress,\n  Drawer,\n  List,\n  Avatar,\n  Timeline,\n  ShoppingOutlined,\n  TeamOutlined,\n  PlusOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  EyeOutlined,\n  SearchOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  CarOutlined,\n  InboxOutlined,\n  DollarOutlined,\n  StarOutlined,\n  PhoneOutlined,\n  MailOutlined,\n  EnvironmentOutlined,\n  ClockCircleOutlined,\n  WarningOutlined,\n  Option,\n  RangePicker,\n  TextArea,\n  FC,\n} from '@/imports';\nimport type { TabsProps } from 'antd';\nimport type { ColumnsType } from 'antd/es/table';\nimport dayjs from 'dayjs';\nimport {\n  procurementDataSource,\n  SUPPLIER_STATUS_COLORS,\n  SUPPLIER_LEVEL_COLORS,\n  PROCUREMENT_STATUS_COLORS,\n  PROCUREMENT_STATUS_TEXT,\n  PAYMENT_STATUS_COLORS,\n  QUALITY_STATUS_COLORS,\n} from '@/services/procurementDataSource';\nimport {\n  Supplier,\n  ProcurementRecord,\n  ProcurementStats,\n  ProcurementStatus,\n  SupplierStatus,\n  QualityStatus,\n} from '@/types/procurement';\n\nconst ProcurementManagement: FC = () => {\n  const [suppliers, setSuppliers] = useState<Supplier[]>([]);\n  const [procurementRecords, setProcurementRecords] = useState<ProcurementRecord[]>([]);\n  const [stats, setStats] = useState<ProcurementStats | null>(null);\n  const [loading, setLoading] = useState(false);\n  const [activeTab, setActiveTab] = useState('records');\n  \n  const [supplierModalVisible, setSupplierModalVisible] = useState(false);\n  const [procurementModalVisible, setProcurementModalVisible] = useState(false);\n  const [detailDrawerVisible, setDetailDrawerVisible] = useState(false);\n  const [receiveModalVisible, setReceiveModalVisible] = useState(false);\n  \n  const [selectedSupplier, setSelectedSupplier] = useState<Supplier | null>(null);\n  const [selectedRecord, setSelectedRecord] = useState<ProcurementRecord | null>(null);\n  const [editingSupplier, setEditingSupplier] = useState<Supplier | null>(null);\n  \n  const [supplierForm] = Form.useForm();\n  const [procurementForm] = Form.useForm();\n  const [receiveForm] = Form.useForm();\n  \n  const [statusFilter, setStatusFilter] = useState<ProcurementStatus | 'all'>('all');\n  const [dateRange, setDateRange] = useState<[dayjs.Dayjs, dayjs.Dayjs] | null>(null);\n\n  useEffect(() => {\n    loadData();\n  }, []);\n\n  const loadData = async () => {\n    setLoading(true);\n    try {\n      const [suppliersData, recordsData, statsData] = await Promise.all([\n        procurementDataSource.fetchSuppliers('tenant-001'),\n        procurementDataSource.fetchProcurementRecords('tenant-001'),\n        procurementDataSource.fetchProcurementStats('tenant-001'),\n      ]);\n      setSuppliers(suppliersData);\n      setProcurementRecords(recordsData);\n      setStats(statsData);\n    } catch (error) {\n      message.error('加载数据失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleCreateSupplier = async (values: any) => {\n    try {\n      await procurementDataSource.createSupplier({\n        name: values.name,\n        code: values.code,\n        contact_person: values.contact_person,\n        phone: values.phone,\n        email: values.email,\n        address: values.address,\n        category: values.category || [],\n        payment_terms: values.payment_terms,\n        credit_limit: values.credit_limit,\n        lead_time_days: values.lead_time_days,\n        min_order_amount: values.min_order_amount,\n        remarks: values.remarks,\n      });\n      message.success('供应商创建成功');\n      setSupplierModalVisible(false);\n      supplierForm.resetFields();\n      loadData();\n    } catch (error) {\n      message.error('创建失败');\n    }\n  };\n\n  const handleCreateProcurement = async (values: any) => {\n    try {\n      const items = values.items.map((item: any) => ({\n        product_id: item.product_id || `PROD-${Date.now()}`,\n        product_name: item.product_name,\n        sku: item.sku,\n        quantity: item.quantity,\n        unit: item.unit,\n        unit_price: item.unit_price,\n      }));\n\n      await procurementDataSource.createProcurement({\n        supplier_id: values.supplier_id,\n        items,\n        expected_date: values.expected_date?.format('YYYY-MM-DD'),\n        warehouse_id: values.warehouse_id,\n        remarks: values.remarks,\n      });\n      message.success('采购单创建成功');\n      setProcurementModalVisible(false);\n      procurementForm.resetFields();\n      loadData();\n    } catch (error) {\n      message.error('创建失败');\n    }\n  };\n\n  const handleApproveProcurement = async (recordId: string) => {\n    try {\n      await procurementDataSource.approveProcurement(recordId);\n      message.success('采购单已确认');\n      loadData();\n    } catch (error) {\n      message.error('操作失败');\n    }\n  };\n\n  const handleCancelProcurement = async (recordId: string, reason: string) => {\n    try {\n      await procurementDataSource.cancelProcurement(recordId, reason);\n      message.success('采购单已取消');\n      loadData();\n    } catch (error) {\n      message.error('操作失败');\n    }\n  };\n\n  const handleReceiveProcurement = async (values: any) => {\n    if (!selectedRecord) return;\n    \n    try {\n      const items = selectedRecord.items.map(item => ({\n        item_id: item.id,\n        received_quantity: values[`received_${item.id}`] || 0,\n        quality_status: values[`quality_${item.id}`] || 'PENDING',\n      }));\n\n      await procurementDataSource.receiveProcurement(selectedRecord.id, items);\n      message.success('收货成功');\n      setReceiveModalVisible(false);\n      receiveForm.resetFields();\n      loadData();\n    } catch (error) {\n      message.error('操作失败');\n    }\n  };\n\n  const handleDeleteSupplier = async (supplierId: string) => {\n    try {\n      await procurementDataSource.deleteSupplier(supplierId);\n      message.success('供应商已删除');\n      loadData();\n    } catch (error) {\n      message.error('删除失败');\n    }\n  };\n\n  const filteredRecords = procurementRecords.filter(record => {\n    if (statusFilter !== 'all' && record.status !== statusFilter) return false;\n    if (dateRange) {\n      const recordDate = dayjs(record.created_at);\n      if (recordDate.isBefore(dateRange[0]) || recordDate.isAfter(dateRange[1])) return false;\n    }\n    return true;\n  });\n\n  const supplierColumns: ColumnsType<Supplier> = [\n    {\n      title: '供应商编码',\n      dataIndex: 'code',\n      key: 'code',\n      width: 120,\n      render: (code: string) => <code>{code}</code>,\n    },\n    {\n      title: '供应商名称',\n      dataIndex: 'name',\n      key: 'name',\n      width: 200,\n      ellipsis: true,\n    },\n    {\n      title: '等级',\n      dataIndex: 'level',\n      key: 'level',\n      width: 80,\n      render: (level: string) => (\n        <Tag color={SUPPLIER_LEVEL_COLORS[level]} icon={<StarOutlined />}>\n          {level}\n        </Tag>\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      width: 100,\n      render: (status: SupplierStatus) => (\n        <Tag color={SUPPLIER_STATUS_COLORS[status]}>\n          {status === 'ACTIVE' ? '合作中' : status === 'INACTIVE' ? '暂停合作' : '黑名单'}\n        </Tag>\n      ),\n    },\n    {\n      title: '联系人',\n      dataIndex: 'contact_person',\n      key: 'contact_person',\n      width: 100,\n    },\n    {\n      title: '联系电话',\n      dataIndex: 'phone',\n      key: 'phone',\n      width: 120,\n    },\n    {\n      title: '评分',\n      dataIndex: 'rating',\n      key: 'rating',\n      width: 120,\n      render: (rating: number) => <Rate disabled defaultValue={rating} allowHalf />,\n    },\n    {\n      title: '准时率',\n      dataIndex: 'on_time_rate',\n      key: 'on_time_rate',\n      width: 100,\n      render: (rate: number) => (\n        <Progress\n          percent={rate}\n          size=\"small\"\n          status={rate >= 90 ? 'success' : rate >= 70 ? 'normal' : 'exception'}\n        />\n      ),\n    },\n    {\n      title: '合格率',\n      dataIndex: 'quality_pass_rate',\n      key: 'quality_pass_rate',\n      width: 100,\n      render: (rate: number) => (\n        <Progress\n          percent={rate}\n          size=\"small\"\n          status={rate >= 95 ? 'success' : rate >= 85 ? 'normal' : 'exception'}\n        />\n      ),\n    },\n    {\n      title: '累计金额',\n      dataIndex: 'total_amount',\n      key: 'total_amount',\n      width: 120,\n      render: (amount: number) => `¥${amount.toLocaleString()}`,\n    },\n    {\n      title: '操作',\n      key: 'actions',\n      width: 150,\n      fixed: 'right',\n      render: (_, record) => (\n        <Space size=\"small\">\n          <Tooltip title=\"查看详情\">\n            <Button\n              type=\"link\"\n              size=\"small\"\n              icon={<EyeOutlined />}\n              onClick={() => {\n                setSelectedSupplier(record);\n                setDetailDrawerVisible(true);\n              }}\n            />\n          </Tooltip>\n          <Tooltip title=\"编辑\">\n            <Button\n              type=\"link\"\n              size=\"small\"\n              icon={<EditOutlined />}\n              onClick={() => {\n                setEditingSupplier(record);\n                supplierForm.setFieldsValue(record);\n                setSupplierModalVisible(true);\n              }}\n            />\n          </Tooltip>\n          <Popconfirm\n            title=\"确定删除此供应商？\"\n            onConfirm={() => handleDeleteSupplier(record.id)}\n          >\n            <Button type=\"link\" size=\"small\" danger icon={<DeleteOutlined />} />\n          </Popconfirm>\n        </Space>\n      ),\n    },\n  ];\n\n  const procurementColumns: ColumnsType<ProcurementRecord> = [\n    {\n      title: '采购单号',\n      dataIndex: 'order_no',\n      key: 'order_no',\n      width: 140,\n      render: (no: string) => <code>{no}</code>,\n    },\n    {\n      title: '供应商',\n      dataIndex: 'supplier_name',\n      key: 'supplier_name',\n      width: 180,\n      ellipsis: true,\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      width: 100,\n      render: (status: ProcurementStatus) => (\n        <Tag color={PROCUREMENT_STATUS_COLORS[status]}>\n          {PROCUREMENT_STATUS_TEXT[status]}\n        </Tag>\n      ),\n    },\n    {\n      title: '商品数量',\n      dataIndex: 'total_quantity',\n      key: 'total_quantity',\n      width: 100,\n      render: (qty: number) => <Badge count={qty} showZero color=\"blue\" />,\n    },\n    {\n      title: '总金额',\n      dataIndex: 'total_amount',\n      key: 'total_amount',\n      width: 120,\n      render: (amount: number) => (\n        <strong style={{ color: '#1890ff' }}>¥{amount.toLocaleString()}</strong>\n      ),\n    },\n    {\n      title: '付款状态',\n      dataIndex: 'payment_status',\n      key: 'payment_status',\n      width: 100,\n      render: (status: string) => (\n        <Tag color={PAYMENT_STATUS_COLORS[status as keyof typeof PAYMENT_STATUS_COLORS]}>\n          {status === 'UNPAID' ? '未付款' : status === 'PARTIAL' ? '部分付款' : '已付款'}\n        </Tag>\n      ),\n    },\n    {\n      title: '预计到货',\n      dataIndex: 'expected_date',\n      key: 'expected_date',\n      width: 110,\n      render: (date: string) => date || '-',\n    },\n    {\n      title: '采购员',\n      dataIndex: 'purchaser',\n      key: 'purchaser',\n      width: 100,\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'created_at',\n      key: 'created_at',\n      width: 160,\n      render: (date: string) => new Date(date).toLocaleString(),\n    },\n    {\n      title: '操作',\n      key: 'actions',\n      width: 200,\n      fixed: 'right',\n      render: (_, record) => (\n        <Space size=\"small\">\n          <Tooltip title=\"查看详情\">\n            <Button\n              type=\"link\"\n              size=\"small\"\n              icon={<EyeOutlined />}\n              onClick={() => {\n                setSelectedRecord(record);\n                setDetailDrawerVisible(true);\n              }}\n            />\n          </Tooltip>\n          {record.status === 'PENDING' && (\n            <Tooltip title=\"确认\">\n              <Button\n                type=\"link\"\n                size=\"small\"\n                style={{ color: '#52c41a' }}\n                icon={<CheckCircleOutlined />}\n                onClick={() => handleApproveProcurement(record.id)}\n              >\n                确认\n              </Button>\n            </Tooltip>\n          )}\n          {record.status === 'CONFIRMED' && (\n            <Tooltip title=\"标记发货\">\n              <Button\n                type=\"link\"\n                size=\"small\"\n                icon={<CarOutlined />}\n                onClick={() => {\n                  setSelectedRecord(record);\n                  procurementDataSource.updateProcurementStatus(record.id, 'IN_TRANSIT');\n                  loadData();\n                }}\n              >\n                发货\n              </Button>\n            </Tooltip>\n          )}\n          {record.status === 'IN_TRANSIT' && (\n            <Tooltip title=\"收货\">\n              <Button\n                type=\"link\"\n                size=\"small\"\n                icon={<InboxOutlined />}\n                onClick={() => {\n                  setSelectedRecord(record);\n                  record.items.forEach(item => {\n                    receiveForm.setFieldsValue({\n                      [`received_${item.id}`]: item.quantity,\n                      [`quality_${item.id}`]: 'PASSED',\n                    });\n                  });\n                  setReceiveModalVisible(true);\n                }}\n              >\n                收货\n              </Button>\n            </Tooltip>\n          )}\n          {['PENDING', 'CONFIRMED'].includes(record.status) && (\n            <Popconfirm\n              title=\"确定取消此采购单？\"\n              onConfirm={() => handleCancelProcurement(record.id, '用户取消')}\n            >\n              <Button type=\"link\" size=\"small\" danger icon={<CloseCircleOutlined />}>\n                取消\n              </Button>\n            </Popconfirm>\n          )}\n        </Space>\n      ),\n    },\n  ];\n\n  const tabItems: TabsProps['items'] = [\n    {\n      key: 'records',\n      label: (\n        <span>\n          <ShoppingOutlined />\n          采购记录\n          <Badge count={procurementRecords.length} style={{ marginLeft: 8 }} />\n        </span>\n      ),\n      children: (\n        <Card>\n          <Row gutter={16} style={{ marginBottom: 16 }}>\n            <Col span={6}>\n              <Select\n                value={statusFilter}\n                onChange={setStatusFilter}\n                style={{ width: '100%' }}\n              >\n                <Option value=\"all\">全部状态</Option>\n                <Option value=\"PENDING\">待确认</Option>\n                <Option value=\"CONFIRMED\">已确认</Option>\n                <Option value=\"IN_TRANSIT\">运输中</Option>\n                <Option value=\"RECEIVED\">已收货</Option>\n                <Option value=\"CANCELLED\">已取消</Option>\n              </Select>\n            </Col>\n            <Col span={8}>\n              <RangePicker\n                value={dateRange}\n                onChange={(dates) => setDateRange(dates as [dayjs.Dayjs, dayjs.Dayjs] | null)}\n                style={{ width: '100%' }}\n              />\n            </Col>\n            <Col span={10} style={{ textAlign: 'right' }}>\n              <Space>\n                <Button\n                  type=\"primary\"\n                  icon={<PlusOutlined />}\n                  onClick={() => {\n                    procurementForm.resetFields();\n                    setProcurementModalVisible(true);\n                  }}\n                >\n                  新建采购单\n                </Button>\n                <Button icon={<SearchOutlined />} onClick={loadData}>\n                  刷新\n                </Button>\n              </Space>\n            </Col>\n          </Row>\n\n          <Table\n            columns={procurementColumns}\n            dataSource={filteredRecords}\n            rowKey=\"id\"\n            loading={loading}\n            scroll={{ x: 1600 }}\n            pagination={{\n              pageSize: 10,\n              showSizeChanger: true,\n              showTotal: (total) => `共 ${total} 条`,\n            }}\n          />\n        </Card>\n      ),\n    },\n    {\n      key: 'suppliers',\n      label: (\n        <span>\n          <TeamOutlined />\n          供应商管理\n          <Badge count={suppliers.filter(s => s.status === 'ACTIVE').length} style={{ marginLeft: 8 }} />\n        </span>\n      ),\n      children: (\n        <Card>\n          <div style={{ marginBottom: 16, textAlign: 'right' }}>\n            <Space>\n              <Button\n                type=\"primary\"\n                icon={<PlusOutlined />}\n                onClick={() => {\n                  setEditingSupplier(null);\n                  supplierForm.resetFields();\n                  setSupplierModalVisible(true);\n                }}\n              >\n                新建供应商\n              </Button>\n              <Button icon={<SearchOutlined />} onClick={loadData}>\n                刷新\n              </Button>\n            </Space>\n          </div>\n\n          <Table\n            columns={supplierColumns}\n            dataSource={suppliers}\n            rowKey=\"id\"\n            loading={loading}\n            scroll={{ x: 1400 }}\n            pagination={{\n              pageSize: 10,\n              showSizeChanger: true,\n              showTotal: (total) => `共 ${total} 条`,\n            }}\n          />\n        </Card>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"procurement-management\">\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"采购单总数\"\n              value={stats?.total_orders || 0}\n              prefix={<ShoppingOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"待处理\"\n              value={stats?.pending_orders || 0}\n              valueStyle={{ color: '#faad14' }}\n              prefix={<ClockCircleOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"运输中\"\n              value={stats?.in_transit_orders || 0}\n              valueStyle={{ color: '#1890ff' }}\n              prefix={<CarOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"采购总额\"\n              value={stats?.total_amount || 0}\n              precision={2}\n              prefix={<DollarOutlined />}\n              valueStyle={{ color: '#52c41a' }}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"待付款\"\n              value={stats?.pending_amount || 0}\n              precision={2}\n              prefix={<DollarOutlined />}\n              valueStyle={{ color: '#f5222d' }}\n            />\n          </Card>\n        </Col>\n        <Col span={4}>\n          <Card>\n            <Statistic\n              title=\"合作供应商\"\n              value={stats?.active_supplier_count || 0}\n              suffix={`/ ${stats?.supplier_count || 0}`}\n              prefix={<TeamOutlined />}\n            />\n          </Card>\n        </Col>\n      </Row>\n\n      <Tabs activeKey={activeTab} onChange={setActiveTab} items={tabItems} />\n\n      <Modal\n        title={editingSupplier ? '编辑供应商' : '新建供应商'}\n        open={supplierModalVisible}\n        onCancel={() => {\n          setSupplierModalVisible(false);\n          setEditingSupplier(null);\n          supplierForm.resetFields();\n        }}\n        footer={null}\n        width={700}\n      >\n        <Form form={supplierForm} layout=\"vertical\" onFinish={handleCreateSupplier}>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"name\"\n                label=\"供应商名称\"\n                rules={[{ required: true, message: '请输入供应商名称' }]}\n              >\n                <Input placeholder=\"请输入供应商名称\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"code\"\n                label=\"供应商编码\"\n                rules={[{ required: true, message: '请输入供应商编码' }]}\n              >\n                <Input placeholder=\"请输入供应商编码\" />\n              </Form.Item>\n            </Col>\n          </Row>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"contact_person\"\n                label=\"联系人\"\n                rules={[{ required: true, message: '请输入联系人' }]}\n              >\n                <Input placeholder=\"请输入联系人\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"phone\"\n                label=\"联系电话\"\n                rules={[{ required: true, message: '请输入联系电话' }]}\n              >\n                <Input placeholder=\"请输入联系电话\" />\n              </Form.Item>\n            </Col>\n          </Row>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item name=\"email\" label=\"邮箱\">\n                <Input placeholder=\"请输入邮箱\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"address\"\n                label=\"地址\"\n                rules={[{ required: true, message: '请输入地址' }]}\n              >\n                <Input placeholder=\"请输入地址\" />\n              </Form.Item>\n            </Col>\n          </Row>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item name=\"payment_terms\" label=\"付款条件\">\n                <Select placeholder=\"请选择付款条件\">\n                  <Option value=\"现结\">现结</Option>\n                  <Option value=\"月结15天\">月结15天</Option>\n                  <Option value=\"月结30天\">月结30天</Option>\n                  <Option value=\"月结60天\">月结60天</Option>\n                </Select>\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item name=\"credit_limit\" label=\"信用额度\">\n                <InputNumber\n                  style={{ width: '100%' }}\n                  min={0}\n                  placeholder=\"请输入信用额度\"\n                  formatter={value => `¥ ${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}\n                />\n              </Form.Item>\n            </Col>\n          </Row>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item name=\"lead_time_days\" label=\"交货周期(天)\">\n                <InputNumber style={{ width: '100%' }} min={1} placeholder=\"请输入交货周期\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item name=\"min_order_amount\" label=\"最小订单金额\">\n                <InputNumber\n                  style={{ width: '100%' }}\n                  min={0}\n                  placeholder=\"请输入最小订单金额\"\n                  formatter={value => `¥ ${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}\n                />\n              </Form.Item>\n            </Col>\n          </Row>\n          <Form.Item name=\"remarks\" label=\"备注\">\n            <TextArea rows={2} placeholder=\"请输入备注\" />\n          </Form.Item>\n          <Form.Item>\n            <Space>\n              <Button type=\"primary\" htmlType=\"submit\">\n                {editingSupplier ? '更新' : '创建'}\n              </Button>\n              <Button onClick={() => setSupplierModalVisible(false)}>取消</Button>\n            </Space>\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"新建采购单\"\n        open={procurementModalVisible}\n        onCancel={() => {\n          setProcurementModalVisible(false);\n          procurementForm.resetFields();\n        }}\n        footer={null}\n        width={900}\n      >\n        <Form form={procurementForm} layout=\"vertical\" onFinish={handleCreateProcurement}>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"supplier_id\"\n                label=\"供应商\"\n                rules={[{ required: true, message: '请选择供应商' }]}\n              >\n                <Select placeholder=\"请选择供应商\" showSearch>\n                  {suppliers.filter(s => s.status === 'ACTIVE').map(s => (\n                    <Option key={s.id} value={s.id}>\n                      {s.name} ({s.code})\n                    </Option>\n                  ))}\n                </Select>\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item name=\"expected_date\" label=\"预计到货日期\">\n                <DatePicker style={{ width: '100%' }} />\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Form.List name=\"items\" initialValue={[{}]}>\n            {(fields, { add, remove }) => (\n              <>\n                <div style={{ marginBottom: 8 }}>\n                  <Button type=\"dashed\" onClick={() => add()} block icon={<PlusOutlined />}>\n                    添加采购商品\n                  </Button>\n                </div>\n                {fields.map(({ key, name, ...restField }) => (\n                  <Card key={key} size=\"small\" style={{ marginBottom: 8 }}>\n                    <Row gutter={16}>\n                      <Col span={8}>\n                        <Form.Item\n                          {...restField}\n                          name={[name, 'product_name']}\n                          label=\"商品名称\"\n                          rules={[{ required: true }]}\n                        >\n                          <Input placeholder=\"商品名称\" />\n                        </Form.Item>\n                      </Col>\n                      <Col span={6}>\n                        <Form.Item\n                          {...restField}\n                          name={[name, 'sku']}\n                          label=\"SKU\"\n                          rules={[{ required: true }]}\n                        >\n                          <Input placeholder=\"SKU\" />\n                        </Form.Item>\n                      </Col>\n                      <Col span={4}>\n                        <Form.Item\n                          {...restField}\n                          name={[name, 'quantity']}\n                          label=\"数量\"\n                          rules={[{ required: true }]}\n                        >\n                          <InputNumber min={1} style={{ width: '100%' }} />\n                        </Form.Item>\n                      </Col>\n                      <Col span={4}>\n                        <Form.Item\n                          {...restField}\n                          name={[name, 'unit_price']}\n                          label=\"单价\"\n                          rules={[{ required: true }]}\n                        >\n                          <InputNumber min={0} precision={2} style={{ width: '100%' }} />\n                        </Form.Item>\n                      </Col>\n                      <Col span={2}>\n                        <Form.Item label=\" \">\n                          <Button\n                            type=\"text\"\n                            danger\n                            icon={<DeleteOutlined />}\n                            onClick={() => remove(name)}\n                          />\n                        </Form.Item>\n                      </Col>\n                    </Row>\n                  </Card>\n                ))}\n              </>\n            )}\n          </Form.List>\n\n          <Form.Item name=\"remarks\" label=\"备注\">\n            <TextArea rows={2} placeholder=\"请输入备注\" />\n          </Form.Item>\n\n          <Form.Item>\n            <Space>\n              <Button type=\"primary\" htmlType=\"submit\">\n                创建采购单\n              </Button>\n              <Button onClick={() => setProcurementModalVisible(false)}>取消</Button>\n            </Space>\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"收货确认\"\n        open={receiveModalVisible}\n        onCancel={() => {\n          setReceiveModalVisible(false);\n          receiveForm.resetFields();\n        }}\n        footer={null}\n        width={800}\n      >\n        {selectedRecord && (\n          <Form form={receiveForm} layout=\"vertical\" onFinish={handleReceiveProcurement}>\n            <Alert\n              message={`采购单: ${selectedRecord.order_no}`}\n              description={`供应商: ${selectedRecord.supplier_name}`}\n              type=\"info\"\n              style={{ marginBottom: 16 }}\n            />\n            \n            {selectedRecord.items.map(item => (\n              <Card key={item.id} size=\"small\" style={{ marginBottom: 8 }}>\n                <Row gutter={16} align=\"middle\">\n                  <Col span={8}>\n                    <strong>{item.product_name}</strong>\n                    <br />\n                    <small>{item.sku}</small>\n                  </Col>\n                  <Col span={4}>\n                    订购: {item.quantity} {item.unit}\n                  </Col>\n                  <Col span={6}>\n                    <Form.Item\n                      name={`received_${item.id}`}\n                      label=\"实收数量\"\n                      style={{ marginBottom: 0 }}\n                    >\n                      <InputNumber min={0} max={item.quantity} style={{ width: '100%' }} />\n                    </Form.Item>\n                  </Col>\n                  <Col span={6}>\n                    <Form.Item\n                      name={`quality_${item.id}`}\n                      label=\"质检状态\"\n                      style={{ marginBottom: 0 }}\n                    >\n                      <Select style={{ width: '100%' }}>\n                        <Option value=\"PENDING\">待检</Option>\n                        <Option value=\"PASSED\">合格</Option>\n                        <Option value=\"FAILED\">不合格</Option>\n                        <Option value=\"PARTIAL\">部分合格</Option>\n                      </Select>\n                    </Form.Item>\n                  </Col>\n                </Row>\n              </Card>\n            ))}\n\n            <Form.Item style={{ marginTop: 16 }}>\n              <Space>\n                <Button type=\"primary\" htmlType=\"submit\">\n                  确认收货\n                </Button>\n                <Button onClick={() => setReceiveModalVisible(false)}>取消</Button>\n              </Space>\n            </Form.Item>\n          </Form>\n        )}\n      </Modal>\n\n      <Drawer\n        title={activeTab === 'suppliers' ? '供应商详情' : '采购单详情'}\n        placement=\"right\"\n        width={600}\n        onClose={() => {\n          setDetailDrawerVisible(false);\n          setSelectedSupplier(null);\n          setSelectedRecord(null);\n        }}\n        open={detailDrawerVisible}\n      >\n        {selectedSupplier && (\n          <div>\n            <Descriptions column={2} bordered size=\"small\">\n              <Descriptions.Item label=\"编码\">{selectedSupplier.code}</Descriptions.Item>\n              <Descriptions.Item label=\"名称\">{selectedSupplier.name}</Descriptions.Item>\n              <Descriptions.Item label=\"等级\">\n                <Tag color={SUPPLIER_LEVEL_COLORS[selectedSupplier.level]}>{selectedSupplier.level}</Tag>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"状态\">\n                <Tag color={SUPPLIER_STATUS_COLORS[selectedSupplier.status]}>\n                  {selectedSupplier.status === 'ACTIVE' ? '合作中' : '暂停合作'}\n                </Tag>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"联系人\">{selectedSupplier.contact_person}</Descriptions.Item>\n              <Descriptions.Item label=\"电话\">{selectedSupplier.phone}</Descriptions.Item>\n              <Descriptions.Item label=\"邮箱\" span={2}>{selectedSupplier.email || '-'}</Descriptions.Item>\n              <Descriptions.Item label=\"地址\" span={2}>{selectedSupplier.address}</Descriptions.Item>\n              <Descriptions.Item label=\"付款条件\">{selectedSupplier.payment_terms || '-'}</Descriptions.Item>\n              <Descriptions.Item label=\"交货周期\">{selectedSupplier.lead_time_days}天</Descriptions.Item>\n            </Descriptions>\n\n            <Divider>绩效指标</Divider>\n\n            <Row gutter={16}>\n              <Col span={12}>\n                <Card>\n                  <Statistic\n                    title=\"准时交货率\"\n                    value={selectedSupplier.on_time_rate}\n                    suffix=\"%\"\n                    valueStyle={{ color: selectedSupplier.on_time_rate >= 90 ? '#52c41a' : '#faad14' }}\n                  />\n                </Card>\n              </Col>\n              <Col span={12}>\n                <Card>\n                  <Statistic\n                    title=\"质量合格率\"\n                    value={selectedSupplier.quality_pass_rate}\n                    suffix=\"%\"\n                    valueStyle={{ color: selectedSupplier.quality_pass_rate >= 95 ? '#52c41a' : '#faad14' }}\n                  />\n                </Card>\n              </Col>\n            </Row>\n\n            <Divider>历史记录</Divider>\n\n            <Descriptions column={2} size=\"small\">\n              <Descriptions.Item label=\"总订单数\">{selectedSupplier.total_orders}</Descriptions.Item>\n              <Descriptions.Item label=\"累计金额\">¥{selectedSupplier.total_amount.toLocaleString()}</Descriptions.Item>\n              <Descriptions.Item label=\"信用额度\">¥{(selectedSupplier.credit_limit || 0).toLocaleString()}</Descriptions.Item>\n              <Descriptions.Item label=\"已用额度\">¥{(selectedSupplier.credit_used || 0).toLocaleString()}</Descriptions.Item>\n            </Descriptions>\n          </div>\n        )}\n\n        {selectedRecord && (\n          <div>\n            <Descriptions column={2} bordered size=\"small\">\n              <Descriptions.Item label=\"采购单号\">{selectedRecord.order_no}</Descriptions.Item>\n              <Descriptions.Item label=\"状态\">\n                <Tag color={PROCUREMENT_STATUS_COLORS[selectedRecord.status]}>\n                  {PROCUREMENT_STATUS_TEXT[selectedRecord.status]}\n                </Tag>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"供应商\" span={2}>{selectedRecord.supplier_name}</Descriptions.Item>\n              <Descriptions.Item label=\"采购员\">{selectedRecord.purchaser}</Descriptions.Item>\n              <Descriptions.Item label=\"创建时间\">\n                {new Date(selectedRecord.created_at).toLocaleString()}\n              </Descriptions.Item>\n              <Descriptions.Item label=\"预计到货\">{selectedRecord.expected_date || '-'}</Descriptions.Item>\n              <Descriptions.Item label=\"实际到货\">{selectedRecord.actual_date || '-'}</Descriptions.Item>\n            </Descriptions>\n\n            <Divider>商品明细</Divider>\n\n            <Table\n              dataSource={selectedRecord.items}\n              rowKey=\"id\"\n              size=\"small\"\n              pagination={false}\n              columns={[\n                { title: '商品', dataIndex: 'product_name', key: 'product_name' },\n                { title: 'SKU', dataIndex: 'sku', key: 'sku' },\n                { title: '数量', dataIndex: 'quantity', key: 'quantity' },\n                { title: '单价', dataIndex: 'unit_price', key: 'unit_price', render: (v) => `¥${v}` },\n                { title: '金额', dataIndex: 'total_price', key: 'total_price', render: (v) => `¥${v}` },\n                {\n                  title: '质检',\n                  dataIndex: 'quality_status',\n                  key: 'quality_status',\n                  render: (status: QualityStatus) => (\n                    <Tag color={QUALITY_STATUS_COLORS[status]}>\n                      {status === 'PENDING' ? '待检' : status === 'PASSED' ? '合格' : status === 'FAILED' ? '不合格' : '部分合格'}\n                    </Tag>\n                  ),\n                },\n              ]}\n            />\n\n            <Divider>付款信息</Divider>\n\n            <Descriptions column={2} size=\"small\">\n              <Descriptions.Item label=\"总金额\">¥{selectedRecord.total_amount.toLocaleString()}</Descriptions.Item>\n              <Descriptions.Item label=\"已付款\">¥{selectedRecord.paid_amount.toLocaleString()}</Descriptions.Item>\n              <Descriptions.Item label=\"付款状态\">\n                <Tag color={PAYMENT_STATUS_COLORS[selectedRecord.payment_status]}>\n                  {selectedRecord.payment_status === 'UNPAID' ? '未付款' : \n                   selectedRecord.payment_status === 'PARTIAL' ? '部分付款' : '已付款'}\n                </Tag>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"仓库\">{selectedRecord.warehouse_name || '-'}</Descriptions.Item>\n            </Descriptions>\n          </div>\n        )}\n      </Drawer>\n    </div>\n  );\n};\n\nexport default ProcurementManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Procurement/index.tsx"
    },
    "49": {
      "path": "/dashboard/suppliers",
      "file": "@/pages/Suppliers/index.tsx",
      "parentId": "4",
      "id": "49",
      "absPath": "/dashboard/suppliers",
      "__content": "import {\n  useState,\n  useEffect,\n  Table,\n  Button,\n  Input,\n  Select,\n  message,\n  Card,\n  Modal,\n  Form,\n  InputNumber,\n  Row,\n  Col,\n  Tag,\n  Rate,\n  PlusOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  SearchOutlined,\n  UserOutlined,\n  PhoneOutlined,\n  MailOutlined,\n  HomeOutlined,\n  useNavigate,\n  Option,\n  Search,\n  TextArea,\n  FC,\n} from '@/imports';\nimport { suppliersDataSource, Supplier } from '@/services/suppliersDataSource';\n\nconst Suppliers: FC = () => {\n  const navigate = useNavigate();\n  const [suppliers, setSuppliers] = useState<Supplier[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [modalVisible, setModalVisible] = useState(false);\n  const [editingSupplier, setEditingSupplier] = useState<Supplier | null>(null);\n  const [form] = Form.useForm();\n  const [filters, setFilters] = useState({\n    category: '',\n    status: '',\n    search: '',\n  });\n\n  useEffect(() => {\n    fetchSuppliers();\n  }, [filters]);\n\n  const fetchSuppliers = async () => {\n    setLoading(true);\n    try {\n      const data = await suppliersDataSource.fetchSuppliers();\n      setSuppliers(data);\n    } catch (error) {\n      message.error('Failed to load suppliers');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleAddSupplier = () => {\n    setEditingSupplier(null);\n    form.resetFields();\n    form.setFieldsValue({\n      status: 'active',\n      rating: 3,\n      leadTime: 7,\n      minOrder: 100,\n      paymentTerms: 'Net 30',\n    });\n    setModalVisible(true);\n  };\n\n  const handleEditSupplier = (id: string) => {\n    const supplier = suppliers.find(s => s.id === id);\n    if (supplier) {\n      setEditingSupplier(supplier);\n      form.setFieldsValue(supplier);\n      setModalVisible(true);\n    }\n  };\n\n  const handleSaveSupplier = async () => {\n    try {\n      const values = await form.validateFields();\n      if (editingSupplier) {\n        const updatedSuppliers = suppliers.map(s => \n          s.id === editingSupplier.id ? { ...s, ...values } : s\n        );\n        setSuppliers(updatedSuppliers);\n        message.success('供应商已更新');\n      } else {\n        const newSupplier: Supplier = {\n          id: `supplier-${Date.now()}`,\n          ...values,\n          createdAt: new Date().toISOString(),\n        };\n        setSuppliers([...suppliers, newSupplier]);\n        message.success('供应商已添加');\n      }\n      setModalVisible(false);\n    } catch (error) {\n      message.error('保存失败');\n    }\n  };\n\n  const handleDeleteSupplier = (id: string) => {\n    const updatedSuppliers = suppliers.filter(s => s.id !== id);\n    setSuppliers(updatedSuppliers);\n    message.success('供应商已删除');\n  };\n\n  const columns = [\n    {\n      title: '供应商名称',\n      dataIndex: 'name',\n      key: 'name',\n    },\n    {\n      title: '联系人',\n      dataIndex: 'contactName',\n      key: 'contactName',\n    },\n    {\n      title: '邮箱',\n      dataIndex: 'email',\n      key: 'email',\n    },\n    {\n      title: '电话',\n      dataIndex: 'phone',\n      key: 'phone',\n    },\n    {\n      title: '类别',\n      dataIndex: 'category',\n      key: 'category',\n      render: (category: string) => {\n        const colorMap: Record<string, string> = {\n          Electronics: 'blue',\n          Clothing: 'purple',\n          'Home Goods': 'green',\n        };\n        return <Tag color={colorMap[category] || 'default'}>{category}</Tag>;\n      },\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => {\n        const statusMap: Record<string, { label: string; color: string }> = {\n          active: { label: '活跃', color: 'success' },\n          inactive: { label: '非活跃', color: 'default' },\n          pending: { label: '待审核', color: 'warning' },\n        };\n        const config = statusMap[status] || { label: status, color: 'default' };\n        return <Tag color={config.color}>{config.label}</Tag>;\n      },\n    },\n    {\n      title: '评分',\n      dataIndex: 'rating',\n      key: 'rating',\n      render: (rating: number) => <Rate disabled defaultValue={rating || 3} />,\n    },\n    {\n      title: '交货期(天)',\n      dataIndex: 'leadTime',\n      key: 'leadTime',\n    },\n    {\n      title: '最小订单量',\n      dataIndex: 'minOrder',\n      key: 'minOrder',\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: any, record: Supplier) => (\n        <div>\n          <Button\n            type=\"link\"\n            icon={<EditOutlined />}\n            onClick={() => handleEditSupplier(record.id)}\n          >\n            编辑\n          </Button>\n          <Button\n            type=\"link\"\n            danger\n            icon={<DeleteOutlined />}\n            onClick={() => handleDeleteSupplier(record.id)}\n          >\n            删除\n          </Button>\n        </div>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"suppliers\">\n      <div className=\"page-header\" style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <h1>供应商管理</h1>\n        <Button\n          type=\"primary\"\n          icon={<PlusOutlined />}\n          onClick={handleAddSupplier}\n        >\n          添加供应商\n        </Button>\n      </div>\n\n      <div className=\"filter-section\" style={{ marginBottom: 24, display: 'flex', gap: 16, flexWrap: 'wrap' }}>\n        <Search\n          placeholder=\"搜索供应商名称或联系人\"\n          style={{ width: 300 }}\n          onChange={(e) => setFilters({ ...filters, search: e.target.value })}\n        />\n        <Select\n          placeholder=\"类别\"\n          style={{ width: 120 }}\n          onChange={(value) => setFilters({ ...filters, category: value })}\n        >\n          <Option value=\"\">全部</Option>\n          <Option value=\"Electronics\">Electronics</Option>\n          <Option value=\"Clothing\">Clothing</Option>\n          <Option value=\"Home Goods\">Home Goods</Option>\n        </Select>\n        <Select\n          placeholder=\"状态\"\n          style={{ width: 120 }}\n          onChange={(value) => setFilters({ ...filters, status: value })}\n        >\n          <Option value=\"\">全部</Option>\n          <Option value=\"active\">活跃</Option>\n          <Option value=\"inactive\">非活跃</Option>\n          <Option value=\"pending\">待审核</Option>\n        </Select>\n        <Button\n          icon={<SearchOutlined />}\n          onClick={fetchSuppliers}\n        >\n          筛选\n        </Button>\n      </div>\n\n      <Card title=\"供应商列表\">\n        <Table\n          columns={columns}\n          dataSource={suppliers}\n          loading={loading}\n          rowKey=\"id\"\n          pagination={{\n            pageSize: 10,\n            showSizeChanger: true,\n          }}\n        />\n      </Card>\n\n      <Modal\n        title={editingSupplier ? '编辑供应商' : '添加供应商'}\n        open={modalVisible}\n        onCancel={() => setModalVisible(false)}\n        onOk={handleSaveSupplier}\n        width={800}\n      >\n        <Form\n          form={form}\n          layout=\"vertical\"\n        >\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"name\"\n                label=\"供应商名称\"\n                rules={[{ required: true, message: '请输入供应商名称' }]}\n              >\n                <Input placeholder=\"输入供应商名称\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"category\"\n                label=\"类别\"\n                rules={[{ required: true, message: '请选择类别' }]}\n              >\n                <Select placeholder=\"选择类别\">\n                  <Option value=\"Electronics\">Electronics</Option>\n                  <Option value=\"Clothing\">Clothing</Option>\n                  <Option value=\"Home Goods\">Home Goods</Option>\n                  <Option value=\"Other\">Other</Option>\n                </Select>\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"contactName\"\n                label=\"联系人\"\n                rules={[{ required: true, message: '请输入联系人' }]}\n              >\n                <Input placeholder=\"输入联系人姓名\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"status\"\n                label=\"状态\"\n                rules={[{ required: true, message: '请选择状态' }]}\n              >\n                <Select placeholder=\"选择状态\">\n                  <Option value=\"active\">活跃</Option>\n                  <Option value=\"inactive\">非活跃</Option>\n                  <Option value=\"pending\">待审核</Option>\n                </Select>\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"email\"\n                label=\"邮箱\"\n                rules={[\n                  { required: true, message: '请输入邮箱' },\n                  { type: 'email', message: '请输入有效的邮箱地址' },\n                ]}\n              >\n                <Input placeholder=\"输入邮箱地址\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"phone\"\n                label=\"电话\"\n                rules={[{ required: true, message: '请输入电话' }]}\n              >\n                <Input placeholder=\"输入电话号码\" />\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"rating\"\n                label=\"评分\"\n              >\n                <Rate />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"paymentTerms\"\n                label=\"付款条款\"\n              >\n                <Select placeholder=\"选择付款条款\">\n                  <Option value=\"Net 30\">Net 30</Option>\n                  <Option value=\"Net 60\">Net 60</Option>\n                  <Option value=\"Net 90\">Net 90</Option>\n                  <Option value=\"Prepaid\">预付款</Option>\n                  <Option value=\"COD\">货到付款</Option>\n                </Select>\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"leadTime\"\n                label=\"交货期 (天)\"\n              >\n                <InputNumber\n                  min={1}\n                  style={{ width: '100%' }}\n                  placeholder=\"输入交货期\"\n                />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"minOrder\"\n                label=\"最小订单量\"\n              >\n                <InputNumber\n                  min={1}\n                  style={{ width: '100%' }}\n                  placeholder=\"输入最小订单量\"\n                />\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Form.Item\n            name=\"address\"\n            label=\"地址\"\n          >\n            <Input placeholder=\"输入供应商地址\" />\n          </Form.Item>\n\n          <Form.Item\n            name=\"description\"\n            label=\"备注\"\n          >\n            <TextArea rows={3} placeholder=\"输入备注信息\" />\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default Suppliers;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Suppliers/index.tsx"
    },
    "50": {
      "path": "/dashboard/warehouse",
      "file": "@/pages/Warehouse/index.tsx",
      "parentId": "4",
      "id": "50",
      "absPath": "/dashboard/warehouse",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Button,\n  Space,\n  Tag,\n  Row,\n  Col,\n  Statistic,\n  Modal,\n  Form,\n  Input,\n  InputNumber,\n  Select,\n  Tabs,\n  Tooltip,\n  Progress,\n  Badge,\n  message,\n  Descriptions,\n  Divider,\n  Alert,\n  Timeline,\n  Popconfirm,\n  Drawer,\n  List,\n  Avatar,\n  Typography,\n  Text,\n  ShopOutlined,\n  InboxOutlined,\n  BarcodeOutlined,\n  WarningOutlined,\n  CheckCircleOutlined,\n  SyncOutlined,\n  PlusOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  EyeOutlined,\n  SearchOutlined,\n  FilterOutlined,\n  LinkOutlined,\n  ShopOutlined as WarehouseOutlined,\n  StockOutlined,\n  Option,\n  Search,\n  FC,\n} from '@/imports';\nimport {\n  warehouseDataSource,\n  MAPPING_TYPE_NAMES,\n} from '@/services/warehouseDataSource';\nimport {\n  Warehouse,\n  WarehouseStock,\n  SalesSku,\n  SkuMapping,\n  StockMovement,\n  InventoryAlert,\n  StockAvailability,\n  MappingType,\n} from '@/types/warehouse';\n\nconst STATUS_COLORS: Record<string, string> = {\n  AVAILABLE: 'success',\n  RESERVED: 'warning',\n  DAMAGED: 'error',\n  EXPIRED: 'default',\n  IN_TRANSIT: 'processing',\n};\n\nconst ALERT_TYPE_COLORS: Record<string, string> = {\n  LOW_STOCK: 'warning',\n  OVERSTOCK: 'blue',\n  EXPIRING: 'orange',\n  OUT_OF_STOCK: 'error',\n};\n\nconst WarehouseManagement: FC = () => {\n  const [warehouses, setWarehouses] = useState<Warehouse[]>([]);\n  const [stocks, setStocks] = useState<WarehouseStock[]>([]);\n  const [salesSkus, setSalesSkus] = useState<SalesSku[]>([]);\n  const [mappings, setMappings] = useState<SkuMapping[]>([]);\n  const [movements, setMovements] = useState<StockMovement[]>([]);\n  const [alerts, setAlerts] = useState<InventoryAlert[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [selectedWarehouse, setSelectedWarehouse] = useState<Warehouse | null>(null);\n  const [mappingModalVisible, setMappingModalVisible] = useState(false);\n  const [adjustModalVisible, setAdjustModalVisible] = useState(false);\n  const [availabilityModalVisible, setAvailabilityModalVisible] = useState(false);\n  const [selectedStock, setSelectedStock] = useState<WarehouseStock | null>(null);\n  const [availability, setAvailability] = useState<StockAvailability | null>(null);\n  const [mappingForm] = Form.useForm();\n  const [adjustForm] = Form.useForm();\n  const [availabilityForm] = Form.useForm();\n  const [activeTab, setActiveTab] = useState('stock');\n\n  useEffect(() => {\n    fetchData();\n  }, []);\n\n  const fetchData = async () => {\n    setLoading(true);\n    try {\n      const [warehouseData, salesSkuData, mappingData, alertData] = await Promise.all([\n        warehouseDataSource.fetchWarehouses('tenant-001'),\n        warehouseDataSource.fetchSalesSkuList('tenant-001'),\n        warehouseDataSource.fetchSkuMappings('tenant-001'),\n        warehouseDataSource.fetchInventoryAlerts('tenant-001'),\n      ]);\n      \n      setWarehouses(warehouseData);\n      setSalesSkus(salesSkuData);\n      setMappings(mappingData);\n      setAlerts(alertData);\n\n      if (warehouseData.length > 0) {\n        setSelectedWarehouse(warehouseData[0]);\n        const stockData = await warehouseDataSource.fetchStockList(warehouseData[0].id);\n        setStocks(stockData);\n        const movementData = await warehouseDataSource.fetchStockMovements(warehouseData[0].id);\n        setMovements(movementData);\n      }\n    } catch (error) {\n      message.error('加载数据失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleWarehouseChange = async (warehouseId: string) => {\n    const warehouse = warehouses.find(w => w.id === warehouseId);\n    if (warehouse) {\n      setSelectedWarehouse(warehouse);\n      setLoading(true);\n      try {\n        const [stockData, movementData] = await Promise.all([\n          warehouseDataSource.fetchStockList(warehouseId),\n          warehouseDataSource.fetchStockMovements(warehouseId),\n        ]);\n        setStocks(stockData);\n        setMovements(movementData);\n      } catch (error) {\n        message.error('加载数据失败');\n      } finally {\n        setLoading(false);\n      }\n    }\n  };\n\n  const handleCreateMapping = async (values: any) => {\n    try {\n      await warehouseDataSource.createSkuMapping({\n        tenant_id: 'tenant-001',\n        sales_sku_id: values.sales_sku_id,\n        sales_sku_code: values.sales_sku_code,\n        mapping_type: values.mapping_type,\n        warehouse_items: values.warehouse_items,\n        is_active: true,\n        priority: 1,\n      });\n      message.success('SKU映射创建成功');\n      setMappingModalVisible(false);\n      mappingForm.resetFields();\n      fetchData();\n    } catch (error) {\n      message.error('创建失败');\n    }\n  };\n\n  const handleAdjustStock = async (values: any) => {\n    if (!selectedStock) return;\n    \n    try {\n      await warehouseDataSource.adjustStock(\n        selectedStock.warehouse_sku_id,\n        values.quantity,\n        values.reason\n      );\n      message.success('库存调整成功');\n      setAdjustModalVisible(false);\n      adjustForm.resetFields();\n      fetchData();\n    } catch (error) {\n      message.error('调整失败');\n    }\n  };\n\n  const handleCheckAvailability = async (values: any) => {\n    try {\n      const result = await warehouseDataSource.checkStockAvailability(\n        values.sales_sku_code,\n        values.quantity\n      );\n      setAvailability(result);\n      message.success(result.can_fulfill ? '库存充足' : '库存不足');\n    } catch (error) {\n      message.error('查询失败');\n    }\n  };\n\n  const handleDeleteMapping = async (mappingId: string) => {\n    try {\n      await warehouseDataSource.deleteSkuMapping(mappingId);\n      message.success('删除成功');\n      fetchData();\n    } catch (error) {\n      message.error('删除失败');\n    }\n  };\n\n  const stockColumns = [\n    {\n      title: 'SKU编码',\n      dataIndex: 'sku_code',\n      key: 'sku_code',\n      render: (code: string) => (\n        <Space>\n          <BarcodeOutlined />\n          <Text copyable>{code}</Text>\n        </Space>\n      ),\n    },\n    {\n      title: '总库存',\n      dataIndex: 'quantity',\n      key: 'quantity',\n      sorter: (a: WarehouseStock, b: WarehouseStock) => a.quantity - b.quantity,\n      render: (qty: number) => <Tag color=\"blue\">{qty}</Tag>,\n    },\n    {\n      title: '可用库存',\n      dataIndex: 'available_quantity',\n      key: 'available_quantity',\n      render: (qty: number, record: WarehouseStock) => {\n        const percentage = record.quantity > 0 ? (qty / record.quantity) * 100 : 0;\n        return (\n          <Space direction=\"vertical\" size={0} style={{ width: 120 }}>\n            <Text>{qty}</Text>\n            <Progress percent={percentage} size=\"small\" showInfo={false} />\n          </Space>\n        );\n      },\n    },\n    {\n      title: '预留库存',\n      dataIndex: 'reserved_quantity',\n      key: 'reserved_quantity',\n      render: (qty: number) => (\n        <Tag color={qty > 0 ? 'warning' : 'default'}>{qty}</Tag>\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => (\n        <Tag color={STATUS_COLORS[status]}>{status}</Tag>\n      ),\n    },\n    {\n      title: '最后入库',\n      dataIndex: 'last_inbound_at',\n      key: 'last_inbound_at',\n      render: (date: string) => date ? new Date(date).toLocaleString() : '-',\n    },\n    {\n      title: '操作',\n      key: 'actions',\n      render: (_: any, record: WarehouseStock) => (\n        <Space>\n          <Tooltip title=\"库存调整\">\n            <Button\n              type=\"text\"\n              icon={<EditOutlined />}\n              onClick={() => {\n                setSelectedStock(record);\n                setAdjustModalVisible(true);\n              }}\n            />\n          </Tooltip>\n        </Space>\n      ),\n    },\n  ];\n\n  const mappingColumns = [\n    {\n      title: '销售SKU',\n      dataIndex: 'sales_sku_code',\n      key: 'sales_sku_code',\n      render: (code: string) => (\n        <Space>\n          <ShopOutlined />\n          <Text copyable>{code}</Text>\n        </Space>\n      ),\n    },\n    {\n      title: '映射类型',\n      dataIndex: 'mapping_type',\n      key: 'mapping_type',\n      render: (type: MappingType) => (\n        <Tag color={type === 'ONE_TO_ONE' ? 'green' : type === 'COMBO' ? 'purple' : 'blue'}>\n          {MAPPING_TYPE_NAMES[type]}\n        </Tag>\n      ),\n    },\n    {\n      title: '仓库SKU',\n      dataIndex: 'warehouse_items',\n      key: 'warehouse_items',\n      render: (items: any[]) => (\n        <Space direction=\"vertical\" size={0}>\n          {items.map((item, idx) => (\n            <Tag key={idx} icon={<InboxOutlined />}>\n              {item.warehouse_sku_code} x{item.quantity}\n            </Tag>\n          ))}\n        </Space>\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'is_active',\n      key: 'is_active',\n      render: (active: boolean) => (\n        <Tag color={active ? 'success' : 'default'}>\n          {active ? '启用' : '禁用'}\n        </Tag>\n      ),\n    },\n    {\n      title: '操作',\n      key: 'actions',\n      render: (_: any, record: SkuMapping) => (\n        <Space>\n          <Tooltip title=\"查看库存可用性\">\n            <Button\n              type=\"text\"\n              icon={<EyeOutlined />}\n              onClick={() => {\n                availabilityForm.setFieldsValue({ sales_sku_code: record.sales_sku_code });\n                setAvailabilityModalVisible(true);\n              }}\n            />\n          </Tooltip>\n          <Popconfirm\n            title=\"确定删除此映射？\"\n            onConfirm={() => handleDeleteMapping(record.id)}\n          >\n            <Button type=\"text\" danger icon={<DeleteOutlined />} />\n          </Popconfirm>\n        </Space>\n      ),\n    },\n  ];\n\n  const movementColumns = [\n    {\n      title: '时间',\n      dataIndex: 'created_at',\n      key: 'created_at',\n      width: 180,\n      render: (date: string) => new Date(date).toLocaleString(),\n    },\n    {\n      title: '类型',\n      dataIndex: 'movement_type',\n      key: 'movement_type',\n      render: (type: string) => {\n        const colors: Record<string, string> = {\n          INBOUND: 'success',\n          OUTBOUND: 'error',\n          TRANSFER: 'processing',\n          ADJUSTMENT: 'warning',\n          RESERVE: 'orange',\n          RELEASE: 'cyan',\n        };\n        return <Tag color={colors[type]}>{type}</Tag>;\n      },\n    },\n    {\n      title: 'SKU',\n      dataIndex: 'sku_code',\n      key: 'sku_code',\n    },\n    {\n      title: '数量',\n      dataIndex: 'quantity',\n      key: 'quantity',\n      render: (qty: number, record: StockMovement) => (\n        <Text type={record.movement_type === 'INBOUND' ? 'success' : 'danger'}>\n          {record.movement_type === 'INBOUND' ? '+' : '-'}{qty}\n        </Text>\n      ),\n    },\n    {\n      title: '调整前',\n      dataIndex: 'before_quantity',\n      key: 'before_quantity',\n    },\n    {\n      title: '调整后',\n      dataIndex: 'after_quantity',\n      key: 'after_quantity',\n    },\n    {\n      title: '备注',\n      dataIndex: 'remark',\n      key: 'remark',\n      ellipsis: true,\n    },\n  ];\n\n  const stats = {\n    totalStock: stocks.reduce((acc, s) => acc + s.quantity, 0),\n    availableStock: stocks.reduce((acc, s) => acc + s.available_quantity, 0),\n    reservedStock: stocks.reduce((acc, s) => acc + s.reserved_quantity, 0),\n    activeAlerts: alerts.filter(a => a.status === 'ACTIVE').length,\n  };\n\n  return (\n    <div className=\"warehouse-management\">\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"总库存\"\n              value={stats.totalStock}\n              prefix={<InboxOutlined />}\n              valueStyle={{ color: '#1890ff' }}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"可用库存\"\n              value={stats.availableStock}\n              prefix={<CheckCircleOutlined />}\n              valueStyle={{ color: '#52c41a' }}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"预留库存\"\n              value={stats.reservedStock}\n              prefix={<SyncOutlined />}\n              valueStyle={{ color: '#faad14' }}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic\n              title=\"库存预警\"\n              value={stats.activeAlerts}\n              prefix={<WarningOutlined />}\n              valueStyle={{ color: stats.activeAlerts > 0 ? '#f5222d' : '#52c41a' }}\n            />\n          </Card>\n        </Col>\n      </Row>\n\n      <Card>\n        <Row gutter={16} style={{ marginBottom: 16 }}>\n          <Col span={8}>\n            <Select\n              style={{ width: '100%' }}\n              value={selectedWarehouse?.id}\n              onChange={handleWarehouseChange}\n              placeholder=\"选择仓库\"\n            >\n              {warehouses.map(w => (\n                <Option key={w.id} value={w.id}>\n                  <Space>\n                    <WarehouseOutlined />\n                    {w.name}\n                    <Tag color={w.status === 'ACTIVE' ? 'success' : 'default'}>\n                      {w.status}\n                    </Tag>\n                  </Space>\n                </Option>\n              ))}\n            </Select>\n          </Col>\n          <Col span={16} style={{ textAlign: 'right' }}>\n            <Space>\n              <Button\n                type=\"primary\"\n                icon={<LinkOutlined />}\n                onClick={() => setMappingModalVisible(true)}\n              >\n                创建SKU映射\n              </Button>\n              <Button\n                icon={<EyeOutlined />}\n                onClick={() => setAvailabilityModalVisible(true)}\n              >\n                查询库存可用性\n              </Button>\n              <Button\n                icon={<SyncOutlined />}\n                onClick={fetchData}\n              >\n                刷新\n              </Button>\n            </Space>\n          </Col>\n        </Row>\n\n        <Tabs\n          activeKey={activeTab}\n          onChange={setActiveTab}\n          items={[\n            {\n              key: 'stock',\n              label: (\n                <span>\n                  <InboxOutlined />\n                  库存列表\n                </span>\n              ),\n              children: (\n                <Table\n                  columns={stockColumns}\n                  dataSource={stocks}\n                  rowKey=\"id\"\n                  loading={loading}\n                  pagination={{ pageSize: 10 }}\n                />\n              ),\n            },\n            {\n              key: 'mapping',\n              label: (\n                <span>\n                  <LinkOutlined />\n                  SKU映射\n                  <Badge count={mappings.length} style={{ marginLeft: 8 }} />\n                </span>\n              ),\n              children: (\n                <Table\n                  columns={mappingColumns}\n                  dataSource={mappings}\n                  rowKey=\"id\"\n                  loading={loading}\n                  pagination={{ pageSize: 10 }}\n                />\n              ),\n            },\n            {\n              key: 'movement',\n              label: (\n                <span>\n                  <SyncOutlined />\n                  库存流水\n                </span>\n              ),\n              children: (\n                <Table\n                  columns={movementColumns}\n                  dataSource={movements}\n                  rowKey=\"id\"\n                  loading={loading}\n                  pagination={{ pageSize: 10 }}\n                />\n              ),\n            },\n            {\n              key: 'alerts',\n              label: (\n                <span>\n                  <WarningOutlined />\n                  库存预警\n                  <Badge count={alerts.filter(a => a.status === 'ACTIVE').length} style={{ marginLeft: 8 }} />\n                </span>\n              ),\n              children: (\n                <List\n                  dataSource={alerts}\n                  renderItem={(alert) => (\n                    <List.Item\n                      actions={[\n                        <Tag color={ALERT_TYPE_COLORS[alert.alert_type]}>\n                          {alert.alert_type}\n                        </Tag>,\n                        <Text type=\"secondary\">\n                          {new Date(alert.created_at).toLocaleString()}\n                        </Text>,\n                      ]}\n                    >\n                      <List.Item.Meta\n                        avatar={<Avatar icon={<WarningOutlined />} style={{ backgroundColor: '#f5222d' }} />}\n                        title={alert.sku_code}\n                        description={alert.message}\n                      />\n                    </List.Item>\n                  )}\n                />\n              ),\n            },\n          ]}\n        />\n      </Card>\n\n      <Modal\n        title=\"创建SKU映射\"\n        open={mappingModalVisible}\n        onCancel={() => setMappingModalVisible(false)}\n        footer={null}\n        width={700}\n      >\n        <Alert\n          message=\"SKU映射说明\"\n          description={\n            <div>\n              <p><strong>一对一</strong>: 一个销售SKU对应一个仓库SKU</p>\n              <p><strong>一对多</strong>: 一个销售SKU可从多个仓库SKU发货（按优先级）</p>\n              <p><strong>组合商品</strong>: 一个销售SKU由多个仓库SKU组成（如套装）</p>\n            </div>\n          }\n          type=\"info\"\n          style={{ marginBottom: 16 }}\n        />\n        \n        <Form form={mappingForm} layout=\"vertical\" onFinish={handleCreateMapping}>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item\n                name=\"sales_sku_code\"\n                label=\"销售SKU编码\"\n                rules={[{ required: true, message: '请输入销售SKU编码' }]}\n              >\n                <Select placeholder=\"选择销售SKU\" showSearch>\n                  {salesSkus.map(sku => (\n                    <Option key={sku.id} value={sku.sku_code}>\n                      {sku.sku_code} - {sku.sku_name}\n                    </Option>\n                  ))}\n                </Select>\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item\n                name=\"mapping_type\"\n                label=\"映射类型\"\n                rules={[{ required: true, message: '请选择映射类型' }]}\n                initialValue=\"ONE_TO_ONE\"\n              >\n                <Select>\n                  <Option value=\"ONE_TO_ONE\">一对一</Option>\n                  <Option value=\"ONE_TO_MANY\">一对多</Option>\n                  <Option value=\"COMBO\">组合商品</Option>\n                </Select>\n              </Form.Item>\n            </Col>\n          </Row>\n\n          <Form.List name=\"warehouse_items\" initialValue={[{}]}>\n            {(fields, { add, remove }) => (\n              <>\n                {fields.map(({ key, name, ...restField }) => (\n                  <Row gutter={16} key={key}>\n                    <Col span={10}>\n                      <Form.Item\n                        {...restField}\n                        name={[name, 'warehouse_sku_code']}\n                        label=\"仓库SKU\"\n                        rules={[{ required: true, message: '请选择仓库SKU' }]}\n                      >\n                        <Select placeholder=\"选择仓库SKU\">\n                          {stocks.map(s => (\n                            <Option key={s.id} value={s.sku_code}>\n                              {s.sku_code}\n                            </Option>\n                          ))}\n                        </Select>\n                      </Form.Item>\n                    </Col>\n                    <Col span={6}>\n                      <Form.Item\n                        {...restField}\n                        name={[name, 'quantity']}\n                        label=\"数量\"\n                        rules={[{ required: true, message: '请输入数量' }]}\n                        initialValue={1}\n                      >\n                        <InputNumber min={1} style={{ width: '100%' }} />\n                      </Form.Item>\n                    </Col>\n                    <Col span={6}>\n                      <Form.Item\n                        {...restField}\n                        name={[name, 'warehouse_id']}\n                        label=\"仓库\"\n                        initialValue={selectedWarehouse?.id}\n                      >\n                        <Select disabled>\n                          <Option value={selectedWarehouse?.id}>{selectedWarehouse?.name}</Option>\n                        </Select>\n                      </Form.Item>\n                    </Col>\n                    <Col span={2} style={{ display: 'flex', alignItems: 'center' }}>\n                      {fields.length > 1 && (\n                        <Button type=\"text\" danger icon={<DeleteOutlined />} onClick={() => remove(name)} />\n                      )}\n                    </Col>\n                  </Row>\n                ))}\n                <Form.Item>\n                  <Button type=\"dashed\" onClick={() => add()} block icon={<PlusOutlined />}>\n                    添加仓库SKU\n                  </Button>\n                </Form.Item>\n              </>\n            )}\n          </Form.List>\n\n          <Form.Item>\n            <Space>\n              <Button type=\"primary\" htmlType=\"submit\">\n                创建映射\n              </Button>\n              <Button onClick={() => setMappingModalVisible(false)}>\n                取消\n              </Button>\n            </Space>\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      <Modal\n        title=\"库存调整\"\n        open={adjustModalVisible}\n        onCancel={() => setAdjustModalVisible(false)}\n        footer={null}\n      >\n        {selectedStock && (\n          <Form form={adjustForm} layout=\"vertical\" onFinish={handleAdjustStock}>\n            <Descriptions column={2} size=\"small\" style={{ marginBottom: 16 }}>\n              <Descriptions.Item label=\"SKU\">{selectedStock.sku_code}</Descriptions.Item>\n              <Descriptions.Item label=\"当前库存\">{selectedStock.quantity}</Descriptions.Item>\n              <Descriptions.Item label=\"可用库存\">{selectedStock.available_quantity}</Descriptions.Item>\n              <Descriptions.Item label=\"预留库存\">{selectedStock.reserved_quantity}</Descriptions.Item>\n            </Descriptions>\n\n            <Form.Item\n              name=\"quantity\"\n              label=\"调整数量（正数为入库，负数为出库）\"\n              rules={[{ required: true, message: '请输入调整数量' }]}\n            >\n              <InputNumber style={{ width: '100%' }} />\n            </Form.Item>\n\n            <Form.Item\n              name=\"reason\"\n              label=\"调整原因\"\n              rules={[{ required: true, message: '请输入调整原因' }]}\n            >\n              <Input.TextArea rows={2} placeholder=\"请输入调整原因\" />\n            </Form.Item>\n\n            <Form.Item>\n              <Space>\n                <Button type=\"primary\" htmlType=\"submit\">\n                  确认调整\n                </Button>\n                <Button onClick={() => setAdjustModalVisible(false)}>\n                  取消\n                </Button>\n              </Space>\n            </Form.Item>\n          </Form>\n        )}\n      </Modal>\n\n      <Modal\n        title=\"查询库存可用性\"\n        open={availabilityModalVisible}\n        onCancel={() => {\n          setAvailabilityModalVisible(false);\n          setAvailability(null);\n        }}\n        footer={null}\n        width={700}\n      >\n        <Form form={availabilityForm} layout=\"inline\" onFinish={handleCheckAvailability}>\n          <Form.Item\n            name=\"sales_sku_code\"\n            label=\"销售SKU\"\n            rules={[{ required: true }]}\n          >\n            <Select style={{ width: 200 }} placeholder=\"选择SKU\">\n              {salesSkus.map(sku => (\n                <Option key={sku.id} value={sku.sku_code}>\n                  {sku.sku_code}\n                </Option>\n              ))}\n            </Select>\n          </Form.Item>\n          <Form.Item\n            name=\"quantity\"\n            label=\"需求数量\"\n            rules={[{ required: true }]}\n            initialValue={1}\n          >\n            <InputNumber min={1} />\n          </Form.Item>\n          <Form.Item>\n            <Button type=\"primary\" htmlType=\"submit\">\n              查询\n            </Button>\n          </Form.Item>\n        </Form>\n\n        {availability && (\n          <Card style={{ marginTop: 16 }}>\n            <Alert\n              message={availability.can_fulfill ? '库存充足，可以发货' : '库存不足，无法满足需求'}\n              type={availability.can_fulfill ? 'success' : 'error'}\n              showIcon\n              style={{ marginBottom: 16 }}\n            />\n            \n            <Descriptions column={2} bordered size=\"small\">\n              <Descriptions.Item label=\"销售SKU\">{availability.sales_sku_code}</Descriptions.Item>\n              <Descriptions.Item label=\"可满足\">\n                <Tag color={availability.can_fulfill ? 'success' : 'error'}>\n                  {availability.can_fulfill ? '是' : '否'}\n                </Tag>\n              </Descriptions.Item>\n              <Descriptions.Item label=\"总可用\">{availability.total_available}</Descriptions.Item>\n              <Descriptions.Item label=\"总预留\">{availability.total_reserved}</Descriptions.Item>\n            </Descriptions>\n\n            <Divider>各仓库库存明细</Divider>\n\n            <Table\n              dataSource={availability.warehouse_breakdown}\n              rowKey=\"warehouse_id\"\n              size=\"small\"\n              pagination={false}\n              columns={[\n                { title: '仓库名称', dataIndex: 'warehouse_name', key: 'warehouse_name' },\n                { title: '可用库存', dataIndex: 'available', key: 'available' },\n                { title: '预留库存', dataIndex: 'reserved', key: 'reserved' },\n              ]}\n            />\n          </Card>\n        )}\n      </Modal>\n    </div>\n  );\n};\n\nexport default WarehouseManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Warehouse/index.tsx"
    },
    "51": {
      "path": "/dashboard/independent-site",
      "file": "@/pages/IndependentSite/index.tsx",
      "parentId": "4",
      "id": "51",
      "absPath": "/dashboard/independent-site",
      "__content": "import { FC } from '@/imports';\nimport IndependentSiteList from './IndependentSiteList';\n\nconst IndependentSite: FC = () => {\n  return <IndependentSiteList />;\n};\n\nexport default IndependentSite;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/IndependentSite/index.tsx"
    },
    "52": {
      "path": "/dashboard/independent-site/create",
      "file": "@/pages/IndependentSite/IndependentSiteCreate.tsx",
      "parentId": "4",
      "id": "52",
      "absPath": "/dashboard/independent-site/create",
      "__content": "import {\n  useState,\n  useNavigate,\n  Form,\n  Input,\n  Select,\n  Button,\n  message,\n  Upload,\n  Checkbox,\n  UploadOutlined,\n  Option,\n  FC,\n} from '@/imports';\nimport { independentSiteDataSource } from '@/services/independentSiteDataSource';\n\nconst IndependentSiteCreate: FC = () => {\n  const navigate = useNavigate();\n  const [form] = Form.useForm();\n  const [loading, setLoading] = useState(false);\n\n  const onFinish = async (values: any) => {\n    setLoading(true);\n    try {\n      await independentSiteDataSource.create(values);\n      message.success('独立站创建成功');\n      navigate('/independent-site');\n    } catch (error) {\n      console.error('Failed to create site:', error);\n      message.error('创建独立站失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleCancel = () => {\n    navigate('/independent-site');\n  };\n\n  return (\n    <div className=\"independent-site-create\">\n      <div className=\"page-header\">\n        <h1>对接外部站点</h1>\n      </div>\n\n      <Form\n        form={form}\n        layout=\"vertical\"\n        onFinish={onFinish}\n        initialValues={{\n          platform: 'Shopify',\n          isActive: true,\n        }}\n      >\n        <Form.Item\n          name=\"name\"\n          label=\"站点名称\"\n          rules={[{ required: true, message: '请输入站点名称' }]}\n        >\n          <Input placeholder=\"请输入站点名称\" />\n        </Form.Item>\n\n        <Form.Item\n          name=\"url\"\n          label=\"站点URL\"\n          rules={[{ required: true, message: '请输入站点URL' }]}\n        >\n          <Input placeholder=\"请输入站点URL，例如：https://example.com\" />\n        </Form.Item>\n\n        <Form.Item\n          name=\"platform\"\n          label=\"电商平台\"\n          rules={[{ required: true, message: '请选择电商平台' }]}\n        >\n          <Select placeholder=\"请选择电商平台\">\n            <Option value=\"Shopify\">Shopify</Option>\n            <Option value=\"WooCommerce\">WooCommerce</Option>\n            <Option value=\"Magento\">Magento</Option>\n            <Option value=\"BigCommerce\">BigCommerce</Option>\n            <Option value=\"Custom\">自定义平台</Option>\n          </Select>\n        </Form.Item>\n\n        <Form.Item\n          name=\"apiKey\"\n          label=\"API Key\"\n          rules={[{ required: true, message: '请输入API Key' }]}\n        >\n          <Input placeholder=\"请输入API Key\" />\n        </Form.Item>\n\n        <Form.Item\n          name=\"apiSecret\"\n          label=\"API Secret\"\n          rules={[{ required: true, message: '请输入API Secret' }]}\n        >\n          <Input.Password placeholder=\"请输入API Secret\" />\n        </Form.Item>\n\n        <Form.Item\n          name=\"webhookUrl\"\n          label=\"Webhook URL\"\n        >\n          <Input placeholder=\"请输入Webhook URL\" />\n        </Form.Item>\n\n        <Form.Item\n          name=\"theme\"\n          label=\"主题选择\"\n        >\n          <Select placeholder=\"请选择主题\">\n            <Option value=\"default\">默认主题</Option>\n            <Option value=\"minimal\">极简主题</Option>\n            <Option value=\"modern\">现代主题</Option>\n            <Option value=\"vintage\">复古主题</Option>\n          </Select>\n        </Form.Item>\n\n        <Form.Item\n          name=\"logo\"\n          label=\"站点Logo\"\n        >\n          <Upload\n            name=\"logo\"\n            action=\"/api/upload\"\n            listType=\"picture\"\n          >\n            <Button icon={<UploadOutlined />}>上传Logo</Button>\n          </Upload>\n        </Form.Item>\n\n        <Form.Item\n          name=\"description\"\n          label=\"站点描述\"\n        >\n          <Input.TextArea rows={4} placeholder=\"请输入站点描述\" />\n        </Form.Item>\n\n        <Form.Item\n          name=\"isActive\"\n          valuePropName=\"checked\"\n        >\n          <Checkbox>创建后立即启用</Checkbox>\n        </Form.Item>\n\n        <Form.Item\n          name=\"notes\"\n          label=\"备注\"\n        >\n          <Input.TextArea rows={3} placeholder=\"请输入备注信息\" />\n        </Form.Item>\n\n        <Form.Item>\n          <Button type=\"primary\" htmlType=\"submit\" loading={loading}>\n            创建独立站\n          </Button>\n          <Button style={{ marginLeft: 16 }} onClick={handleCancel}>\n            取消\n          </Button>\n        </Form.Item>\n      </Form>\n    </div>\n  );\n};\n\nexport default IndependentSiteCreate;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/IndependentSite/IndependentSiteCreate.tsx"
    },
    "53": {
      "path": "/dashboard/independent-site/templates",
      "file": "@/pages/IndependentSite/SiteTemplates.tsx",
      "parentId": "4",
      "id": "53",
      "absPath": "/dashboard/independent-site/templates",
      "__content": "import {\n  useState,\n  Card,\n  Row,\n  Col,\n  Button,\n  Input,\n  Tag,\n  Modal,\n  Typography,\n  Space,\n  Tabs,\n  message,\n  Spin,\n  EyeOutlined,\n  DownloadOutlined,\n  StarOutlined,\n  StarFilled,\n  SearchOutlined,\n  FilterOutlined,\n  Title,\n  Text,\n  Paragraph,\n  FC,\n} from '@/imports';\n\ninterface Template {\n  id: string;\n  name: string;\n  category: string;\n  thumbnail: string;\n  rating: number;\n  downloads: number;\n  tags: string[];\n  description: string;\n  isPremium: boolean;\n}\n\nconst templates: Template[] = [\n  { id: '1', name: '时尚服饰', category: 'fashion', thumbnail: '👗', rating: 4.8, downloads: 12500, tags: ['服装', '时尚', '简约'], description: '适合服装、配饰类电商网站', isPremium: false },\n  { id: '2', name: '数码电子', category: 'electronics', thumbnail: '📱', rating: 4.6, downloads: 8900, tags: ['数码', '科技', '现代'], description: '适合电子产品、智能设备销售', isPremium: false },\n  { id: '3', name: '家居生活', category: 'home', thumbnail: '🏠', rating: 4.7, downloads: 10200, tags: ['家居', '生活', '温馨'], description: '适合家居用品、家具销售', isPremium: false },\n  { id: '4', name: '美妆护肤', category: 'beauty', thumbnail: '💄', rating: 4.9, downloads: 15600, tags: ['美妆', '护肤', '女性'], description: '适合化妆品、护肤品销售', isPremium: true },\n  { id: '5', name: '运动户外', category: 'sports', thumbnail: '⚽', rating: 4.5, downloads: 7300, tags: ['运动', '户外', '活力'], description: '适合运动装备、户外用品', isPremium: false },\n  { id: '6', name: '母婴童装', category: 'baby', thumbnail: '👶', rating: 4.7, downloads: 9800, tags: ['母婴', '童装', '可爱'], description: '适合母婴用品、童装销售', isPremium: false },\n  { id: '7', name: '食品生鲜', category: 'food', thumbnail: '🍎', rating: 4.4, downloads: 6500, tags: ['食品', '生鲜', '健康'], description: '适合食品、生鲜电商', isPremium: false },\n  { id: '8', name: '珠宝首饰', category: 'jewelry', thumbnail: '💎', rating: 4.8, downloads: 11200, tags: ['珠宝', '首饰', '奢华'], description: '适合珠宝、首饰类高端电商', isPremium: true },\n  { id: '9', name: '宠物用品', category: 'pets', thumbnail: '🐕', rating: 4.6, downloads: 5400, tags: ['宠物', '可爱', '温馨'], description: '适合宠物用品销售', isPremium: false },\n  { id: '10', name: '艺术品收藏', category: 'art', thumbnail: '🎨', rating: 4.9, downloads: 3200, tags: ['艺术', '收藏', '高端'], description: '适合艺术品、收藏品销售', isPremium: true },\n  { id: '11', name: '汽车配件', category: 'auto', thumbnail: '🚗', rating: 4.5, downloads: 4800, tags: ['汽车', '配件', '专业'], description: '适合汽车配件、改装用品', isPremium: false },\n  { id: '12', name: '图书文具', category: 'books', thumbnail: '📚', rating: 4.7, downloads: 7200, tags: ['图书', '文具', '文艺'], description: '适合图书、文具销售', isPremium: false },\n];\n\nconst categories = [\n  { key: 'all', name: '全部模板' },\n  { key: 'fashion', name: '服装时尚' },\n  { key: 'electronics', name: '数码电子' },\n  { key: 'home', name: '家居生活' },\n  { key: 'beauty', name: '美妆护肤' },\n  { key: 'sports', name: '运动户外' },\n  { key: 'baby', name: '母婴童装' },\n  { key: 'food', name: '食品生鲜' },\n];\n\nconst SiteTemplates: FC = () => {\n  const [selectedCategory, setSelectedCategory] = useState('all');\n  const [searchText, setSearchText] = useState('');\n  const [previewVisible, setPreviewVisible] = useState(false);\n  const [selectedTemplate, setSelectedTemplate] = useState<Template | null>(null);\n  const [favorites, setFavorites] = useState<string[]>([]);\n  const [loading, setLoading] = useState(false);\n\n  const filteredTemplates = templates.filter(t => {\n    const matchCategory = selectedCategory === 'all' || t.category === selectedCategory;\n    const matchSearch = t.name.toLowerCase().includes(searchText.toLowerCase()) ||\n      t.tags.some(tag => tag.includes(searchText));\n    return matchCategory && matchSearch;\n  });\n\n  const handlePreview = (template: Template) => {\n    setSelectedTemplate(template);\n    setPreviewVisible(true);\n  };\n\n  const handleUseTemplate = (template: Template) => {\n    setLoading(true);\n    setTimeout(() => {\n      message.success(`正在使用模板 \"${template.name}\" 创建网站...`);\n      setLoading(false);\n    }, 1000);\n  };\n\n  const toggleFavorite = (id: string) => {\n    if (favorites.includes(id)) {\n      setFavorites(favorites.filter(f => f !== id));\n    } else {\n      setFavorites([...favorites, id]);\n    }\n  };\n\n  return (\n    <div className=\"site-templates\" style={{ padding: 24 }}>\n      <div style={{ marginBottom: 24, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n        <Title level={3} style={{ margin: 0 }}>网站模板</Title>\n        <Space>\n          <Input\n            placeholder=\"搜索模板...\"\n            prefix={<SearchOutlined />}\n            value={searchText}\n            onChange={(e) => setSearchText(e.target.value)}\n            style={{ width: 200 }}\n          />\n          <Button icon={<FilterOutlined />}>筛选</Button>\n        </Space>\n      </div>\n\n      <Tabs \n        activeKey={selectedCategory} \n        onChange={setSelectedCategory}\n        items={categories.map(cat => ({\n          key: cat.key,\n          label: cat.name,\n          children: (\n            <Spin spinning={loading}>\n              <Row gutter={[24, 24]}>\n                {filteredTemplates.map(template => (\n                  <Col xs={24} sm={12} md={8} lg={6} key={template.id}>\n                    <Card\n                      hoverable\n                      cover={\n                        <div style={{ \n                          height: 200, \n                          background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\n                          display: 'flex',\n                          alignItems: 'center',\n                          justifyContent: 'center',\n                          fontSize: 64,\n                          position: 'relative'\n                        }}>\n                          {template.thumbnail}\n                          {template.isPremium && (\n                            <Tag color=\"gold\" style={{ position: 'absolute', top: 8, right: 8 }}>\n                              高级\n                            </Tag>\n                          )}\n                        </div>\n                      }\n                      actions={[\n                        <Button type=\"link\" icon={<EyeOutlined />} onClick={() => handlePreview(template)}>\n                          预览\n                        </Button>,\n                        <Button type=\"link\" onClick={() => toggleFavorite(template.id)}>\n                          {favorites.includes(template.id) ? <StarFilled style={{ color: '#faad14' }} /> : <StarOutlined />}\n                        </Button>,\n                        <Button type=\"link\" icon={<DownloadOutlined />} onClick={() => handleUseTemplate(template)}>\n                          使用\n                        </Button>,\n                      ]}\n                    >\n                      <Card.Meta\n                        title={\n                          <Space>\n                            <Text strong>{template.name}</Text>\n                          </Space>\n                        }\n                        description={\n                          <div>\n                            <Paragraph ellipsis={{ rows: 2 }} style={{ marginBottom: 8 }}>\n                              {template.description}\n                            </Paragraph>\n                            <Space wrap>\n                              {template.tags.map(tag => (\n                                <Tag key={tag}>{tag}</Tag>\n                              ))}\n                            </Space>\n                            <div style={{ marginTop: 8, display: 'flex', justifyContent: 'space-between' }}>\n                              <Text type=\"secondary\">\n                                <StarFilled style={{ color: '#faad14', marginRight: 4 }} />\n                                {template.rating}\n                              </Text>\n                              <Text type=\"secondary\">\n                                <DownloadOutlined style={{ marginRight: 4 }} />\n                                {template.downloads.toLocaleString()}\n                              </Text>\n                            </div>\n                          </div>\n                        }\n                      />\n                    </Card>\n                  </Col>\n                ))}\n              </Row>\n            </Spin>\n          ),\n        }))}\n      />\n\n      <Modal\n        title={selectedTemplate?.name}\n        open={previewVisible}\n        onCancel={() => setPreviewVisible(false)}\n        width={800}\n        footer={[\n          <Button key=\"cancel\" onClick={() => setPreviewVisible(false)}>\n            取消\n          </Button>,\n          <Button key=\"use\" type=\"primary\" onClick={() => {\n            if (selectedTemplate) handleUseTemplate(selectedTemplate);\n            setPreviewVisible(false);\n          }}>\n            使用此模板\n          </Button>,\n        ]}\n      >\n        {selectedTemplate && (\n          <div>\n            <div style={{ \n              height: 300, \n              background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\n              display: 'flex',\n              alignItems: 'center',\n              justifyContent: 'center',\n              fontSize: 80,\n              marginBottom: 16,\n              borderRadius: 8\n            }}>\n              {selectedTemplate.thumbnail}\n            </div>\n            <Title level={4}>{selectedTemplate.name}</Title>\n            <Paragraph>{selectedTemplate.description}</Paragraph>\n            <Space wrap style={{ marginBottom: 16 }}>\n              {selectedTemplate.tags.map(tag => (\n                <Tag key={tag}>{tag}</Tag>\n              ))}\n            </Space>\n            <div style={{ display: 'flex', gap: 24 }}>\n              <Text><StarFilled style={{ color: '#faad14', marginRight: 4 }} />{selectedTemplate.rating} 分</Text>\n              <Text><DownloadOutlined style={{ marginRight: 4 }} />{selectedTemplate.downloads.toLocaleString()} 次下载</Text>\n            </div>\n          </div>\n        )}\n      </Modal>\n    </div>\n  );\n};\n\nexport default SiteTemplates;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/IndependentSite/SiteTemplates.tsx"
    },
    "54": {
      "path": "/dashboard/independent-site/analytics",
      "file": "@/pages/IndependentSite/IndependentSiteAnalytics.tsx",
      "parentId": "4",
      "id": "54",
      "absPath": "/dashboard/independent-site/analytics",
      "__content": "import {\n  useState,\n  useEffect,\n  useParams,\n  Card,\n  DatePicker,\n  Select,\n  Spin,\n  Statistic,\n  Row,\n  Col,\n  Tabs,\n  Button,\n  Table,\n  Tag,\n  Space,\n  Typography,\n  Line,\n  Column,\n  Pie,\n  Area,\n  DualAxes,\n  ReloadOutlined,\n  ExportOutlined,\n  DollarOutlined,\n  ShoppingCartOutlined,\n  TeamOutlined,\n  RiseOutlined,\n  RangePicker,\n  Option,\n  Title,\n  Text,\n  FC,\n} from '@/imports';\n\ninterface SalesData {\n  date: string;\n  sales: number;\n  orders: number;\n  customers: number;\n}\n\ninterface ProductData {\n  name: string;\n  sales: number;\n  quantity: number;\n}\n\ninterface TrafficData {\n  date: string;\n  visitors: number;\n  pageViews: number;\n  bounceRate: number;\n}\n\nconst SALES_TREND_DATA: SalesData[] = [\n  { date: '2026-03-01', sales: 5200, orders: 42, customers: 35 },\n  { date: '2026-03-02', sales: 6100, orders: 51, customers: 42 },\n  { date: '2026-03-03', sales: 4800, orders: 38, customers: 31 },\n  { date: '2026-03-04', sales: 7500, orders: 62, customers: 48 },\n  { date: '2026-03-05', sales: 6800, orders: 55, customers: 45 },\n  { date: '2026-03-06', sales: 8200, orders: 68, customers: 52 },\n  { date: '2026-03-07', sales: 9100, orders: 75, customers: 58 },\n  { date: '2026-03-08', sales: 7800, orders: 64, customers: 49 },\n  { date: '2026-03-09', sales: 8500, orders: 70, customers: 55 },\n  { date: '2026-03-10', sales: 9800, orders: 82, customers: 65 },\n];\n\nconst PRODUCT_DATA: ProductData[] = [\n  { name: '无线蓝牙耳机', sales: 15800, quantity: 158 },\n  { name: '智能手表', sales: 12500, quantity: 50 },\n  { name: '便携充电宝', sales: 8900, quantity: 178 },\n  { name: '手机支架', sales: 6200, quantity: 310 },\n  { name: '数据线套装', sales: 4500, quantity: 450 },\n];\n\nconst TRAFFIC_DATA: TrafficData[] = [\n  { date: '2026-03-01', visitors: 1250, pageViews: 3800, bounceRate: 35 },\n  { date: '2026-03-02', visitors: 1480, pageViews: 4200, bounceRate: 32 },\n  { date: '2026-03-03', visitors: 1100, pageViews: 3200, bounceRate: 38 },\n  { date: '2026-03-04', visitors: 1800, pageViews: 5500, bounceRate: 28 },\n  { date: '2026-03-05', visitors: 1650, pageViews: 4800, bounceRate: 30 },\n  { date: '2026-03-06', visitors: 2100, pageViews: 6200, bounceRate: 25 },\n  { date: '2026-03-07', visitors: 2350, pageViews: 7100, bounceRate: 22 },\n  { date: '2026-03-08', visitors: 1900, pageViews: 5600, bounceRate: 27 },\n  { date: '2026-03-09', visitors: 2200, pageViews: 6500, bounceRate: 24 },\n  { date: '2026-03-10', visitors: 2500, pageViews: 7500, bounceRate: 20 },\n];\n\nconst CONVERSION_DATA = [\n  { type: '直接购买', value: 35 },\n  { type: '加购后购买', value: 28 },\n  { type: '收藏后购买', value: 15 },\n  { type: '未转化', value: 22 },\n];\n\nconst REGION_DATA = [\n  { region: '美国', customers: 450, percentage: 35 },\n  { region: '欧洲', customers: 320, percentage: 25 },\n  { region: '东南亚', customers: 280, percentage: 22 },\n  { region: '中东', customers: 150, percentage: 12 },\n  { region: '其他', customers: 80, percentage: 6 },\n];\n\nconst DEVICE_DATA = [\n  { device: '移动端', value: 65, color: '#1890ff' },\n  { device: '桌面端', value: 30, color: '#52c41a' },\n  { device: '平板', value: 5, color: '#faad14' },\n];\n\nconst IndependentSiteAnalytics: FC = () => {\n  const { id } = useParams<{ id: string }>();\n  const [loading, setLoading] = useState(false);\n  const [dateRange, setDateRange] = useState<any>(null);\n  const [timeRange, setTimeRange] = useState('30d');\n  const [activeTab, setActiveTab] = useState('sales');\n\n  useEffect(() => {\n    fetchAnalyticsData();\n  }, [id, timeRange, dateRange]);\n\n  const fetchAnalyticsData = async () => {\n    setLoading(true);\n    setTimeout(() => {\n      setLoading(false);\n    }, 500);\n  };\n\n  const salesTrendConfig = {\n    data: SALES_TREND_DATA.flatMap(item => [\n      { date: item.date, value: item.sales, type: '销售额' },\n      { date: item.date, value: item.orders * 100, type: '订单数' },\n    ]),\n    xField: 'date',\n    yField: 'value',\n    seriesField: 'type',\n    smooth: true,\n    legend: { position: 'top' as const },\n    yAxis: { label: { formatter: (v: number) => `$${v / 1000}k` } },\n  };\n\n  const productSalesConfig = {\n    data: PRODUCT_DATA,\n    xField: 'name',\n    yField: 'sales',\n    color: '#1890ff',\n    label: { text: 'sales', position: 'top' as const },\n  };\n\n  const trafficConfig = {\n    data: [TRAFFIC_DATA, TRAFFIC_DATA],\n    xField: 'date',\n    yField: ['visitors', 'pageViews'],\n    geometryOptions: [\n      { geometry: 'line', color: '#1890ff', smooth: true },\n      { geometry: 'line', color: '#52c41a', smooth: true },\n    ],\n    legend: { position: 'top' as const },\n  };\n\n  const conversionConfig = {\n    data: CONVERSION_DATA,\n    angleField: 'value',\n    colorField: 'type',\n    radius: 0.8,\n    innerRadius: 0.6,\n    label: { text: 'type', position: 'outside' },\n    legend: { position: 'bottom' as const },\n  };\n\n  const regionConfig = {\n    data: REGION_DATA,\n    xField: 'region',\n    yField: 'customers',\n    color: '#722ed1',\n    label: { text: 'customers', position: 'top' as const },\n  };\n\n  const deviceConfig = {\n    data: DEVICE_DATA,\n    angleField: 'value',\n    colorField: 'device',\n    radius: 0.8,\n    innerRadius: 0.6,\n    label: { text: 'device', position: 'outside' },\n    legend: { position: 'bottom' as const },\n  };\n\n  const productColumns = [\n    { title: '商品名称', dataIndex: 'name', key: 'name' },\n    { title: '销售额', dataIndex: 'sales', key: 'sales', render: (v: number) => `$${v.toLocaleString()}` },\n    { title: '销量', dataIndex: 'quantity', key: 'quantity' },\n    { title: '占比', key: 'percentage', render: (_: any, record: ProductData) => {\n      const total = PRODUCT_DATA.reduce((sum, p) => sum + p.sales, 0);\n      return `${((record.sales / total) * 100).toFixed(1)}%`;\n    }},\n  ];\n\n  const tabItems = [\n    {\n      key: 'sales',\n      label: '销售分析',\n      children: (\n        <Row gutter={16}>\n          <Col span={24}>\n            <Card title=\"销售趋势\">\n              <Line {...salesTrendConfig} height={300} />\n            </Card>\n          </Col>\n          <Col xs={24} lg={16} style={{ marginTop: 16 }}>\n            <Card title=\"商品销售排行\">\n              <Column {...productSalesConfig} height={280} />\n            </Card>\n          </Col>\n          <Col xs={24} lg={8} style={{ marginTop: 16 }}>\n            <Card title=\"转化漏斗\">\n              <Pie {...conversionConfig} height={280} />\n            </Card>\n          </Col>\n          <Col span={24} style={{ marginTop: 16 }}>\n            <Card title=\"商品销售明细\">\n              <Table columns={productColumns} dataSource={PRODUCT_DATA} rowKey=\"name\" pagination={false} />\n            </Card>\n          </Col>\n        </Row>\n      ),\n    },\n    {\n      key: 'traffic',\n      label: '流量分析',\n      children: (\n        <Row gutter={16}>\n          <Col span={24}>\n            <Card title=\"流量趋势\">\n              <DualAxes {...trafficConfig} height={300} />\n            </Card>\n          </Col>\n          <Col xs={24} lg={12} style={{ marginTop: 16 }}>\n            <Card title=\"设备分布\">\n              <Pie {...deviceConfig} height={280} />\n            </Card>\n          </Col>\n          <Col xs={24} lg={12} style={{ marginTop: 16 }}>\n            <Card title=\"流量来源\">\n              <Table\n                columns={[\n                  { title: '来源', dataIndex: 'source', key: 'source' },\n                  { title: '访客数', dataIndex: 'visitors', key: 'visitors' },\n                  { title: '占比', dataIndex: 'percentage', key: 'percentage', render: (v: number) => `${v}%` },\n                ]}\n                dataSource={[\n                  { key: '1', source: '搜索引擎', visitors: 3500, percentage: 42 },\n                  { key: '2', source: '社交媒体', visitors: 2100, percentage: 25 },\n                  { key: '3', source: '直接访问', visitors: 1500, percentage: 18 },\n                  { key: '4', source: '广告投放', visitors: 800, percentage: 10 },\n                  { key: '5', source: '其他', visitors: 400, percentage: 5 },\n                ]}\n                pagination={false}\n              />\n            </Card>\n          </Col>\n        </Row>\n      ),\n    },\n    {\n      key: 'customer',\n      label: '客户分析',\n      children: (\n        <Row gutter={16}>\n          <Col xs={24} lg={16}>\n            <Card title=\"客户地域分布\">\n              <Column {...regionConfig} height={300} />\n            </Card>\n          </Col>\n          <Col xs={24} lg={8}>\n            <Card title=\"客户类型\">\n              <Pie\n                data={[\n                  { type: '新客户', value: 45 },\n                  { type: '回头客', value: 35 },\n                  { type: 'VIP客户', value: 20 },\n                ]}\n                angleField=\"value\"\n                colorField=\"type\"\n                radius={0.8}\n                innerRadius={0.6}\n                label={{ text: 'type', position: 'outside' }}\n                height={280}\n              />\n            </Card>\n          </Col>\n          <Col span={24} style={{ marginTop: 16 }}>\n            <Card title=\"客户购买行为分析\">\n              <Row gutter={16}>\n                <Col span={6}>\n                  <Statistic title=\"平均订单金额\" value={125} prefix={<DollarOutlined />} suffix=\"USD\" />\n                </Col>\n                <Col span={6}>\n                  <Statistic title=\"复购率\" value={35} suffix=\"%\" valueStyle={{ color: '#52c41a' }} prefix={<RiseOutlined />} />\n                </Col>\n                <Col span={6}>\n                  <Statistic title=\"平均购买频次\" value={2.3} suffix=\"次/月\" />\n                </Col>\n                <Col span={6}>\n                  <Statistic title=\"客户满意度\" value={4.8} suffix=\"/ 5.0\" valueStyle={{ color: '#faad14' }} />\n                </Col>\n              </Row>\n            </Card>\n          </Col>\n        </Row>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"independent-site-analytics\" style={{ padding: 24 }}>\n      <Row justify=\"space-between\" align=\"middle\" style={{ marginBottom: 24 }}>\n        <Col>\n          <Title level={4}>独立站数据分析</Title>\n          <Text type=\"secondary\">站点ID: {id}</Text>\n        </Col>\n        <Col>\n          <Space>\n            <Select value={timeRange} onChange={setTimeRange} style={{ width: 120 }}>\n              <Option value=\"7d\">7天</Option>\n              <Option value=\"30d\">30天</Option>\n              <Option value=\"90d\">90天</Option>\n              <Option value=\"1y\">1年</Option>\n            </Select>\n            <RangePicker onChange={setDateRange} />\n            <Button icon={<ReloadOutlined />} onClick={fetchAnalyticsData}>刷新</Button>\n            <Button type=\"primary\" icon={<ExportOutlined />}>导出</Button>\n          </Space>\n        </Col>\n      </Row>\n\n      {loading ? (\n        <div style={{ textAlign: 'center', padding: '50px 0' }}>\n          <Spin size=\"large\" />\n        </div>\n      ) : (\n        <>\n          <Row gutter={16} style={{ marginBottom: 24 }}>\n            <Col xs={12} sm={6}>\n              <Card>\n                <Statistic title=\"总销售额\" value={73800} precision={2} prefix={<DollarOutlined />} suffix=\"USD\" valueStyle={{ color: '#3f8600' }} />\n              </Card>\n            </Col>\n            <Col xs={12} sm={6}>\n              <Card>\n                <Statistic title=\"总订单数\" value={607} prefix={<ShoppingCartOutlined />} />\n              </Card>\n            </Col>\n            <Col xs={12} sm={6}>\n              <Card>\n                <Statistic title=\"总客户数\" value={480} prefix={<TeamOutlined />} />\n              </Card>\n            </Col>\n            <Col xs={12} sm={6}>\n              <Card>\n                <Statistic title=\"转化率\" value={4.2} precision={2} suffix=\"%\" valueStyle={{ color: '#722ed1' }} prefix={<RiseOutlined />} />\n              </Card>\n            </Col>\n          </Row>\n\n          <Tabs activeKey={activeTab} onChange={setActiveTab} items={tabItems} />\n        </>\n      )}\n    </div>\n  );\n};\n\nexport default IndependentSiteAnalytics;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/IndependentSite/IndependentSiteAnalytics.tsx"
    },
    "55": {
      "path": "/dashboard/independent-site/orders",
      "file": "@/pages/IndependentSite/IndependentSiteOrder.tsx",
      "parentId": "4",
      "id": "55",
      "absPath": "/dashboard/independent-site/orders",
      "__content": "import {\n  useState,\n  useEffect,\n  useParams,\n  Table,\n  Button,\n  Input,\n  Select,\n  DatePicker,\n  message,\n  Modal,\n  Form,\n  EyeOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  Option,\n  RangePicker,\n  Search,\n  FC,\n} from '@/imports';\nimport { independentSiteDataSource, SiteOrder } from '@/services/independentSiteDataSource';\n\nconst IndependentSiteOrder: FC = () => {\n  const { id } = useParams<{ id: string }>();\n  const [orders, setOrders] = useState<SiteOrder[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [filters, setFilters] = useState({\n    status: '',\n    paymentMethod: '',\n    search: '',\n    dateRange: null as any,\n  });\n  const [modalVisible, setModalVisible] = useState(false);\n  const [selectedOrder, setSelectedOrder] = useState<SiteOrder | null>(null);\n  const [form] = Form.useForm();\n\n  useEffect(() => {\n    fetchOrders();\n  }, [id, filters]);\n\n  const fetchOrders = async () => {\n    setLoading(true);\n    setTimeout(() => {\n      const mockOrders: SiteOrder[] = [\n        {\n          id: '1',\n          siteId: id || '',\n          orderNumber: 'ORD-2026-001',\n          customerName: 'John Doe',\n          customerEmail: 'john@example.com',\n          total: 199.99,\n          currency: 'USD',\n          status: 'processing',\n          paymentMethod: 'PayPal',\n          paymentStatus: 'paid',\n          shippingAddress: {\n            name: 'John Doe',\n            address: '123 Main St',\n            city: 'New York',\n            country: 'USA',\n            zipCode: '10001'\n          },\n          items: [],\n          createdAt: '2026-03-15',\n          updatedAt: '2026-03-16',\n        },\n        {\n          id: '2',\n          siteId: id || '',\n          orderNumber: 'ORD-2026-002',\n          customerName: 'Jane Smith',\n          customerEmail: 'jane@example.com',\n          total: 299.99,\n          currency: 'USD',\n          status: 'shipped',\n          paymentMethod: 'Stripe',\n          paymentStatus: 'paid',\n          shippingAddress: {\n            name: 'Jane Smith',\n            address: '456 Oak Ave',\n            city: 'Los Angeles',\n            country: 'USA',\n            zipCode: '90001'\n          },\n          items: [],\n          createdAt: '2026-03-16',\n          updatedAt: '2026-03-17',\n        },\n        {\n          id: '3',\n          siteId: id || '',\n          orderNumber: 'ORD-2026-003',\n          customerName: 'Bob Johnson',\n          customerEmail: 'bob@example.com',\n          total: 149.99,\n          currency: 'USD',\n          status: 'pending',\n          paymentMethod: 'Credit Card',\n          paymentStatus: 'pending',\n          shippingAddress: {\n            name: 'Bob Johnson',\n            address: '789 Pine Rd',\n            city: 'Chicago',\n            country: 'USA',\n            zipCode: '60601'\n          },\n          items: [],\n          createdAt: '2026-03-17',\n          updatedAt: '2026-03-17',\n        },\n      ];\n      setOrders(mockOrders);\n      setLoading(false);\n    }, 500);\n  };\n\n  const handleViewOrder = (order: SiteOrder) => {\n    setSelectedOrder(order);\n    form.setFieldsValue(order);\n    setModalVisible(true);\n  };\n\n  const handleUpdateOrder = async (values: any) => {\n    setLoading(true);\n    setTimeout(() => {\n      message.success('订单状态更新成功');\n      setLoading(false);\n      setModalVisible(false);\n      fetchOrders();\n    }, 1000);\n  };\n\n  const handleCancelOrder = (orderId: string) => {\n    message.success('订单已取消');\n    fetchOrders();\n  };\n\n  const handleRefundOrder = (orderId: string) => {\n    message.success('订单已退款');\n    fetchOrders();\n  };\n\n  const columns = [\n    {\n      title: '订单号',\n      dataIndex: 'orderNumber',\n      key: 'orderNumber',\n    },\n    {\n      title: '客户名称',\n      dataIndex: 'customerName',\n      key: 'customerName',\n    },\n    {\n      title: '总金额',\n      dataIndex: 'total',\n      key: 'total',\n      render: (total: number) => `$${total.toFixed(2)}`,\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => {\n        const statusMap: Record<string, string> = {\n          pending: '待处理',\n          processing: '处理中',\n          shipped: '已发货',\n          delivered: '已送达',\n          cancelled: '已取消',\n          refunded: '已退款',\n        };\n        return statusMap[status] || status;\n      },\n    },\n    {\n      title: '支付方式',\n      dataIndex: 'paymentMethod',\n      key: 'paymentMethod',\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'createdAt',\n      key: 'createdAt',\n    },\n    {\n      title: '更新时间',\n      dataIndex: 'updatedAt',\n      key: 'updatedAt',\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: any, record: SiteOrder) => (\n        <div>\n          <Button\n            type=\"link\"\n            icon={<EyeOutlined />}\n            onClick={() => handleViewOrder(record)}\n          >\n            查看\n          </Button>\n          <Button\n            type=\"link\"\n            icon={<EditOutlined />}\n            onClick={() => handleViewOrder(record)}\n          >\n            编辑\n          </Button>\n        </div>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"independent-site-order\">\n      <div className=\"page-header\">\n        <h1>订单管理</h1>\n      </div>\n\n      <div className=\"filters\">\n        <Search\n          placeholder=\"搜索订单号或客户名称\"\n          style={{ width: 300, marginBottom: 16 }}\n          onSearch={(value) => setFilters({ ...filters, search: value })}\n        />\n        <Select\n          placeholder=\"订单状态\"\n          style={{ width: 150, marginLeft: 8 }}\n          onChange={(value) => setFilters({ ...filters, status: value })}\n          allowClear\n        >\n          <Option value=\"pending\">待处理</Option>\n          <Option value=\"processing\">处理中</Option>\n          <Option value=\"shipped\">已发货</Option>\n          <Option value=\"delivered\">已送达</Option>\n          <Option value=\"cancelled\">已取消</Option>\n          <Option value=\"refunded\">已退款</Option>\n        </Select>\n        <Select\n          placeholder=\"支付方式\"\n          style={{ width: 150, marginLeft: 8 }}\n          onChange={(value) => setFilters({ ...filters, paymentMethod: value })}\n          allowClear\n        >\n          <Option value=\"PayPal\">PayPal</Option>\n          <Option value=\"Stripe\">Stripe</Option>\n          <Option value=\"Credit Card\">信用卡</Option>\n        </Select>\n        <RangePicker\n          style={{ marginLeft: 8 }}\n          onChange={(dates) => setFilters({ ...filters, dateRange: dates })}\n        />\n      </div>\n\n      <Table\n        columns={columns}\n        dataSource={orders}\n        rowKey=\"id\"\n        loading={loading}\n      />\n\n      <Modal\n        title=\"订单详情\"\n        open={modalVisible}\n        onCancel={() => setModalVisible(false)}\n        onOk={() => form.submit()}\n      >\n        <Form form={form} onFinish={handleUpdateOrder} layout=\"vertical\">\n          <Form.Item name=\"orderNumber\" label=\"订单号\">\n            <Input disabled />\n          </Form.Item>\n          <Form.Item name=\"customerName\" label=\"客户名称\">\n            <Input disabled />\n          </Form.Item>\n          <Form.Item name=\"total\" label=\"总金额\">\n            <Input disabled />\n          </Form.Item>\n          <Form.Item name=\"status\" label=\"状态\">\n            <Select>\n              <Option value=\"pending\">待处理</Option>\n              <Option value=\"processing\">处理中</Option>\n              <Option value=\"shipped\">已发货</Option>\n              <Option value=\"delivered\">已送达</Option>\n              <Option value=\"cancelled\">已取消</Option>\n              <Option value=\"refunded\">已退款</Option>\n            </Select>\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default IndependentSiteOrder;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/IndependentSite/IndependentSiteOrder.tsx"
    },
    "56": {
      "path": "/dashboard/independent-site/products",
      "file": "@/pages/IndependentSite/IndependentSiteProduct.tsx",
      "parentId": "4",
      "id": "56",
      "absPath": "/dashboard/independent-site/products",
      "__content": "import {\n  useState,\n  useEffect,\n  useParams,\n  Table,\n  Button,\n  Input,\n  Select,\n  message,\n  Upload,\n  Modal,\n  Form,\n  Card,\n  Row,\n  Col,\n  Tag,\n  Space,\n  Typography,\n  Statistic,\n  Image,\n  PlusOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  UploadOutlined,\n  ExportOutlined,\n  ReloadOutlined,\n  ShoppingCartOutlined,\n  DollarOutlined,\n  InboxOutlined,\n  Option,\n  Search,\n  Title,\n  Text,\n  Key,\n  FC,\n} from '@/imports';\nimport type { ColumnsType } from 'antd/es/table';\nimport { independentSiteDataSource, SiteProduct } from '@/services/independentSiteDataSource';\n\nconst IndependentSiteProduct: FC = () => {\n  const { id } = useParams<{ id: string }>();\n  const [products, setProducts] = useState<SiteProduct[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [selectedRowKeys, setSelectedRowKeys] = useState<Key[]>([]);\n  const [filters, setFilters] = useState({ status: '', search: '', category: '' });\n  const [modalVisible, setModalVisible] = useState(false);\n  const [editingProduct, setEditingProduct] = useState<SiteProduct | null>(null);\n  const [form] = Form.useForm();\n\n  useEffect(() => {\n    fetchProducts();\n  }, [id, filters]);\n\n  const fetchProducts = async () => {\n    setLoading(true);\n    try {\n      // 这里应该调用 independentSiteDataSource 的商品列表方法\n      // 由于当前数据源没有专门的商品方法，暂时使用模拟数据\n      const mockProducts: SiteProduct[] = [\n        { id: '1', siteId: id || '', name: '无线蓝牙耳机 Pro', sku: 'WBH-001', price: 99.99, stock: 150, status: 'published', category: '电子产品', createdAt: '2026-03-01', updatedAt: '2026-03-15' },\n        { id: '2', siteId: id || '', name: '智能手表 S3', sku: 'SW-002', price: 199.99, stock: 80, status: 'published', category: '电子产品', createdAt: '2026-03-05', updatedAt: '2026-03-10' },\n        { id: '3', siteId: id || '', name: '便携充电宝 20000mAh', sku: 'PB-003', price: 49.99, stock: 200, status: 'published', category: '配件', createdAt: '2026-03-10', updatedAt: '2026-03-18' },\n        { id: '4', siteId: id || '', name: '手机支架 磁吸款', sku: 'MS-004', price: 29.99, stock: 300, status: 'draft', category: '配件', createdAt: '2026-03-12', updatedAt: '2026-03-12' },\n        { id: '5', siteId: id || '', name: '数据线套装 Type-C', sku: 'DC-005', price: 19.99, stock: 500, status: 'unpublished', category: '配件', createdAt: '2026-03-15', updatedAt: '2026-03-15' },\n      ];\n      let filtered = [...mockProducts];\n      if (filters.status) {\n        filtered = filtered.filter(p => p.status === filters.status);\n      }\n      if (filters.category) {\n        filtered = filtered.filter(p => p.category === filters.category);\n      }\n      if (filters.search) {\n        filtered = filtered.filter(p => \n          p.name.toLowerCase().includes(filters.search.toLowerCase()) ||\n          p.sku.toLowerCase().includes(filters.search.toLowerCase())\n        );\n      }\n      setProducts(filtered);\n    } catch (error) {\n      console.error('Failed to load products:', error);\n      message.error('加载商品失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleAddProduct = () => {\n    setEditingProduct(null);\n    form.resetFields();\n    setModalVisible(true);\n  };\n\n  const handleEditProduct = (record: SiteProduct) => {\n    setEditingProduct(record);\n    form.setFieldsValue(record);\n    setModalVisible(true);\n  };\n\n  const handleDeleteProduct = (productId: string) => {\n    Modal.confirm({\n      title: '确认删除',\n      content: '确定要删除这个商品吗？',\n      onOk: async () => {\n        try {\n          // 这里应该调用 independentSiteDataSource 的删除商品方法\n          setProducts(prev => prev.filter(p => p.id !== productId));\n          message.success('商品已删除');\n        } catch (error) {\n          console.error('Failed to delete product:', error);\n          message.error('删除商品失败');\n        }\n      },\n    });\n  };\n\n  const handleBatchDelete = () => {\n    if (selectedRowKeys.length === 0) {\n      message.warning('请选择要删除的商品');\n      return;\n    }\n    Modal.confirm({\n      title: '批量删除',\n      content: `确定要删除选中的 ${selectedRowKeys.length} 个商品吗？`,\n      onOk: async () => {\n        try {\n          // 这里应该调用 independentSiteDataSource 的批量删除商品方法\n          setProducts(prev => prev.filter(p => !selectedRowKeys.includes(p.id)));\n          setSelectedRowKeys([]);\n          message.success('商品已批量删除');\n        } catch (error) {\n          console.error('Failed to batch delete products:', error);\n          message.error('批量删除商品失败');\n        }\n      },\n    });\n  };\n\n  const handlePublishProduct = async (productId: string) => {\n    try {\n      // 这里应该调用 independentSiteDataSource 的更新商品方法\n      setProducts(prev => prev.map(p => p.id === productId ? { ...p, status: 'published' } : p));\n      message.success('商品已发布');\n    } catch (error) {\n      console.error('Failed to publish product:', error);\n      message.error('发布商品失败');\n    }\n  };\n\n  const handleBatchPublish = async () => {\n    if (selectedRowKeys.length === 0) {\n      message.warning('请选择要发布的商品');\n      return;\n    }\n    try {\n      // 这里应该调用 independentSiteDataSource 的批量更新商品方法\n      setProducts(prev => prev.map(p => selectedRowKeys.includes(p.id) ? { ...p, status: 'published' } : p));\n      setSelectedRowKeys([]);\n      message.success('商品已批量发布');\n    } catch (error) {\n      console.error('Failed to batch publish products:', error);\n      message.error('批量发布商品失败');\n    }\n  };\n\n  const handleSubmit = async (values: any) => {\n    setLoading(true);\n    try {\n      if (editingProduct) {\n        // 这里应该调用 independentSiteDataSource 的更新商品方法\n        setProducts(prev => prev.map(p => p.id === editingProduct.id ? { ...p, ...values } : p));\n        message.success('商品更新成功');\n      } else {\n        // 这里应该调用 independentSiteDataSource 的创建商品方法\n        const newProduct: SiteProduct = {\n          ...values,\n          id: `${Date.now()}`,\n          siteId: id || '',\n          createdAt: new Date().toISOString().split('T')[0],\n          updatedAt: new Date().toISOString().split('T')[0],\n        };\n        setProducts(prev => [...prev, newProduct]);\n        message.success('商品添加成功');\n      }\n    } catch (error) {\n      console.error('Failed to save product:', error);\n      message.error('保存商品失败');\n    } finally {\n      setLoading(false);\n      setModalVisible(false);\n    }\n  };\n\n  const statusColors: Record<string, string> = {\n    published: 'success',\n    draft: 'warning',\n    unpublished: 'default',\n  };\n\n  const statusTexts: Record<string, string> = {\n    published: '已发布',\n    draft: '草稿',\n    unpublished: '未发布',\n  };\n\n  const columns: ColumnsType<SiteProduct> = [\n    {\n      title: '商品信息',\n      dataIndex: 'name',\n      key: 'name',\n      width: 280,\n      render: (text, record) => (\n        <Space>\n          <Image src={record.image} width={60} height={60} style={{ borderRadius: 4, objectFit: 'cover' }} fallback=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==\" />\n          <div>\n            <div style={{ fontWeight: 500 }}>{text}</div>\n            <Text type=\"secondary\" style={{ fontSize: 12 }}>SKU: {record.sku}</Text>\n            <div><Tag>{record.category}</Tag></div>\n          </div>\n        </Space>\n      ),\n    },\n    {\n      title: '价格',\n      dataIndex: 'price',\n      key: 'price',\n      width: 120,\n      render: (price, record) => (\n        <div>\n          <div style={{ fontWeight: 500, color: '#ff4d4f' }}>${price.toFixed(2)}</div>\n          {record.comparePrice && <Text delete type=\"secondary\" style={{ fontSize: 12 }}>${record.comparePrice.toFixed(2)}</Text>}\n        </div>\n      ),\n    },\n    {\n      title: '成本',\n      dataIndex: 'cost',\n      key: 'cost',\n      width: 80,\n      render: (cost) => cost ? `$${cost.toFixed(2)}` : '-',\n    },\n    {\n      title: '库存',\n      dataIndex: 'stock',\n      key: 'stock',\n      width: 80,\n      render: (stock) => (\n        <Tag color={stock > 50 ? 'success' : stock > 10 ? 'warning' : 'error'}>{stock}</Tag>\n      ),\n    },\n    {\n      title: '销量',\n      dataIndex: 'sales',\n      key: 'sales',\n      width: 80,\n      sorter: (a, b) => a.sales - b.sales,\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      width: 100,\n      render: (status) => <Tag color={statusColors[status]}>{statusTexts[status]}</Tag>,\n    },\n    {\n      title: '更新时间',\n      dataIndex: 'updatedAt',\n      key: 'updatedAt',\n      width: 120,\n    },\n    {\n      title: '操作',\n      key: 'action',\n      width: 180,\n      render: (_, record) => (\n        <Space size=\"small\">\n          <Button type=\"link\" size=\"small\" icon={<EditOutlined />} onClick={() => handleEditProduct(record)}>编辑</Button>\n          {record.status !== 'published' && (\n            <Button type=\"link\" size=\"small\" onClick={() => handlePublishProduct(record.id)}>发布</Button>\n          )}\n          <Button type=\"link\" size=\"small\" danger icon={<DeleteOutlined />} onClick={() => handleDeleteProduct(record.id)}>删除</Button>\n        </Space>\n      ),\n    },\n  ];\n\n  const rowSelection = {\n    selectedRowKeys,\n    onChange: (keys: React.Key[]) => setSelectedRowKeys(keys),\n  };\n\n  const totalStock = products.reduce((sum, p) => sum + p.stock, 0);\n  const totalSales = products.reduce((sum, p) => sum + p.sales, 0);\n  const totalValue = products.reduce((sum, p) => sum + (p.price * p.stock), 0);\n  const publishedCount = products.filter(p => p.status === 'published').length;\n\n  return (\n    <div className=\"independent-site-product\" style={{ padding: 24 }}>\n      <Row justify=\"space-between\" align=\"middle\" style={{ marginBottom: 24 }}>\n        <Col>\n          <Title level={4}>商品管理</Title>\n          <Text type=\"secondary\">站点ID: {id}</Text>\n        </Col>\n        <Col>\n          <Space>\n            <Button icon={<ReloadOutlined />} onClick={fetchProducts}>刷新</Button>\n            <Button icon={<ExportOutlined />}>导出</Button>\n            <Upload showUploadList={false}>\n              <Button icon={<UploadOutlined />}>批量导入</Button>\n            </Upload>\n            <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleAddProduct}>添加商品</Button>\n          </Space>\n        </Col>\n      </Row>\n\n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col xs={12} sm={6}>\n          <Card size=\"small\">\n            <Statistic title=\"商品总数\" value={products.length} prefix={<ShoppingCartOutlined />} />\n          </Card>\n        </Col>\n        <Col xs={12} sm={6}>\n          <Card size=\"small\">\n            <Statistic title=\"已发布\" value={publishedCount} valueStyle={{ color: '#52c41a' }} />\n          </Card>\n        </Col>\n        <Col xs={12} sm={6}>\n          <Card size=\"small\">\n            <Statistic title=\"总库存\" value={totalStock} prefix={<InboxOutlined />} />\n          </Card>\n        </Col>\n        <Col xs={12} sm={6}>\n          <Card size=\"small\">\n            <Statistic title=\"库存价值\" value={totalValue} precision={2} prefix={<DollarOutlined />} />\n          </Card>\n        </Col>\n      </Row>\n\n      <Card>\n        <Row justify=\"space-between\" style={{ marginBottom: 16 }}>\n          <Col>\n            <Space>\n              <Search\n                placeholder=\"搜索商品名称或SKU\"\n                style={{ width: 250 }}\n                onSearch={(value) => setFilters({ ...filters, search: value })}\n                allowClear\n              />\n              <Select\n                placeholder=\"商品状态\"\n                style={{ width: 120 }}\n                onChange={(value) => setFilters({ ...filters, status: value })}\n                allowClear\n              >\n                <Option value=\"published\">已发布</Option>\n                <Option value=\"draft\">草稿</Option>\n                <Option value=\"unpublished\">未发布</Option>\n              </Select>\n              <Select\n                placeholder=\"商品分类\"\n                style={{ width: 120 }}\n                onChange={(value) => setFilters({ ...filters, category: value })}\n                allowClear\n              >\n                <Option value=\"电子产品\">电子产品</Option>\n                <Option value=\"配件\">配件</Option>\n              </Select>\n            </Space>\n          </Col>\n          <Col>\n            <Space>\n              {selectedRowKeys.length > 0 && (\n                <>\n                  <Button onClick={handleBatchPublish}>批量发布 ({selectedRowKeys.length})</Button>\n                  <Button danger onClick={handleBatchDelete}>批量删除 ({selectedRowKeys.length})</Button>\n                </>\n              )}\n            </Space>\n          </Col>\n        </Row>\n\n        <Table\n          columns={columns}\n          dataSource={products}\n          rowKey=\"id\"\n          loading={loading}\n          rowSelection={rowSelection}\n          pagination={{ pageSize: 10, showSizeChanger: true, showQuickJumper: true }}\n          scroll={{ x: 1200 }}\n        />\n      </Card>\n\n      <Modal\n        title={editingProduct ? '编辑商品' : '添加商品'}\n        open={modalVisible}\n        onCancel={() => setModalVisible(false)}\n        onOk={() => form.submit()}\n        width={600}\n        confirmLoading={loading}\n      >\n        <Form form={form} onFinish={handleSubmit} layout=\"vertical\">\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item name=\"name\" label=\"商品名称\" rules={[{ required: true, message: '请输入商品名称' }]}>\n                <Input placeholder=\"请输入商品名称\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item name=\"sku\" label=\"SKU\" rules={[{ required: true, message: '请输入SKU' }]}>\n                <Input placeholder=\"请输入SKU\" />\n              </Form.Item>\n            </Col>\n          </Row>\n          <Row gutter={16}>\n            <Col span={8}>\n              <Form.Item name=\"price\" label=\"售价\" rules={[{ required: true, message: '请输入售价' }]}>\n                <Input type=\"number\" prefix=\"$\" placeholder=\"0.00\" />\n              </Form.Item>\n            </Col>\n            <Col span={8}>\n              <Form.Item name=\"comparePrice\" label=\"原价\">\n                <Input type=\"number\" prefix=\"$\" placeholder=\"0.00\" />\n              </Form.Item>\n            </Col>\n            <Col span={8}>\n              <Form.Item name=\"cost\" label=\"成本\">\n                <Input type=\"number\" prefix=\"$\" placeholder=\"0.00\" />\n              </Form.Item>\n            </Col>\n          </Row>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item name=\"stock\" label=\"库存\" rules={[{ required: true, message: '请输入库存' }]}>\n                <Input type=\"number\" placeholder=\"0\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item name=\"category\" label=\"分类\" rules={[{ required: true, message: '请选择分类' }]}>\n                <Select placeholder=\"请选择分类\">\n                  <Option value=\"电子产品\">电子产品</Option>\n                  <Option value=\"配件\">配件</Option>\n                  <Option value=\"服装\">服装</Option>\n                  <Option value=\"家居\">家居</Option>\n                </Select>\n              </Form.Item>\n            </Col>\n          </Row>\n          <Form.Item name=\"status\" label=\"状态\" initialValue=\"draft\">\n            <Select>\n              <Option value=\"published\">已发布</Option>\n              <Option value=\"draft\">草稿</Option>\n              <Option value=\"unpublished\">未发布</Option>\n            </Select>\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default IndependentSiteProduct;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/IndependentSite/IndependentSiteProduct.tsx"
    },
    "57": {
      "path": "/dashboard/independent-site/domains",
      "file": "@/pages/IndependentSite/DomainManagement.tsx",
      "parentId": "4",
      "id": "57",
      "absPath": "/dashboard/independent-site/domains",
      "__content": "import {\n  useState,\n  useEffect,\n  Table,\n  Button,\n  Input,\n  Modal,\n  Form,\n  Select,\n  Tag,\n  Space,\n  message,\n  Popconfirm,\n  Typography,\n  Card,\n  Row,\n  Col,\n  Progress,\n  Tooltip,\n  PlusOutlined,\n  DeleteOutlined,\n  EditOutlined,\n  LinkOutlined,\n  CheckCircleOutlined,\n  ExclamationCircleOutlined,\n  SyncOutlined,\n  GlobalOutlined,\n  SafetyCertificateOutlined,\n  Option,\n  Title,\n  Text,\n  ReactNode,\n  FC,\n} from '@/imports';\n\ninterface Domain {\n  id: string;\n  domain: string;\n  status: 'active' | 'pending' | 'error' | 'expired';\n  siteId: string;\n  siteName: string;\n  ssl: boolean;\n  sslExpiry?: string;\n  registrar: string;\n  expiryDate: string;\n  autoRenew: boolean;\n  dnsProvider: string;\n  records: DNSRecord[];\n}\n\ninterface DNSRecord {\n  type: 'A' | 'CNAME' | 'MX' | 'TXT' | 'NS';\n  name: string;\n  value: string;\n  ttl: number;\n}\n\nconst mockDomains: Domain[] = [\n  {\n    id: '1',\n    domain: 'mystore.com',\n    status: 'active',\n    siteId: 'site-1',\n    siteName: '我的商店',\n    ssl: true,\n    sslExpiry: '2025-06-15',\n    registrar: '阿里云',\n    expiryDate: '2025-12-20',\n    autoRenew: true,\n    dnsProvider: '阿里云DNS',\n    records: [\n      { type: 'A', name: '@', value: '192.168.1.1', ttl: 600 },\n      { type: 'CNAME', name: 'www', value: 'mystore.com', ttl: 600 },\n    ],\n  },\n  {\n    id: '2',\n    domain: 'shop.example.cn',\n    status: 'pending',\n    siteId: 'site-2',\n    siteName: '测试站点',\n    ssl: false,\n    registrar: '腾讯云',\n    expiryDate: '2025-08-10',\n    autoRenew: false,\n    dnsProvider: 'DNSPod',\n    records: [],\n  },\n];\n\nconst DomainManagement: FC = () => {\n  const [domains, setDomains] = useState<Domain[]>(mockDomains);\n  const [loading, setLoading] = useState(false);\n  const [modalVisible, setModalVisible] = useState(false);\n  const [dnsModalVisible, setDnsModalVisible] = useState(false);\n  const [selectedDomain, setSelectedDomain] = useState<Domain | null>(null);\n  const [form] = Form.useForm();\n  const [dnsForm] = Form.useForm();\n\n  const getStatusTag = (status: string) => {\n    const statusMap: Record<string, { color: string; icon: React.ReactNode; text: string }> = {\n      active: { color: 'success', icon: <CheckCircleOutlined />, text: '正常' },\n      pending: { color: 'processing', icon: <SyncOutlined spin />, text: '解析中' },\n      error: { color: 'error', icon: <ExclamationCircleOutlined />, text: '异常' },\n      expired: { color: 'warning', icon: <ExclamationCircleOutlined />, text: '已过期' },\n    };\n    const config = statusMap[status] || statusMap.error;\n    return <Tag color={config.color} icon={config.icon}>{config.text}</Tag>;\n  };\n\n  const handleAddDomain = () => {\n    setSelectedDomain(null);\n    form.resetFields();\n    setModalVisible(true);\n  };\n\n  const handleEditDomain = (domain: Domain) => {\n    setSelectedDomain(domain);\n    form.setFieldsValue(domain);\n    setModalVisible(true);\n  };\n\n  const handleSaveDomain = async () => {\n    try {\n      const values = await form.validateFields();\n      if (selectedDomain) {\n        setDomains(domains.map(d => d.id === selectedDomain.id ? { ...d, ...values } : d));\n        message.success('域名已更新');\n      } else {\n        const newDomain: Domain = {\n          id: `domain-${Date.now()}`,\n          ...values,\n          status: 'pending',\n          ssl: false,\n          records: [],\n        };\n        setDomains([...domains, newDomain]);\n        message.success('域名已添加，正在解析...');\n      }\n      setModalVisible(false);\n    } catch (error) {\n      console.error('Validation failed:', error);\n    }\n  };\n\n  const handleDeleteDomain = (id: string) => {\n    setDomains(domains.filter(d => d.id !== id));\n    message.success('域名已删除');\n  };\n\n  const handleViewDNS = (domain: Domain) => {\n    setSelectedDomain(domain);\n    setDnsModalVisible(true);\n  };\n\n  const handleRenewSSL = (domain: Domain) => {\n    message.loading('正在申请SSL证书...');\n    setTimeout(() => {\n      setDomains(domains.map(d => \n        d.id === domain.id ? { ...d, ssl: true, sslExpiry: '2026-03-21' } : d\n      ));\n      message.success('SSL证书已更新');\n    }, 2000);\n  };\n\n  const columns = [\n    {\n      title: '域名',\n      dataIndex: 'domain',\n      key: 'domain',\n      render: (domain: string) => (\n        <Space>\n          <GlobalOutlined />\n          <a href={`https://${domain}`} target=\"_blank\" rel=\"noopener noreferrer\">{domain}</a>\n        </Space>\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: getStatusTag,\n    },\n    {\n      title: '关联站点',\n      dataIndex: 'siteName',\n      key: 'siteName',\n    },\n    {\n      title: 'SSL证书',\n      dataIndex: 'ssl',\n      key: 'ssl',\n      render: (ssl: boolean, record: Domain) => (\n        ssl ? (\n          <Tooltip title={`到期时间: ${record.sslExpiry}`}>\n            <Tag color=\"success\" icon={<SafetyCertificateOutlined />}>已启用</Tag>\n          </Tooltip>\n        ) : (\n          <Tag color=\"warning\">未启用</Tag>\n        )\n      ),\n    },\n    {\n      title: '注册商',\n      dataIndex: 'registrar',\n      key: 'registrar',\n    },\n    {\n      title: '到期时间',\n      dataIndex: 'expiryDate',\n      key: 'expiryDate',\n      render: (date: string) => {\n        const daysLeft = Math.ceil((new Date(date).getTime() - Date.now()) / (1000 * 60 * 60 * 24));\n        return (\n          <Tooltip title={`剩余 ${daysLeft} 天`}>\n            <span style={{ color: daysLeft < 30 ? '#ff4d4f' : undefined }}>\n              {date}\n              {daysLeft < 30 && <ExclamationCircleOutlined style={{ marginLeft: 4, color: '#ff4d4f' }} />}\n            </span>\n          </Tooltip>\n        );\n      },\n    },\n    {\n      title: '自动续费',\n      dataIndex: 'autoRenew',\n      key: 'autoRenew',\n      render: (autoRenew: boolean) => (\n        <Tag color={autoRenew ? 'blue' : 'default'}>{autoRenew ? '已开启' : '未开启'}</Tag>\n      ),\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: any, record: Domain) => (\n        <Space>\n          <Button type=\"link\" size=\"small\" onClick={() => handleViewDNS(record)}>\n            DNS解析\n          </Button>\n          {!record.ssl && (\n            <Button type=\"link\" size=\"small\" onClick={() => handleRenewSSL(record)}>\n              申请SSL\n            </Button>\n          )}\n          <Button type=\"link\" size=\"small\" onClick={() => handleEditDomain(record)}>\n            编辑\n          </Button>\n          <Popconfirm\n            title=\"确定要删除此域名吗？\"\n            onConfirm={() => handleDeleteDomain(record.id)}\n          >\n            <Button type=\"link\" size=\"small\" danger>\n              删除\n            </Button>\n          </Popconfirm>\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"domain-management\" style={{ padding: 24 }}>\n      <Row gutter={[16, 16]} style={{ marginBottom: 24 }}>\n        <Col xs={24} sm={12} md={6}>\n          <Card>\n            <div style={{ textAlign: 'center' }}>\n              <Title level={2} style={{ margin: 0, color: '#52c41a' }}>\n                {domains.filter(d => d.status === 'active').length}\n              </Title>\n              <Text type=\"secondary\">正常运行</Text>\n            </div>\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} md={6}>\n          <Card>\n            <div style={{ textAlign: 'center' }}>\n              <Title level={2} style={{ margin: 0, color: '#1890ff' }}>\n                {domains.filter(d => d.status === 'pending').length}\n              </Title>\n              <Text type=\"secondary\">解析中</Text>\n            </div>\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} md={6}>\n          <Card>\n            <div style={{ textAlign: 'center' }}>\n              <Title level={2} style={{ margin: 0, color: '#ff4d4f' }}>\n                {domains.filter(d => d.status === 'error' || d.status === 'expired').length}\n              </Title>\n              <Text type=\"secondary\">异常/过期</Text>\n            </div>\n          </Card>\n        </Col>\n        <Col xs={24} sm={12} md={6}>\n          <Card>\n            <div style={{ textAlign: 'center' }}>\n              <Title level={2} style={{ margin: 0, color: '#52c41a' }}>\n                {domains.filter(d => d.ssl).length}/{domains.length}\n              </Title>\n              <Text type=\"secondary\">SSL已启用</Text>\n            </div>\n          </Card>\n        </Col>\n      </Row>\n\n      <Card>\n        <div style={{ marginBottom: 16, display: 'flex', justifyContent: 'space-between' }}>\n          <Title level={4} style={{ margin: 0 }}>域名列表</Title>\n          <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleAddDomain}>\n            添加域名\n          </Button>\n        </div>\n        <Table\n          columns={columns}\n          dataSource={domains}\n          rowKey=\"id\"\n          loading={loading}\n        />\n      </Card>\n\n      <Modal\n        title={selectedDomain ? '编辑域名' : '添加域名'}\n        open={modalVisible}\n        onOk={handleSaveDomain}\n        onCancel={() => setModalVisible(false)}\n      >\n        <Form form={form} layout=\"vertical\">\n          <Form.Item name=\"domain\" label=\"域名\" rules={[{ required: true, message: '请输入域名' }]}>\n            <Input placeholder=\"example.com\" />\n          </Form.Item>\n          <Form.Item name=\"siteId\" label=\"关联站点\">\n            <Select placeholder=\"选择关联站点\">\n              <Option value=\"site-1\">我的商店</Option>\n              <Option value=\"site-2\">测试站点</Option>\n            </Select>\n          </Form.Item>\n          <Form.Item name=\"registrar\" label=\"注册商\">\n            <Select placeholder=\"选择注册商\">\n              <Option value=\"阿里云\">阿里云</Option>\n              <Option value=\"腾讯云\">腾讯云</Option>\n              <Option value=\"GoDaddy\">GoDaddy</Option>\n              <Option value=\"Namecheap\">Namecheap</Option>\n              <Option value=\"Cloudflare\">Cloudflare</Option>\n            </Select>\n          </Form.Item>\n          <Form.Item name=\"dnsProvider\" label=\"DNS服务商\">\n            <Select placeholder=\"选择DNS服务商\">\n              <Option value=\"阿里云DNS\">阿里云DNS</Option>\n              <Option value=\"DNSPod\">DNSPod</Option>\n              <Option value=\"Cloudflare\">Cloudflare</Option>\n              <Option value=\"AWS Route53\">AWS Route53</Option>\n            </Select>\n          </Form.Item>\n          <Form.Item name=\"autoRenew\" label=\"自动续费\" valuePropName=\"checked\">\n            <Select>\n              <Option value={true}>开启</Option>\n              <Option value={false}>关闭</Option>\n            </Select>\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      <Modal\n        title={`DNS解析 - ${selectedDomain?.domain}`}\n        open={dnsModalVisible}\n        onCancel={() => setDnsModalVisible(false)}\n        footer={[\n          <Button key=\"close\" onClick={() => setDnsModalVisible(false)}>\n            关闭\n          </Button>,\n          <Button key=\"add\" type=\"primary\" icon={<PlusOutlined />}>\n            添加记录\n          </Button>,\n        ]}\n        width={800}\n      >\n        <Table\n          dataSource={selectedDomain?.records || []}\n          rowKey={(r) => `${r.type}-${r.name}`}\n          pagination={false}\n          size=\"small\"\n        >\n          <Table.Column title=\"类型\" dataIndex=\"type\" key=\"type\" />\n          <Table.Column title=\"主机记录\" dataIndex=\"name\" key=\"name\" />\n          <Table.Column title=\"记录值\" dataIndex=\"value\" key=\"value\" />\n          <Table.Column title=\"TTL\" dataIndex=\"ttl\" key=\"ttl\" render={(ttl: number) => `${ttl}秒`} />\n          <Table.Column\n            title=\"操作\"\n            key=\"action\"\n            render={() => (\n              <Space>\n                <Button type=\"link\" size=\"small\">编辑</Button>\n                <Button type=\"link\" size=\"small\" danger>删除</Button>\n              </Space>\n            )}\n          />\n        </Table>\n      </Modal>\n    </div>\n  );\n};\n\nexport default DomainManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/IndependentSite/DomainManagement.tsx"
    },
    "58": {
      "path": "/dashboard/blacklist",
      "file": "@/pages/Blacklist/index.tsx",
      "parentId": "4",
      "id": "58",
      "absPath": "/dashboard/blacklist",
      "__content": "import { Card, Typography, Row, Col, Button, AlertOutlined, PlusOutlined, Title, Text, FC } from '@/imports';\n\nconst BlacklistManagement: FC = () => {\n  return (\n    <div>\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <Title level={4}>黑名单管理</Title>\n        <Button type=\"primary\" icon={<PlusOutlined />}>\n          添加黑名单\n        </Button>\n      </div>\n\n      <Row gutter={[16, 16]}>\n        <Col span={24}>\n          <Card title=\"黑名单列表\">\n            <Text>黑名单管理页面内容</Text>\n          </Card>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nexport default BlacklistManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Blacklist/index.tsx"
    },
    "59": {
      "path": "/dashboard/compliance",
      "file": "@/pages/Compliance/index.tsx",
      "parentId": "4",
      "id": "59",
      "absPath": "/dashboard/compliance",
      "__content": "import {\n  useState,\n  useEffect,\n  useCallback,\n  Card,\n  Typography,\n  Row,\n  Col,\n  Button,\n  Table,\n  Tag,\n  Space,\n  Modal,\n  Form,\n  Input,\n  Select,\n  Upload,\n  message,\n  Tabs,\n  Badge,\n  Drawer,\n  Descriptions,\n  Timeline,\n  Alert,\n  Progress,\n  Statistic,\n  DatePicker,\n  Tooltip,\n  Popconfirm,\n  AuditOutlined,\n  PlusOutlined,\n  UploadOutlined,\n  EyeOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  WarningOutlined,\n  FileTextOutlined,\n  SafetyOutlined,\n  SearchOutlined,\n  FilterOutlined,\n  ReloadOutlined,\n  CheckOutlined,\n  DeleteOutlined,\n  DownloadOutlined,\n  HistoryOutlined,\n  ClockCircleOutlined,\n  FC,\n} from '@/imports';\nimport type { ColumnsType } from 'antd/es/table';\nimport moment from 'moment';\n\nconst { Title, Text } = Typography;\nconst { Option } = Select;\nconst { Search } = Input;\nconst { RangePicker } = DatePicker;\nconst { Dragger } = Upload;\n\n// 证书类型\ninterface Certificate {\n  id: string;\n  name: string;\n  type: 'PRODUCT_CERT' | 'BUSINESS_LICENSE' | 'QUALITY_CERT' | 'SAFETY_CERT' | 'OTHER';\n  status: 'PENDING' | 'APPROVED' | 'REJECTED' | 'EXPIRED';\n  fileUrl: string;\n  fileName: string;\n  uploadDate: string;\n  expiryDate: string;\n  approvedBy?: string;\n  approvedDate?: string;\n  rejectReason?: string;\n  productId?: string;\n  productName?: string;\n  notes?: string;\n}\n\n// 合规检查记录\ninterface ComplianceCheck {\n  id: string;\n  productId: string;\n  productName: string;\n  checkType: 'CERTIFICATE' | 'PLATFORM_RULE' | 'SAFETY' | 'QUALITY';\n  status: 'PASS' | 'FAIL' | 'WARNING';\n  checkedAt: string;\n  checkedBy: string;\n  issues: ComplianceIssue[];\n  suggestions: string[];\n}\n\ninterface ComplianceIssue {\n  type: 'ERROR' | 'WARNING' | 'INFO';\n  message: string;\n  field?: string;\n}\n\n// 风险监控记录\ninterface RiskMonitor {\n  id: string;\n  type: 'CERTIFICATE_EXPIRY' | 'COMPLIANCE_VIOLATION' | 'PLATFORM_PENALTY';\n  level: 'HIGH' | 'MEDIUM' | 'LOW';\n  title: string;\n  description: string;\n  createdAt: string;\n  status: 'OPEN' | 'RESOLVED' | 'IGNORED';\n  relatedId?: string;\n}\n\nconst CERT_TYPE_MAP: Record<string, { color: string; text: string }> = {\n  PRODUCT_CERT: { color: 'blue', text: '产品认证' },\n  BUSINESS_LICENSE: { color: 'green', text: '营业执照' },\n  QUALITY_CERT: { color: 'purple', text: '质量认证' },\n  SAFETY_CERT: { color: 'orange', text: '安全认证' },\n  OTHER: { color: 'default', text: '其他' },\n};\n\nconst CERT_STATUS_MAP: Record<string, { color: string; text: string; icon: React.ReactNode }> = {\n  PENDING: { color: 'warning', text: '待审核', icon: <ClockCircleOutlined /> },\n  APPROVED: { color: 'success', text: '已通过', icon: <CheckCircleOutlined /> },\n  REJECTED: { color: 'error', text: '已拒绝', icon: <CloseCircleOutlined /> },\n  EXPIRED: { color: 'default', text: '已过期', icon: <WarningOutlined /> },\n};\n\nconst CHECK_STATUS_MAP: Record<string, { color: string; text: string; icon: React.ReactNode }> = {\n  PASS: { color: 'success', text: '通过', icon: <CheckCircleOutlined /> },\n  FAIL: { color: 'error', text: '失败', icon: <CloseCircleOutlined /> },\n  WARNING: { color: 'warning', text: '警告', icon: <WarningOutlined /> },\n};\n\nconst RISK_LEVEL_MAP: Record<string, { color: string; text: string }> = {\n  HIGH: { color: 'red', text: '高风险' },\n  MEDIUM: { color: 'orange', text: '中风险' },\n  LOW: { color: 'blue', text: '低风险' },\n};\n\n// Mock Data\nconst MOCK_CERTIFICATES: Certificate[] = [\n  {\n    id: '1',\n    name: 'CE认证证书',\n    type: 'PRODUCT_CERT',\n    status: 'APPROVED',\n    fileUrl: '/files/ce-cert.pdf',\n    fileName: 'CE-Certificate-2026.pdf',\n    uploadDate: '2026-03-15',\n    expiryDate: '2027-03-15',\n    approvedBy: 'admin',\n    approvedDate: '2026-03-16',\n    productId: 'P001',\n    productName: '工业温度传感器',\n    notes: '欧盟市场准入认证',\n  },\n  {\n    id: '2',\n    name: '营业执照',\n    type: 'BUSINESS_LICENSE',\n    status: 'APPROVED',\n    fileUrl: '/files/business-license.pdf',\n    fileName: 'Business-License-2026.pdf',\n    uploadDate: '2026-01-10',\n    expiryDate: '2027-01-10',\n    approvedBy: 'admin',\n    approvedDate: '2026-01-11',\n    notes: '企业营业执照',\n  },\n  {\n    id: '3',\n    name: 'FCC认证',\n    type: 'SAFETY_CERT',\n    status: 'PENDING',\n    fileUrl: '/files/fcc-cert.pdf',\n    fileName: 'FCC-Certificate.pdf',\n    uploadDate: '2026-03-18',\n    expiryDate: '2027-03-18',\n    productId: 'P002',\n    productName: 'PLC控制器',\n    notes: '美国FCC认证',\n  },\n  {\n    id: '4',\n    name: 'ISO9001',\n    type: 'QUALITY_CERT',\n    status: 'EXPIRED',\n    fileUrl: '/files/iso9001.pdf',\n    fileName: 'ISO9001-2025.pdf',\n    uploadDate: '2025-01-01',\n    expiryDate: '2026-01-01',\n    approvedBy: 'admin',\n    approvedDate: '2025-01-02',\n    notes: '质量管理体系认证，已过期需要更新',\n  },\n];\n\nconst MOCK_COMPLIANCE_CHECKS: ComplianceCheck[] = [\n  {\n    id: '1',\n    productId: 'P001',\n    productName: '工业温度传感器',\n    checkType: 'CERTIFICATE',\n    status: 'PASS',\n    checkedAt: '2026-03-18 10:00:00',\n    checkedBy: 'system',\n    issues: [],\n    suggestions: ['建议定期更新CE认证'],\n  },\n  {\n    id: '2',\n    productId: 'P002',\n    productName: 'PLC控制器',\n    checkType: 'PLATFORM_RULE',\n    status: 'WARNING',\n    checkedAt: '2026-03-18 09:30:00',\n    checkedBy: 'system',\n    issues: [\n      { type: 'WARNING', message: '产品描述缺少安全警告', field: 'description' },\n    ],\n    suggestions: ['添加必要的安全使用警告'],\n  },\n  {\n    id: '3',\n    productId: 'P003',\n    productName: '压力传感器',\n    checkType: 'SAFETY',\n    status: 'FAIL',\n    checkedAt: '2026-03-18 08:00:00',\n    checkedBy: 'admin',\n    issues: [\n      { type: 'ERROR', message: '缺少防爆认证', field: 'certificates' },\n      { type: 'WARNING', message: '工作压力范围未标注清楚', field: 'specifications' },\n    ],\n    suggestions: ['申请防爆认证', '完善产品规格说明'],\n  },\n];\n\nconst MOCK_RISKS: RiskMonitor[] = [\n  {\n    id: '1',\n    type: 'CERTIFICATE_EXPIRY',\n    level: 'HIGH',\n    title: 'ISO9001认证即将过期',\n    description: 'ISO9001质量管理体系认证将于30天后过期，请及时更新',\n    createdAt: '2026-03-18 10:00:00',\n    status: 'OPEN',\n    relatedId: '4',\n  },\n  {\n    id: '2',\n    type: 'COMPLIANCE_VIOLATION',\n    level: 'MEDIUM',\n    title: '压力传感器缺少防爆认证',\n    description: '产品P003在合规检查中发现缺少必要的防爆认证',\n    createdAt: '2026-03-18 08:00:00',\n    status: 'OPEN',\n    relatedId: '3',\n  },\n  {\n    id: '3',\n    type: 'PLATFORM_PENALTY',\n    level: 'LOW',\n    title: 'Amazon平台警告',\n    description: '收到Amazon平台关于产品描述的警告',\n    createdAt: '2026-03-17 15:00:00',\n    status: 'RESOLVED',\n  },\n];\n\nconst ComplianceManagement: FC = () => {\n  const [activeTab, setActiveTab] = useState('certificates');\n  const [certificates, setCertificates] = useState<Certificate[]>([]);\n  const [complianceChecks, setComplianceChecks] = useState<ComplianceCheck[]>([]);\n  const [risks, setRisks] = useState<RiskMonitor[]>([]);\n  const [loading, setLoading] = useState(false);\n\n  // 证书相关状态\n  const [uploadModalVisible, setUploadModalVisible] = useState(false);\n  const [auditModalVisible, setAuditModalVisible] = useState(false);\n  const [detailDrawerVisible, setDetailDrawerVisible] = useState(false);\n  const [currentCertificate, setCurrentCertificate] = useState<Certificate | null>(null);\n  const [uploadForm] = Form.useForm();\n  const [auditForm] = Form.useForm();\n  const [certFilters, setCertFilters] = useState({\n    keyword: '',\n    type: '',\n    status: '',\n  });\n\n  // 合规检查相关状态\n  const [checkModalVisible, setCheckModalVisible] = useState(false);\n  const [checkForm] = Form.useForm();\n  const [checkFilters, setCheckFilters] = useState({\n    keyword: '',\n    type: '',\n    status: '',\n  });\n\n  // 风险监控相关状态\n  const [riskFilters, setRiskFilters] = useState({\n    keyword: '',\n    level: '',\n    status: '',\n  });\n\n  useEffect(() => {\n    fetchData();\n  }, []);\n\n  const fetchData = useCallback(async () => {\n    setLoading(true);\n    await new Promise(resolve => setTimeout(resolve, 500));\n    setCertificates(MOCK_CERTIFICATES);\n    setComplianceChecks(MOCK_COMPLIANCE_CHECKS);\n    setRisks(MOCK_RISKS);\n    setLoading(false);\n  }, []);\n\n  // ==================== 证书管理功能 ====================\n\n  const handleUploadCertificate = () => {\n    uploadForm.resetFields();\n    setUploadModalVisible(true);\n  };\n\n  const handleUploadSubmit = async () => {\n    try {\n      const values = await uploadForm.validateFields();\n      const newCert: Certificate = {\n        id: `${Date.now()}`,\n        name: values.name,\n        type: values.type,\n        status: 'PENDING',\n        fileUrl: '/files/uploaded.pdf',\n        fileName: values.file?.file?.name || 'uploaded.pdf',\n        uploadDate: moment().format('YYYY-MM-DD'),\n        expiryDate: values.expiryDate.format('YYYY-MM-DD'),\n        productId: values.productId,\n        productName: values.productName,\n        notes: values.notes,\n      };\n      setCertificates([newCert, ...certificates]);\n      setUploadModalVisible(false);\n      message.success('证书上传成功，等待审核');\n    } catch (error) {\n      console.error('Upload failed:', error);\n    }\n  };\n\n  const handleAuditCertificate = (record: Certificate) => {\n    setCurrentCertificate(record);\n    auditForm.resetFields();\n    setAuditModalVisible(true);\n  };\n\n  const handleAuditSubmit = async () => {\n    try {\n      const values = await auditForm.validateFields();\n      if (currentCertificate) {\n        const updatedCerts = certificates.map(cert =>\n          cert.id === currentCertificate.id\n            ? {\n                ...cert,\n                status: values.status,\n                approvedBy: values.status === 'APPROVED' ? 'admin' : undefined,\n                approvedDate: values.status === 'APPROVED' ? moment().format('YYYY-MM-DD') : undefined,\n                rejectReason: values.status === 'REJECTED' ? values.rejectReason : undefined,\n              }\n            : cert\n        );\n        setCertificates(updatedCerts);\n        setAuditModalVisible(false);\n        message.success(`证书已${values.status === 'APPROVED' ? '通过' : '拒绝'}`);\n      }\n    } catch (error) {\n      console.error('Audit failed:', error);\n    }\n  };\n\n  const handleViewCertificate = (record: Certificate) => {\n    setCurrentCertificate(record);\n    setDetailDrawerVisible(true);\n  };\n\n  const handleDeleteCertificate = (id: string) => {\n    setCertificates(certificates.filter(cert => cert.id !== id));\n    message.success('证书已删除');\n  };\n\n  const handleDownloadCertificate = (record: Certificate) => {\n    message.success(`开始下载: ${record.fileName}`);\n  };\n\n  // ==================== 合规检查功能 ====================\n\n  const handleRunComplianceCheck = () => {\n    checkForm.resetFields();\n    setCheckModalVisible(true);\n  };\n\n  const handleCheckSubmit = async () => {\n    try {\n      const values = await checkForm.validateFields();\n      message.loading('正在执行合规检查...', 1.5);\n      \n      await new Promise(resolve => setTimeout(resolve, 1500));\n      \n      const newCheck: ComplianceCheck = {\n        id: `${Date.now()}`,\n        productId: values.productId,\n        productName: '选中产品',\n        checkType: values.checkType,\n        status: Math.random() > 0.5 ? 'PASS' : Math.random() > 0.5 ? 'WARNING' : 'FAIL',\n        checkedAt: moment().format('YYYY-MM-DD HH:mm:ss'),\n        checkedBy: 'admin',\n        issues: [],\n        suggestions: ['建议定期复查'],\n      };\n      \n      setComplianceChecks([newCheck, ...complianceChecks]);\n      setCheckModalVisible(false);\n      message.success('合规检查完成');\n    } catch (error) {\n      console.error('Check failed:', error);\n    }\n  };\n\n  // ==================== 风险监控功能 ====================\n\n  const handleResolveRisk = (id: string) => {\n    setRisks(risks.map(risk => \n      risk.id === id ? { ...risk, status: 'RESOLVED' as const } : risk\n    ));\n    message.success('风险已标记为已解决');\n  };\n\n  const handleIgnoreRisk = (id: string) => {\n    setRisks(risks.map(risk => \n      risk.id === id ? { ...risk, status: 'IGNORED' as const } : risk\n    ));\n    message.success('风险已忽略');\n  };\n\n  // ==================== 表格列定义 ====================\n\n  const certColumns: ColumnsType<Certificate> = [\n    {\n      title: '证书名称',\n      dataIndex: 'name',\n      key: 'name',\n      render: (text, record) => (\n        <Space direction=\"vertical\" size={0}>\n          <Text strong>{text}</Text>\n          <Text type=\"secondary\" style={{ fontSize: 12 }}>{record.fileName}</Text>\n        </Space>\n      ),\n    },\n    {\n      title: '类型',\n      dataIndex: 'type',\n      key: 'type',\n      render: (type) => <Tag color={CERT_TYPE_MAP[type].color}>{CERT_TYPE_MAP[type].text}</Tag>,\n    },\n    {\n      title: '关联产品',\n      dataIndex: 'productName',\n      key: 'productName',\n      render: (text) => text || '-',\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status) => {\n        const config = CERT_STATUS_MAP[status];\n        return <Tag color={config.color} icon={config.icon}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: '有效期至',\n      dataIndex: 'expiryDate',\n      key: 'expiryDate',\n      render: (date) => {\n        const days = moment(date).diff(moment(), 'days');\n        const isExpiringSoon = days <= 30 && days > 0;\n        const isExpired = days <= 0;\n        return (\n          <Space direction=\"vertical\" size={0}>\n            <Text>{date}</Text>\n            {isExpiringSoon && <Text type=\"warning\" style={{ fontSize: 12 }}>即将过期 ({days}天)</Text>}\n            {isExpired && <Text type=\"danger\" style={{ fontSize: 12 }}>已过期</Text>}\n          </Space>\n        );\n      },\n    },\n    {\n      title: '上传日期',\n      dataIndex: 'uploadDate',\n      key: 'uploadDate',\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_, record) => (\n        <Space size=\"small\">\n          <Button type=\"link\" size=\"small\" icon={<EyeOutlined />} onClick={() => handleViewCertificate(record)}>\n            查看\n          </Button>\n          <Button type=\"link\" size=\"small\" icon={<DownloadOutlined />} onClick={() => handleDownloadCertificate(record)}>\n            下载\n          </Button>\n          {record.status === 'PENDING' && (\n            <Button type=\"link\" size=\"small\" icon={<CheckOutlined />} onClick={() => handleAuditCertificate(record)}>\n              审核\n            </Button>\n          )}\n          <Popconfirm\n            title=\"确认删除\"\n            description=\"确定要删除此证书吗？\"\n            onConfirm={() => handleDeleteCertificate(record.id)}\n            okText=\"删除\"\n            cancelText=\"取消\"\n          >\n            <Button type=\"link\" size=\"small\" danger icon={<DeleteOutlined />}>\n              删除\n            </Button>\n          </Popconfirm>\n        </Space>\n      ),\n    },\n  ];\n\n  const checkColumns: ColumnsType<ComplianceCheck> = [\n    {\n      title: '产品',\n      dataIndex: 'productName',\n      key: 'productName',\n      render: (text, record) => (\n        <Space direction=\"vertical\" size={0}>\n          <Text strong>{text}</Text>\n          <Text type=\"secondary\" style={{ fontSize: 12 }}>{record.productId}</Text>\n        </Space>\n      ),\n    },\n    {\n      title: '检查类型',\n      dataIndex: 'checkType',\n      key: 'checkType',\n      render: (type) => {\n        const typeMap: Record<string, string> = {\n          CERTIFICATE: '证书检查',\n          PLATFORM_RULE: '平台规则',\n          SAFETY: '安全检查',\n          QUALITY: '质量检查',\n        };\n        return <Tag>{typeMap[type]}</Tag>;\n      },\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status) => {\n        const config = CHECK_STATUS_MAP[status];\n        return <Tag color={config.color} icon={config.icon}>{config.text}</Tag>;\n      },\n    },\n    {\n      title: '问题数',\n      key: 'issues',\n      render: (_, record) => (\n        <Badge \n          count={record.issues.length} \n          style={{ backgroundColor: record.issues.length > 0 ? '#ff4d4f' : '#52c41a' }}\n        />\n      ),\n    },\n    {\n      title: '检查时间',\n      dataIndex: 'checkedAt',\n      key: 'checkedAt',\n    },\n    {\n      title: '检查人',\n      dataIndex: 'checkedBy',\n      key: 'checkedBy',\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_, record) => (\n        <Button type=\"link\" size=\"small\" icon={<EyeOutlined />} onClick={() => {}}>\n          详情\n        </Button>\n      ),\n    },\n  ];\n\n  const riskColumns: ColumnsType<RiskMonitor> = [\n    {\n      title: '风险标题',\n      dataIndex: 'title',\n      key: 'title',\n      render: (text, record) => (\n        <Space direction=\"vertical\" size={0}>\n          <Text strong>{text}</Text>\n          <Text type=\"secondary\" style={{ fontSize: 12 }}>{record.description}</Text>\n        </Space>\n      ),\n    },\n    {\n      title: '类型',\n      dataIndex: 'type',\n      key: 'type',\n      render: (type) => {\n        const typeMap: Record<string, string> = {\n          CERTIFICATE_EXPIRY: '证书过期',\n          COMPLIANCE_VIOLATION: '合规违规',\n          PLATFORM_PENALTY: '平台处罚',\n        };\n        return <Tag>{typeMap[type]}</Tag>;\n      },\n    },\n    {\n      title: '风险等级',\n      dataIndex: 'level',\n      key: 'level',\n      render: (level) => <Tag color={RISK_LEVEL_MAP[level].color}>{RISK_LEVEL_MAP[level].text}</Tag>,\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status) => {\n        const statusMap: Record<string, { color: string; text: string }> = {\n          OPEN: { color: 'error', text: '待处理' },\n          RESOLVED: { color: 'success', text: '已解决' },\n          IGNORED: { color: 'default', text: '已忽略' },\n        };\n        return <Tag color={statusMap[status].color}>{statusMap[status].text}</Tag>;\n      },\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'createdAt',\n      key: 'createdAt',\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_, record) => (\n        <Space size=\"small\">\n          {record.status === 'OPEN' && (\n            <>\n              <Button type=\"link\" size=\"small\" icon={<CheckOutlined />} onClick={() => handleResolveRisk(record.id)}>\n                解决\n              </Button>\n              <Button type=\"link\" size=\"small\" onClick={() => handleIgnoreRisk(record.id)}>\n                忽略\n              </Button>\n            </>\n          )}\n        </Space>\n      ),\n    },\n  ];\n\n  // ==================== 统计数据 ====================\n\n  const certStats = {\n    total: certificates.length,\n    pending: certificates.filter(c => c.status === 'PENDING').length,\n    approved: certificates.filter(c => c.status === 'APPROVED').length,\n    expired: certificates.filter(c => c.status === 'EXPIRED').length,\n    expiringSoon: certificates.filter(c => {\n      const days = moment(c.expiryDate).diff(moment(), 'days');\n      return days <= 30 && days > 0;\n    }).length,\n  };\n\n  const riskStats = {\n    total: risks.length,\n    high: risks.filter(r => r.level === 'HIGH' && r.status === 'OPEN').length,\n    medium: risks.filter(r => r.level === 'MEDIUM' && r.status === 'OPEN').length,\n    low: risks.filter(r => r.level === 'LOW' && r.status === 'OPEN').length,\n  };\n\n  return (\n    <div>\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <Title level={4}>合规管理</Title>\n        <Space>\n          <Button icon={<ReloadOutlined />} onClick={fetchData}>\n            刷新\n          </Button>\n        </Space>\n      </div>\n\n      <Tabs \n        activeKey={activeTab} \n        onChange={setActiveTab} \n        style={{ marginBottom: 24 }}\n        items={[\n          { key: 'certificates', label: <span><FileTextOutlined /> 证书管理 <Badge count={certStats.pending} style={{ marginLeft: 8 }} /></span>, children: (\n            <>\n              <Row gutter={16} style={{ marginBottom: 16 }}>\n                <Col span={4}>\n                  <Card size=\"small\">\n                    <Statistic title=\"总证书数\" value={certStats.total} />\n                  </Card>\n                </Col>\n                <Col span={4}>\n                  <Card size=\"small\">\n                    <Statistic title=\"待审核\" value={certStats.pending} valueStyle={{ color: '#faad14' }} />\n                  </Card>\n                </Col>\n                <Col span={4}>\n                  <Card size=\"small\">\n                    <Statistic title=\"已通过\" value={certStats.approved} valueStyle={{ color: '#52c41a' }} />\n                  </Card>\n                </Col>\n                <Col span={4}>\n                  <Card size=\"small\">\n                    <Statistic title=\"已过期\" value={certStats.expired} valueStyle={{ color: '#ff4d4f' }} />\n                  </Card>\n                </Col>\n                <Col span={4}>\n                  <Card size=\"small\">\n                    <Statistic title=\"即将过期\" value={certStats.expiringSoon} valueStyle={{ color: '#faad14' }} />\n                  </Card>\n                </Col>\n                <Col span={4}>\n                  <Button type=\"primary\" icon={<UploadOutlined />} onClick={handleUploadCertificate} block>\n                    上传证书\n                  </Button>\n                </Col>\n              </Row>\n\n              <Card>\n                <Row gutter={16} style={{ marginBottom: 16 }}>\n                  <Col span={8}>\n                    <Search\n                      placeholder=\"搜索证书名称\"\n                      allowClear\n                      onSearch={(value) => setCertFilters({ ...certFilters, keyword: value })}\n                    />\n                  </Col>\n                  <Col span={4}>\n                    <Select\n                      placeholder=\"证书类型\"\n                      allowClear\n                      style={{ width: '100%' }}\n                      onChange={(value) => setCertFilters({ ...certFilters, type: value })}\n                    >\n                      {Object.entries(CERT_TYPE_MAP).map(([key, config]) => (\n                        <Option key={key} value={key}>{config.text}</Option>\n                      ))}\n                    </Select>\n                  </Col>\n                  <Col span={4}>\n                    <Select\n                      placeholder=\"状态\"\n                      allowClear\n                      style={{ width: '100%' }}\n                      onChange={(value) => setCertFilters({ ...certFilters, status: value })}\n                    >\n                      {Object.entries(CERT_STATUS_MAP).map(([key, config]) => (\n                        <Option key={key} value={key}>{config.text}</Option>\n                      ))}\n                    </Select>\n                  </Col>\n                </Row>\n\n                <Table\n                  columns={certColumns}\n                  dataSource={certificates.filter(cert => {\n                    if (certFilters.keyword && !cert.name.toLowerCase().includes(certFilters.keyword.toLowerCase())) return false;\n                    if (certFilters.type && cert.type !== certFilters.type) return false;\n                    if (certFilters.status && cert.status !== certFilters.status) return false;\n                    return true;\n                  })}\n                  rowKey=\"id\"\n                  loading={loading}\n                  pagination={{ pageSize: 10 }}\n                />\n              </Card>\n            </>\n          )},\n          { key: 'compliance', label: <span><AuditOutlined /> 合规检查</span>, children: (\n            <>\n              <Row gutter={16} style={{ marginBottom: 16 }}>\n                <Col span={6}>\n                  <Card size=\"small\">\n                    <Statistic\n                      title=\"通过\"\n                      value={complianceChecks.filter(c => c.status === 'PASS').length}\n                      valueStyle={{ color: '#52c41a' }}\n                      prefix={<CheckCircleOutlined />}\n                    />\n                  </Card>\n                </Col>\n                <Col span={6}>\n                  <Card size=\"small\">\n                    <Statistic\n                      title=\"警告\"\n                      value={complianceChecks.filter(c => c.status === 'WARNING').length}\n                      valueStyle={{ color: '#faad14' }}\n                      prefix={<WarningOutlined />}\n                    />\n                  </Card>\n                </Col>\n                <Col span={6}>\n                  <Card size=\"small\">\n                    <Statistic\n                      title=\"失败\"\n                      value={complianceChecks.filter(c => c.status === 'FAIL').length}\n                      valueStyle={{ color: '#ff4d4f' }}\n                      prefix={<CloseCircleOutlined />}\n                    />\n                  </Card>\n                </Col>\n                <Col span={6}>\n                  <Button type=\"primary\" icon={<AuditOutlined />} onClick={handleRunComplianceCheck} block>\n                    执行检查\n                  </Button>\n                </Col>\n              </Row>\n\n              <Card>\n                <Table\n                  columns={checkColumns}\n                  dataSource={complianceChecks}\n                  rowKey=\"id\"\n                  loading={loading}\n                  pagination={{ pageSize: 10 }}\n                />\n              </Card>\n            </>\n          )},\n          { key: 'risks', label: <span><SafetyOutlined /> 风险监控 {riskStats.high > 0 && <Badge count={riskStats.high} style={{ marginLeft: 8, backgroundColor: '#ff4d4f' }} />}</span>, children: (\n            <>\n              <Row gutter={16} style={{ marginBottom: 16 }}>\n                <Col span={6}>\n                  <Card size=\"small\">\n                    <Statistic title=\"总风险数\" value={riskStats.total} />\n                  </Card>\n                </Col>\n                <Col span={6}>\n                  <Card size=\"small\">\n                    <Statistic title=\"高风险\" value={riskStats.high} valueStyle={{ color: '#ff4d4f' }} />\n                  </Card>\n                </Col>\n                <Col span={6}>\n                  <Card size=\"small\">\n                    <Statistic title=\"中风险\" value={riskStats.medium} valueStyle={{ color: '#faad14' }} />\n                  </Card>\n                </Col>\n                <Col span={6}>\n                  <Card size=\"small\">\n                    <Statistic title=\"低风险\" value={riskStats.low} valueStyle={{ color: '#1890ff' }} />\n                  </Card>\n                </Col>\n              </Row>\n\n              <Card>\n                <Table\n                  columns={riskColumns}\n                  dataSource={risks}\n                  rowKey=\"id\"\n                  loading={loading}\n                  pagination={{ pageSize: 10 }}\n                />\n              </Card>\n            </>\n          )},\n        ]}\n      />\n\n      {/* 上传证书模态框 */}\n      <Modal\n        title=\"上传证书\"\n        open={uploadModalVisible}\n        onOk={handleUploadSubmit}\n        onCancel={() => setUploadModalVisible(false)}\n        width={600}\n      >\n        <Form form={uploadForm} layout=\"vertical\">\n          <Form.Item\n            name=\"name\"\n            label=\"证书名称\"\n            rules={[{ required: true, message: '请输入证书名称' }]}\n          >\n            <Input placeholder=\"例如：CE认证证书\" />\n          </Form.Item>\n          <Form.Item\n            name=\"type\"\n            label=\"证书类型\"\n            rules={[{ required: true, message: '请选择证书类型' }]}\n          >\n            <Select placeholder=\"选择证书类型\">\n              {Object.entries(CERT_TYPE_MAP).map(([key, config]) => (\n                <Option key={key} value={key}>{config.text}</Option>\n              ))}\n            </Select>\n          </Form.Item>\n          <Form.Item\n            name=\"productId\"\n            label=\"关联产品ID\"\n          >\n            <Input placeholder=\"输入产品ID（可选）\" />\n          </Form.Item>\n          <Form.Item\n            name=\"productName\"\n            label=\"关联产品名称\"\n          >\n            <Input placeholder=\"输入产品名称（可选）\" />\n          </Form.Item>\n          <Form.Item\n            name=\"expiryDate\"\n            label=\"有效期至\"\n            rules={[{ required: true, message: '请选择有效期' }]}\n          >\n            <DatePicker style={{ width: '100%' }} />\n          </Form.Item>\n          <Form.Item\n            name=\"file\"\n            label=\"证书文件\"\n            rules={[{ required: true, message: '请上传证书文件' }]}\n          >\n            <Dragger\n              name=\"file\"\n              multiple={false}\n              beforeUpload={() => false}\n            >\n              <p className=\"ant-upload-drag-icon\">\n                <UploadOutlined />\n              </p>\n              <p className=\"ant-upload-text\">点击或拖拽文件到此区域上传</p>\n              <p className=\"ant-upload-hint\">支持 PDF、JPG、PNG 格式</p>\n            </Dragger>\n          </Form.Item>\n          <Form.Item name=\"notes\" label=\"备注\">\n            <Input.TextArea rows={3} placeholder=\"输入备注信息\" />\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      {/* 审核证书模态框 */}\n      <Modal\n        title=\"审核证书\"\n        open={auditModalVisible}\n        onOk={handleAuditSubmit}\n        onCancel={() => setAuditModalVisible(false)}\n      >\n        <Form form={auditForm} layout=\"vertical\">\n          <Form.Item\n            name=\"status\"\n            label=\"审核结果\"\n            rules={[{ required: true, message: '请选择审核结果' }]}\n          >\n            <Select placeholder=\"选择审核结果\">\n              <Option value=\"APPROVED\">通过</Option>\n              <Option value=\"REJECTED\">拒绝</Option>\n            </Select>\n          </Form.Item>\n          <Form.Item\n            noStyle\n            shouldUpdate={(prevValues, currentValues) => prevValues.status !== currentValues.status}\n          >\n            {({ getFieldValue }) =>\n              getFieldValue('status') === 'REJECTED' ? (\n                <Form.Item\n                  name=\"rejectReason\"\n                  label=\"拒绝原因\"\n                  rules={[{ required: true, message: '请输入拒绝原因' }]}\n                >\n                  <Input.TextArea rows={3} placeholder=\"输入拒绝原因\" />\n                </Form.Item>\n              ) : null\n            }\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      {/* 证书详情抽屉 */}\n      <Drawer\n        title=\"证书详情\"\n        placement=\"right\"\n        onClose={() => setDetailDrawerVisible(false)}\n        open={detailDrawerVisible}\n        width={500}\n      >\n        {currentCertificate && (\n          <Descriptions column={1} bordered>\n            <Descriptions.Item label=\"证书名称\">{currentCertificate.name}</Descriptions.Item>\n            <Descriptions.Item label=\"证书类型\">\n              <Tag color={CERT_TYPE_MAP[currentCertificate.type].color}>\n                {CERT_TYPE_MAP[currentCertificate.type].text}\n              </Tag>\n            </Descriptions.Item>\n            <Descriptions.Item label=\"状态\">\n              <Tag color={CERT_STATUS_MAP[currentCertificate.status].color}>\n                {CERT_STATUS_MAP[currentCertificate.status].text}\n              </Tag>\n            </Descriptions.Item>\n            <Descriptions.Item label=\"文件名\">{currentCertificate.fileName}</Descriptions.Item>\n            <Descriptions.Item label=\"关联产品\">{currentCertificate.productName || '-'}</Descriptions.Item>\n            <Descriptions.Item label=\"上传日期\">{currentCertificate.uploadDate}</Descriptions.Item>\n            <Descriptions.Item label=\"有效期至\">{currentCertificate.expiryDate}</Descriptions.Item>\n            {currentCertificate.approvedBy && (\n              <Descriptions.Item label=\"审核人\">{currentCertificate.approvedBy}</Descriptions.Item>\n            )}\n            {currentCertificate.approvedDate && (\n              <Descriptions.Item label=\"审核日期\">{currentCertificate.approvedDate}</Descriptions.Item>\n            )}\n            {currentCertificate.rejectReason && (\n              <Descriptions.Item label=\"拒绝原因\">{currentCertificate.rejectReason}</Descriptions.Item>\n            )}\n            {currentCertificate.notes && (\n              <Descriptions.Item label=\"备注\">{currentCertificate.notes}</Descriptions.Item>\n            )}\n          </Descriptions>\n        )}\n      </Drawer>\n\n      {/* 执行合规检查模态框 */}\n      <Modal\n        title=\"执行合规检查\"\n        open={checkModalVisible}\n        onOk={handleCheckSubmit}\n        onCancel={() => setCheckModalVisible(false)}\n      >\n        <Form form={checkForm} layout=\"vertical\">\n          <Form.Item\n            name=\"productId\"\n            label=\"产品ID\"\n            rules={[{ required: true, message: '请输入产品ID' }]}\n          >\n            <Input placeholder=\"输入要检查的产品ID\" />\n          </Form.Item>\n          <Form.Item\n            name=\"checkType\"\n            label=\"检查类型\"\n            rules={[{ required: true, message: '请选择检查类型' }]}\n          >\n            <Select placeholder=\"选择检查类型\">\n              <Option value=\"CERTIFICATE\">证书检查</Option>\n              <Option value=\"PLATFORM_RULE\">平台规则</Option>\n              <Option value=\"SAFETY\">安全检查</Option>\n              <Option value=\"QUALITY\">质量检查</Option>\n            </Select>\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default ComplianceManagement;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Compliance/index.tsx"
    },
    "60": {
      "path": "/dashboard/audit",
      "file": "@/pages/Audit/index.tsx",
      "parentId": "4",
      "id": "60",
      "absPath": "/dashboard/audit",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Button,\n  Space,\n  Input,\n  message,\n  Tag,\n  Modal,\n  Form,\n  Select,\n  DatePicker,\n  Row,\n  Col,\n  Statistic,\n  ReloadOutlined,\n  PlusOutlined,\n  SearchOutlined,\n  Option,\n  RangePicker,\n  FC,\n} from '@/imports';\nimport { AuditDataSource } from '@/services/auditDataSource';\nimport type { AuditItem } from '@/services/auditDataSource';\n\nconst AuditPage: FC = () => {\n  const [data, setData] = useState<AuditItem[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [searchText, setSearchText] = useState('');\n  const [modalVisible, setModalVisible] = useState(false);\n  const [form] = Form.useForm();\n\n  useEffect(() => {\n    loadData();\n  }, []);\n\n  const loadData = async () => {\n    setLoading(true);\n    try {\n      const result = await AuditDataSource.list();\n      setData(result);\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      message.error(`加载失败: ${errorMessage}`);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleCreate = async (values: any) => {\n    try {\n      await AuditDataSource.create(values);\n      message.success('创建成功');\n      setModalVisible(false);\n      form.resetFields();\n      loadData();\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      message.error(`创建失败: ${errorMessage}`);\n    }\n  };\n\n  const columns = [\n    {\n      title: 'ID',\n      dataIndex: 'id',\n      key: 'id',\n      width: 200,\n    },\n    {\n      title: '名称',\n      dataIndex: 'name',\n      key: 'name',\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => {\n        const color = status === 'ACTIVE' ? 'green' : status === 'INACTIVE' ? 'red' : 'default';\n        return <Tag color={color}>{status}</Tag>;\n      },\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'createdAt',\n      key: 'createdAt',\n      width: 180,\n    },\n    {\n      title: '操作',\n      key: 'action',\n      width: 150,\n      render: (_: any, record: AuditItem) => (\n        <Space>\n          <Button type=\"link\" size=\"small\">查看</Button>\n          <Button type=\"link\" size=\"small\">编辑</Button>\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div>\n      <Card>\n        <Row gutter={16} style={{ marginBottom: 16 }}>\n          <Col span={6}>\n            <Statistic title=\"总数\" value={data.length} />\n          </Col>\n          <Col span={6}>\n            <Statistic \n              title=\"活跃\" \n              value={data.filter(item => item.status === 'ACTIVE').length} \n              valueStyle={{ color: '#3f8600' }}\n            />\n          </Col>\n        </Row>\n\n        <div style={{ marginBottom: 16 }}>\n          <Space>\n            <Input\n              placeholder=\"搜索...\"\n              prefix={<SearchOutlined />}\n              value={searchText}\n              onChange={(e) => setSearchText(e.target.value)}\n              style={{ width: 200 }}\n            />\n            <Button type=\"primary\" icon={<PlusOutlined />} onClick={() => setModalVisible(true)}>\n              新建\n            </Button>\n            <Button icon={<ReloadOutlined />} onClick={loadData}>\n              刷新\n            </Button>\n          </Space>\n        </div>\n\n        <Table\n          columns={columns}\n          dataSource={data.filter(item => \n            item.name?.toLowerCase().includes(searchText.toLowerCase())\n          )}\n          rowKey=\"id\"\n          loading={loading}\n          pagination={{ pageSize: 20 }}\n        />\n      </Card>\n\n      <Modal\n        title=\"新建\"\n        open={modalVisible}\n        onCancel={() => setModalVisible(false)}\n        onOk={() => form.submit()}\n      >\n        <Form form={form} layout=\"vertical\" onFinish={handleCreate}>\n          <Form.Item name=\"name\" label=\"名称\" rules={[{ required: true }]}>\n            <Input placeholder=\"请输入名称\" />\n          </Form.Item>\n          <Form.Item name=\"status\" label=\"状态\" rules={[{ required: true }]}>\n            <Select placeholder=\"请选择状态\">\n              <Option value=\"ACTIVE\">活跃</Option>\n              <Option value=\"INACTIVE\">非活跃</Option>\n            </Select>\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default AuditPage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Audit/index.tsx"
    },
    "61": {
      "path": "/dashboard/operation-logs",
      "file": "@/pages/OperationLogs/index.tsx",
      "parentId": "4",
      "id": "61",
      "absPath": "/dashboard/operation-logs",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Button,\n  Space,\n  Radio,\n  Spin,\n  Empty,\n  Checkbox,\n  Dropdown,\n  SettingOutlined,\n  Switch,\n  Select,\n  Input,\n  DatePicker,\n  RangePicker,\n  ExportOutlined,\n  ReloadOutlined,\n  Modal,\n  Tag,\n  Text,\n  Timeline,\n  EyeOutlined,\n  FC,\n} from '@/imports';\nimport { OperationLogDataSource } from '@/services/operationLogDataSource';\nimport type { OperationLogItem, OperationLogQuery } from '@/services/operationLogDataSource';\nimport dayjs from 'dayjs';\nimport FilterPanel from './components/FilterPanel';\nimport DetailModal from './components/DetailModal';\n\nconst OperationLogsPage: FC = () => {\n  const [data, setData] = useState<OperationLogItem[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [pagination, setPagination] = useState({ current: 1, pageSize: 50, total: 0 });\n  const [query, setQuery] = useState<OperationLogQuery>({});\n  const [filters, setFilters] = useState<Partial<OperationLogQuery>>({});\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\n  const [selectedLog, setSelectedLog] = useState<OperationLogItem | null>(null);\n  const [viewMode, setViewMode] = useState<'table' | 'timeline'>('table');\n  const [relatedLogs, setRelatedLogs] = useState<OperationLogItem[]>([]);\n  const [visibleColumns, setVisibleColumns] = useState<string[]>([\n    'created_at', 'actor', 'loop', 'stage', 'action', 'state_change', 'result', 'trace_id', 'user_id', 'actor_id', 'actor_name', 'actions'\n  ]);\n  const [autoRefresh, setAutoRefresh] = useState(false);\n  const [refreshInterval, setRefreshInterval] = useState(30); // 30 seconds\n\n  useEffect(() => {\n    loadData();\n  }, [pagination.current, query]);\n\n  useEffect(() => {\n    let intervalId: NodeJS.Timeout;\n    if (autoRefresh) {\n      intervalId = setInterval(() => {\n        loadData();\n      }, refreshInterval * 1000);\n    }\n    return () => {\n      if (intervalId) {\n        clearInterval(intervalId);\n      }\n    };\n  }, [autoRefresh, refreshInterval]);\n\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      // Ctrl+F: Focus search input\n      if (e.ctrlKey && e.key === 'f') {\n        e.preventDefault();\n        const searchInput = document.querySelector('input[placeholder=\"搜索模块、操作、操作人等\"]') as HTMLInputElement;\n        searchInput?.focus();\n      }\n      // Ctrl+R: Refresh data\n      if (e.ctrlKey && e.key === 'r') {\n        e.preventDefault();\n        loadData();\n      }\n      // Ctrl+E: Export\n      if (e.ctrlKey && e.key === 'e') {\n        e.preventDefault();\n        handleExport('csv');\n      }\n      // Escape: Close modal\n      if (e.key === 'Escape') {\n        setDetailModalVisible(false);\n        setColumnSettingVisible(false);\n      }\n    };\n\n    window.addEventListener('keydown', handleKeyDown);\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown);\n    };\n  }, []);\n\n  const loadData = async () => {\n    setLoading(true);\n    try {\n      const result = await OperationLogDataSource.list({\n        ...query,\n        limit: pagination.pageSize,\n        offset: (pagination.current - 1) * pagination.pageSize,\n      });\n      setData(result.logs);\n      setPagination(prev => ({ ...prev, total: result.total }));\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      message.error(`加载失败: ${errorMessage}`);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleSearch = () => {\n    setPagination(prev => ({ ...prev, current: 1 }));\n    setQuery(filters);\n  };\n\n  const handleReset = () => {\n    setFilters({});\n    setQuery({});\n    setPagination(prev => ({ ...prev, current: 1 }));\n  };\n\n  const handleExport = (format: 'csv' | 'excel' | 'pdf' = 'csv') => {\n    if (format === 'pdf') {\n      // 简单的PDF导出实现\n      window.print();\n      return;\n    }\n\n    const headers = ['ID', '时间', '闭环', '阶段', '执行者', '操作', '状态', '状态变化', '模块', '租户', '店铺', '用户ID', '执行者ID', 'TraceID', '错误信息'];\n    const rows = data.map(log => [\n      log.id,\n      dayjs(log.created_at).format('YYYY-MM-DD HH:mm:ss'),\n      log.loop_name || log.loop || '',\n      log.stage_name || log.stage || '',\n      log.actor_name || log.actor || '',\n      log.action || '',\n      log.result || '',\n      log.before_state && log.after_state ? `${log.before_state} → ${log.after_state}` : log.after_state || '',\n      log.module || '',\n      log.tenant_id || '',\n      log.shop_id || '',\n      log.user_id || '',\n      log.actor_id || '',\n      log.trace_id || '',\n      log.error_message || '',\n    ]);\n\n    const csvContent = [\n      headers.join(','),\n      ...rows.map(row => row.join(','))\n    ].join('\\n');\n\n    const blob = new Blob(['\\ufeff' + csvContent], { type: 'text/csv;charset=utf-8;' });\n    const link = document.createElement('a');\n    link.href = URL.createObjectURL(blob);\n    link.download = `operation_logs_${dayjs().format('YYYY-MM-DD_HH-mm')}.${format === 'excel' ? 'csv' : format}`;\n    link.click();\n  };\n\n  const loadRelatedLogs = async (traceId: string) => {\n    try {\n      const logs = await OperationLogDataSource.getByTraceId(traceId);\n      setRelatedLogs(logs);\n    } catch (error) {\n      console.error('Failed to load related logs:', error);\n    }\n  };\n\n  const showDetail = (log: OperationLogItem) => {\n    setSelectedLog(log);\n    loadRelatedLogs(log.trace_id);\n    setDetailModalVisible(true);\n  };\n\n  const renderTimelineView = () => {\n    return (\n      <Timeline mode=\"left\">\n        {data.map((log) => (\n          <Timeline.Item\n            key={log.id}\n            color={log.result === 'success' ? 'green' : 'red'}\n            dot={getActorIcon(log.actor)}\n            label={dayjs(log.created_at).format('YYYY-MM-DD HH:mm:ss')}\n          >\n            <Card size=\"small\" style={{ width: '100%' }}>\n              <Space direction=\"vertical\" size={8} style={{ width: '100%' }}>\n                <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n                  <Text strong>{log.module} - {log.action}</Text>\n                  <Tag color={getActorColor(log.actor)}>{log.actor}</Tag>\n                </div>\n                <div>闭环: {log.loop_name || log.loop}</div>\n                <div>阶段: {log.stage_name || log.stage}</div>\n                <div>状态: {getStateChange(log)}</div>\n                <div>TraceID: <Text copyable>{log.trace_id}</Text></div>\n                <div>操作人: {log.actor_name || '未知'}</div>\n                {log.error_message && (\n                  <Text type=\"danger\">错误: {log.error_message}</Text>\n                )}\n                <Button \n                  type=\"link\" \n                  size=\"small\" \n                  icon={<EyeOutlined />} \n                  onClick={() => showDetail(log)}\n                >\n                  查看详情\n                </Button>\n              </Space>\n            </Card>\n          </Timeline.Item>\n        ))}\n      </Timeline>\n    );\n  };\n\n  const getActorIcon = (actor?: string) => {\n    switch (actor) {\n      case 'AI': return '💡';\n      case 'USER': return '👤';\n      case 'SYSTEM': return '🔧';\n      default: return '📝';\n    }\n  };\n\n  const getActorColor = (actor?: string) => {\n    switch (actor) {\n      case 'AI': return 'blue';\n      case 'USER': return 'purple';\n      case 'SYSTEM': return 'default';\n      default: return 'default';\n    }\n  };\n\n  const getResultTag = (result: string) => {\n    switch (result) {\n      case 'success':\n        return <Badge status=\"success\" text=\"成功\" />;\n      case 'failed':\n        return <Badge status=\"error\" text=\"失败\" />;\n      default:\n        return <Badge status=\"default\" text={result} />;\n    }\n  };\n\n  const getStateChange = (log: OperationLogItem) => {\n    if (log.before_state && log.after_state) {\n      return (\n        <Space>\n          <Tag color=\"default\">{log.before_state}</Tag>\n          <span>→</span>\n          <Tag color={log.result === 'success' ? 'green' : 'red'}>{log.after_state}</Tag>\n        </Space>\n      );\n    }\n    return log.after_state ? <Tag color=\"blue\">{log.after_state}</Tag> : '-';\n  };\n\n  const [columnSettingVisible, setColumnSettingVisible] = useState(false);\n\n  const allColumns = [\n    { key: 'created_at', title: '时间' },\n    { key: 'actor', title: '执行者' },\n    { key: 'loop', title: '闭环' },\n    { key: 'stage', title: '阶段' },\n    { key: 'action', title: '操作' },\n    { key: 'state_change', title: '状态变化' },\n    { key: 'result', title: '状态' },\n    { key: 'trace_id', title: 'TraceID' },\n    { key: 'user_id', title: '用户ID' },\n    { key: 'actor_id', title: '执行者ID' },\n    { key: 'actor_name', title: '操作人' },\n    { key: 'actions', title: '操作' },\n  ];\n\n  const handleColumnToggle = (key: string, checked: boolean) => {\n    if (key === 'actions') return; // 操作列始终显示\n    setVisibleColumns(prev => {\n      if (checked) {\n        return [...prev, key];\n      } else {\n        return prev.filter(col => col !== key);\n      }\n    });\n  };\n\n  const columns = [\n    {\n      title: '时间',\n      dataIndex: 'created_at',\n      key: 'created_at',\n      width: 180,\n      render: (text: string) => dayjs(text).format('YYYY-MM-DD HH:mm:ss'),\n    },\n    {\n      title: '执行者',\n      key: 'actor',\n      width: 100,\n      render: (_: unknown, record: OperationLogItem) => (\n        <Space>\n          <span>{getActorIcon(record.actor)}</span>\n          <Tag color={getActorColor(record.actor)}>{record.actor || 'USER'}</Tag>\n        </Space>\n      ),\n    },\n    {\n      title: '闭环',\n      key: 'loop',\n      width: 120,\n      render: (_: unknown, record: OperationLogItem) => (\n        <Text strong>{record.loop_name || record.loop || '-'}</Text>\n      ),\n    },\n    {\n      title: '阶段',\n      key: 'stage',\n      width: 120,\n      render: (_: unknown, record: OperationLogItem) => (\n        <Text>{record.stage_name || record.stage || '-'}</Text>\n      ),\n    },\n    {\n      title: '操作',\n      dataIndex: 'action',\n      key: 'action',\n      width: 100,\n    },\n    {\n      title: '状态变化',\n      key: 'state_change',\n      width: 180,\n      render: (_: unknown, record: OperationLogItem) => (\n        <div>{getStateChange(record)}</div>\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'result',\n      key: 'result',\n      width: 80,\n      render: (result: string) => getResultTag(result),\n    },\n    {\n      title: 'TraceID',\n      dataIndex: 'trace_id',\n      key: 'trace_id',\n      width: 150,\n      ellipsis: true,\n      render: (trace_id: string) => (\n        <a onClick={(e) => {\n          e.preventDefault();\n          setFilters(prev => ({ ...prev, trace_id }));\n          handleSearch();\n        }} style={{ color: '#1890ff', cursor: 'pointer' }}>{trace_id}</a>\n      ),\n    },\n    {\n      title: '用户ID',\n      dataIndex: 'user_id',\n      key: 'user_id',\n      width: 120,\n      ellipsis: true,\n      render: (user_id: string) => (\n        <a onClick={(e) => {\n          e.preventDefault();\n          setFilters(prev => ({ ...prev, user_id }));\n          handleSearch();\n        }} style={{ color: '#1890ff', cursor: 'pointer' }}>{user_id}</a>\n      ),\n    },\n    {\n      title: '执行者ID',\n      dataIndex: 'actor_id',\n      key: 'actor_id',\n      width: 120,\n      ellipsis: true,\n      render: (actor_id: string) => (\n        <a onClick={(e) => {\n          e.preventDefault();\n          setFilters(prev => ({ ...prev, actor_id }));\n          handleSearch();\n        }} style={{ color: '#1890ff', cursor: 'pointer' }}>{actor_id || '-'}</a>\n      ),\n    },\n    {\n      title: '操作人',\n      dataIndex: 'actor_name',\n      key: 'actor_name',\n      width: 120,\n      ellipsis: true,\n    },\n    {\n      title: '操作',\n      key: 'actions',\n      width: 80,\n      fixed: 'right' as const,\n      render: (_: unknown, record: OperationLogItem) => (\n        <Button type=\"link\" size=\"small\" icon={<EyeOutlined />} onClick={() => showDetail(record)}>\n          详情\n        </Button>\n      ),\n    },\n  ].filter(col => visibleColumns.includes(col.key));\n\n  const handleResetColumns = () => {\n    setVisibleColumns([\n      'created_at', 'actor', 'loop', 'stage', 'action', 'state_change', 'result', 'trace_id', 'user_id', 'actor_id', 'actor_name', 'actions'\n    ]);\n  };\n\n  return (\n    <div style={{ padding: 24 }}>\n      <Card\n        title=\"📋 操作日志中心\"\n        extra={\n          <Space>\n            <Radio.Group value={viewMode} onChange={(e) => setViewMode(e.target.value as 'table' | 'timeline')}>\n              <Radio.Button value=\"table\">表格视图</Radio.Button>\n              <Radio.Button value=\"timeline\">时间轴视图</Radio.Button>\n            </Radio.Group>\n            <Space>\n              <Switch\n                checked={autoRefresh}\n                onChange={setAutoRefresh}\n                checkedChildren=\"自动刷新\"\n                unCheckedChildren=\"自动刷新\"\n              />\n              {autoRefresh && (\n                <Select\n                  value={refreshInterval}\n                  onChange={setRefreshInterval}\n                  style={{ width: 80 }}\n                  options={[\n                    { value: 10, label: '10s' },\n                    { value: 30, label: '30s' },\n                    { value: 60, label: '1min' },\n                    { value: 300, label: '5min' },\n                  ]}\n                />\n              )}\n            </Space>\n            <Button icon={<SettingOutlined />} onClick={() => setColumnSettingVisible(true)}>列设置</Button>\n            <Dropdown\n              menu={{\n                items: [\n                  {\n                    key: 'csv',\n                    label: '导出CSV',\n                    onClick: () => handleExport('csv'),\n                  },\n                  {\n                    key: 'excel',\n                    label: '导出Excel',\n                    onClick: () => handleExport('excel'),\n                  },\n                  {\n                    key: 'pdf',\n                    label: '导出PDF',\n                    onClick: () => handleExport('pdf'),\n                  },\n                ],\n              }}\n            >\n              <Button icon={<ExportOutlined />}>导出</Button>\n            </Dropdown>\n            <Button icon={<ReloadOutlined />} onClick={loadData}>刷新</Button>\n          </Space>\n        }\n      >\n        <FilterPanel\n          filters={filters}\n          onFilterChange={setFilters}\n          onSearch={handleSearch}\n          onReset={handleReset}\n        />\n\n        {viewMode === 'table' ? (\n          <Table\n            columns={columns}\n            dataSource={data}\n            rowKey=\"id\"\n            loading={loading}\n            scroll={{ x: 1200, y: 600 }}\n            pagination={{\n              ...pagination,\n              showSizeChanger: true,\n              showQuickJumper: true,\n              showTotal: (total) => `共 ${total} 条`,\n              onChange: (page, pageSize) => {\n                setPagination({ ...pagination, current: page, pageSize });\n              },\n            }}\n            virtual\n          />\n        ) : (\n          <div style={{ padding: 16 }}>\n            {loading ? (\n              <div style={{ display: 'flex', justifyContent: 'center', padding: 40 }}>\n                <Spin size=\"large\" />\n              </div>\n            ) : data.length > 0 ? (\n              renderTimelineView()\n            ) : (\n              <Empty description=\"暂无操作日志\" />\n            )}\n          </div>\n        )}\n      </Card>\n\n      <DetailModal\n        visible={detailModalVisible}\n        log={selectedLog}\n        relatedLogs={relatedLogs}\n        onClose={() => setDetailModalVisible(false)}\n        getActorIcon={getActorIcon}\n        getActorColor={getActorColor}\n        getStateChange={getStateChange}\n      />\n\n      <Modal\n        title=\"列设置\"\n        open={columnSettingVisible}\n        onCancel={() => setColumnSettingVisible(false)}\n        footer={[\n          <Button key=\"reset\" onClick={handleResetColumns}>重置默认</Button>,\n          <Button key=\"ok\" type=\"primary\" onClick={() => setColumnSettingVisible(false)}>确定</Button>\n        ]}\n        width={400}\n      >\n        <div style={{ maxHeight: 300, overflow: 'auto' }}>\n          {allColumns.map(column => (\n            <div key={column.key} style={{ marginBottom: 8, display: 'flex', alignItems: 'center' }}>\n              <Checkbox\n                checked={visibleColumns.includes(column.key)}\n                onChange={(e) => handleColumnToggle(column.key, e.target.checked)}\n                disabled={column.key === 'actions'}\n              />\n              <span style={{ marginLeft: 8 }}>{column.title}</span>\n            </div>\n          ))}\n        </div>\n      </Modal>\n    </div>\n  );\n};\n\nexport default OperationLogsPage;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/OperationLogs/index.tsx"
    },
    "62": {
      "path": "/dashboard/governance",
      "file": "@/pages/Governance/index.tsx",
      "parentId": "4",
      "id": "62",
      "absPath": "/dashboard/governance",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Button,\n  Space,\n  Input,\n  message,\n  Tag,\n  Modal,\n  Form,\n  Select,\n  DatePicker,\n  Row,\n  Col,\n  Statistic,\n  ReloadOutlined,\n  PlusOutlined,\n  SearchOutlined,\n  Option,\n  RangePicker,\n  FC,\n} from '@/imports';\nimport { GovernanceDataSource } from '@/services/governanceDataSource';\nimport type { GovernanceItem } from '@/services/governanceDataSource';\n\nconst GovernancePage: FC = () => {\n  const [data, setData] = useState<GovernanceItem[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [searchText, setSearchText] = useState('');\n  const [modalVisible, setModalVisible] = useState(false);\n  const [form] = Form.useForm();\n\n  useEffect(() => {\n    loadData();\n  }, []);\n\n  const loadData = async () => {\n    setLoading(true);\n    try {\n      const result = await GovernanceDataSource.list();\n      setData(result);\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      message.error(`加载失败: ${errorMessage}`);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleCreate = async (values: any) => {\n    try {\n      await GovernanceDataSource.create(values);\n      message.success('创建成功');\n      setModalVisible(false);\n      form.resetFields();\n      loadData();\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      message.error(`创建失败: ${errorMessage}`);\n    }\n  };\n\n  const columns = [\n    {\n      title: 'ID',\n      dataIndex: 'id',\n      key: 'id',\n      width: 200,\n    },\n    {\n      title: '名称',\n      dataIndex: 'name',\n      key: 'name',\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => {\n        const color = status === 'ACTIVE' ? 'green' : status === 'INACTIVE' ? 'red' : 'default';\n        return <Tag color={color}>{status}</Tag>;\n      },\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'createdAt',\n      key: 'createdAt',\n      width: 180,\n    },\n    {\n      title: '操作',\n      key: 'action',\n      width: 150,\n      render: (_: any, record: GovernanceItem) => (\n        <Space>\n          <Button type=\"link\" size=\"small\">查看</Button>\n          <Button type=\"link\" size=\"small\">编辑</Button>\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div>\n      <Card>\n        <Row gutter={16} style={{ marginBottom: 16 }}>\n          <Col span={6}>\n            <Statistic title=\"总数\" value={data.length} />\n          </Col>\n          <Col span={6}>\n            <Statistic \n              title=\"活跃\" \n              value={data.filter(item => item.status === 'ACTIVE').length} \n              valueStyle={{ color: '#3f8600' }}\n            />\n          </Col>\n        </Row>\n\n        <div style={{ marginBottom: 16 }}>\n          <Space>\n            <Input\n              placeholder=\"搜索...\"\n              prefix={<SearchOutlined />}\n              value={searchText}\n              onChange={(e) => setSearchText(e.target.value)}\n              style={{ width: 200 }}\n            />\n            <Button type=\"primary\" icon={<PlusOutlined />} onClick={() => setModalVisible(true)}>\n              新建\n            </Button>\n            <Button icon={<ReloadOutlined />} onClick={loadData}>\n              刷新\n            </Button>\n          </Space>\n        </div>\n\n        <Table\n          columns={columns}\n          dataSource={data.filter(item => \n            item.name?.toLowerCase().includes(searchText.toLowerCase())\n          )}\n          rowKey=\"id\"\n          loading={loading}\n          pagination={{ pageSize: 20 }}\n        />\n      </Card>\n\n      <Modal\n        title=\"新建\"\n        open={modalVisible}\n        onCancel={() => setModalVisible(false)}\n        onOk={() => form.submit()}\n      >\n        <Form form={form} layout=\"vertical\" onFinish={handleCreate}>\n          <Form.Item name=\"name\" label=\"名称\" rules={[{ required: true }]}>\n            <Input placeholder=\"请输入名称\" />\n          </Form.Item>\n          <Form.Item name=\"status\" label=\"状态\" rules={[{ required: true }]}>\n            <Select placeholder=\"请选择状态\">\n              <Option value=\"ACTIVE\">活跃</Option>\n              <Option value=\"INACTIVE\">非活跃</Option>\n            </Select>\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default GovernancePage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Governance/index.tsx"
    },
    "63": {
      "path": "/dashboard/sovereignty",
      "file": "@/pages/Sovereignty/index.tsx",
      "parentId": "4",
      "id": "63",
      "absPath": "/dashboard/sovereignty",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Button,\n  Space,\n  Input,\n  message,\n  Tag,\n  Modal,\n  Form,\n  Select,\n  DatePicker,\n  Row,\n  Col,\n  Statistic,\n  ReloadOutlined,\n  PlusOutlined,\n  SearchOutlined,\n  Option,\n  RangePicker,\n  FC,\n} from '@/imports';\nimport { SovereigntyDataSource } from '@/services/sovereigntyDataSource';\nimport type { SovereigntyItem } from '@/services/sovereigntyDataSource';\n\nconst SovereigntyPage: FC = () => {\n  const [data, setData] = useState<SovereigntyItem[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [searchText, setSearchText] = useState('');\n  const [modalVisible, setModalVisible] = useState(false);\n  const [form] = Form.useForm();\n\n  useEffect(() => {\n    loadData();\n  }, []);\n\n  const loadData = async () => {\n    setLoading(true);\n    try {\n      const result = await SovereigntyDataSource.list();\n      setData(result);\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      message.error(`加载失败: ${errorMessage}`);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleCreate = async (values: any) => {\n    try {\n      await SovereigntyDataSource.create(values);\n      message.success('创建成功');\n      setModalVisible(false);\n      form.resetFields();\n      loadData();\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      message.error(`创建失败: ${errorMessage}`);\n    }\n  };\n\n  const columns = [\n    {\n      title: 'ID',\n      dataIndex: 'id',\n      key: 'id',\n      width: 200,\n    },\n    {\n      title: '名称',\n      dataIndex: 'name',\n      key: 'name',\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => {\n        const color = status === 'ACTIVE' ? 'green' : status === 'INACTIVE' ? 'red' : 'default';\n        return <Tag color={color}>{status}</Tag>;\n      },\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'createdAt',\n      key: 'createdAt',\n      width: 180,\n    },\n    {\n      title: '操作',\n      key: 'action',\n      width: 150,\n      render: (_: any, record: SovereigntyItem) => (\n        <Space>\n          <Button type=\"link\" size=\"small\">查看</Button>\n          <Button type=\"link\" size=\"small\">编辑</Button>\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div>\n      <Card>\n        <Row gutter={16} style={{ marginBottom: 16 }}>\n          <Col span={6}>\n            <Statistic title=\"总数\" value={data.length} />\n          </Col>\n          <Col span={6}>\n            <Statistic \n              title=\"活跃\" \n              value={data.filter(item => item.status === 'ACTIVE').length} \n              valueStyle={{ color: '#3f8600' }}\n            />\n          </Col>\n        </Row>\n\n        <div style={{ marginBottom: 16 }}>\n          <Space>\n            <Input\n              placeholder=\"搜索...\"\n              prefix={<SearchOutlined />}\n              value={searchText}\n              onChange={(e) => setSearchText(e.target.value)}\n              style={{ width: 200 }}\n            />\n            <Button type=\"primary\" icon={<PlusOutlined />} onClick={() => setModalVisible(true)}>\n              新建\n            </Button>\n            <Button icon={<ReloadOutlined />} onClick={loadData}>\n              刷新\n            </Button>\n          </Space>\n        </div>\n\n        <Table\n          columns={columns}\n          dataSource={data.filter(item => \n            item.name?.toLowerCase().includes(searchText.toLowerCase())\n          )}\n          rowKey=\"id\"\n          loading={loading}\n          pagination={{ pageSize: 20 }}\n        />\n      </Card>\n\n      <Modal\n        title=\"新建\"\n        open={modalVisible}\n        onCancel={() => setModalVisible(false)}\n        onOk={() => form.submit()}\n      >\n        <Form form={form} layout=\"vertical\" onFinish={handleCreate}>\n          <Form.Item name=\"name\" label=\"名称\" rules={[{ required: true }]}>\n            <Input placeholder=\"请输入名称\" />\n          </Form.Item>\n          <Form.Item name=\"status\" label=\"状态\" rules={[{ required: true }]}>\n            <Select placeholder=\"请选择状态\">\n              <Option value=\"ACTIVE\">活跃</Option>\n              <Option value=\"INACTIVE\">非活跃</Option>\n            </Select>\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default SovereigntyPage;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Sovereignty/index.tsx"
    },
    "64": {
      "path": "/dashboard/compliance/certificates",
      "file": "@/pages/Compliance/CertificateManage.tsx",
      "parentId": "4",
      "id": "64",
      "absPath": "/dashboard/compliance/certificates",
      "__content": "/**\r\n * 证书管理页面\r\n * 使用DataSource抽象层获取数据，支持Mock/真实API自动切换\r\n * \r\n * @module pages/Compliance/CertificateManage\r\n * @author AI-Frontend-Team\r\n * @created 2026-03-19\r\n */\r\n\r\nimport {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Table,\r\n  Button,\r\n  Space,\r\n  Modal,\r\n  Form,\r\n  Input,\r\n  Select,\r\n  DatePicker,\r\n  Upload,\r\n  Descriptions,\r\n  Divider,\r\n  message,\r\n  Tag,\r\n  Tabs,\r\n  Row,\r\n  Col,\r\n  Statistic,\r\n  Alert,\r\n  Tooltip,\r\n  Badge,\r\n  FileTextOutlined,\r\n  PlusOutlined,\r\n  EyeOutlined,\r\n  EditOutlined,\r\n  DeleteOutlined,\r\n  UploadOutlined,\r\n  DownloadOutlined,\r\n  CheckCircleOutlined,\r\n  ClockCircleOutlined,\r\n  CloseCircleOutlined,\r\n  WarningOutlined,\r\n  BellOutlined,\r\n  Option,\r\n  RangePicker,\r\n  FC,\r\n} from '@/imports';\r\nimport type { ColumnsType } from 'antd/es/table';\r\nimport dayjs from 'dayjs';\r\nimport { certificateDataSource, __DATA_SOURCE_TYPE__, CertificateStatus } from '@/services/certificateDataSource';\r\nimport { Certificate } from '@/types/certificate';\r\n\r\n// 证书类型映射\r\nconst CERT_TYPE_MAP: Record<string, { label: string; color: string }> = {\r\n  PRODUCT_CERT: { label: '产品认证', color: 'blue' },\r\n  BUSINESS_LICENSE: { label: '营业执照', color: 'green' },\r\n  SAFETY_CERT: { label: '安全认证', color: 'red' },\r\n  QUALITY_CERT: { label: '质量认证', color: 'purple' },\r\n  OTHER: { label: '其他', color: 'default' },\r\n};\r\n\r\n// 状态映射\r\nconst STATUS_MAP: Record<string, { text: string; color: string; icon: React.ReactNode }> = {\r\n  APPROVED: { text: '已批准', color: 'success', icon: <CheckCircleOutlined /> },\r\n  PENDING: { text: '待审核', color: 'warning', icon: <ClockCircleOutlined /> },\r\n  REJECTED: { text: '已拒绝', color: 'error', icon: <CloseCircleOutlined /> },\r\n  EXPIRED: { text: '已过期', color: 'red', icon: <CloseCircleOutlined /> },\r\n};\r\n\r\n// 模拟产品列表（用于创建表单）\r\nconst MOCK_PRODUCTS = [\r\n  { id: 'P001', name: '工业温度传感器' },\r\n  { id: 'P002', name: '控制模块B' },\r\n  { id: 'P003', name: '电源单元C' },\r\n  { id: 'P004', name: '通信网关D' },\r\n];\r\n\r\nconst CertificateManage: FC = () => {\r\n  const [form] = Form.useForm();\r\n  const [loading, setLoading] = useState(false);\r\n  const [certificates, setCertificates] = useState<Certificate[]>([]);\r\n  const [createModalVisible, setCreateModalVisible] = useState(false);\r\n  const [detailModalVisible, setDetailModalVisible] = useState(false);\r\n  const [selectedCert, setSelectedCert] = useState<Certificate | null>(null);\r\n  const [activeTab, setActiveTab] = useState('all');\r\n\r\n  // 组件挂载时加载数据\r\n  useEffect(() => {\r\n    fetchCertificates();\r\n  }, []);\r\n\r\n  /**\r\n   * 获取证书列表\r\n   * 通过DataSource抽象层获取数据\r\n   */\r\n  const fetchCertificates = async () => {\r\n    setLoading(true);\r\n    try {\r\n      // 使用DataSource获取数据（自动切换Mock/真实API）\r\n      const data = await certificateDataSource.list();\r\n      setCertificates(data);\r\n      \r\n      if (__DATA_SOURCE_TYPE__ === 'mock') {\r\n        console.log('[CertificateManage] Using mock data source');\r\n      }\r\n    } catch (error) {\r\n      message.error('Failed to fetch certificates');\r\n      console.error('[CertificateManage] Error fetching certificates:', error);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * 创建证书\r\n   */\r\n  const handleCreateCert = async (values: any) => {\r\n    setLoading(true);\r\n    try {\r\n      const product = MOCK_PRODUCTS.find(p => p.id === values.productId);\r\n      \r\n      // 使用DataSource创建数据\r\n      const newCert = await certificateDataSource.create({\r\n        name: values.name,\r\n        type: values.type,\r\n        productId: values.productId,\r\n        productName: product?.name,\r\n        expiryDate: values.expiryDate?.format('YYYY-MM-DD'),\r\n        notes: values.notes,\r\n      });\r\n\r\n      message.success('Certificate created successfully');\r\n      setCreateModalVisible(false);\r\n      form.resetFields();\r\n      \r\n      // 刷新列表\r\n      await fetchCertificates();\r\n    } catch (error) {\r\n      message.error('Failed to create certificate');\r\n      console.error('[CertificateManage] Error creating certificate:', error);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * 查看详情\r\n   */\r\n  const handleViewDetail = (cert: Certificate) => {\r\n    setSelectedCert(cert);\r\n    setDetailModalVisible(true);\r\n  };\r\n\r\n  /**\r\n   * 更新证书状态（续期）\r\n   */\r\n  const handleRenew = async (cert: Certificate) => {\r\n    Modal.confirm({\r\n      title: '续期证书',\r\n      content: `确定要为证书 ${cert.name} 发起续期申请吗？`,\r\n      onOk: async () => {\r\n        try {\r\n          await certificateDataSource.update(cert.id, {\r\n            status: CertificateStatus.PENDING,\r\n          });\r\n          message.success('续期申请已提交');\r\n          await fetchCertificates();\r\n        } catch (error) {\r\n          message.error('Failed to renew certificate');\r\n          console.error('[CertificateManage] Error renewing certificate:', error);\r\n        }\r\n      },\r\n    });\r\n  };\r\n\r\n  /**\r\n   * 删除证书\r\n   */\r\n  const handleDelete = async (certId: string) => {\r\n    Modal.confirm({\r\n      title: '删除证书',\r\n      content: '确定要删除此证书吗？此操作不可恢复。',\r\n      okType: 'danger',\r\n      onOk: async () => {\r\n        try {\r\n          await certificateDataSource.delete(certId);\r\n          message.success('证书已删除');\r\n          await fetchCertificates();\r\n        } catch (error) {\r\n          message.error('Failed to delete certificate');\r\n          console.error('[CertificateManage] Error deleting certificate:', error);\r\n        }\r\n      },\r\n    });\r\n  };\r\n\r\n  /**\r\n   * 获取过滤后的证书列表\r\n   */\r\n  const getFilteredCerts = () => {\r\n    if (activeTab === 'all') return certificates;\r\n    if (activeTab === 'expiring') {\r\n      return certificates.filter(c => {\r\n        if (!c.expiryDate) return false;\r\n        const daysUntilExpiry = dayjs(c.expiryDate).diff(dayjs(), 'day');\r\n        return daysUntilExpiry > 0 && daysUntilExpiry <= 90;\r\n      });\r\n    }\r\n    return certificates.filter(c => c.status === activeTab.toUpperCase());\r\n  };\r\n\r\n  // 表格列定义\r\n  const columns: ColumnsType<Certificate> = [\r\n    {\r\n      title: '证书名称',\r\n      dataIndex: 'name',\r\n      key: 'name',\r\n      width: 200,\r\n      ellipsis: true,\r\n      render: (name: string, record: Certificate) => (\r\n        <a onClick={() => handleViewDetail(record)}>{name}</a>\r\n      ),\r\n    },\r\n    {\r\n      title: '类型',\r\n      dataIndex: 'type',\r\n      key: 'type',\r\n      width: 120,\r\n      render: (type: string) => {\r\n        const config = CERT_TYPE_MAP[type] || { label: type, color: 'default' };\r\n        return <Tag color={config.color}>{config.label}</Tag>;\r\n      },\r\n    },\r\n    {\r\n      title: '关联产品',\r\n      dataIndex: 'productName',\r\n      key: 'productName',\r\n      width: 160,\r\n      render: (name: string) => name || '-',\r\n    },\r\n    {\r\n      title: '到期日期',\r\n      dataIndex: 'expiryDate',\r\n      key: 'expiryDate',\r\n      width: 120,\r\n      render: (date: string) => {\r\n        if (!date) return '-';\r\n        const daysUntilExpiry = dayjs(date).diff(dayjs(), 'day');\r\n        const isExpiringSoon = daysUntilExpiry > 0 && daysUntilExpiry <= 90;\r\n        const isExpired = daysUntilExpiry <= 0;\r\n        return (\r\n          <Tooltip title={isExpiringSoon ? `${daysUntilExpiry}天后到期` : isExpired ? '已过期' : ''}>\r\n            <span style={{ color: isExpiringSoon || isExpired ? '#ff4d4f' : undefined }}>\r\n              {date}\r\n            </span>\r\n          </Tooltip>\r\n        );\r\n      },\r\n    },\r\n    {\r\n      title: '状态',\r\n      dataIndex: 'status',\r\n      key: 'status',\r\n      width: 100,\r\n      render: (status: string) => {\r\n        const config = STATUS_MAP[status] || { text: status, color: 'default', icon: null };\r\n        return <Tag color={config.color} icon={config.icon}>{config.text}</Tag>;\r\n      },\r\n    },\r\n    {\r\n      title: '操作',\r\n      key: 'actions',\r\n      width: 150,\r\n      render: (_, record: Certificate) => (\r\n        <Space>\r\n          <Tooltip title=\"查看详情\">\r\n            <Button type=\"link\" icon={<EyeOutlined />} onClick={() => handleViewDetail(record)} />\r\n          </Tooltip>\r\n          {record.status === 'APPROVED' && (\r\n            <Tooltip title=\"续期\">\r\n              <Button type=\"link\" icon={<ClockCircleOutlined />} onClick={() => handleRenew(record)} />\r\n            </Tooltip>\r\n          )}\r\n          <Tooltip title=\"删除\">\r\n            <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={() => handleDelete(record.id)} />\r\n          </Tooltip>\r\n        </Space>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  // 统计数据\r\n  const stats = {\r\n    total: certificates.length,\r\n    valid: certificates.filter(c => c.status === 'APPROVED').length,\r\n    expiring: certificates.filter(c => {\r\n      if (!c.expiryDate) return false;\r\n      const days = dayjs(c.expiryDate).diff(dayjs(), 'day');\r\n      return days > 0 && days <= 90;\r\n    }).length,\r\n    expired: certificates.filter(c => c.status === 'EXPIRED').length,\r\n  };\r\n\r\n  return (\r\n    <div className=\"certificate-manage-page\">\r\n      {/* 统计卡片 */}\r\n      <Row gutter={16} style={{ marginBottom: 24 }}>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic title=\"证书总数\" value={stats.total} prefix={<FileTextOutlined />} />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic title=\"有效\" value={stats.valid} valueStyle={{ color: '#52c41a' }} prefix={<CheckCircleOutlined />} />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic title=\"即将到期\" value={stats.expiring} valueStyle={{ color: '#faad14' }} prefix={<WarningOutlined />} />\r\n          </Card>\r\n        </Col>\r\n        <Col span={4}>\r\n          <Card>\r\n            <Statistic title=\"已过期\" value={stats.expired} valueStyle={{ color: '#ff4d4f' }} prefix={<CloseCircleOutlined />} />\r\n          </Card>\r\n        </Col>\r\n        <Col span={8}>\r\n          <Card>\r\n            <Alert\r\n              message=\"证书到期提醒\"\r\n              description={`${stats.expiring} 个证书将在90天内到期，请及时处理。`}\r\n              type=\"warning\"\r\n              showIcon\r\n              icon={<BellOutlined />}\r\n            />\r\n          </Card>\r\n        </Col>\r\n      </Row>\r\n\r\n      {/* 证书列表 */}\r\n      <Card \r\n        title=\"证书管理\" \r\n        extra={\r\n          <Button type=\"primary\" icon={<PlusOutlined />} onClick={() => setCreateModalVisible(true)}>\r\n            添加证书\r\n          </Button>\r\n        }\r\n      >\r\n        <Tabs \r\n          activeKey={activeTab} \r\n          onChange={setActiveTab}\r\n          items={[\r\n            { key: 'all', label: '全部' },\r\n            { key: 'expiring', label: <Badge count={stats.expiring} offset={[10, 0]} size=\"small\">即将到期</Badge> },\r\n            { key: 'approved', label: '有效' },\r\n            { key: 'expired', label: '已过期' },\r\n            { key: 'pending', label: '待审核' },\r\n          ]}\r\n        />\r\n\r\n        <Table\r\n          columns={columns}\r\n          dataSource={getFilteredCerts()}\r\n          rowKey=\"id\"\r\n          loading={loading}\r\n          pagination={{ pageSize: 10 }}\r\n        />\r\n      </Card>\r\n\r\n      {/* 创建证书弹窗 */}\r\n      <Modal\r\n        title=\"添加新证书\"\r\n        open={createModalVisible}\r\n        onCancel={() => setCreateModalVisible(false)}\r\n        footer={null}\r\n        width={700}\r\n      >\r\n        <Form form={form} layout=\"vertical\" onFinish={handleCreateCert}>\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"type\" label=\"证书类型\" rules={[{ required: true }]}>\r\n                <Select placeholder=\"选择类型\">\r\n                  {Object.entries(CERT_TYPE_MAP).map(([key, config]) => (\r\n                    <Option key={key} value={key}>{config.label}</Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n            <Col span={12}>\r\n              <Form.Item name=\"productId\" label=\"关联产品\">\r\n                <Select placeholder=\"选择产品\" allowClear>\r\n                  {MOCK_PRODUCTS.map(p => (\r\n                    <Option key={p.id} value={p.id}>{p.name}</Option>\r\n                  ))}\r\n                </Select>\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Form.Item name=\"name\" label=\"证书名称\" rules={[{ required: true }]}>\r\n            <Input placeholder=\"输入证书名称\" />\r\n          </Form.Item>\r\n\r\n          <Row gutter={16}>\r\n            <Col span={12}>\r\n              <Form.Item name=\"expiryDate\" label=\"到期日期\" rules={[{ required: true }]}>\r\n                <DatePicker style={{ width: '100%' }} />\r\n              </Form.Item>\r\n            </Col>\r\n          </Row>\r\n\r\n          <Form.Item name=\"notes\" label=\"备注\">\r\n            <Input.TextArea rows={3} placeholder=\"输入备注信息\" />\r\n          </Form.Item>\r\n\r\n          <Form.Item name=\"attachments\" label=\"附件\">\r\n            <Upload>\r\n              <Button icon={<UploadOutlined />}>上传文件</Button>\r\n            </Upload>\r\n          </Form.Item>\r\n\r\n          <div style={{ textAlign: 'right' }}>\r\n            <Button onClick={() => setCreateModalVisible(false)} style={{ marginRight: 8 }}>取消</Button>\r\n            <Button type=\"primary\" htmlType=\"submit\" loading={loading}>创建证书</Button>\r\n          </div>\r\n        </Form>\r\n      </Modal>\r\n\r\n      {/* 详情弹窗 */}\r\n      <Modal\r\n        title=\"证书详情\"\r\n        open={detailModalVisible}\r\n        onCancel={() => setDetailModalVisible(false)}\r\n        footer={[\r\n          <Button key=\"close\" onClick={() => setDetailModalVisible(false)}>关闭</Button>,\r\n          selectedCert?.status === 'APPROVED' && (\r\n            <Button \r\n              key=\"renew\" \r\n              type=\"primary\" \r\n              icon={<ClockCircleOutlined />} \r\n              onClick={() => { handleRenew(selectedCert!); setDetailModalVisible(false); }}\r\n            >\r\n              申请续期\r\n            </Button>\r\n          ),\r\n        ]}\r\n        width={700}\r\n      >\r\n        {selectedCert && (\r\n          <>\r\n            <Descriptions bordered column={2}>\r\n              <Descriptions.Item label=\"证书ID\">{selectedCert.id}</Descriptions.Item>\r\n              <Descriptions.Item label=\"状态\">\r\n                <Tag color={STATUS_MAP[selectedCert.status]?.color}>\r\n                  {STATUS_MAP[selectedCert.status]?.text}\r\n                </Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"证书名称\" span={2}>{selectedCert.name}</Descriptions.Item>\r\n              <Descriptions.Item label=\"类型\">\r\n                <Tag color={CERT_TYPE_MAP[selectedCert.type]?.color}>\r\n                  {CERT_TYPE_MAP[selectedCert.type]?.label}\r\n                </Tag>\r\n              </Descriptions.Item>\r\n              <Descriptions.Item label=\"关联产品\">{selectedCert.productName || '-'}</Descriptions.Item>\r\n              <Descriptions.Item label=\"到期日期\">{selectedCert.expiryDate || '-'}</Descriptions.Item>\r\n              <Descriptions.Item label=\"上传日期\">{selectedCert.uploadDate || '-'}</Descriptions.Item>\r\n              {selectedCert.approvedBy && (\r\n                <Descriptions.Item label=\"审核人\">{selectedCert.approvedBy}</Descriptions.Item>\r\n              )}\r\n              {selectedCert.approvedDate && (\r\n                <Descriptions.Item label=\"审核日期\">{selectedCert.approvedDate}</Descriptions.Item>\r\n              )}\r\n              {selectedCert.notes && (\r\n                <Descriptions.Item label=\"备注\" span={2}>{selectedCert.notes}</Descriptions.Item>\r\n              )}\r\n            </Descriptions>\r\n\r\n            {selectedCert.fileUrl && (\r\n              <>\r\n                <Divider>附件</Divider>\r\n                <Button icon={<DownloadOutlined />} size=\"small\">\r\n                  {selectedCert.fileName || '下载证书'}\r\n                </Button>\r\n              </>\r\n            )}\r\n          </>\r\n        )}\r\n      </Modal>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default CertificateManage;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Compliance/CertificateManage.tsx"
    },
    "65": {
      "path": "/dashboard/settings",
      "file": "@/pages/Settings/index.tsx",
      "parentId": "4",
      "id": "65",
      "absPath": "/dashboard/settings",
      "__content": "import {\n  useState,\n  Tabs,\n  Card,\n  Button,\n  Form,\n  Input,\n  Modal,\n  message,\n  SafetyOutlined,\n  FC,\n} from '@/imports';\n\nconst Settings: FC = () => {\n  const [activeTab, setActiveTab] = useState('account');\n  const [passwordModalVisible, setPasswordModalVisible] = useState(false);\n  const [apiKeyModalVisible, setApiKeyModalVisible] = useState(false);\n  const [twoFactorModalVisible, setTwoFactorModalVisible] = useState(false);\n  \n  const [passwordForm] = Form.useForm();\n  const [apiKeyForm] = Form.useForm();\n\n  const handlePasswordSubmit = async (_values: any) => {\n    try {\n      // 模拟密码修改\n      await new Promise(resolve => setTimeout(resolve, 1000));\n      message.success('密码修改成功');\n      setPasswordModalVisible(false);\n      passwordForm.resetFields();\n    } catch (error) {\n      message.error('密码修改失败');\n    }\n  };\n\n  const handleApiKeySubmit = async (_values: any) => {\n    try {\n      // 模拟API密钥生成\n      await new Promise(resolve => setTimeout(resolve, 1000));\n      message.success('API密钥生成成功');\n      setApiKeyModalVisible(false);\n      apiKeyForm.resetFields();\n    } catch (error) {\n      message.error('API密钥生成失败');\n    }\n  };\n\n  const tabItems = [\n    {\n      key: 'account',\n      label: '账户设置',\n      children: (\n        <div>\n          <Card title=\"个人信息\" style={{ marginBottom: 16 }}>\n            <p>用户名: admin</p>\n            <p>邮箱: admin@example.com</p>\n            <p>注册时间: 2024-01-01</p>\n          </Card>\n          <Card title=\"密码设置\" style={{ marginBottom: 16 }}>\n            <Button type=\"primary\" onClick={() => setPasswordModalVisible(true)}>\n              修改密码\n            </Button>\n          </Card>\n          <Card title=\"API密钥\" style={{ marginBottom: 16 }}>\n            <Button type=\"primary\" onClick={() => setApiKeyModalVisible(true)}>\n              生成API密钥\n            </Button>\n          </Card>\n          <Card title=\"双因素认证\" style={{ marginBottom: 16 }}>\n            <Button type=\"primary\" onClick={() => setTwoFactorModalVisible(true)}>\n              启用双因素认证\n            </Button>\n          </Card>\n        </div>\n      ),\n    },\n    {\n      key: 'notification',\n      label: '通知设置',\n      children: (\n        <div>\n          <Card title=\"邮件通知\" style={{ marginBottom: 16 }}>\n            <p>启用邮件通知: ✓</p>\n            <p>通知频率: 实时</p>\n          </Card>\n          <Card title=\"短信通知\" style={{ marginBottom: 16 }}>\n            <p>启用短信通知: ✗</p>\n            <p>手机号码: 未设置</p>\n          </Card>\n        </div>\n      ),\n    },\n  ];\n\n  return (\n    <div className=\"settings-page\" style={{ padding: 24 }}>\n      <div style={{ marginBottom: 24 }}>\n        <h4 style={{ marginBottom: 8, fontSize: 16, fontWeight: 600 }}>系统设置</h4>\n        <p style={{ color: '#666', margin: 0 }}>管理您的账户设置、通知偏好和系统配置</p>\n      </div>\n\n      <Tabs activeKey={activeTab} onChange={setActiveTab} type=\"card\" items={tabItems} />\n\n      {/* 密码修改弹窗 */}\n      <Modal\n        title=\"修改密码\"\n        open={passwordModalVisible}\n        onCancel={() => setPasswordModalVisible(false)}\n        footer={null}\n      >\n        <Form form={passwordForm} layout=\"vertical\" onFinish={handlePasswordSubmit}>\n          <Form.Item\n            name=\"currentPassword\"\n            label=\"当前密码\"\n            rules={[{ required: true, message: '请输入当前密码' }]}\n          >\n            <Input.Password placeholder=\"当前密码\" />\n          </Form.Item>\n          <Form.Item\n            name=\"newPassword\"\n            label=\"新密码\"\n            rules={[\n              { required: true, message: '请输入新密码' },\n              { min: 8, message: '密码至少8位' },\n            ]}\n          >\n            <Input.Password placeholder=\"新密码\" />\n          </Form.Item>\n          <Form.Item\n            name=\"confirmPassword\"\n            label=\"确认新密码\"\n            rules={[{ required: true, message: '请确认新密码' }]}\n          >\n            <Input.Password placeholder=\"确认新密码\" />\n          </Form.Item>\n          <Form.Item>\n            <Button type=\"primary\" htmlType=\"submit\" style={{ marginRight: 8 }}>\n              确认修改\n            </Button>\n            <Button onClick={() => setPasswordModalVisible(false)}>\n              取消\n            </Button>\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      {/* API密钥生成弹窗 */}\n      <Modal\n        title=\"生成API密钥\"\n        open={apiKeyModalVisible}\n        onCancel={() => setApiKeyModalVisible(false)}\n        footer={null}\n      >\n        <Form form={apiKeyForm} layout=\"vertical\" onFinish={handleApiKeySubmit}>\n          <Form.Item\n            name=\"name\"\n            label=\"密钥名称\"\n            rules={[{ required: true, message: '请输入密钥名称' }]}\n          >\n            <Input placeholder=\"例如：Production API Key\" />\n          </Form.Item>\n          <Form.Item>\n            <Button type=\"primary\" htmlType=\"submit\" style={{ marginRight: 8 }}>\n              生成密钥\n            </Button>\n            <Button onClick={() => setApiKeyModalVisible(false)}>\n              取消\n            </Button>\n          </Form.Item>\n        </Form>\n      </Modal>\n\n      {/* 双因素认证弹窗 */}\n      <Modal\n        title=\"启用双因素认证\"\n        open={twoFactorModalVisible}\n        onCancel={() => setTwoFactorModalVisible(false)}\n        onOk={() => setTwoFactorModalVisible(false)}\n      >\n        <div style={{ textAlign: 'center' }}>\n          <SafetyOutlined style={{ fontSize: 48, color: '#52c41a' }} />\n          <p style={{ marginTop: 16 }}>\n            启用双因素认证后，每次登录时除了密码外，还需要输入手机验证码。\n          </p>\n          <p>\n            这将大大提高您账户的安全性。\n          </p>\n        </div>\n      </Modal>\n    </div>\n  );\n};\n\nexport default Settings;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Settings/index.tsx"
    },
    "66": {
      "path": "/dashboard/settings/platform-auth",
      "file": "@/pages/Settings/PlatformAuth.tsx",
      "parentId": "4",
      "id": "66",
      "absPath": "/dashboard/settings/platform-auth",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Button,\n  Space,\n  Modal,\n  Form,\n  Input,\n  Select,\n  Tag,\n  message,\n  Row,\n  Col,\n  Statistic,\n  Badge,\n  Typography,\n  Divider,\n  Alert,\n  Spin,\n  PlusOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  SyncOutlined,\n  ShopOutlined,\n  LinkOutlined,\n  ApiOutlined,\n  ReloadOutlined,\n  DeleteOutlined,\n  Title,\n  Text,\n  Option,\n  FC,\n} from '@/imports';\nimport type { ColumnsType } from 'antd/es/table';\nimport { platformAuthDataSource } from '@/services/platformAuthDataSource';\nimport { PlatformAccount, PlatformAccountStats, Platform } from '@/types/platform';\n\nconst PLATFORM_CONFIG: Record<string, { color: string; text: string; icon: React.ReactNode }> = {\n  // TikTok系列\n  TIKTOK: { color: 'cyan', text: 'TikTok', icon: <ShopOutlined /> },\n  TIKTOK_FULL: { color: 'cyan', text: 'TikTok全托管', icon: <ShopOutlined /> },\n  \n  // Shopee系列\n  SHOPEE: { color: 'red', text: 'Shopee', icon: <ShopOutlined /> },\n  SHOPEE_FULL: { color: 'red', text: 'Shopee全托管', icon: <ShopOutlined /> },\n  SHOPEE_LIGHT: { color: 'red', text: 'Shopee轻出海', icon: <ShopOutlined /> },\n  \n  // Lazada系列\n  LAZADA: { color: 'purple', text: 'Lazada', icon: <ShopOutlined /> },\n  LAZADA_FULL: { color: 'purple', text: 'Lazada全托管', icon: <ShopOutlined /> },\n  \n  // Temu\n  TEMU_FULL: { color: 'green', text: 'Temu全托管', icon: <ShopOutlined /> },\n  \n  // SHEIN系列\n  SHEIN: { color: 'pink', text: 'SHEIN', icon: <ShopOutlined /> },\n  SHEIN_HALF: { color: 'pink', text: 'SHEIN半托管', icon: <ShopOutlined /> },\n  \n  // 其他平台\n  OZON: { color: 'yellow', text: 'Ozon', icon: <ShopOutlined /> },\n  YANDEX: { color: 'blue', text: 'Yandex', icon: <ShopOutlined /> },\n  ALIEXPRESS: { color: 'orange', text: 'AliExpress', icon: <ShopOutlined /> },\n  ALIEXPRESS_HALF: { color: 'orange', text: '速卖通半托管', icon: <ShopOutlined /> },\n  ALIEXPRESS_POP: { color: 'orange', text: '速卖通本土POP', icon: <ShopOutlined /> },\n  COUPANG: { color: 'red', text: 'Coupang', icon: <ShopOutlined /> },\n  WALMART: { color: 'blue', text: 'Walmart', icon: <ShopOutlined /> },\n  WILDBERRIES: { color: 'purple', text: 'Wildberries', icon: <ShopOutlined /> },\n  ALLEGRO: { color: 'green', text: 'Allegro', icon: <ShopOutlined /> },\n  MERCADO_LIBRE: { color: 'yellow', text: 'Mercado Libre', icon: <ShopOutlined /> },\n  JUMIA: { color: 'blue', text: 'Jumia', icon: <ShopOutlined /> },\n  JOOM: { color: 'purple', text: 'Joom', icon: <ShopOutlined /> },\n  AMAZON: { color: 'orange', text: 'Amazon', icon: <ShopOutlined /> },\n  WISH: { color: 'blue', text: 'Wish', icon: <ShopOutlined /> },\n  EMAG: { color: 'green', text: 'eMAG', icon: <ShopOutlined /> },\n  MIRAVIA: { color: 'pink', text: 'Miravia', icon: <ShopOutlined /> },\n  DARAZ: { color: 'blue', text: 'Daraz', icon: <ShopOutlined /> },\n  JOYBUY: { color: 'red', text: 'Joybuy', icon: <ShopOutlined /> },\n  ALIBABA: { color: 'orange', text: 'Alibaba', icon: <ShopOutlined /> },\n  QOO10: { color: 'red', text: 'Qoo10', icon: <ShopOutlined /> },\n  SHOPIFY: { color: 'green', text: 'Shopify', icon: <ShopOutlined /> },\n  SHOPLAZZA: { color: 'blue', text: 'Shoplazza', icon: <ShopOutlined /> },\n  SHOPYY_V1: { color: 'purple', text: 'SHOPYY v1.0', icon: <ShopOutlined /> },\n  SHOPYY_V2: { color: 'purple', text: 'SHOPYY v2.0', icon: <ShopOutlined /> },\n  SHOPLINE: { color: 'green', text: 'SHOPLINE', icon: <ShopOutlined /> },\n  GREATBOSS: { color: 'blue', text: 'GreatBoss', icon: <ShopOutlined /> },\n  OTHER: { color: 'default', text: '其他', icon: <ShopOutlined /> },\n  \n  // 原有平台\n  EBAY: { color: 'blue', text: 'eBay', icon: <ShopOutlined /> },\n};\n\nconst STATUS_CONFIG: Record<string, { color: string; text: string }> = {\n  ACTIVE: { color: 'success', text: '已连接' },\n  INACTIVE: { color: 'default', text: '未连接' },\n  EXPIRED: { color: 'warning', text: '已过期' },\n  ERROR: { color: 'error', text: '错误' },\n};\n\nconst PlatformAuth: React.FC = () => {\n  const [accounts, setAccounts] = useState<PlatformAccount[]>([]);\n  const [stats, setStats] = useState<PlatformAccountStats>({ total: 0, active: 0, inactive: 0, expired: 0, error: 0 });\n  const [loading, setLoading] = useState(true);\n  const [modalVisible, setModalVisible] = useState(false);\n  const [form] = Form.useForm();\n\n  useEffect(() => {\n    loadData();\n  }, []);\n\n  const loadData = async () => {\n    setLoading(true);\n    try {\n      const [accountList, accountStats] = await Promise.all([\n        platformAuthDataSource.list(),\n        platformAuthDataSource.getStats(),\n      ]);\n      setAccounts(accountList);\n      setStats(accountStats);\n    } catch (error: any) {\n      message.error(`加载失败: ${error.message}`);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleConnect = async (values: { platform: Platform; accountName: string; accountId: string; shopId?: string }) => {\n    try {\n      const result = await platformAuthDataSource.connect({\n        platform: values.platform,\n        accountName: values.accountName,\n        accountId: values.accountId,\n        shopId: values.shopId,\n      });\n\n      if (result.authUrl) {\n        message.success('正在跳转到授权页面...');\n        window.open(result.authUrl, '_blank');\n      }\n\n      setModalVisible(false);\n      form.resetFields();\n      loadData();\n    } catch (error: any) {\n      message.error(`连接失败: ${error.message}`);\n    }\n  };\n\n  const handleDisconnect = async (id: string) => {\n    Modal.confirm({\n      title: '确认断开连接？',\n      content: '断开后将无法同步该平台的数据',\n      onOk: async () => {\n        try {\n          await platformAuthDataSource.disconnect(id);\n          message.success('已断开连接');\n          loadData();\n        } catch (error: any) {\n          message.error(`断开失败: ${error.message}`);\n        }\n      },\n    });\n  };\n\n  const handleRefresh = async (id: string) => {\n    try {\n      message.loading({ content: '正在刷新授权...', key: 'refresh' });\n      const result = await platformAuthDataSource.refresh(id);\n      if (result.success) {\n        message.success({ content: '授权已刷新', key: 'refresh' });\n        loadData();\n      } else {\n        message.error({ content: result.message, key: 'refresh' });\n      }\n    } catch (error: any) {\n      message.error({ content: `刷新失败: ${error.message}`, key: 'refresh' });\n    }\n  };\n\n  const handleDelete = async (id: string) => {\n    Modal.confirm({\n      title: '确认删除？',\n      content: '删除后需要重新授权才能使用该平台',\n      okType: 'danger',\n      onOk: async () => {\n        try {\n          await platformAuthDataSource.delete(id);\n          message.success('已删除');\n          loadData();\n        } catch (error: any) {\n          message.error(`删除失败: ${error.message}`);\n        }\n      },\n    });\n  };\n\n  const columns: ColumnsType<PlatformAccount> = [\n    {\n      title: '平台',\n      dataIndex: 'platform',\n      key: 'platform',\n      width: 150,\n      render: (platform: string) => {\n        const config = PLATFORM_CONFIG[platform] || { color: 'default', text: platform, icon: <ShopOutlined /> };\n        return (\n          <Space>\n            {config.icon}\n            <Tag color={config.color}>{config.text}</Tag>\n          </Space>\n        );\n      },\n    },\n    {\n      title: '店铺名称',\n      dataIndex: 'accountName',\n      key: 'accountName',\n      width: 200,\n    },\n    {\n      title: '账号ID',\n      dataIndex: 'accountId',\n      key: 'accountId',\n      width: 150,\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      width: 120,\n      render: (status: string) => {\n        const config = STATUS_CONFIG[status] || { color: 'default', text: status };\n        return <Badge status={config.color as any} text={config.text} />;\n      },\n    },\n    {\n      title: '最后同步',\n      dataIndex: 'lastSyncAt',\n      key: 'lastSyncAt',\n      width: 180,\n      render: (lastSyncAt?: string) => lastSyncAt ? new Date(lastSyncAt).toLocaleString() : '-',\n    },\n    {\n      title: '授权过期',\n      dataIndex: 'expiresAt',\n      key: 'expiresAt',\n      width: 180,\n      render: (expiresAt?: string) => expiresAt ? new Date(expiresAt).toLocaleString() : '-',\n    },\n    {\n      title: '操作',\n      key: 'action',\n      width: 220,\n      render: (_, record) => (\n        <Space>\n          {record.status === 'ACTIVE' && (\n            <>\n              <Button \n                type=\"link\" \n                size=\"small\" \n                icon={<ReloadOutlined />}\n                onClick={() => handleRefresh(record.id)}\n              >\n                刷新\n              </Button>\n              <Button \n                type=\"link\" \n                size=\"small\" \n                danger\n                onClick={() => handleDisconnect(record.id)}\n              >\n                断开\n              </Button>\n            </>\n          )}\n          {record.status === 'EXPIRED' && (\n            <>\n              <Button \n                type=\"link\" \n                size=\"small\" \n                icon={<SyncOutlined />}\n                onClick={() => handleRefresh(record.id)}\n              >\n                重新授权\n              </Button>\n              <Button \n                type=\"link\" \n                size=\"small\" \n                danger\n                icon={<DeleteOutlined />}\n                onClick={() => handleDelete(record.id)}\n              />\n            </>\n          )}\n          {record.status === 'INACTIVE' && (\n            <Button \n              type=\"link\" \n              size=\"small\" \n              icon={<LinkOutlined />}\n              onClick={() => {\n                form.setFieldsValue({\n                  platform: record.platform,\n                  accountName: record.accountName,\n                  accountId: record.accountId,\n                });\n                setModalVisible(true);\n              }}\n            >\n              去授权\n            </Button>\n          )}\n          {record.status === 'ERROR' && (\n            <>\n              <Button \n                type=\"link\" \n                size=\"small\" \n                icon={<SyncOutlined />}\n                onClick={() => handleRefresh(record.id)}\n              >\n                重试\n              </Button>\n              <Button \n                type=\"link\" \n                size=\"small\" \n                danger\n                icon={<DeleteOutlined />}\n                onClick={() => handleDelete(record.id)}\n              />\n            </>\n          )}\n        </Space>\n      ),\n    },\n  ];\n\n  return (\n    <div>\n      <Title level={4}>平台授权管理</Title>\n      <Text type=\"secondary\">管理各电商平台的API授权，确保数据同步正常</Text>\n      \n      <Divider />\n      \n      <Row gutter={16} style={{ marginBottom: 24 }}>\n        <Col span={6}>\n          <Card>\n            <Statistic title=\"总平台数\" value={stats.total} prefix={<ShopOutlined />} />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic \n              title=\"已连接\" \n              value={stats.active} \n              valueStyle={{ color: '#3f8600' }}\n              prefix={<CheckCircleOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic \n              title=\"已过期\" \n              value={stats.expired} \n              valueStyle={{ color: '#faad14' }}\n              prefix={<CloseCircleOutlined />}\n            />\n          </Card>\n        </Col>\n        <Col span={6}>\n          <Card>\n            <Statistic \n              title=\"错误\" \n              value={stats.error} \n              valueStyle={{ color: '#cf1322' }}\n              prefix={<SyncOutlined spin />}\n            />\n          </Card>\n        </Col>\n      </Row>\n\n      {stats.expired > 0 && (\n        <Alert\n          message=\"部分平台授权已过期，请及时刷新授权以避免数据同步中断\"\n          type=\"warning\"\n          showIcon\n          style={{ marginBottom: 16 }}\n        />\n      )}\n\n      <Card>\n        <div style={{ marginBottom: 16 }}>\n          <Button type=\"primary\" icon={<PlusOutlined />} onClick={() => setModalVisible(true)}>\n            添加平台\n          </Button>\n        </div>\n        \n        <Spin spinning={loading}>\n          <Table \n            columns={columns} \n            dataSource={accounts} \n            rowKey=\"id\"\n            pagination={{ pageSize: 10 }}\n          />\n        </Spin>\n      </Card>\n\n      <Modal\n        title=\"添加平台授权\"\n        open={modalVisible}\n        onCancel={() => {\n          setModalVisible(false);\n          form.resetFields();\n        }}\n        onOk={() => {\n          form.validateFields().then(values => {\n            handleConnect(values);\n          });\n        }}\n      >\n        <Form form={form} layout=\"vertical\">\n          <Form.Item name=\"platform\" label=\"平台\" rules={[{ required: true, message: '请选择平台' }]}>\n            <Select placeholder=\"选择平台\">\n              {Object.entries(PLATFORM_CONFIG).map(([key, config]) => (\n                <Option key={key} value={key}>\n                  <Space>\n                    {config.icon}\n                    {config.text}\n                  </Space>\n                </Option>\n              ))}\n            </Select>\n          </Form.Item>\n          <Form.Item name=\"accountName\" label=\"店铺名称\" rules={[{ required: true, message: '请输入店铺名称' }]}>\n            <Input placeholder=\"输入店铺名称\" />\n          </Form.Item>\n          <Form.Item name=\"accountId\" label=\"账号ID\" rules={[{ required: true, message: '请输入账号ID' }]}>\n            <Input placeholder=\"输入平台账号ID\" />\n          </Form.Item>\n          <Form.Item name=\"shopId\" label=\"店铺ID（可选）\">\n            <Input placeholder=\"输入店铺ID\" />\n          </Form.Item>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default PlatformAuth;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Settings/PlatformAuth.tsx"
    },
    "67": {
      "path": "/dashboard/settings/service-manager",
      "file": "@/pages/Settings/ServiceManager.tsx",
      "parentId": "4",
      "id": "67",
      "absPath": "/dashboard/settings/service-manager",
      "__content": "import {\n  useState,\n  useEffect,\n  Card,\n  Table,\n  Button,\n  Space,\n  Switch,\n  Tag,\n  message,\n  Row,\n  Col,\n  Statistic,\n  Badge,\n  Typography,\n  Divider,\n  Alert,\n  Spin,\n  Tabs,\n  Modal,\n  Progress,\n  ReloadOutlined,\n  CheckCircleOutlined,\n  CloseCircleOutlined,\n  ThunderboltOutlined,\n  DashboardOutlined,\n  WarningOutlined,\n  Title,\n  Text,\n  FC,\n} from '@/imports';\nimport type { TabsProps } from 'antd';\nimport type { ColumnsType } from 'antd/es/table';\nimport { serviceManagerDataSource, ServiceInfo, ServiceStats, ServicePreset } from '@/services/serviceManagerDataSource';\n\nconst MEMORY_IMPACT_COLORS: Record<string, string> = {\n  low: 'green',\n  medium: 'orange',\n  high: 'red',\n};\n\nconst MEMORY_IMPACT_TEXT: Record<string, string> = {\n  low: '低',\n  medium: '中',\n  high: '高',\n};\n\nconst ServiceManager: FC = () => {\n  const [services, setServices] = useState<ServiceInfo[]>([]);\n  const [groupedServices, setGroupedServices] = useState<Record<string, ServiceInfo[]>>({});\n  const [stats, setStats] = useState<ServiceStats | null>(null);\n  const [presets, setPresets] = useState<ServicePreset[]>([]);\n  const [categories, setCategories] = useState<Record<string, { label: string; color: string }>>({});\n  const [loading, setLoading] = useState(true);\n  const [presetModalVisible, setPresetModalVisible] = useState(false);\n  const [selectedCategory, setSelectedCategory] = useState<string>('all');\n\n  useEffect(() => {\n    loadData();\n  }, []);\n\n  const loadData = async () => {\n    setLoading(true);\n    try {\n      const [listData, presetsData, categoriesData] = await Promise.all([\n        serviceManagerDataSource.list(),\n        serviceManagerDataSource.getPresets(),\n        serviceManagerDataSource.getCategories(),\n      ]);\n      setServices(listData.services);\n      setGroupedServices(listData.groupedServices);\n      setStats(listData.stats);\n      setPresets(presetsData);\n      setCategories(categoriesData);\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      message.error(`加载失败: ${errorMessage}`);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleToggle = async (name: string, enabled: boolean) => {\n    try {\n      const result = await serviceManagerDataSource.toggle(name, enabled);\n      message.success(result.message);\n      loadData();\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      message.error(`操作失败: ${errorMessage}`);\n    }\n  };\n\n  const handleApplyPreset = async (preset: string) => {\n    try {\n      const result = await serviceManagerDataSource.applyPreset(preset);\n      message.success(result.message);\n      setPresetModalVisible(false);\n      loadData();\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      message.error(`应用预设失败: ${errorMessage}`);\n    }\n  };\n\n  const handleBatchToggle = async (category: string, enabled: boolean) => {\n    const categoryServices = groupedServices[category] || [];\n    const serviceNames = categoryServices.map(s => s.name);\n    \n    Modal.confirm({\n      title: `确认${enabled ? '启用' : '禁用'}所有 ${categories[category]?.label || category} 服务？`,\n      content: `将影响 ${serviceNames.length} 个服务`,\n      onOk: async () => {\n        try {\n          const result = await serviceManagerDataSource.batchToggle(serviceNames, enabled);\n          message.success(result.message);\n          loadData();\n        } catch (error: unknown) {\n          const errorMessage = error instanceof Error ? error.message : String(error);\n          message.error(`批量操作失败: ${errorMessage}`);\n        }\n      },\n    });\n  };\n\n  const columns: ColumnsType<ServiceInfo> = [\n    {\n      title: '服务名称',\n      dataIndex: 'name',\n      key: 'name',\n      width: 200,\n      render: (name: string) => <Text strong>{name}</Text>,\n    },\n    {\n      title: '描述',\n      dataIndex: ['config', 'description'],\n      key: 'description',\n      width: 250,\n    },\n    {\n      title: '分类',\n      dataIndex: ['config', 'category'],\n      key: 'category',\n      width: 120,\n      render: (category: string) => {\n        const config = categories[category] || { color: 'default', label: category };\n        return <Tag color={config.color}>{config.label}</Tag>;\n      },\n    },\n    {\n      title: '内存影响',\n      dataIndex: ['config', 'memoryImpact'],\n      key: 'memoryImpact',\n      width: 100,\n      render: (impact: string) => (\n        <Tag color={MEMORY_IMPACT_COLORS[impact]}>\n          {MEMORY_IMPACT_TEXT[impact]}\n        </Tag>\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'initialized',\n      key: 'status',\n      width: 100,\n      render: (initialized: boolean, record: ServiceInfo) => {\n        if (record.error) {\n          return <Badge status=\"error\" text=\"错误\" />;\n        }\n        if (!record.enabled) {\n          return <Badge status=\"default\" text=\"已禁用\" />;\n        }\n        if (initialized) {\n          return <Badge status=\"success\" text=\"已启动\" />;\n        }\n        return <Badge status=\"processing\" text=\"启动中\" />;\n      },\n    },\n    {\n      title: '开关',\n      key: 'toggle',\n      width: 80,\n      render: (_, record: ServiceInfo) => (\n        <Switch\n          checked={record.enabled}\n          onChange={(checked) => handleToggle(record.name, checked)}\n          checkedChildren=\"开\"\n          unCheckedChildren=\"关\"\n        />\n      ),\n    },\n  ];\n\n  const filteredServices = selectedCategory === 'all' \n    ? services \n    : groupedServices[selectedCategory] || [];\n\n  const tabItems: TabsProps['items'] = [\n    {\n      key: 'all',\n      label: `全部 (${services.length})`,\n    },\n    ...Object.entries(groupedServices).map(([category, categoryServices]) => ({\n      key: category,\n      label: `${categories[category]?.label || category} (${categoryServices.length})`,\n    })),\n  ];\n\n  return (\n    <div>\n      <Title level={4}>服务管理</Title>\n      <Text type=\"secondary\">管理系统后台服务，控制内存占用</Text>\n      \n      <Divider />\n      \n      {stats && (\n        <Row gutter={16} style={{ marginBottom: 24 }}>\n          <Col span={4}>\n            <Card>\n              <Statistic \n                title=\"总服务数\" \n                value={stats.total} \n                prefix={<DashboardOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic \n                title=\"已启用\" \n                value={stats.enabled} \n                valueStyle={{ color: '#3f8600' }}\n                prefix={<CheckCircleOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic \n                title=\"已禁用\" \n                value={stats.disabled} \n                valueStyle={{ color: '#999' }}\n                prefix={<CloseCircleOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic \n                title=\"已启动\" \n                value={stats.initialized} \n                valueStyle={{ color: '#1890ff' }}\n                prefix={<ThunderboltOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic \n                title=\"启动失败\" \n                value={stats.failed} \n                valueStyle={{ color: stats.failed > 0 ? '#cf1322' : '#999' }}\n                prefix={<WarningOutlined />}\n              />\n            </Card>\n          </Col>\n          <Col span={4}>\n            <Card>\n              <Statistic \n                title=\"内存影响(高)\" \n                value={stats.byMemoryImpact?.high?.enabled || 0}\n                suffix={`/ ${stats.byMemoryImpact?.high?.total || 0}`}\n                valueStyle={{ color: (stats.byMemoryImpact?.high?.enabled || 0) > 0 ? '#cf1322' : '#999' }}\n              />\n            </Card>\n          </Col>\n        </Row>\n      )}\n\n      <Alert\n        message=\"提示：修改服务配置后需要重启服务器才能生效\"\n        type=\"info\"\n        showIcon\n        style={{ marginBottom: 16 }}\n      />\n\n      <Card>\n        <div style={{ marginBottom: 16 }}>\n          <Space>\n            <Button \n              type=\"primary\" \n              icon={<ThunderboltOutlined />}\n              onClick={() => setPresetModalVisible(true)}\n            >\n              应用预设\n            </Button>\n            <Button \n              icon={<ReloadOutlined />}\n              onClick={loadData}\n            >\n              刷新\n            </Button>\n          </Space>\n        </div>\n\n        <Spin spinning={loading}>\n          <Tabs \n            activeKey={selectedCategory} \n            onChange={setSelectedCategory}\n            items={tabItems}\n          />\n\n          <Table \n            columns={columns} \n            dataSource={filteredServices} \n            rowKey=\"name\"\n            pagination={{ pageSize: 20 }}\n            size=\"small\"\n          />\n        </Spin>\n      </Card>\n\n      <Modal\n        title=\"选择预设配置\"\n        open={presetModalVisible}\n        onCancel={() => setPresetModalVisible(false)}\n        footer={null}\n        width={600}\n      >\n        <Row gutter={[16, 16]}>\n          {presets.map(preset => (\n            <Col span={12} key={preset.id}>\n              <Card\n                hoverable\n                onClick={() => handleApplyPreset(preset.id)}\n                style={{ cursor: 'pointer' }}\n              >\n                <Title level={5}>{preset.name}</Title>\n                <Text type=\"secondary\">{preset.description}</Text>\n                <Divider style={{ margin: '12px 0' }} />\n                <Progress \n                  percent={Math.round((preset.serviceCount / (stats?.total || 100)) * 100)} \n                  format={() => `${preset.serviceCount} 个服务`}\n                  strokeColor={preset.id === 'minimal' ? '#52c41a' : preset.id === 'full' ? '#f5222d' : '#1890ff'}\n                />\n              </Card>\n            </Col>\n          ))}\n        </Row>\n      </Modal>\n    </div>\n  );\n};\n\nexport default ServiceManager;\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Settings/ServiceManager.tsx"
    },
    "68": {
      "path": "/dashboard/user",
      "file": "@/pages/User/index.tsx",
      "parentId": "4",
      "id": "68",
      "absPath": "/dashboard/user",
      "__content": "import {\n  useState,\n  Card,\n  Typography,\n  Table,\n  Button,\n  Form,\n  Input,\n  Select,\n  Modal,\n  message,\n  Popconfirm,\n  PlusOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  SearchOutlined,\n  Title,\n  Text,\n  Option,\n  Item,\n  FC,\n} from '@/imports';\n\nimport { settingsDataSource, User } from '@/services/settingsDataSource';\n\nconst UserManagement: FC = () => {\n  const [users, setUsers] = useState<User[]>([\n    {\n      id: '1',\n      username: 'admin',\n      nickname: '管理员',\n      email: 'admin@example.com',\n      phone: '13800138000',\n      role: 'ADMIN',\n      status: 'active',\n      createdAt: '2026-03-01',\n      lastLogin: '2026-03-18 10:30',\n    },\n    {\n      id: '2',\n      username: 'manager',\n      nickname: '运营主管',\n      email: 'manager@example.com',\n      phone: '13800138001',\n      role: 'MANAGER',\n      status: 'active',\n      createdAt: '2026-03-02',\n      lastLogin: '2026-03-18 09:15',\n    },\n    {\n      id: '3',\n      username: 'operator',\n      nickname: '运营专员',\n      email: 'operator@example.com',\n      phone: '13800138002',\n      role: 'OPERATOR',\n      status: 'active',\n      createdAt: '2026-03-03',\n      lastLogin: '2026-03-17 16:45',\n    },\n  ]);\n\n  const [isModalVisible, setIsModalVisible] = useState<boolean>(false);\n  const [editingUser, setEditingUser] = useState<User | null>(null);\n  const [form] = Form.useForm();\n\n  const handleAddUser = () => {\n    setEditingUser(null);\n    form.resetFields();\n    setIsModalVisible(true);\n  };\n\n  const handleEditUser = (user: User) => {\n    setEditingUser(user);\n    form.setFieldsValue(user);\n    setIsModalVisible(true);\n  };\n\n  const handleDeleteUser = (id: string) => {\n    const updatedUsers = users.filter(user => user.id !== id);\n    setUsers(updatedUsers);\n    message.success('用户已删除');\n  };\n\n  const handleSaveUser = () => {\n    form.validateFields().then(values => {\n      if (editingUser) {\n        const updatedUsers = users.map(user => \n          user.id === editingUser.id ? { ...user, ...values } : user\n        );\n        setUsers(updatedUsers);\n        message.success('用户信息已更新');\n      } else {\n        const newUser: User = {\n          id: (users.length + 1).toString(),\n          ...values,\n          status: 'active',\n          createdAt: new Date().toISOString().split('T')[0],\n          lastLogin: '-',\n        };\n        setUsers([...users, newUser]);\n        message.success('用户已添加');\n      }\n      setIsModalVisible(false);\n    });\n  };\n\n  const columns = [\n    {\n      title: '用户ID',\n      dataIndex: 'id',\n      key: 'id',\n    },\n    {\n      title: '用户名',\n      dataIndex: 'username',\n      key: 'username',\n    },\n    {\n      title: '昵称',\n      dataIndex: 'nickname',\n      key: 'nickname',\n    },\n    {\n      title: '邮箱',\n      dataIndex: 'email',\n      key: 'email',\n    },\n    {\n      title: '手机号',\n      dataIndex: 'phone',\n      key: 'phone',\n    },\n    {\n      title: '角色',\n      dataIndex: 'role',\n      key: 'role',\n      render: (role: string) => (\n        <span>\n          {role === 'ADMIN' ? '管理员' : \n           role === 'MANAGER' ? '运营主管' : \n           role === 'OPERATOR' ? '运营专员' : \n           role === 'FINANCE' ? '财务主管' : \n           role === 'SOURCING' ? '采购专家' : \n           role === 'LOGISTICS' ? '物流专家' : \n           role === 'ANALYST' ? '数据分析师' : role}\n        </span>\n      ),\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => (\n        <span style={{ \n          color: status === 'active' ? '#52c41a' : '#d9d9d9'\n        }}>\n          {status === 'active' ? '活跃' : '禁用'}\n        </span>\n      ),\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'createdAt',\n      key: 'createdAt',\n    },\n    {\n      title: '最后登录',\n      dataIndex: 'lastLogin',\n      key: 'lastLogin',\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: any, record: User) => (\n        <div style={{ display: 'flex', gap: 8 }}>\n          <Button \n            icon={<EditOutlined />} \n            size=\"small\"\n            onClick={() => handleEditUser(record)}\n          >\n            编辑\n          </Button>\n          <Popconfirm\n            title=\"确定要删除这个用户吗？\"\n            onConfirm={() => handleDeleteUser(record.id)}\n            okText=\"确定\"\n            cancelText=\"取消\"\n          >\n            <Button \n              icon={<DeleteOutlined />} \n              size=\"small\" \n              danger\n            >\n              删除\n            </Button>\n          </Popconfirm>\n        </div>\n      ),\n    },\n  ];\n\n  return (\n    <div>\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <Title level={4}>用户管理</Title>\n        <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleAddUser}>\n          添加用户\n        </Button>\n      </div>\n\n      <Card>\n        <Table \n          columns={columns} \n          dataSource={users} \n          rowKey=\"id\"\n          pagination={{ pageSize: 10 }}\n        />\n      </Card>\n\n      {/* 用户编辑模态框 */}\n      <Modal\n        title={editingUser ? \"编辑用户\" : \"添加用户\"}\n        open={isModalVisible}\n        onCancel={() => setIsModalVisible(false)}\n        footer={null}\n      >\n        <Form\n          form={form}\n          layout=\"vertical\"\n          initialValues={{\n            username: '',\n            nickname: '',\n            email: '',\n            phone: '',\n            role: 'OPERATOR',\n          }}\n        >\n          <Item label=\"用户名\" name=\"username\" rules={[{ required: true, message: '请输入用户名' }]}>\n            <Input placeholder=\"输入用户名\" />\n          </Item>\n          <Item label=\"昵称\" name=\"nickname\" rules={[{ required: true, message: '请输入昵称' }]}>\n            <Input placeholder=\"输入昵称\" />\n          </Item>\n          <Item label=\"邮箱\" name=\"email\" rules={[{ required: true, message: '请输入邮箱' }, { type: 'email', message: '请输入正确的邮箱格式' }]}>\n            <Input placeholder=\"输入邮箱\" />\n          </Item>\n          <Item label=\"手机号\" name=\"phone\" rules={[{ required: true, message: '请输入手机号' }]}>\n            <Input placeholder=\"输入手机号\" />\n          </Item>\n          <Item label=\"角色\" name=\"role\" rules={[{ required: true, message: '请选择角色' }]}>\n            <Select>\n              <Option value=\"ADMIN\">管理员</Option>\n              <Option value=\"MANAGER\">运营主管</Option>\n              <Option value=\"OPERATOR\">运营专员</Option>\n              <Option value=\"FINANCE\">财务主管</Option>\n              <Option value=\"SOURCING\">采购专家</Option>\n              <Option value=\"LOGISTICS\">物流专家</Option>\n              <Option value=\"ANALYST\">数据分析师</Option>\n            </Select>\n          </Item>\n          <div style={{ display: 'flex', justifyContent: 'flex-end', gap: 12, marginTop: 24 }}>\n            <Button onClick={() => setIsModalVisible(false)}>取消</Button>\n            <Button type=\"primary\" onClick={handleSaveUser}>\n              保存\n            </Button>\n          </div>\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default UserManagement;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/User/index.tsx"
    },
    "69": {
      "path": "/dashboard/role",
      "file": "@/pages/Role/index.tsx",
      "parentId": "4",
      "id": "69",
      "absPath": "/dashboard/role",
      "__content": "import {\n  useState,\n  Card,\n  Typography,\n  Table,\n  Button,\n  Form,\n  Input,\n  Checkbox,\n  Modal,\n  message,\n  Popconfirm,\n  Tree,\n  PlusOutlined,\n  EditOutlined,\n  DeleteOutlined,\n  SettingOutlined,\n  FC,\n} from '@/imports';\nimport { settingsDataSource, Role } from '@/services/settingsDataSource';\n\ninterface PermissionNode {\n  id: string;\n  key: string;\n  name: string;\n  code: string;\n  children?: PermissionNode[];\n}\n\nconst { Title, Text } = Typography;\nconst { Item } = Form;\n\nconst RoleManagement: FC = () => {\n  const [roles, setRoles] = useState<Role[]>([\n    {\n      id: '1',\n      name: '管理员',\n      code: 'ADMIN',\n      description: '系统管理员，拥有所有权限',\n      permissions: ['PRODUCT_MANAGE', 'ORDER_MANAGE', 'USER_MANAGE', 'SYSTEM_MANAGE'],\n      status: 'active',\n      createdAt: '2026-03-01',\n      updatedAt: '2026-03-01',\n    },\n    {\n      id: '2',\n      name: '运营主管',\n      code: 'MANAGER',\n      description: '运营主管，拥有大部分权限',\n      permissions: ['PRODUCT_MANAGE', 'ORDER_MANAGE', 'USER_MANAGE'],\n      status: 'active',\n      createdAt: '2026-03-02',\n      updatedAt: '2026-03-02',\n    },\n    {\n      id: '3',\n      name: '运营专员',\n      code: 'OPERATOR',\n      description: '运营专员，拥有基础权限',\n      permissions: ['PRODUCT_MANAGE', 'ORDER_MANAGE'],\n      status: 'active',\n      createdAt: '2026-03-03',\n      updatedAt: '2026-03-03',\n    },\n  ]);\n\n  const [permissions, setPermissions] = useState<PermissionNode[]>([\n    {\n      id: '1',\n      key: '1',\n      name: '商品管理',\n      code: 'PRODUCT_MANAGE',\n      children: [\n        { id: '1-1', key: '1-1', name: '商品列表', code: 'PRODUCT_LIST' },\n        { id: '1-2', key: '1-2', name: '商品添加', code: 'PRODUCT_ADD' },\n        { id: '1-3', key: '1-3', name: '商品编辑', code: 'PRODUCT_EDIT' },\n        { id: '1-4', key: '1-4', name: '商品删除', code: 'PRODUCT_DELETE' },\n      ],\n    },\n    {\n      id: '2',\n      key: '2',\n      name: '订单管理',\n      code: 'ORDER_MANAGE',\n      children: [\n        { id: '2-1', key: '2-1', name: '订单列表', code: 'ORDER_LIST' },\n        { id: '2-2', key: '2-2', name: '订单详情', code: 'ORDER_DETAIL' },\n        { id: '2-3', key: '2-3', name: '订单处理', code: 'ORDER_PROCESS' },\n      ],\n    },\n    {\n      id: '3',\n      key: '3',\n      name: '用户管理',\n      code: 'USER_MANAGE',\n      children: [\n        { id: '3-1', key: '3-1', name: '用户列表', code: 'USER_LIST' },\n        { id: '3-2', key: '3-2', name: '用户添加', code: 'USER_ADD' },\n        { id: '3-3', key: '3-3', name: '用户编辑', code: 'USER_EDIT' },\n        { id: '3-4', key: '3-4', name: '用户删除', code: 'USER_DELETE' },\n      ],\n    },\n    {\n      id: '4',\n      key: '4',\n      name: '系统管理',\n      code: 'SYSTEM_MANAGE',\n      children: [\n        { id: '4-1', key: '4-1', name: '角色管理', code: 'ROLE_MANAGE' },\n        { id: '4-2', key: '4-2', name: '权限管理', code: 'PERMISSION_MANAGE' },\n        { id: '4-3', key: '4-3', name: '系统配置', code: 'SYSTEM_CONFIG' },\n      ],\n    },\n  ]);\n\n  const [isModalVisible, setIsModalVisible] = useState<boolean>(false);\n  const [isPermissionModalVisible, setIsPermissionModalVisible] = useState<boolean>(false);\n  const [editingRole, setEditingRole] = useState<Role | null>(null);\n  const [selectedRole, setSelectedRole] = useState<Role | null>(null);\n  const [form] = Form.useForm();\n\n  const handleAddRole = () => {\n    setEditingRole(null);\n    form.resetFields();\n    setIsModalVisible(true);\n  };\n\n  const handleEditRole = (role: Role) => {\n    setEditingRole(role);\n    form.setFieldsValue(role);\n    setIsModalVisible(true);\n  };\n\n  const handleDeleteRole = (id: string) => {\n    const updatedRoles = roles.filter(role => role.id !== id);\n    setRoles(updatedRoles);\n    message.success('角色已删除');\n  };\n\n  const handleSaveRole = () => {\n    form.validateFields().then(values => {\n      if (editingRole) {\n        const updatedRoles = roles.map(role => \n          role.id === editingRole.id ? { ...role, ...values, updatedAt: new Date().toISOString().split('T')[0] } : role\n        );\n        setRoles(updatedRoles);\n        message.success('角色信息已更新');\n      } else {\n        const newRole: Role = {\n          id: (roles.length + 1).toString(),\n          ...values,\n          status: 'active',\n          createdAt: new Date().toISOString().split('T')[0],\n          updatedAt: new Date().toISOString().split('T')[0],\n        };\n        setRoles([...roles, newRole]);\n        message.success('角色已添加');\n      }\n      setIsModalVisible(false);\n    });\n  };\n\n  const handleEditPermissions = (role: Role) => {\n    setSelectedRole(role);\n    setIsPermissionModalVisible(true);\n  };\n\n  const handleSavePermissions = () => {\n    message.success('权限配置已保存');\n    setIsPermissionModalVisible(false);\n  };\n\n  const columns = [\n    {\n      title: '角色ID',\n      dataIndex: 'id',\n      key: 'id',\n    },\n    {\n      title: '角色名称',\n      dataIndex: 'name',\n      key: 'name',\n    },\n    {\n      title: '角色编码',\n      dataIndex: 'code',\n      key: 'code',\n    },\n    {\n      title: '描述',\n      dataIndex: 'description',\n      key: 'description',\n    },\n    {\n      title: '状态',\n      dataIndex: 'status',\n      key: 'status',\n      render: (status: string) => (\n        <span style={{ \n          color: status === 'active' ? '#52c41a' : '#d9d9d9'\n        }}>\n          {status === 'active' ? '活跃' : '禁用'}\n        </span>\n      ),\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'createdAt',\n      key: 'createdAt',\n    },\n    {\n      title: '更新时间',\n      dataIndex: 'updatedAt',\n      key: 'updatedAt',\n    },\n    {\n      title: '操作',\n      key: 'action',\n      render: (_: any, record: Role) => (\n        <div style={{ display: 'flex', gap: 8 }}>\n          <Button \n            icon={<EditOutlined />} \n            size=\"small\"\n            onClick={() => handleEditRole(record)}\n          >\n            编辑\n          </Button>\n          <Button \n            icon={<SettingOutlined />} \n            size=\"small\"\n            onClick={() => handleEditPermissions(record)}\n          >\n            权限\n          </Button>\n          <Popconfirm\n            title=\"确定要删除这个角色吗？\"\n            onConfirm={() => handleDeleteRole(record.id)}\n            okText=\"确定\"\n            cancelText=\"取消\"\n          >\n            <Button \n              icon={<DeleteOutlined />} \n              size=\"small\" \n              danger\n            >\n              删除\n            </Button>\n          </Popconfirm>\n        </div>\n      ),\n    },\n  ];\n\n  return (\n    <div>\n      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 24 }}>\n        <Title level={4}>角色管理</Title>\n        <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleAddRole}>\n          添加角色\n        </Button>\n      </div>\n\n      <Card>\n        <Table \n          columns={columns} \n          dataSource={roles} \n          rowKey=\"id\"\n          pagination={{ pageSize: 10 }}\n        />\n      </Card>\n\n      {/* 角色编辑模态框 */}\n      <Modal\n        title={editingRole ? \"编辑角色\" : \"添加角色\"}\n        open={isModalVisible}\n        onCancel={() => setIsModalVisible(false)}\n        footer={null}\n      >\n        <Form\n          form={form}\n          layout=\"vertical\"\n          initialValues={{\n            name: '',\n            code: '',\n            description: '',\n          }}\n        >\n          <Item label=\"角色名称\" name=\"name\" rules={[{ required: true, message: '请输入角色名称' }]}>\n            <Input placeholder=\"输入角色名称\" />\n          </Item>\n          <Item label=\"角色编码\" name=\"code\" rules={[{ required: true, message: '请输入角色编码' }]}>\n            <Input placeholder=\"输入角色编码\" />\n          </Item>\n          <Item label=\"描述\" name=\"description\">\n            <Input.TextArea placeholder=\"输入角色描述\" />\n          </Item>\n          <div style={{ display: 'flex', justifyContent: 'flex-end', gap: 12, marginTop: 24 }}>\n            <Button onClick={() => setIsModalVisible(false)}>取消</Button>\n            <Button type=\"primary\" onClick={handleSaveRole}>\n              保存\n            </Button>\n          </div>\n        </Form>\n      </Modal>\n\n      {/* 权限配置模态框 */}\n      <Modal\n        title={`${selectedRole?.name} 权限配置`}\n        open={isPermissionModalVisible}\n        onCancel={() => setIsPermissionModalVisible(false)}\n        onOk={handleSavePermissions}\n        width={800}\n      >\n        <Tree<PermissionNode>\n          checkable\n          treeData={permissions}\n          defaultExpandAll\n        />\n      </Modal>\n    </div>\n  );\n};\n\nexport default RoleManagement;",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Role/index.tsx"
    },
    "70": {
      "path": "/auth/login",
      "file": "@/pages/Auth/LoginPage.tsx",
      "parentId": "@@/global-layout",
      "id": "70",
      "absPath": "/auth/login",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Form,\r\n  Input,\r\n  Button,\r\n  Checkbox,\r\n  Space,\r\n  Divider,\r\n  Typography,\r\n  Alert,\r\n  message,\r\n  Row,\r\n  Col,\r\n  UserOutlined,\r\n  LockOutlined,\r\n  SafetyOutlined,\r\n  EyeInvisibleOutlined,\r\n  EyeTwoTone,\r\n  LoginOutlined,\r\n  GoogleOutlined,\r\n  GithubOutlined,\r\n  Title,\r\n  Text,\r\n  Link,\r\n  useNavigate,\r\n  FC,\r\n} from '@/imports';\r\nimport { useLocale } from '@/contexts/LocaleContext';\r\n\r\ninterface LoginFormValues {\r\n  username: string;\r\n  password: string;\r\n  remember: boolean;\r\n  captcha?: string;\r\n}\r\n\r\nconst LoginPage: FC = () => {\r\n  const [form] = Form.useForm();\r\n  const [loading, setLoading] = useState(false);\r\n  const [loginError, setLoginError] = useState<string | null>(null);\r\n  const [captchaCode, setCaptchaCode] = useState('');\r\n  const navigate = useNavigate();\r\n  const { t } = useLocale();\r\n\r\n  const generateCaptcha = () => {\r\n    const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';\r\n    let result = '';\r\n    for (let i = 0; i < 4; i++) {\r\n      result += chars.charAt(Math.floor(Math.random() * chars.length));\r\n    }\r\n    setCaptchaCode(result);\r\n  };\r\n\r\n  useEffect(() => {\r\n    generateCaptcha();\r\n  }, []);\r\n\r\n  const handleLogin = async (values: LoginFormValues) => {\r\n    setLoading(true);\r\n    setLoginError(null);\r\n\r\n    try {\r\n      if (values.captcha?.toUpperCase() !== captchaCode) {\r\n        setLoginError(t('login.invalidCaptcha'));\r\n        generateCaptcha();\r\n        setLoading(false);\r\n        return;\r\n      }\r\n\r\n      const response = await fetch('http://localhost:3001/api/v1/auth/login', {\r\n        method: 'POST',\r\n        headers: {\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n          username: values.username,\r\n          password: values.password,\r\n        }),\r\n      });\r\n\r\n      const result = await response.json();\r\n\r\n      if (!result.success) {\r\n        setLoginError(result.error || t('login.loginFailed'));\r\n        generateCaptcha();\r\n        setLoading(false);\r\n        return;\r\n      }\r\n\r\n      localStorage.setItem('token', result.data.token);\r\n      localStorage.setItem('refreshToken', result.data.refreshToken);\r\n      localStorage.setItem('userId', result.data.user.id);\r\n      localStorage.setItem('username', result.data.user.username);\r\n      localStorage.setItem('roleCode', result.data.user.role);\r\n      localStorage.setItem('tenantId', result.data.user.tenantId);\r\n      localStorage.setItem('shopId', result.data.user.shopId);\r\n\r\n      message.success(t('login.loginSuccess'));\r\n      setTimeout(() => {\r\n        navigate('/dashboard');\r\n      }, 1000);\r\n    } catch (error) {\r\n      console.error('Login error:', error);\r\n      setLoginError(t('login.loginFailed'));\r\n      generateCaptcha();\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div style={{\r\n      minHeight: '100vh',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n      padding: 24,\r\n    }}>\r\n      <Row gutter={[48, 0]} align=\"middle\" style={{ maxWidth: 1000, width: '100%' }}>\r\n        <Col xs={0} md={12}>\r\n          <div style={{ color: 'white', paddingRight: 48 }}>\r\n            <Title level={1} style={{ color: 'white', marginBottom: 24 }}>\r\n              {t('app.name')}\r\n            </Title>\r\n            <Text style={{ color: 'rgba(255,255,255,0.9)', fontSize: 18, display: 'block', marginBottom: 32 }}>\r\n              {t('app.title')}\r\n            </Text>\r\n            <Space direction=\"vertical\" size=\"large\" style={{ color: 'rgba(255,255,255,0.8)' }}>\r\n              <div>✓ {t('nav.products')}</div>\r\n              <div>✓ {t('nav.orders')}</div>\r\n              <div>✓ {t('nav.analytics')}</div>\r\n              <div>✓ {t('nav.finance')}</div>\r\n            </Space>\r\n          </div>\r\n        </Col>\r\n\r\n        <Col xs={24} md={12}>\r\n          <Card\r\n            style={{\r\n              borderRadius: 16,\r\n              boxShadow: '0 20px 60px rgba(0,0,0,0.3)',\r\n            }}\r\n            bodyStyle={{ padding: 40 }}\r\n          >\r\n            <div style={{ textAlign: 'center', marginBottom: 32 }}>\r\n              <Title level={3}>\r\n                {t('login.title')}\r\n              </Title>\r\n              <Text type=\"secondary\">\r\n                {t('login.subtitle')}\r\n              </Text>\r\n            </div>\r\n\r\n            {loginError && (\r\n              <Alert\r\n                message={loginError}\r\n                type=\"error\"\r\n                showIcon\r\n                style={{ marginBottom: 24 }}\r\n                closable\r\n                onClose={() => setLoginError(null)}\r\n              />\r\n            )}\r\n\r\n            <Form\r\n              form={form}\r\n              layout=\"vertical\"\r\n              onFinish={handleLogin}\r\n              initialValues={{ remember: true }}\r\n            >\r\n              <Form.Item\r\n                name=\"username\"\r\n                rules={[\r\n                  { required: true, message: t('common.required') },\r\n                  { min: 3, message: 'Username must be at least 3 characters' },\r\n                ]}\r\n              >\r\n                <Input\r\n                  prefix={<UserOutlined style={{ color: '#bfbfbf' }} />}\r\n                  placeholder={t('login.username')}\r\n                  size=\"large\"\r\n                />\r\n              </Form.Item>\r\n\r\n              <Form.Item\r\n                name=\"password\"\r\n                rules={[\r\n                  { required: true, message: t('common.required') },\r\n                  { min: 6, message: 'Password must be at least 6 characters' },\r\n                ]}\r\n              >\r\n                <Input.Password\r\n                  prefix={<LockOutlined style={{ color: '#bfbfbf' }} />}\r\n                  placeholder={t('login.password')}\r\n                  size=\"large\"\r\n                  iconRender={visible => (visible ? <EyeTwoTone /> : <EyeInvisibleOutlined />)}\r\n                />\r\n              </Form.Item>\r\n\r\n              <Form.Item>\r\n                <Row gutter={8} align=\"middle\">\r\n                  <Col flex=\"auto\">\r\n                    <Form.Item\r\n                      name=\"captcha\"\r\n                      noStyle\r\n                      rules={[{ required: true, message: t('common.required') }]}\r\n                    >\r\n                      <Input\r\n                        prefix={<SafetyOutlined style={{ color: '#bfbfbf' }} />}\r\n                        placeholder={t('login.verificationCode')}\r\n                        size=\"large\"\r\n                        maxLength={4}\r\n                      />\r\n                    </Form.Item>\r\n                  </Col>\r\n                  <Col>\r\n                    <div\r\n                      onClick={generateCaptcha}\r\n                      style={{\r\n                        width: 100,\r\n                        height: 40,\r\n                        background: '#f0f2f5',\r\n                        display: 'flex',\r\n                        alignItems: 'center',\r\n                        justifyContent: 'center',\r\n                        fontFamily: 'monospace',\r\n                        fontSize: 20,\r\n                        letterSpacing: 4,\r\n                        cursor: 'pointer',\r\n                        userSelect: 'none',\r\n                        borderRadius: 4,\r\n                        color: '#1890ff',\r\n                        fontWeight: 'bold',\r\n                      }}\r\n                    >\r\n                      {captchaCode}\r\n                    </div>\r\n                  </Col>\r\n                </Row>\r\n              </Form.Item>\r\n\r\n              <Form.Item>\r\n                <Row justify=\"space-between\" align=\"middle\">\r\n                  <Col>\r\n                    <Form.Item name=\"remember\" valuePropName=\"checked\" noStyle>\r\n                      <Checkbox>\r\n                        {t('login.remember')}\r\n                      </Checkbox>\r\n                    </Form.Item>\r\n                  </Col>\r\n                  <Col>\r\n                    <Link to=\"/auth/reset-password\">\r\n                      {t('login.forgot')}\r\n                    </Link>\r\n                  </Col>\r\n                </Row>\r\n              </Form.Item>\r\n\r\n              <Form.Item>\r\n                <Button\r\n                  type=\"primary\"\r\n                  htmlType=\"submit\"\r\n                  size=\"large\"\r\n                  block\r\n                  loading={loading}\r\n                  icon={<LoginOutlined />}\r\n                >\r\n                  {t('login.submit')}\r\n                </Button>\r\n              </Form.Item>\r\n\r\n              <Divider>\r\n                {t('login.orContinueWith')}\r\n              </Divider>\r\n\r\n              <Space style={{ width: '100%', justifyContent: 'center' }}>\r\n                <Button icon={<GoogleOutlined />} size=\"large\">\r\n                  Google\r\n                </Button>\r\n                <Button icon={<GithubOutlined />} size=\"large\">\r\n                  GitHub\r\n                </Button>\r\n              </Space>\r\n\r\n              <div style={{ textAlign: 'center', marginTop: 24 }}>\r\n                <Text type=\"secondary\">\r\n                  {t('login.noAccount')} {' '}\r\n                  <Link to=\"/auth/register\">\r\n                    {t('login.signup')}\r\n                  </Link>\r\n                </Text>\r\n              </div>\r\n            </Form>\r\n          </Card>\r\n        </Col>\r\n      </Row>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default LoginPage;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Auth/LoginPage.tsx"
    },
    "71": {
      "path": "/auth/register",
      "file": "@/pages/Auth/RegisterPage.tsx",
      "parentId": "@@/global-layout",
      "id": "71",
      "absPath": "/auth/register",
      "__content": "import {\r\n  useState,\r\n  useEffect,\r\n  Card,\r\n  Form,\r\n  Input,\r\n  Button,\r\n  Checkbox,\r\n  Space,\r\n  Divider,\r\n  Typography,\r\n  Alert,\r\n  message,\r\n  Steps,\r\n  Row,\r\n  Col,\r\n  Select,\r\n  UserOutlined,\r\n  LockOutlined,\r\n  MailOutlined,\r\n  SafetyOutlined,\r\n  EyeInvisibleOutlined,\r\n  EyeTwoTone,\r\n  UserAddOutlined,\r\n  CheckCircleOutlined,\r\n  ArrowLeftOutlined,\r\n  ArrowRightOutlined,\r\n  BankOutlined,\r\n  PhoneOutlined,\r\n  Title,\r\n  Text,\r\n  Link,\r\n  Step,\r\n  Option,\r\n  FC,\r\n} from '@/imports';\r\n\r\ninterface RegisterFormValues {\r\n  username: string;\r\n  email: string;\r\n  password: string;\r\n  confirmPassword: string;\r\n  companyName: string;\r\n  phone: string;\r\n  businessType: string;\r\n  agreeTerms: boolean;\r\n  captcha: string;\r\n}\r\n\r\nconst RegisterPage: FC = () => {\r\n  const [form] = Form.useForm();\r\n  const [currentStep, setCurrentStep] = useState(0);\r\n  const [loading, setLoading] = useState(false);\r\n  const [registerError, setRegisterError] = useState<string | null>(null);\r\n  const [captchaCode, setCaptchaCode] = useState('');\r\n  const [registrationComplete, setRegistrationComplete] = useState(false);\r\n\r\n  const generateCaptcha = () => {\r\n    const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';\r\n    let result = '';\r\n    for (let i = 0; i < 4; i++) {\r\n      result += chars.charAt(Math.floor(Math.random() * chars.length));\r\n    }\r\n    setCaptchaCode(result);\r\n  };\r\n\r\n  useEffect(() => {\r\n    generateCaptcha();\r\n  }, []);\r\n\r\n  const steps = [\r\n    { title: 'Account', description: 'Basic info' },\r\n    { title: 'Business', description: 'Company details' },\r\n    { title: 'Verify', description: 'Confirmation' },\r\n  ];\r\n\r\n  const nextStep = async () => {\r\n    try {\r\n      if (currentStep === 0) {\r\n        await form.validateFields(['username', 'email', 'password', 'confirmPassword']);\r\n      } else if (currentStep === 1) {\r\n        await form.validateFields(['companyName', 'phone', 'businessType']);\r\n      }\r\n      setCurrentStep(currentStep + 1);\r\n    } catch (error) {\r\n      // Validation failed\r\n    }\r\n  };\r\n\r\n  const prevStep = () => {\r\n    setCurrentStep(currentStep - 1);\r\n  };\r\n\r\n  const handleRegister = async (values: RegisterFormValues) => {\r\n    setLoading(true);\r\n    setRegisterError(null);\r\n\r\n    try {\r\n      await new Promise(resolve => setTimeout(resolve, 2000));\r\n\r\n      if (values.captcha?.toUpperCase() !== captchaCode) {\r\n        setRegisterError('Invalid verification code');\r\n        generateCaptcha();\r\n        setLoading(false);\r\n        return;\r\n      }\r\n\r\n      setRegistrationComplete(true);\r\n      message.success('Registration successful!');\r\n    } catch (error) {\r\n      setRegisterError('Registration failed. Please try again.');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  if (registrationComplete) {\r\n    return (\r\n      <div style={{\r\n        minHeight: '100vh',\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        justifyContent: 'center',\r\n        background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n        padding: 24,\r\n      }}>\r\n        <Card style={{ maxWidth: 500, width: '100%', textAlign: 'center', borderRadius: 16 }}>\r\n          <CheckCircleOutlined style={{ fontSize: 80, color: '#52c41a', marginBottom: 24 }} />\r\n          <Title level={3}>Registration Complete!</Title>\r\n          <Text type=\"secondary\" style={{ display: 'block', marginBottom: 24 }}>\r\n            Your account has been created successfully. Please check your email to verify your account.\r\n          </Text>\r\n          <Button type=\"primary\" size=\"large\" href=\"/auth/login\">\r\n            Go to Login\r\n          </Button>\r\n        </Card>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div style={{\r\n      minHeight: '100vh',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n      padding: 24,\r\n    }}>\r\n      <Card\r\n        style={{\r\n          maxWidth: 600,\r\n          width: '100%',\r\n          borderRadius: 16,\r\n          boxShadow: '0 20px 60px rgba(0,0,0,0.3)',\r\n        }}\r\n        bodyStyle={{ padding: 40 }}\r\n      >\r\n        <div style={{ textAlign: 'center', marginBottom: 32 }}>\r\n          <Title level={3}>Create Account</Title>\r\n          <Text type=\"secondary\">Join Crawlful Hub today</Text>\r\n        </div>\r\n\r\n        <Steps current={currentStep} style={{ marginBottom: 32 }}>\r\n          {steps.map(step => (\r\n            <Step key={step.title} title={step.title} description={step.description} />\r\n          ))}\r\n        </Steps>\r\n\r\n        {registerError && (\r\n          <Alert\r\n            message={registerError}\r\n            type=\"error\"\r\n            showIcon\r\n            style={{ marginBottom: 24 }}\r\n            closable\r\n            onClose={() => setRegisterError(null)}\r\n          />\r\n        )}\r\n\r\n        <Form\r\n          form={form}\r\n          layout=\"vertical\"\r\n          onFinish={handleRegister}\r\n        >\r\n          {currentStep === 0 && (\r\n            <>\r\n              <Form.Item\r\n                name=\"username\"\r\n                rules={[\r\n                  { required: true, message: 'Please enter username' },\r\n                  { min: 3, message: 'Username must be at least 3 characters' },\r\n                  { pattern: /^[a-zA-Z0-9_]+$/, message: 'Only letters, numbers and underscores allowed' },\r\n                ]}\r\n              >\r\n                <Input\r\n                  prefix={<UserOutlined style={{ color: '#bfbfbf' }} />}\r\n                  placeholder=\"Username\"\r\n                  size=\"large\"\r\n                />\r\n              </Form.Item>\r\n\r\n              <Form.Item\r\n                name=\"email\"\r\n                rules={[\r\n                  { required: true, message: 'Please enter email' },\r\n                  { type: 'email', message: 'Please enter valid email' },\r\n                ]}\r\n              >\r\n                <Input\r\n                  prefix={<MailOutlined style={{ color: '#bfbfbf' }} />}\r\n                  placeholder=\"Email\"\r\n                  size=\"large\"\r\n                />\r\n              </Form.Item>\r\n\r\n              <Form.Item\r\n                name=\"password\"\r\n                rules={[\r\n                  { required: true, message: 'Please enter password' },\r\n                  { min: 8, message: 'Password must be at least 8 characters' },\r\n                  { pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)/, message: 'Must contain uppercase, lowercase and number' },\r\n                ]}\r\n              >\r\n                <Input.Password\r\n                  prefix={<LockOutlined style={{ color: '#bfbfbf' }} />}\r\n                  placeholder=\"Password\"\r\n                  size=\"large\"\r\n                  iconRender={visible => (visible ? <EyeTwoTone /> : <EyeInvisibleOutlined />)}\r\n                />\r\n              </Form.Item>\r\n\r\n              <Form.Item\r\n                name=\"confirmPassword\"\r\n                dependencies={['password']}\r\n                rules={[\r\n                  { required: true, message: 'Please confirm password' },\r\n                  ({ getFieldValue }) => ({\r\n                    validator(_, value) {\r\n                      if (!value || getFieldValue('password') === value) {\r\n                        return Promise.resolve();\r\n                      }\r\n                      return Promise.reject(new Error('Passwords do not match'));\r\n                    },\r\n                  }),\r\n                ]}\r\n              >\r\n                <Input.Password\r\n                  prefix={<LockOutlined style={{ color: '#bfbfbf' }} />}\r\n                  placeholder=\"Confirm Password\"\r\n                  size=\"large\"\r\n                  iconRender={visible => (visible ? <EyeTwoTone /> : <EyeInvisibleOutlined />)}\r\n                />\r\n              </Form.Item>\r\n            </>\r\n          )}\r\n\r\n          {currentStep === 1 && (\r\n            <>\r\n              <Form.Item\r\n                name=\"companyName\"\r\n                rules={[{ required: true, message: 'Please enter company name' }]}\r\n              >\r\n                <Input\r\n                  prefix={<BankOutlined style={{ color: '#bfbfbf' }} />}\r\n                  placeholder=\"Company Name\"\r\n                  size=\"large\"\r\n                />\r\n              </Form.Item>\r\n\r\n              <Form.Item\r\n                name=\"phone\"\r\n                rules={[\r\n                  { required: true, message: 'Please enter phone number' },\r\n                  { pattern: /^\\+?[\\d\\s-()]+$/, message: 'Please enter valid phone number' },\r\n                ]}\r\n              >\r\n                <Input\r\n                  prefix={<PhoneOutlined style={{ color: '#bfbfbf' }} />}\r\n                  placeholder=\"Phone Number\"\r\n                  size=\"large\"\r\n                />\r\n              </Form.Item>\r\n\r\n              <Form.Item\r\n                name=\"businessType\"\r\n                rules={[{ required: true, message: 'Please select business type' }]}\r\n              >\r\n                <Select placeholder=\"Business Type\" size=\"large\">\r\n                  <Option value=\"manufacturer\">Manufacturer</Option>\r\n                  <Option value=\"trading\">Trading Company</Option>\r\n                  <Option value=\"wholesaler\">Wholesaler</Option>\r\n                  <Option value=\"retailer\">Retailer</Option>\r\n                  <Option value=\"other\">Other</Option>\r\n                </Select>\r\n              </Form.Item>\r\n            </>\r\n          )}\r\n\r\n          {currentStep === 2 && (\r\n            <>\r\n              <Form.Item\r\n                name=\"captcha\"\r\n                rules={[{ required: true, message: 'Please enter verification code' }]}\r\n              >\r\n                <Row gutter={8} align=\"middle\">\r\n                  <Col flex=\"auto\">\r\n                    <Input\r\n                      prefix={<SafetyOutlined style={{ color: '#bfbfbf' }} />}\r\n                      placeholder=\"Verification Code\"\r\n                      size=\"large\"\r\n                      maxLength={4}\r\n                    />\r\n                  </Col>\r\n                  <Col>\r\n                    <div\r\n                      onClick={generateCaptcha}\r\n                      style={{\r\n                        width: 100,\r\n                        height: 40,\r\n                        background: '#f0f2f5',\r\n                        display: 'flex',\r\n                        alignItems: 'center',\r\n                        justifyContent: 'center',\r\n                        fontFamily: 'monospace',\r\n                        fontSize: 20,\r\n                        letterSpacing: 4,\r\n                        cursor: 'pointer',\r\n                        userSelect: 'none',\r\n                        borderRadius: 4,\r\n                        color: '#1890ff',\r\n                        fontWeight: 'bold',\r\n                      }}\r\n                    >\r\n                      {captchaCode}\r\n                    </div>\r\n                  </Col>\r\n                </Row>\r\n              </Form.Item>\r\n\r\n              <Form.Item\r\n                name=\"agreeTerms\"\r\n                valuePropName=\"checked\"\r\n                rules={[\r\n                  {\r\n                    validator: (_, value) =>\r\n                      value ? Promise.resolve() : Promise.reject(new Error('Please agree to terms')),\r\n                  },\r\n                ]}\r\n              >\r\n                <Checkbox>\r\n                  I agree to the <Link to=\"/terms\">Terms of Service</Link> and{' '}\r\n                  <Link to=\"/privacy\">Privacy Policy</Link>\r\n                </Checkbox>\r\n              </Form.Item>\r\n            </>\r\n          )}\r\n\r\n          <Form.Item>\r\n            <Row justify=\"space-between\">\r\n              <Col>\r\n                {currentStep > 0 && (\r\n                  <Button icon={<ArrowLeftOutlined />} onClick={prevStep}>\r\n                    Previous\r\n                  </Button>\r\n                )}\r\n              </Col>\r\n              <Col>\r\n                {currentStep < 2 ? (\r\n                  <Button type=\"primary\" icon={<ArrowRightOutlined />} onClick={nextStep}>\r\n                    Next\r\n                  </Button>\r\n                ) : (\r\n                  <Button\r\n                    type=\"primary\"\r\n                    htmlType=\"submit\"\r\n                    loading={loading}\r\n                    icon={<UserAddOutlined />}\r\n                  >\r\n                    Create Account\r\n                  </Button>\r\n                )}\r\n              </Col>\r\n            </Row>\r\n          </Form.Item>\r\n        </Form>\r\n\r\n        <Divider />\r\n\r\n        <div style={{ textAlign: 'center' }}>\r\n          <Text type=\"secondary\">\r\n            Already have an account? <Link to=\"/auth/login\">Sign in</Link>\r\n          </Text>\r\n        </div>\r\n      </Card>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default RegisterPage;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Auth/RegisterPage.tsx"
    },
    "72": {
      "path": "/auth/reset-password",
      "file": "@/pages/Auth/ResetPasswordPage.tsx",
      "parentId": "@@/global-layout",
      "id": "72",
      "absPath": "/auth/reset-password",
      "__content": "import {\r\n  useState,\r\n  Card,\r\n  Form,\r\n  Input,\r\n  Button,\r\n  Steps,\r\n  Typography,\r\n  Alert,\r\n  message,\r\n  Result,\r\n  MailOutlined,\r\n  SafetyOutlined,\r\n  LockOutlined,\r\n  EyeInvisibleOutlined,\r\n  EyeTwoTone,\r\n  ArrowLeftOutlined,\r\n  ReloadOutlined,\r\n  Title,\r\n  Text,\r\n  Link,\r\n  Step,\r\n  FC,\r\n} from '@/imports';\r\n\r\ninterface ResetPasswordFormValues {\r\n  email: string;\r\n  verificationCode: string;\r\n  newPassword: string;\r\n  confirmPassword: string;\r\n}\r\n\r\nconst ResetPasswordPage: FC = () => {\r\n  const [form] = Form.useForm();\r\n  const [currentStep, setCurrentStep] = useState(0);\r\n  const [loading, setLoading] = useState(false);\r\n  const [error, setError] = useState<string | null>(null);\r\n  const [emailSent, setEmailSent] = useState(false);\r\n  const [resetComplete, setResetComplete] = useState(false);\r\n\r\n  const steps = [\r\n    { title: 'Email', description: 'Enter your email' },\r\n    { title: 'Verify', description: 'Enter code' },\r\n    { title: 'Reset', description: 'New password' },\r\n  ];\r\n\r\n  const handleSendCode = async (values: { email: string }) => {\r\n    setLoading(true);\r\n    setError(null);\r\n\r\n    try {\r\n      await new Promise(resolve => setTimeout(resolve, 1500));\r\n      setEmailSent(true);\r\n      message.success('Verification code sent to your email');\r\n      setCurrentStep(1);\r\n    } catch (err) {\r\n      setError('Failed to send verification code. Please try again.');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleVerifyCode = async (values: { verificationCode: string }) => {\r\n    setLoading(true);\r\n    setError(null);\r\n\r\n    try {\r\n      await new Promise(resolve => setTimeout(resolve, 1000));\r\n      if (values.verificationCode.length !== 6) {\r\n        setError('Invalid verification code');\r\n        return;\r\n      }\r\n      setCurrentStep(2);\r\n    } catch (err) {\r\n      setError('Verification failed. Please try again.');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleResetPassword = async (values: ResetPasswordFormValues) => {\r\n    setLoading(true);\r\n    setError(null);\r\n\r\n    try {\r\n      await new Promise(resolve => setTimeout(resolve, 1500));\r\n      setResetComplete(true);\r\n      message.success('Password reset successful!');\r\n    } catch (err) {\r\n      setError('Failed to reset password. Please try again.');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  if (resetComplete) {\r\n    return (\r\n      <div style={{\r\n        minHeight: '100vh',\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        justifyContent: 'center',\r\n        background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n        padding: 24,\r\n      }}>\r\n        <Card style={{ maxWidth: 500, width: '100%', borderRadius: 16 }}>\r\n          <Result\r\n            status=\"success\"\r\n            title=\"Password Reset Complete!\"\r\n            subTitle=\"Your password has been successfully reset. You can now log in with your new password.\"\r\n            extra={[\r\n              <Button type=\"primary\" size=\"large\" href=\"/auth/login\" key=\"login\">\r\n                Go to Login\r\n              </Button>,\r\n            ]}\r\n          />\r\n        </Card>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div style={{\r\n      minHeight: '100vh',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n      padding: 24,\r\n    }}>\r\n      <Card\r\n        style={{\r\n          maxWidth: 500,\r\n          width: '100%',\r\n          borderRadius: 16,\r\n          boxShadow: '0 20px 60px rgba(0,0,0,0.3)',\r\n        }}\r\n        bodyStyle={{ padding: 40 }}\r\n      >\r\n        <div style={{ textAlign: 'center', marginBottom: 32 }}>\r\n          <Title level={3}>Reset Password</Title>\r\n          <Text type=\"secondary\">Follow the steps to reset your password</Text>\r\n        </div>\r\n\r\n        <Steps current={currentStep} style={{ marginBottom: 32 }}>\r\n          {steps.map(step => (\r\n            <Step key={step.title} title={step.title} description={step.description} />\r\n          ))}\r\n        </Steps>\r\n\r\n        {error && (\r\n          <Alert\r\n            message={error}\r\n            type=\"error\"\r\n            showIcon\r\n            style={{ marginBottom: 24 }}\r\n            closable\r\n            onClose={() => setError(null)}\r\n          />\r\n        )}\r\n\r\n        {currentStep === 0 && (\r\n          <Form\r\n            form={form}\r\n            layout=\"vertical\"\r\n            onFinish={handleSendCode}\r\n          >\r\n            <Form.Item\r\n              name=\"email\"\r\n              rules={[\r\n                { required: true, message: 'Please enter your email' },\r\n                { type: 'email', message: 'Please enter a valid email' },\r\n              ]}\r\n            >\r\n              <Input\r\n                prefix={<MailOutlined style={{ color: '#bfbfbf' }} />}\r\n                placeholder=\"Enter your email address\"\r\n                size=\"large\"\r\n              />\r\n            </Form.Item>\r\n\r\n            <Form.Item>\r\n              <Button\r\n                type=\"primary\"\r\n                htmlType=\"submit\"\r\n                size=\"large\"\r\n                block\r\n                loading={loading}\r\n              >\r\n                Send Verification Code\r\n              </Button>\r\n            </Form.Item>\r\n\r\n            <div style={{ textAlign: 'center' }}>\r\n              <Link to=\"/auth/login\">\r\n                <ArrowLeftOutlined /> Back to Login\r\n              </Link>\r\n            </div>\r\n          </Form>\r\n        )}\r\n\r\n        {currentStep === 1 && (\r\n          <Form\r\n            form={form}\r\n            layout=\"vertical\"\r\n            onFinish={handleVerifyCode}\r\n          >\r\n            <Alert\r\n              message=\"Check your email\"\r\n              description={`We've sent a 6-digit verification code to ${form.getFieldValue('email')}`}\r\n              type=\"info\"\r\n              showIcon\r\n              style={{ marginBottom: 24 }}\r\n            />\r\n\r\n            <Form.Item\r\n              name=\"verificationCode\"\r\n              rules={[\r\n                { required: true, message: 'Please enter verification code' },\r\n                { len: 6, message: 'Code must be 6 digits' },\r\n              ]}\r\n            >\r\n              <Input\r\n                prefix={<SafetyOutlined style={{ color: '#bfbfbf' }} />}\r\n                placeholder=\"Enter 6-digit code\"\r\n                size=\"large\"\r\n                maxLength={6}\r\n              />\r\n            </Form.Item>\r\n\r\n            <Form.Item>\r\n              <Button\r\n                type=\"primary\"\r\n                htmlType=\"submit\"\r\n                size=\"large\"\r\n                block\r\n                loading={loading}\r\n              >\r\n                Verify Code\r\n              </Button>\r\n            </Form.Item>\r\n\r\n            <div style={{ textAlign: 'center' }}>\r\n              <Button type=\"link\" onClick={() => setCurrentStep(0)} icon={<ReloadOutlined />}>\r\n                Resend Code\r\n              </Button>\r\n            </div>\r\n          </Form>\r\n        )}\r\n\r\n        {currentStep === 2 && (\r\n          <Form\r\n            form={form}\r\n            layout=\"vertical\"\r\n            onFinish={handleResetPassword}\r\n          >\r\n            <Form.Item\r\n              name=\"newPassword\"\r\n              rules={[\r\n                { required: true, message: 'Please enter new password' },\r\n                { min: 8, message: 'Password must be at least 8 characters' },\r\n                { pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)/, message: 'Must contain uppercase, lowercase and number' },\r\n              ]}\r\n            >\r\n              <Input.Password\r\n                prefix={<LockOutlined style={{ color: '#bfbfbf' }} />}\r\n                placeholder=\"New Password\"\r\n                size=\"large\"\r\n                iconRender={visible => (visible ? <EyeTwoTone /> : <EyeInvisibleOutlined />)}\r\n              />\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n              name=\"confirmPassword\"\r\n              dependencies={['newPassword']}\r\n              rules={[\r\n                { required: true, message: 'Please confirm new password' },\r\n                ({ getFieldValue }) => ({\r\n                  validator(_, value) {\r\n                    if (!value || getFieldValue('newPassword') === value) {\r\n                      return Promise.resolve();\r\n                    }\r\n                    return Promise.reject(new Error('Passwords do not match'));\r\n                  },\r\n                }),\r\n              ]}\r\n            >\r\n              <Input.Password\r\n                prefix={<LockOutlined style={{ color: '#bfbfbf' }} />}\r\n                placeholder=\"Confirm New Password\"\r\n                size=\"large\"\r\n                iconRender={visible => (visible ? <EyeTwoTone /> : <EyeInvisibleOutlined />)}\r\n              />\r\n            </Form.Item>\r\n\r\n            <Form.Item>\r\n              <Button\r\n                type=\"primary\"\r\n                htmlType=\"submit\"\r\n                size=\"large\"\r\n                block\r\n                loading={loading}\r\n              >\r\n                Reset Password\r\n              </Button>\r\n            </Form.Item>\r\n          </Form>\r\n        )}\r\n      </Card>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default ResetPasswordPage;\r\n",
      "__isJSFile": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/pages/Auth/ResetPasswordPage.tsx"
    },
    "@@/global-layout": {
      "id": "@@/global-layout",
      "path": "/",
      "file": "D:/trae_projects/makemd/makemd/dashboard/src/layouts/index.tsx",
      "absPath": "/",
      "isLayout": true,
      "__absFile": "D:/trae_projects/makemd/makemd/dashboard/src/layouts/index.tsx"
    }
  },
  "apiRoutes": {},
  "hasSrcDir": true,
  "npmClient": "npm",
  "umi": {
    "version": "4.6.31",
    "name": "Umi",
    "importSource": "umi",
    "cliName": "umi"
  },
  "bundleStatus": {
    "done": true,
    "progresses": [
      {
        "percent": 0.9243589743589743,
        "status": "sealing",
        "details": [
          "asset processing",
          "SourceMapDevToolPlugin",
          "src_components_ai-suggestion_AISuggestionDisplay_tsx-node_modules_umijs_babel-preset-umi_node-97c52d.async.js",
          "restored cached SourceMap"
        ]
      }
    ]
  },
  "mfsuBundleStatus": {
    "done": true
  },
  "react": {
    "version": "18.3.1",
    "path": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\react"
  },
  "react-dom": {
    "version": "18.3.1",
    "path": "D:\\trae_projects\\makemd\\makemd\\dashboard\\node_modules\\react-dom"
  },
  "appJS": {
    "path": "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\app.ts",
    "exports": [
      "render"
    ]
  },
  "locale": "zh-CN",
  "globalCSS": [],
  "globalJS": [],
  "overridesCSS": [],
  "bundler": "webpack",
  "git": {
    "originUrl": "https://github.com/Ansonfishing/makemd.git"
  },
  "framework": "react",
  "typescript": {
    "tsVersion": "5.9.3",
    "tslibVersion": "2.8.1"
  },
  "faviconFiles": [],
  "port": 8003,
  "host": "0.0.0.0",
  "ip": "192.168.110.169",
  "prepare": {
    "buildResult": {
      "errors": [],
      "warnings": [
        {
          "id": "duplicate-object-key",
          "location": {
            "column": 2,
            "file": "src/contexts/LocaleContext.tsx",
            "length": 24,
            "line": 207,
            "lineText": "  'product.publish.images': '图片',",
            "namespace": "",
            "suggestion": ""
          },
          "notes": [
            {
              "location": {
                "column": 2,
                "file": "src/contexts/LocaleContext.tsx",
                "length": 24,
                "line": 174,
                "lineText": "  'product.publish.images': '商品图片',",
                "namespace": "",
                "suggestion": ""
              },
              "text": "The original key \"product.publish.images\" is here:"
            }
          ],
          "pluginName": "",
          "text": "Duplicate key \"product.publish.images\" in object literal"
        }
      ],
      "metafile": {
        "inputs": {
          "src/.umi/core/polyfill.ts": {
            "bytes": 23200,
            "imports": [
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.error.cause.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.aggregate-error.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.aggregate-error.cause.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.at.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.find-last.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.find-last-index.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.push.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.reduce.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.reduce-right.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.to-reversed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.to-sorted.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.to-spliced.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.with.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.map.group-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.object.group-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.object.has-own.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.promise.any.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.promise.with-resolvers.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.reflect.to-string-tag.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.regexp.flags.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.at-alternative.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.is-well-formed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.replace-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.to-well-formed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.at.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.find-last.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.find-last-index.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.set.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.to-reversed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.to-sorted.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.with.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.suppressed-error.constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.from-async.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.filter-out.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.filter-reject.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group-by-to-map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group-to-map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.is-template-object.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.last-index.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.last-item.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.unique-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array-buffer.detached.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array-buffer.transfer.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-disposable-stack.constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.as-indexed-pairs.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.async-dispose.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.drop.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.every.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.filter.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.find.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.flat-map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.for-each.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.indexed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.reduce.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.some.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.take.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.to-array.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.bigint.range.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.composite-key.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.composite-symbol.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.get-float16.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.get-uint8-clamped.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.set-float16.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.set-uint8-clamped.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.disposable-stack.constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.demethodize.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.is-callable.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.is-constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.un-this.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.as-indexed-pairs.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.dispose.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.drop.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.every.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.filter.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.find.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.flat-map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.for-each.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.indexed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.range.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.reduce.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.some.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.take.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.to-array.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.to-async.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.json.is-raw-json.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.json.parse.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.json.raw-json.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.delete-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.emplace.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.every.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.filter.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.find.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.find-key.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.includes.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.key-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.key-of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.map-keys.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.map-values.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.merge.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.reduce.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.some.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.update.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.update-or-insert.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.upsert.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.clamp.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.deg-per-rad.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.degrees.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.fscale.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.f16round.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.iaddh.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.imulh.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.isubh.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.rad-per-deg.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.radians.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.scale.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.seeded-prng.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.signbit.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.umulh.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.number.from-string.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.number.range.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.object.iterate-entries.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.object.iterate-keys.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.object.iterate-values.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.observable.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.promise.try.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.define-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.delete-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-own-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.has-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.has-own-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.regexp.escape.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.add-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.delete-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.difference.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.difference.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.every.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.filter.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.find.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.intersection.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.intersection.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-disjoint-from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-subset-of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-superset-of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.join.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.reduce.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.some.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.symmetric-difference.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.union.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.union.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.at.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.cooked.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.code-points.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.dedent.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.async-dispose.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.dispose.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-registered-symbol.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-registered.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-well-known-symbol.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-well-known.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.matcher.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.metadata-key.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.observable.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.pattern-match.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.replace-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.from-async.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.filter-out.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.filter-reject.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.group-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.to-spliced.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.unique-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.from-base64.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.from-hex.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.to-base64.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.to-hex.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.delete-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.emplace.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.upsert.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.add-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.delete-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.dom-exception.stack.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.immediate.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.self.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.structured-clone.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url.can-parse.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url-search-params.delete.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url-search-params.has.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url-search-params.size.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/regenerator-runtime/runtime.js",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/imports/react.ts": {
            "bytes": 714,
            "imports": [
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react-router-dom",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react-router-dom",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/imports/antd.ts": {
            "bytes": 2067,
            "imports": [
              {
                "path": "antd",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/imports/icons.ts": {
            "bytes": 2868,
            "imports": [
              {
                "path": "@ant-design/icons",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/imports/charts.ts": {
            "bytes": 601,
            "imports": [
              {
                "path": "recharts",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "recharts",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "@ant-design/charts",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/imports/utils.ts": {
            "bytes": 238,
            "imports": [
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "lodash/debounce",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "lodash/throttle",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/baseDataSource.ts": {
            "bytes": 1302,
            "imports": [],
            "format": "esm"
          },
          "src/services/productDataSource.ts": {
            "bytes": 17297,
            "imports": [
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/services/baseDataSource.ts",
                "kind": "import-statement",
                "original": "./baseDataSource"
              }
            ],
            "format": "esm"
          },
          "src/services/orderDataSource.ts": {
            "bytes": 16865,
            "imports": [
              {
                "path": "../types/order",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/services/baseDataSource.ts",
                "kind": "import-statement",
                "original": "./baseDataSource"
              }
            ],
            "format": "esm"
          },
          "src/services/http.ts": {
            "bytes": 1689,
            "imports": [
              {
                "path": "axios",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/marketingDataSource.ts": {
            "bytes": 5105,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/dashboardDataSource.ts": {
            "bytes": 4418,
            "imports": [
              {
                "path": "src/services/baseDataSource.ts",
                "kind": "import-statement",
                "original": "./baseDataSource"
              }
            ],
            "format": "esm"
          },
          "src/types/inventory.ts": {
            "bytes": 912,
            "imports": [],
            "format": "esm"
          },
          "src/services/inventoryDataSource.ts": {
            "bytes": 5858,
            "imports": [
              {
                "path": "src/types/inventory.ts",
                "kind": "import-statement",
                "original": "../types/inventory"
              }
            ],
            "format": "esm"
          },
          "src/services/financeDataSource.ts": {
            "bytes": 6232,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "src/services/baseDataSource.ts",
                "kind": "import-statement",
                "original": "./baseDataSource"
              }
            ],
            "format": "esm"
          },
          "src/services/suppliersDataSource.ts": {
            "bytes": 4213,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/returnDataSource.ts": {
            "bytes": 7577,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/settingsDataSource.ts": {
            "bytes": 14706,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/userDataSource.ts": {
            "bytes": 7101,
            "imports": [
              {
                "path": "../types/user",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/abTestDataSource.ts": {
            "bytes": 7288,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/adOptimizationDataSource.ts": {
            "bytes": 7909,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/afterSalesDataSource.ts": {
            "bytes": 11330,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "@/types/datasource",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/aiActionTaskDataSource.ts": {
            "bytes": 10204,
            "imports": [],
            "format": "esm"
          },
          "src/services/aiSuggestionDataSource.ts": {
            "bytes": 8994,
            "imports": [],
            "format": "esm"
          },
          "src/services/analyticsDataSource.ts": {
            "bytes": 15648,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "@/types/datasource",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/arbitrageDataSource.ts": {
            "bytes": 16426,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/autoExecutionDataSource.ts": {
            "bytes": 16463,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/b2bTradeDataSource.ts": {
            "bytes": 15586,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "@/types/datasource",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/batchOperationDataSource.ts": {
            "bytes": 10318,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/blacklistDataSource.ts": {
            "bytes": 9779,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "../server/src/shared/types/domain/Certificate.ts": {
            "bytes": 831,
            "imports": [],
            "format": "esm"
          },
          "src/types/certificate.ts": {
            "bytes": 69,
            "imports": [
              {
                "path": "../server/src/shared/types/domain/Certificate.ts",
                "kind": "import-statement",
                "original": "../../../server/src/shared/types/domain/Certificate"
              }
            ],
            "format": "esm"
          },
          "src/services/dataSourceFactory.ts": {
            "bytes": 4119,
            "imports": [
              {
                "path": "@/types/datasource",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/certificateDataSource.ts": {
            "bytes": 4781,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "src/types/certificate.ts",
                "kind": "import-statement",
                "original": "@/types/certificate"
              },
              {
                "path": "@/types/datasource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/services/dataSourceFactory.ts",
                "kind": "import-statement",
                "original": "./dataSourceFactory"
              },
              {
                "path": "src/services/dataSourceFactory.ts",
                "kind": "import-statement",
                "original": "./dataSourceFactory"
              }
            ],
            "format": "esm"
          },
          "src/services/lightweightClientService.ts": {
            "bytes": 5358,
            "imports": [],
            "format": "esm"
          },
          "src/services/clientDataSource.ts": {
            "bytes": 6638,
            "imports": [
              {
                "path": "src/services/lightweightClientService.ts",
                "kind": "import-statement",
                "original": "./lightweightClientService"
              }
            ],
            "format": "esm"
          },
          "src/services/crossBorderIntegrationDataSource.ts": {
            "bytes": 6403,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/dynamicPricingDataSource.ts": {
            "bytes": 18856,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/executionResultDataSource.ts": {
            "bytes": 8821,
            "imports": [],
            "format": "esm"
          },
          "src/services/humanApprovalDataSource.ts": {
            "bytes": 8832,
            "imports": [],
            "format": "esm"
          },
          "src/services/independentSiteDataSource.ts": {
            "bytes": 10122,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "@/types/datasource",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/leaderboardDataSource.ts": {
            "bytes": 3735,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "src/services/dataSourceFactory.ts",
                "kind": "import-statement",
                "original": "./dataSourceFactory"
              },
              {
                "path": "src/services/dataSourceFactory.ts",
                "kind": "import-statement",
                "original": "./dataSourceFactory"
              }
            ],
            "format": "esm"
          },
          "src/services/logisticsDataSource.ts": {
            "bytes": 8919,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/materialProcessingDataSource.ts": {
            "bytes": 7527,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/operationAgentDataSource.ts": {
            "bytes": 10421,
            "imports": [],
            "format": "esm"
          },
          "src/services/platformAuthDataSource.ts": {
            "bytes": 5940,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "@/types/platform",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/procurementDataSource.ts": {
            "bytes": 21505,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "@/types/procurement",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/productManagementDataSource.ts": {
            "bytes": 10749,
            "imports": [
              {
                "path": "../types/productManagement",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/productSelectionDataSource.ts": {
            "bytes": 15801,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "@/mock/data/productSelection.mock",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/reportsDataSource.ts": {
            "bytes": 4388,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/saasTenantDataSource.ts": {
            "bytes": 6442,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "./saasTenantTypes",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "../server/src/config/serviceConfig.ts": {
            "bytes": 25523,
            "imports": [],
            "format": "esm"
          },
          "src/services/serviceManagerDataSource.ts": {
            "bytes": 6608,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "../server/src/config/serviceConfig.ts",
                "kind": "import-statement",
                "original": "../../../server/src/config/serviceConfig"
              }
            ],
            "format": "esm"
          },
          "src/services/shopReportDataSource.ts": {
            "bytes": 12430,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/storeCreationDataSource.ts": {
            "bytes": 10631,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/taskCenterDataSource.ts": {
            "bytes": 4176,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/unifiedFulfillmentDataSource.ts": {
            "bytes": 4990,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/userAssetDataSource.ts": {
            "bytes": 9707,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/warehouseDataSource.ts": {
            "bytes": 22205,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              },
              {
                "path": "@/types/warehouse",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/imports/datasources.ts": {
            "bytes": 3456,
            "imports": [
              {
                "path": "src/services/productDataSource.ts",
                "kind": "import-statement",
                "original": "../services/productDataSource"
              },
              {
                "path": "src/services/orderDataSource.ts",
                "kind": "import-statement",
                "original": "../services/orderDataSource"
              },
              {
                "path": "src/services/marketingDataSource.ts",
                "kind": "import-statement",
                "original": "../services/marketingDataSource"
              },
              {
                "path": "src/services/dashboardDataSource.ts",
                "kind": "import-statement",
                "original": "../services/dashboardDataSource"
              },
              {
                "path": "src/services/inventoryDataSource.ts",
                "kind": "import-statement",
                "original": "../services/inventoryDataSource"
              },
              {
                "path": "src/services/financeDataSource.ts",
                "kind": "import-statement",
                "original": "../services/financeDataSource"
              },
              {
                "path": "src/services/suppliersDataSource.ts",
                "kind": "import-statement",
                "original": "../services/suppliersDataSource"
              },
              {
                "path": "src/services/returnDataSource.ts",
                "kind": "import-statement",
                "original": "../services/returnDataSource"
              },
              {
                "path": "src/services/settingsDataSource.ts",
                "kind": "import-statement",
                "original": "../services/settingsDataSource"
              },
              {
                "path": "src/services/userDataSource.ts",
                "kind": "import-statement",
                "original": "../services/userDataSource"
              },
              {
                "path": "src/services/abTestDataSource.ts",
                "kind": "import-statement",
                "original": "../services/abTestDataSource"
              },
              {
                "path": "src/services/adOptimizationDataSource.ts",
                "kind": "import-statement",
                "original": "../services/adOptimizationDataSource"
              },
              {
                "path": "src/services/afterSalesDataSource.ts",
                "kind": "import-statement",
                "original": "../services/afterSalesDataSource"
              },
              {
                "path": "src/services/aiActionTaskDataSource.ts",
                "kind": "import-statement",
                "original": "../services/aiActionTaskDataSource"
              },
              {
                "path": "src/services/aiSuggestionDataSource.ts",
                "kind": "import-statement",
                "original": "../services/aiSuggestionDataSource"
              },
              {
                "path": "src/services/analyticsDataSource.ts",
                "kind": "import-statement",
                "original": "../services/analyticsDataSource"
              },
              {
                "path": "src/services/arbitrageDataSource.ts",
                "kind": "import-statement",
                "original": "../services/arbitrageDataSource"
              },
              {
                "path": "src/services/autoExecutionDataSource.ts",
                "kind": "import-statement",
                "original": "../services/autoExecutionDataSource"
              },
              {
                "path": "src/services/b2bTradeDataSource.ts",
                "kind": "import-statement",
                "original": "../services/b2bTradeDataSource"
              },
              {
                "path": "src/services/batchOperationDataSource.ts",
                "kind": "import-statement",
                "original": "../services/batchOperationDataSource"
              },
              {
                "path": "src/services/blacklistDataSource.ts",
                "kind": "import-statement",
                "original": "../services/blacklistDataSource"
              },
              {
                "path": "src/services/certificateDataSource.ts",
                "kind": "import-statement",
                "original": "../services/certificateDataSource"
              },
              {
                "path": "src/services/clientDataSource.ts",
                "kind": "import-statement",
                "original": "../services/clientDataSource"
              },
              {
                "path": "src/services/crossBorderIntegrationDataSource.ts",
                "kind": "import-statement",
                "original": "../services/crossBorderIntegrationDataSource"
              },
              {
                "path": "src/services/dynamicPricingDataSource.ts",
                "kind": "import-statement",
                "original": "../services/dynamicPricingDataSource"
              },
              {
                "path": "src/services/executionResultDataSource.ts",
                "kind": "import-statement",
                "original": "../services/executionResultDataSource"
              },
              {
                "path": "src/services/humanApprovalDataSource.ts",
                "kind": "import-statement",
                "original": "../services/humanApprovalDataSource"
              },
              {
                "path": "src/services/independentSiteDataSource.ts",
                "kind": "import-statement",
                "original": "../services/independentSiteDataSource"
              },
              {
                "path": "src/services/leaderboardDataSource.ts",
                "kind": "import-statement",
                "original": "../services/leaderboardDataSource"
              },
              {
                "path": "src/services/lightweightClientService.ts",
                "kind": "import-statement",
                "original": "../services/lightweightClientService"
              },
              {
                "path": "src/services/logisticsDataSource.ts",
                "kind": "import-statement",
                "original": "../services/logisticsDataSource"
              },
              {
                "path": "src/services/materialProcessingDataSource.ts",
                "kind": "import-statement",
                "original": "../services/materialProcessingDataSource"
              },
              {
                "path": "src/services/operationAgentDataSource.ts",
                "kind": "import-statement",
                "original": "../services/operationAgentDataSource"
              },
              {
                "path": "src/services/platformAuthDataSource.ts",
                "kind": "import-statement",
                "original": "../services/platformAuthDataSource"
              },
              {
                "path": "src/services/procurementDataSource.ts",
                "kind": "import-statement",
                "original": "../services/procurementDataSource"
              },
              {
                "path": "src/services/productManagementDataSource.ts",
                "kind": "import-statement",
                "original": "../services/productManagementDataSource"
              },
              {
                "path": "src/services/productSelectionDataSource.ts",
                "kind": "import-statement",
                "original": "../services/productSelectionDataSource"
              },
              {
                "path": "src/services/reportsDataSource.ts",
                "kind": "import-statement",
                "original": "../services/reportsDataSource"
              },
              {
                "path": "src/services/saasTenantDataSource.ts",
                "kind": "import-statement",
                "original": "../services/saasTenantDataSource"
              },
              {
                "path": "src/services/serviceManagerDataSource.ts",
                "kind": "import-statement",
                "original": "../services/serviceManagerDataSource"
              },
              {
                "path": "src/services/shopReportDataSource.ts",
                "kind": "import-statement",
                "original": "../services/shopReportDataSource"
              },
              {
                "path": "src/services/storeCreationDataSource.ts",
                "kind": "import-statement",
                "original": "../services/storeCreationDataSource"
              },
              {
                "path": "src/services/taskCenterDataSource.ts",
                "kind": "import-statement",
                "original": "../services/taskCenterDataSource"
              },
              {
                "path": "src/services/unifiedFulfillmentDataSource.ts",
                "kind": "import-statement",
                "original": "../services/unifiedFulfillmentDataSource"
              },
              {
                "path": "src/services/userAssetDataSource.ts",
                "kind": "import-statement",
                "original": "../services/userAssetDataSource"
              },
              {
                "path": "src/services/warehouseDataSource.ts",
                "kind": "import-statement",
                "original": "../services/warehouseDataSource"
              }
            ],
            "format": "esm"
          },
          "src/imports/constants.ts": {
            "bytes": 2826,
            "imports": [],
            "format": "esm"
          },
          "src/imports/types.ts": {
            "bytes": 279,
            "imports": [],
            "format": "esm"
          },
          "src/imports/index.ts": {
            "bytes": 231,
            "imports": [
              {
                "path": "src/imports/react.ts",
                "kind": "import-statement",
                "original": "./react"
              },
              {
                "path": "src/imports/antd.ts",
                "kind": "import-statement",
                "original": "./antd"
              },
              {
                "path": "src/imports/icons.ts",
                "kind": "import-statement",
                "original": "./icons"
              },
              {
                "path": "src/imports/charts.ts",
                "kind": "import-statement",
                "original": "./charts"
              },
              {
                "path": "src/imports/utils.ts",
                "kind": "import-statement",
                "original": "./utils"
              },
              {
                "path": "src/imports/datasources.ts",
                "kind": "import-statement",
                "original": "./datasources"
              },
              {
                "path": "src/imports/constants.ts",
                "kind": "import-statement",
                "original": "./constants"
              },
              {
                "path": "src/imports/types.ts",
                "kind": "import-statement",
                "original": "./types"
              }
            ],
            "format": "esm"
          },
          "src/contexts/LocaleContext.tsx": {
            "bytes": 18705,
            "imports": [
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Auth/LoginPage.tsx": {
            "bytes": 9478,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/contexts/LocaleContext.tsx",
                "kind": "import-statement",
                "original": "@/contexts/LocaleContext"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/components/Navbar.tsx": {
            "bytes": 5491,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Homepage.tsx": {
            "bytes": 46434,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/components/Navbar.tsx",
                "kind": "import-statement",
                "original": "@/components/Navbar"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/TestRoute.tsx": {
            "bytes": 215,
            "imports": [
              {
                "path": "@/imports",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/.umi/core/defineApp.ts": {
            "bytes": 625,
            "imports": [],
            "format": "esm"
          },
          "src/.umi/core/history.ts": {
            "bytes": 1720,
            "imports": [
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/.umi/core/terminal.ts": {
            "bytes": 1417,
            "imports": [],
            "format": "esm"
          },
          "src/mock/msw.ts": {
            "bytes": 5812,
            "imports": [
              {
                "path": "msw",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "msw/browser",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "./data/certificate.mock",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/mock/browser.ts": {
            "bytes": 218,
            "imports": [
              {
                "path": "src/mock/msw.ts",
                "kind": "import-statement",
                "original": "./msw"
              }
            ],
            "format": "esm"
          },
          "src/app.ts": {
            "bytes": 790,
            "imports": [
              {
                "path": "src/mock/browser.ts",
                "kind": "dynamic-import",
                "original": "./mock/browser"
              }
            ],
            "format": "esm"
          },
          "src/.umi/core/helmetContext.ts": {
            "bytes": 119,
            "imports": [],
            "format": "esm"
          },
          "src/.umi/core/helmet.ts": {
            "bytes": 391,
            "imports": [
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/.umi/core/helmetContext.ts",
                "kind": "import-statement",
                "original": "./helmetContext"
              }
            ],
            "format": "esm"
          },
          "src/.umi/core/plugin.ts": {
            "bytes": 1261,
            "imports": [
              {
                "path": "src/app.ts",
                "kind": "import-statement",
                "original": "D:/trae_projects/makemd/makemd/dashboard/src/app.ts"
              },
              {
                "path": "src/.umi/core/helmet.ts",
                "kind": "import-statement",
                "original": "@@/core/helmet.ts"
              },
              {
                "path": "src/.umi/exports.ts",
                "kind": "import-statement",
                "original": "umi"
              }
            ],
            "format": "esm"
          },
          "src/.umi/testBrowser.tsx": {
            "bytes": 2472,
            "imports": [
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/.umi/exports.ts",
                "kind": "import-statement",
                "original": "umi"
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/.umi/core/history.ts",
                "kind": "import-statement",
                "original": "./core/history"
              },
              {
                "path": "src/.umi/core/plugin.ts",
                "kind": "import-statement",
                "original": "./core/plugin"
              },
              {
                "path": "src/.umi/core/route.tsx",
                "kind": "import-statement",
                "original": "./core/route"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/.umi/exports.ts": {
            "bytes": 1337,
            "imports": [
              {
                "path": "src/.umi/core/defineApp.ts",
                "kind": "import-statement",
                "original": "./core/defineApp"
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/umi/client/client/plugin.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/.umi/core/history.ts",
                "kind": "import-statement",
                "original": "./core/history"
              },
              {
                "path": "src/.umi/core/terminal.ts",
                "kind": "import-statement",
                "original": "./core/terminal"
              },
              {
                "path": "src/.umi/testBrowser.tsx",
                "kind": "import-statement",
                "original": "./testBrowser"
              }
            ],
            "format": "esm"
          },
          "src/.umi/core/EmptyRoute.tsx": {
            "bytes": 285,
            "imports": [
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/.umi/exports.ts",
                "kind": "import-statement",
                "original": "umi"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/DashboardPage.tsx": {
            "bytes": 9772,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/contexts/LocaleContext.tsx",
                "kind": "import-statement",
                "original": "../contexts/LocaleContext"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/AIActionTaskManager.tsx": {
            "bytes": 25928,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/components/ai-suggestion/AISuggestionDisplay.tsx": {
            "bytes": 9121,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/AISuggestionPage.tsx": {
            "bytes": 7470,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/components/ai-suggestion/AISuggestionDisplay.tsx",
                "kind": "import-statement",
                "original": "../components/ai-suggestion/AISuggestionDisplay"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/components/human-approval/HumanApprovalForm.tsx": {
            "bytes": 9663,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/HumanApprovalPage.tsx": {
            "bytes": 12464,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/components/human-approval/HumanApprovalForm.tsx",
                "kind": "import-statement",
                "original": "../components/human-approval/HumanApprovalForm"
              },
              {
                "path": "src/components/ai-suggestion/AISuggestionDisplay.tsx",
                "kind": "import-statement",
                "original": "../components/ai-suggestion/AISuggestionDisplay"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/ClientManagement.tsx": {
            "bytes": 23055,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/ExecutionResults.tsx": {
            "bytes": 14648,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/AIDecisionLog/index.tsx": {
            "bytes": 30259,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/StrategyMarketplace/index.tsx": {
            "bytes": 19718,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/AutoProductSelection/index.tsx": {
            "bytes": 38678,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/services/productSelectionDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/productSelectionDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/AutoExecution/components/ThresholdConfigForm.tsx": {
            "bytes": 9791,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/autoExecutionDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/autoExecutionDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/AutoExecution/components/EvolutionStage.tsx": {
            "bytes": 8411,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/autoExecutionDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/autoExecutionDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/AutoExecution/index.tsx": {
            "bytes": 14327,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/autoExecutionDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/autoExecutionDataSource"
              },
              {
                "path": "src/pages/AutoExecution/components/ThresholdConfigForm.tsx",
                "kind": "import-statement",
                "original": "./components/ThresholdConfigForm"
              },
              {
                "path": "src/pages/AutoExecution/components/EvolutionStage.tsx",
                "kind": "import-statement",
                "original": "./components/EvolutionStage"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/cloud-service.ts": {
            "bytes": 9363,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/services/cloud-control-layer.ts": {
            "bytes": 3931,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/pages/OperationAgentEnhanced.tsx": {
            "bytes": 102301,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/lightweightClientService.ts",
                "kind": "import-statement",
                "original": "../services/lightweightClientService"
              },
              {
                "path": "src/services/cloud-service.ts",
                "kind": "import-statement",
                "original": "../services/cloud-service"
              },
              {
                "path": "src/services/cloud-control-layer.ts",
                "kind": "import-statement",
                "original": "../services/cloud-control-layer"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/AutoPilot/index.tsx": {
            "bytes": 23204,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/TaskCenter/index.tsx": {
            "bytes": 30518,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/taskCenterDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Product/CrossPlatformManage.tsx": {
            "bytes": 30157,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Product/index.tsx": {
            "bytes": 19254,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/pages/Product/CrossPlatformManage.tsx",
                "kind": "import-statement",
                "original": "./CrossPlatformManage"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Product/ProductPublishForm.tsx": {
            "bytes": 26957,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/materialProcessingDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/materialProcessingDataSource"
              },
              {
                "path": "src/contexts/LocaleContext.tsx",
                "kind": "import-statement",
                "original": "@/contexts/LocaleContext"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Product/AIPricing/index.tsx": {
            "bytes": 7999,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/productDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Product/ProfitMonitor/index.tsx": {
            "bytes": 9927,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/productDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Inventory/index.tsx": {
            "bytes": 4777,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/types/inventory.ts",
                "kind": "import-statement",
                "original": "@/types/inventory"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Inventory/Warehouses.tsx": {
            "bytes": 6364,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/inventoryDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/inventoryDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Orders/index.tsx": {
            "bytes": 10436,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Orders/ExceptionOrder.tsx": {
            "bytes": 17661,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/orderDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/AfterSales/index.tsx": {
            "bytes": 694,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/AfterSales/RefundProcess.tsx": {
            "bytes": 17335,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/afterSalesDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Logistics/index.tsx": {
            "bytes": 692,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Logistics/FreightCalc.tsx": {
            "bytes": 16669,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/logisticsDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Finance/index.tsx": {
            "bytes": 14665,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/services/financeDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/financeDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Finance/Transactions.tsx": {
            "bytes": 16042,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/services/financeDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/financeDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Finance/Reconciliation.tsx": {
            "bytes": 5336,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/financeDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/financeDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/UserAsset/UserAssets.tsx": {
            "bytes": 15888,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "@/services/userAssetDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Ad/AdPlanPage.tsx": {
            "bytes": 24360,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "@/services/marketingDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Ad/AdDelivery.tsx": {
            "bytes": 20562,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "@/services/marketingDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Ad/index.tsx": {
            "bytes": 21163,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/pages/Ad/AdPlanPage.tsx",
                "kind": "import-statement",
                "original": "./AdPlanPage"
              },
              {
                "path": "src/pages/Ad/AdDelivery.tsx",
                "kind": "import-statement",
                "original": "./AdDelivery"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Marketing/Competitors.tsx": {
            "bytes": 10044,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "recharts",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "@/services/marketingDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/DynamicPricing/index.tsx": {
            "bytes": 41535,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/ABTest/ABTestConfig.tsx": {
            "bytes": 18843,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/abTestDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Analytics/index.tsx": {
            "bytes": 28929,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/analyticsDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/analyticsDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Reports/index.tsx": {
            "bytes": 25029,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/components/HierarchySelector/index.tsx": {
            "bytes": 14539,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/MultiShopReport/index.tsx": {
            "bytes": 33330,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@ant-design/charts",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/components/HierarchySelector/index.tsx",
                "kind": "import-statement",
                "original": "../../components/HierarchySelector"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Leaderboard/index.tsx": {
            "bytes": 10769,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/leaderboardDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Merchant/index.tsx": {
            "bytes": 669,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/B2B/index.tsx": {
            "bytes": 814,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              }
            ],
            "format": "esm"
          },
          "src/pages/B2B/BatchOrder.tsx": {
            "bytes": 212,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              }
            ],
            "format": "esm"
          },
          "src/pages/B2B/EnterpriseQuote.tsx": {
            "bytes": 222,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              }
            ],
            "format": "esm"
          },
          "src/pages/B2B/ContractManage.tsx": {
            "bytes": 220,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              }
            ],
            "format": "esm"
          },
          "src/pages/Procurement/index.tsx": {
            "bytes": 37493,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/services/procurementDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/procurementDataSource"
              },
              {
                "path": "@/types/procurement",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Suppliers/index.tsx": {
            "bytes": 11652,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/suppliersDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/suppliersDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Warehouse/index.tsx": {
            "bytes": 26404,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/warehouseDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/warehouseDataSource"
              },
              {
                "path": "@/types/warehouse",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/IndependentSite/IndependentSiteList.tsx": {
            "bytes": 5487,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/independentSiteDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/independentSiteDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/IndependentSite/index.tsx": {
            "bytes": 196,
            "imports": [
              {
                "path": "@/imports",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/pages/IndependentSite/IndependentSiteList.tsx",
                "kind": "import-statement",
                "original": "./IndependentSiteList"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/IndependentSite/IndependentSiteCreate.tsx": {
            "bytes": 4421,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/independentSiteDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/independentSiteDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/IndependentSite/SiteTemplates.tsx": {
            "bytes": 10529,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/IndependentSite/IndependentSiteAnalytics.tsx": {
            "bytes": 12139,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/IndependentSite/IndependentSiteOrder.tsx": {
            "bytes": 7925,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/independentSiteDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/IndependentSite/IndependentSiteProduct.tsx": {
            "bytes": 16204,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/independentSiteDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/IndependentSite/DomainManagement.tsx": {
            "bytes": 12125,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Blacklist/index.tsx": {
            "bytes": 698,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Compliance/index.tsx": {
            "bytes": 34149,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/auditDataSource.ts": {
            "bytes": 2197,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/pages/Audit/index.tsx": {
            "bytes": 4402,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/auditDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/auditDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/operationLogDataSource.ts": {
            "bytes": 8022,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/pages/OperationLogs/index.tsx": {
            "bytes": 26754,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/operationLogDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/operationLogDataSource"
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/governanceDataSource.ts": {
            "bytes": 2322,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/pages/Governance/index.tsx": {
            "bytes": 4452,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/governanceDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/governanceDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/services/sovereigntyDataSource.ts": {
            "bytes": 2347,
            "imports": [
              {
                "path": "src/services/http.ts",
                "kind": "import-statement",
                "original": "./http"
              }
            ],
            "format": "esm"
          },
          "src/pages/Sovereignty/index.tsx": {
            "bytes": 4462,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/sovereigntyDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/sovereigntyDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Compliance/CertificateManage.tsx": {
            "bytes": 16385,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/services/certificateDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/certificateDataSource"
              },
              {
                "path": "@/types/certificate",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Settings/index.tsx": {
            "bytes": 6094,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Settings/PlatformAuth.tsx": {
            "bytes": 14080,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/platformAuthDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/platformAuthDataSource"
              },
              {
                "path": "@/types/platform",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Settings/ServiceManager.tsx": {
            "bytes": 10337,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/services/serviceManagerDataSource.ts",
                "kind": "import-statement",
                "original": "@/services/serviceManagerDataSource"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/User/index.tsx": {
            "bytes": 7383,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/settingsDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Role/index.tsx": {
            "bytes": 8924,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "@/services/settingsDataSource",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Auth/RegisterPage.tsx": {
            "bytes": 12734,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/pages/Auth/ResetPasswordPage.tsx": {
            "bytes": 9228,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/contexts/UserContext.tsx": {
            "bytes": 6777,
            "imports": [
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/layouts/index.tsx": {
            "bytes": 23593,
            "imports": [
              {
                "path": "src/imports/index.ts",
                "kind": "import-statement",
                "original": "@/imports"
              },
              {
                "path": "src/contexts/UserContext.tsx",
                "kind": "import-statement",
                "original": "@/contexts/UserContext"
              },
              {
                "path": "src/contexts/LocaleContext.tsx",
                "kind": "import-statement",
                "original": "@/contexts/LocaleContext"
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              }
            ],
            "format": "esm"
          },
          "src/.umi/core/route.tsx": {
            "bytes": 13575,
            "imports": [
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/pages/Auth/LoginPage.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Auth/LoginPage.tsx"
              },
              {
                "path": "src/pages/Homepage.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Homepage.tsx"
              },
              {
                "path": "src/pages/TestRoute.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/TestRoute.tsx"
              },
              {
                "path": "src/.umi/core/EmptyRoute.tsx",
                "kind": "dynamic-import",
                "original": "./EmptyRoute"
              },
              {
                "path": "src/pages/DashboardPage.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/DashboardPage.tsx"
              },
              {
                "path": "src/pages/AIActionTaskManager.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/AIActionTaskManager.tsx"
              },
              {
                "path": "src/pages/AISuggestionPage.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/AISuggestionPage.tsx"
              },
              {
                "path": "src/pages/HumanApprovalPage.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/HumanApprovalPage.tsx"
              },
              {
                "path": "src/pages/ClientManagement.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/ClientManagement.tsx"
              },
              {
                "path": "src/pages/ExecutionResults.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/ExecutionResults.tsx"
              },
              {
                "path": "src/pages/AIDecisionLog/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/AIDecisionLog/index.tsx"
              },
              {
                "path": "src/pages/StrategyMarketplace/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/StrategyMarketplace/index.tsx"
              },
              {
                "path": "src/pages/AutoProductSelection/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/AutoProductSelection/index.tsx"
              },
              {
                "path": "src/pages/AutoExecution/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/AutoExecution/index.tsx"
              },
              {
                "path": "src/pages/OperationAgentEnhanced.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/OperationAgentEnhanced.tsx"
              },
              {
                "path": "src/pages/OperationAgentEnhanced.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/OperationAgentEnhanced.tsx"
              },
              {
                "path": "src/pages/AutoPilot/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/AutoPilot/index.tsx"
              },
              {
                "path": "src/pages/TaskCenter/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/TaskCenter/index.tsx"
              },
              {
                "path": "src/pages/Product/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Product/index.tsx"
              },
              {
                "path": "src/pages/Product/ProductPublishForm.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Product/ProductPublishForm.tsx"
              },
              {
                "path": "src/pages/Product/AIPricing/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Product/AIPricing/index.tsx"
              },
              {
                "path": "src/pages/Product/ProfitMonitor/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Product/ProfitMonitor/index.tsx"
              },
              {
                "path": "src/pages/Inventory/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Inventory/index.tsx"
              },
              {
                "path": "src/pages/Inventory/Warehouses.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Inventory/Warehouses.tsx"
              },
              {
                "path": "src/pages/Orders/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Orders/index.tsx"
              },
              {
                "path": "src/pages/Orders/ExceptionOrder.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Orders/ExceptionOrder.tsx"
              },
              {
                "path": "src/pages/AfterSales/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/AfterSales/index.tsx"
              },
              {
                "path": "src/pages/AfterSales/RefundProcess.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/AfterSales/RefundProcess.tsx"
              },
              {
                "path": "src/pages/Logistics/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Logistics/index.tsx"
              },
              {
                "path": "src/pages/Logistics/FreightCalc.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Logistics/FreightCalc.tsx"
              },
              {
                "path": "src/pages/Finance/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Finance/index.tsx"
              },
              {
                "path": "src/pages/Finance/Transactions.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Finance/Transactions.tsx"
              },
              {
                "path": "src/pages/Finance/Reconciliation.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Finance/Reconciliation.tsx"
              },
              {
                "path": "src/pages/UserAsset/UserAssets.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/UserAsset/UserAssets.tsx"
              },
              {
                "path": "src/pages/Ad/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Ad/index.tsx"
              },
              {
                "path": "src/pages/Marketing/Competitors.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Marketing/Competitors.tsx"
              },
              {
                "path": "src/pages/DynamicPricing/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/DynamicPricing/index.tsx"
              },
              {
                "path": "src/pages/ABTest/ABTestConfig.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/ABTest/ABTestConfig.tsx"
              },
              {
                "path": "src/pages/Analytics/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Analytics/index.tsx"
              },
              {
                "path": "src/pages/Reports/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Reports/index.tsx"
              },
              {
                "path": "src/pages/MultiShopReport/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/MultiShopReport/index.tsx"
              },
              {
                "path": "src/pages/Leaderboard/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Leaderboard/index.tsx"
              },
              {
                "path": "src/pages/Merchant/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Merchant/index.tsx"
              },
              {
                "path": "src/pages/B2B/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/B2B/index.tsx"
              },
              {
                "path": "src/pages/B2B/BatchOrder.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/B2B/BatchOrder.tsx"
              },
              {
                "path": "src/pages/B2B/EnterpriseQuote.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/B2B/EnterpriseQuote.tsx"
              },
              {
                "path": "src/pages/B2B/ContractManage.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/B2B/ContractManage.tsx"
              },
              {
                "path": "src/pages/Procurement/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Procurement/index.tsx"
              },
              {
                "path": "src/pages/Suppliers/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Suppliers/index.tsx"
              },
              {
                "path": "src/pages/Warehouse/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Warehouse/index.tsx"
              },
              {
                "path": "src/pages/IndependentSite/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/IndependentSite/index.tsx"
              },
              {
                "path": "src/pages/IndependentSite/IndependentSiteCreate.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/IndependentSite/IndependentSiteCreate.tsx"
              },
              {
                "path": "src/pages/IndependentSite/SiteTemplates.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/IndependentSite/SiteTemplates.tsx"
              },
              {
                "path": "src/pages/IndependentSite/IndependentSiteAnalytics.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/IndependentSite/IndependentSiteAnalytics.tsx"
              },
              {
                "path": "src/pages/IndependentSite/IndependentSiteOrder.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/IndependentSite/IndependentSiteOrder.tsx"
              },
              {
                "path": "src/pages/IndependentSite/IndependentSiteProduct.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/IndependentSite/IndependentSiteProduct.tsx"
              },
              {
                "path": "src/pages/IndependentSite/DomainManagement.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/IndependentSite/DomainManagement.tsx"
              },
              {
                "path": "src/pages/Blacklist/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Blacklist/index.tsx"
              },
              {
                "path": "src/pages/Compliance/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Compliance/index.tsx"
              },
              {
                "path": "src/pages/Audit/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Audit/index.tsx"
              },
              {
                "path": "src/pages/OperationLogs/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/OperationLogs/index.tsx"
              },
              {
                "path": "src/pages/Governance/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Governance/index.tsx"
              },
              {
                "path": "src/pages/Sovereignty/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Sovereignty/index.tsx"
              },
              {
                "path": "src/pages/Compliance/CertificateManage.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Compliance/CertificateManage.tsx"
              },
              {
                "path": "src/pages/Settings/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Settings/index.tsx"
              },
              {
                "path": "src/pages/Settings/PlatformAuth.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Settings/PlatformAuth.tsx"
              },
              {
                "path": "src/pages/Settings/ServiceManager.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Settings/ServiceManager.tsx"
              },
              {
                "path": "src/pages/User/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/User/index.tsx"
              },
              {
                "path": "src/pages/Role/index.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Role/index.tsx"
              },
              {
                "path": "src/pages/Auth/LoginPage.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Auth/LoginPage.tsx"
              },
              {
                "path": "src/pages/Auth/RegisterPage.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Auth/RegisterPage.tsx"
              },
              {
                "path": "src/pages/Auth/ResetPasswordPage.tsx",
                "kind": "dynamic-import",
                "original": "@/pages/Auth/ResetPasswordPage.tsx"
              },
              {
                "path": "src/layouts/index.tsx",
                "kind": "dynamic-import",
                "original": "D:/trae_projects/makemd/makemd/dashboard/src/layouts/index.tsx"
              }
            ],
            "format": "esm"
          },
          "src/.umi/umi.ts": {
            "bytes": 2109,
            "imports": [
              {
                "path": "src/.umi/core/polyfill.ts",
                "kind": "import-statement",
                "original": "./core/polyfill"
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "src/.umi/core/route.tsx",
                "kind": "import-statement",
                "original": "./core/route"
              },
              {
                "path": "src/.umi/core/plugin.ts",
                "kind": "import-statement",
                "original": "./core/plugin"
              },
              {
                "path": "src/.umi/core/history.ts",
                "kind": "import-statement",
                "original": "./core/history"
              },
              {
                "path": "src/.umi/exports.ts",
                "kind": "import-statement",
                "original": "umi"
              }
            ],
            "format": "esm"
          }
        },
        "outputs": {
          "src/.umi/out/umi.js": {
            "imports": [
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react-router-dom",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react-router-dom",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "antd",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "@ant-design/icons",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "recharts",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "recharts",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "@ant-design/charts",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "lodash/debounce",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "lodash/throttle",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "axios",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "msw",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "msw/browser",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "./data/certificate.mock",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/umi/client/client/plugin.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "recharts",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "@ant-design/charts",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "moment",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "dayjs",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react/jsx-runtime",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "react",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.error.cause.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.aggregate-error.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.aggregate-error.cause.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.at.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.find-last.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.find-last-index.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.push.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.reduce.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.reduce-right.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.to-reversed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.to-sorted.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.to-spliced.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.with.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.map.group-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.object.group-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.object.has-own.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.promise.any.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.promise.with-resolvers.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.reflect.to-string-tag.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.regexp.flags.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.at-alternative.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.is-well-formed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.replace-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.to-well-formed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.at.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.find-last.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.find-last-index.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.set.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.to-reversed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.to-sorted.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.with.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.suppressed-error.constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.from-async.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.filter-out.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.filter-reject.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group-by-to-map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group-to-map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.is-template-object.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.last-index.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.last-item.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.unique-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array-buffer.detached.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array-buffer.transfer.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-disposable-stack.constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.as-indexed-pairs.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.async-dispose.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.drop.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.every.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.filter.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.find.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.flat-map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.for-each.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.indexed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.reduce.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.some.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.take.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.to-array.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.bigint.range.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.composite-key.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.composite-symbol.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.get-float16.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.get-uint8-clamped.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.set-float16.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.set-uint8-clamped.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.disposable-stack.constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.demethodize.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.is-callable.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.is-constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.un-this.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.constructor.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.as-indexed-pairs.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.dispose.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.drop.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.every.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.filter.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.find.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.flat-map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.for-each.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.indexed.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.range.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.reduce.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.some.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.take.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.to-array.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.to-async.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.json.is-raw-json.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.json.parse.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.json.raw-json.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.delete-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.emplace.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.every.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.filter.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.find.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.find-key.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.includes.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.key-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.key-of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.map-keys.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.map-values.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.merge.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.reduce.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.some.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.update.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.update-or-insert.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.upsert.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.clamp.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.deg-per-rad.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.degrees.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.fscale.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.f16round.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.iaddh.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.imulh.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.isubh.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.rad-per-deg.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.radians.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.scale.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.seeded-prng.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.signbit.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.umulh.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.number.from-string.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.number.range.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.object.iterate-entries.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.object.iterate-keys.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.object.iterate-values.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.observable.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.promise.try.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.define-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.delete-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-own-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.has-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.has-own-metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.regexp.escape.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.add-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.delete-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.difference.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.difference.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.every.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.filter.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.find.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.intersection.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.intersection.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-disjoint-from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-subset-of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-superset-of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.join.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.map.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.reduce.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.some.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.symmetric-difference.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.union.v2.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.union.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.at.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.cooked.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.code-points.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.dedent.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.async-dispose.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.dispose.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-registered-symbol.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-registered.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-well-known-symbol.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-well-known.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.matcher.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.metadata.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.metadata-key.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.observable.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.pattern-match.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.replace-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.from-async.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.filter-out.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.filter-reject.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.group-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.to-spliced.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.unique-by.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.from-base64.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.from-hex.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.to-base64.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.to-hex.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.delete-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.emplace.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.upsert.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.add-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.delete-all.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.from.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.of.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.dom-exception.stack.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.immediate.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.self.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.structured-clone.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url.can-parse.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url-search-params.delete.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url-search-params.has.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url-search-params.size.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/regenerator-runtime/runtime.js",
                "kind": "import-statement",
                "external": true
              },
              {
                "path": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
                "kind": "import-statement",
                "external": true
              }
            ],
            "exports": [],
            "entryPoint": "src/.umi/umi.ts",
            "inputs": {
              "src/imports/react.ts": {
                "bytesInOutput": 508
              },
              "src/imports/antd.ts": {
                "bytesInOutput": 1256
              },
              "src/imports/icons.ts": {
                "bytesInOutput": 2926
              },
              "src/imports/charts.ts": {
                "bytesInOutput": 639
              },
              "src/imports/utils.ts": {
                "bytesInOutput": 253
              },
              "src/services/baseDataSource.ts": {
                "bytesInOutput": 1351
              },
              "src/services/productDataSource.ts": {
                "bytesInOutput": 17006
              },
              "src/services/orderDataSource.ts": {
                "bytesInOutput": 16964
              },
              "src/services/http.ts": {
                "bytesInOutput": 1700
              },
              "src/services/marketingDataSource.ts": {
                "bytesInOutput": 3261
              },
              "src/services/dashboardDataSource.ts": {
                "bytesInOutput": 3312
              },
              "src/types/inventory.ts": {
                "bytesInOutput": 86
              },
              "src/services/inventoryDataSource.ts": {
                "bytesInOutput": 5953
              },
              "src/services/financeDataSource.ts": {
                "bytesInOutput": 4834
              },
              "src/services/suppliersDataSource.ts": {
                "bytesInOutput": 3152
              },
              "src/services/returnDataSource.ts": {
                "bytesInOutput": 5639
              },
              "src/services/settingsDataSource.ts": {
                "bytesInOutput": 9814
              },
              "src/services/userDataSource.ts": {
                "bytesInOutput": 6975
              },
              "src/services/abTestDataSource.ts": {
                "bytesInOutput": 5797
              },
              "src/services/adOptimizationDataSource.ts": {
                "bytesInOutput": 6162
              },
              "src/services/afterSalesDataSource.ts": {
                "bytesInOutput": 7573
              },
              "src/services/aiActionTaskDataSource.ts": {
                "bytesInOutput": 8968
              },
              "src/services/aiSuggestionDataSource.ts": {
                "bytesInOutput": 7624
              },
              "src/services/analyticsDataSource.ts": {
                "bytesInOutput": 12408
              },
              "src/services/arbitrageDataSource.ts": {
                "bytesInOutput": 13954
              },
              "src/services/autoExecutionDataSource.ts": {
                "bytesInOutput": 13629
              },
              "src/services/b2bTradeDataSource.ts": {
                "bytesInOutput": 11365
              },
              "src/services/batchOperationDataSource.ts": {
                "bytesInOutput": 5291
              },
              "src/services/blacklistDataSource.ts": {
                "bytesInOutput": 7423
              },
              "../server/src/shared/types/domain/Certificate.ts": {
                "bytesInOutput": 114
              },
              "src/types/certificate.ts": {
                "bytesInOutput": 114
              },
              "src/services/dataSourceFactory.ts": {
                "bytesInOutput": 3287
              },
              "src/services/certificateDataSource.ts": {
                "bytesInOutput": 4861
              },
              "src/services/lightweightClientService.ts": {
                "bytesInOutput": 5074
              },
              "src/services/clientDataSource.ts": {
                "bytesInOutput": 4913
              },
              "src/services/crossBorderIntegrationDataSource.ts": {
                "bytesInOutput": 4370
              },
              "src/services/dynamicPricingDataSource.ts": {
                "bytesInOutput": 13701
              },
              "src/services/executionResultDataSource.ts": {
                "bytesInOutput": 8244
              },
              "src/services/humanApprovalDataSource.ts": {
                "bytesInOutput": 8269
              },
              "src/services/independentSiteDataSource.ts": {
                "bytesInOutput": 6434
              },
              "src/services/leaderboardDataSource.ts": {
                "bytesInOutput": 2507
              },
              "src/services/logisticsDataSource.ts": {
                "bytesInOutput": 6503
              },
              "src/services/materialProcessingDataSource.ts": {
                "bytesInOutput": 5211
              },
              "src/services/operationAgentDataSource.ts": {
                "bytesInOutput": 8593
              },
              "src/services/platformAuthDataSource.ts": {
                "bytesInOutput": 5201
              },
              "src/services/procurementDataSource.ts": {
                "bytesInOutput": 21088
              },
              "src/services/productManagementDataSource.ts": {
                "bytesInOutput": 125
              },
              "src/services/productSelectionDataSource.ts": {
                "bytesInOutput": 13756
              },
              "src/services/reportsDataSource.ts": {
                "bytesInOutput": 3179
              },
              "src/services/saasTenantDataSource.ts": {
                "bytesInOutput": 4945
              },
              "../server/src/config/serviceConfig.ts": {
                "bytesInOutput": 31470
              },
              "src/services/serviceManagerDataSource.ts": {
                "bytesInOutput": 5780
              },
              "src/services/shopReportDataSource.ts": {
                "bytesInOutput": 8531
              },
              "src/services/storeCreationDataSource.ts": {
                "bytesInOutput": 5925
              },
              "src/services/taskCenterDataSource.ts": {
                "bytesInOutput": 2844
              },
              "src/services/unifiedFulfillmentDataSource.ts": {
                "bytesInOutput": 2959
              },
              "src/services/userAssetDataSource.ts": {
                "bytesInOutput": 7436
              },
              "src/services/warehouseDataSource.ts": {
                "bytesInOutput": 21659
              },
              "src/imports/datasources.ts": {
                "bytesInOutput": 1657
              },
              "src/imports/constants.ts": {
                "bytesInOutput": 88
              },
              "src/imports/types.ts": {
                "bytesInOutput": 80
              },
              "src/imports/index.ts": {
                "bytesInOutput": 236
              },
              "src/contexts/LocaleContext.tsx": {
                "bytesInOutput": 22786
              },
              "src/pages/Auth/LoginPage.tsx": {
                "bytesInOutput": 11336
              },
              "src/components/Navbar.tsx": {
                "bytesInOutput": 6170
              },
              "src/pages/Homepage.tsx": {
                "bytesInOutput": 54254
              },
              "src/pages/TestRoute.tsx": {
                "bytesInOutput": 578
              },
              "src/.umi/core/defineApp.ts": {
                "bytesInOutput": 90
              },
              "src/.umi/core/history.ts": {
                "bytesInOutput": 1318
              },
              "src/.umi/core/terminal.ts": {
                "bytesInOutput": 88
              },
              "src/mock/msw.ts": {
                "bytesInOutput": 5655
              },
              "src/mock/browser.ts": {
                "bytesInOutput": 232
              },
              "src/app.ts": {
                "bytesInOutput": 648
              },
              "src/.umi/core/helmetContext.ts": {
                "bytesInOutput": 129
              },
              "src/.umi/core/helmet.ts": {
                "bytesInOutput": 477
              },
              "src/.umi/core/plugin.ts": {
                "bytesInOutput": 1021
              },
              "src/.umi/testBrowser.tsx": {
                "bytesInOutput": 404
              },
              "src/.umi/exports.ts": {
                "bytesInOutput": 1067
              },
              "src/.umi/core/EmptyRoute.tsx": {
                "bytesInOutput": 382
              },
              "src/pages/DashboardPage.tsx": {
                "bytesInOutput": 11223
              },
              "src/pages/AIActionTaskManager.tsx": {
                "bytesInOutput": 30698
              },
              "src/components/ai-suggestion/AISuggestionDisplay.tsx": {
                "bytesInOutput": 11228
              },
              "src/pages/AISuggestionPage.tsx": {
                "bytesInOutput": 9073
              },
              "src/components/human-approval/HumanApprovalForm.tsx": {
                "bytesInOutput": 14484
              },
              "src/pages/HumanApprovalPage.tsx": {
                "bytesInOutput": 14242
              },
              "src/pages/ClientManagement.tsx": {
                "bytesInOutput": 29295
              },
              "src/pages/ExecutionResults.tsx": {
                "bytesInOutput": 17677
              },
              "src/pages/AIDecisionLog/index.tsx": {
                "bytesInOutput": 35027
              },
              "src/pages/StrategyMarketplace/index.tsx": {
                "bytesInOutput": 23588
              },
              "src/pages/AutoProductSelection/index.tsx": {
                "bytesInOutput": 51228
              },
              "src/pages/AutoExecution/components/ThresholdConfigForm.tsx": {
                "bytesInOutput": 14922
              },
              "src/pages/AutoExecution/components/EvolutionStage.tsx": {
                "bytesInOutput": 10525
              },
              "src/pages/AutoExecution/index.tsx": {
                "bytesInOutput": 16770
              },
              "src/services/cloud-service.ts": {
                "bytesInOutput": 7531
              },
              "src/services/cloud-control-layer.ts": {
                "bytesInOutput": 1349
              },
              "src/pages/OperationAgentEnhanced.tsx": {
                "bytesInOutput": 118735
              },
              "src/pages/AutoPilot/index.tsx": {
                "bytesInOutput": 26482
              },
              "src/pages/TaskCenter/index.tsx": {
                "bytesInOutput": 35905
              },
              "src/pages/Product/CrossPlatformManage.tsx": {
                "bytesInOutput": 35511
              },
              "src/pages/Product/index.tsx": {
                "bytesInOutput": 26464
              },
              "src/pages/Product/ProductPublishForm.tsx": {
                "bytesInOutput": 30190
              },
              "src/pages/Product/AIPricing/index.tsx": {
                "bytesInOutput": 9441
              },
              "src/pages/Product/ProfitMonitor/index.tsx": {
                "bytesInOutput": 11887
              },
              "src/pages/Inventory/index.tsx": {
                "bytesInOutput": 6046
              },
              "src/pages/Inventory/Warehouses.tsx": {
                "bytesInOutput": 9080
              },
              "src/pages/Orders/index.tsx": {
                "bytesInOutput": 12892
              },
              "src/pages/Orders/ExceptionOrder.tsx": {
                "bytesInOutput": 19655
              },
              "src/pages/AfterSales/index.tsx": {
                "bytesInOutput": 1195
              },
              "src/pages/AfterSales/RefundProcess.tsx": {
                "bytesInOutput": 18881
              },
              "src/pages/Logistics/index.tsx": {
                "bytesInOutput": 1185
              },
              "src/pages/Logistics/FreightCalc.tsx": {
                "bytesInOutput": 17566
              },
              "src/pages/Finance/index.tsx": {
                "bytesInOutput": 16784
              },
              "src/pages/Finance/Transactions.tsx": {
                "bytesInOutput": 19415
              },
              "src/pages/Finance/Reconciliation.tsx": {
                "bytesInOutput": 7056
              },
              "src/pages/UserAsset/UserAssets.tsx": {
                "bytesInOutput": 18325
              },
              "src/pages/Ad/AdPlanPage.tsx": {
                "bytesInOutput": 29830
              },
              "src/pages/Ad/AdDelivery.tsx": {
                "bytesInOutput": 23356
              },
              "src/pages/Ad/index.tsx": {
                "bytesInOutput": 30117
              },
              "src/pages/Marketing/Competitors.tsx": {
                "bytesInOutput": 12191
              },
              "src/pages/DynamicPricing/index.tsx": {
                "bytesInOutput": 50043
              },
              "src/pages/ABTest/ABTestConfig.tsx": {
                "bytesInOutput": 21541
              },
              "src/pages/Analytics/index.tsx": {
                "bytesInOutput": 33730
              },
              "src/pages/Reports/index.tsx": {
                "bytesInOutput": 29362
              },
              "src/components/HierarchySelector/index.tsx": {
                "bytesInOutput": 14535
              },
              "src/pages/MultiShopReport/index.tsx": {
                "bytesInOutput": 41366
              },
              "src/pages/Leaderboard/index.tsx": {
                "bytesInOutput": 12996
              },
              "src/pages/Merchant/index.tsx": {
                "bytesInOutput": 1163
              },
              "src/pages/B2B/index.tsx": {
                "bytesInOutput": 1043
              },
              "src/pages/B2B/BatchOrder.tsx": {
                "bytesInOutput": 434
              },
              "src/pages/B2B/EnterpriseQuote.tsx": {
                "bytesInOutput": 484
              },
              "src/pages/B2B/ContractManage.tsx": {
                "bytesInOutput": 474
              },
              "src/pages/Procurement/index.tsx": {
                "bytesInOutput": 46850
              },
              "src/pages/Suppliers/index.tsx": {
                "bytesInOutput": 17203
              },
              "src/pages/Warehouse/index.tsx": {
                "bytesInOutput": 32758
              },
              "src/pages/IndependentSite/IndependentSiteList.tsx": {
                "bytesInOutput": 7550
              },
              "src/pages/IndependentSite/index.tsx": {
                "bytesInOutput": 504
              },
              "src/pages/IndependentSite/IndependentSiteCreate.tsx": {
                "bytesInOutput": 7442
              },
              "src/pages/IndependentSite/SiteTemplates.tsx": {
                "bytesInOutput": 12310
              },
              "src/pages/IndependentSite/IndependentSiteAnalytics.tsx": {
                "bytesInOutput": 14565
              },
              "src/pages/IndependentSite/IndependentSiteOrder.tsx": {
                "bytesInOutput": 10567
              },
              "src/pages/IndependentSite/IndependentSiteProduct.tsx": {
                "bytesInOutput": 20304
              },
              "src/pages/IndependentSite/DomainManagement.tsx": {
                "bytesInOutput": 15188
              },
              "src/pages/Blacklist/index.tsx": {
                "bytesInOutput": 1197
              },
              "src/pages/Compliance/index.tsx": {
                "bytesInOutput": 40938
              },
              "src/services/auditDataSource.ts": {
                "bytesInOutput": 2017
              },
              "src/pages/Audit/index.tsx": {
                "bytesInOutput": 5567
              },
              "src/services/operationLogDataSource.ts": {
                "bytesInOutput": 7657
              },
              "src/pages/OperationLogs/index.tsx": {
                "bytesInOutput": 35584
              },
              "src/services/governanceDataSource.ts": {
                "bytesInOutput": 2087
              },
              "src/pages/Governance/index.tsx": {
                "bytesInOutput": 5632
              },
              "src/services/sovereigntyDataSource.ts": {
                "bytesInOutput": 2101
              },
              "src/pages/Sovereignty/index.tsx": {
                "bytesInOutput": 5645
              },
              "src/pages/Compliance/CertificateManage.tsx": {
                "bytesInOutput": 17992
              },
              "src/pages/Settings/index.tsx": {
                "bytesInOutput": 8723
              },
              "src/pages/Settings/PlatformAuth.tsx": {
                "bytesInOutput": 17799
              },
              "src/pages/Settings/ServiceManager.tsx": {
                "bytesInOutput": 12527
              },
              "src/pages/User/index.tsx": {
                "bytesInOutput": 9707
              },
              "src/pages/Role/index.tsx": {
                "bytesInOutput": 11405
              },
              "src/pages/Auth/RegisterPage.tsx": {
                "bytesInOutput": 16348
              },
              "src/pages/Auth/ResetPasswordPage.tsx": {
                "bytesInOutput": 11694
              },
              "src/contexts/UserContext.tsx": {
                "bytesInOutput": 7209
              },
              "src/layouts/index.tsx": {
                "bytesInOutput": 28207
              },
              "src/.umi/core/route.tsx": {
                "bytesInOutput": 13574
              },
              "src/.umi/core/polyfill.ts": {
                "bytesInOutput": 23097
              },
              "src/.umi/umi.ts": {
                "bytesInOutput": 1873
              }
            },
            "bytes": 2036233
          }
        }
      }
    },
    "fileImports": {
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\core\\EmptyRoute.tsx": [
        {
          "end": 119,
          "importKind": "value",
          "source": "react",
          "specifiers": [
            {
              "local": "React",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 93,
          "type": "ImportDeclaration"
        },
        {
          "end": 167,
          "importKind": "value",
          "source": "umi",
          "specifiers": [
            {
              "imported": "Outlet",
              "local": "Outlet",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useOutletContext",
              "local": "useOutletContext",
              "type": "ImportSpecifier"
            }
          ],
          "start": 120,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\core\\defineApp.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\core\\helmet.ts": [
        {
          "end": 119,
          "importKind": "value",
          "source": "react",
          "specifiers": [
            {
              "local": "React",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 93,
          "type": "ImportDeclaration"
        },
        {
          "end": 229,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
          "specifiers": [
            {
              "imported": "HelmetProvider",
              "local": "HelmetProvider",
              "type": "ImportSpecifier"
            }
          ],
          "start": 120,
          "type": "ImportDeclaration"
        },
        {
          "end": 272,
          "importKind": "value",
          "source": "./helmetContext",
          "specifiers": [
            {
              "imported": "context",
              "local": "context",
              "type": "ImportSpecifier"
            }
          ],
          "start": 230,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\core\\helmetContext.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\core\\history.ts": [
        {
          "end": 248,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
          "specifiers": [
            {
              "imported": "createHashHistory",
              "local": "createHashHistory",
              "type": "ImportSpecifier"
            },
            {
              "imported": "createMemoryHistory",
              "local": "createMemoryHistory",
              "type": "ImportSpecifier"
            },
            {
              "imported": "createBrowserHistory",
              "local": "createBrowserHistory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 93,
          "type": "ImportDeclaration"
        },
        {
          "end": 300,
          "importKind": "type",
          "source": "./historyIntelli",
          "specifiers": [
            {
              "imported": "UmiHistory",
              "local": "UmiHistory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 249,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\core\\plugin.ts": [
        {
          "end": 173,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/src/app.ts",
          "specifiers": [
            {
              "local": "Plugin_0",
              "type": "ImportNamespaceSpecifier"
            }
          ],
          "start": 93,
          "type": "ImportDeclaration"
        },
        {
          "end": 220,
          "importKind": "value",
          "source": "@@/core/helmet.ts",
          "specifiers": [
            {
              "local": "Plugin_1",
              "type": "ImportNamespaceSpecifier"
            }
          ],
          "start": 174,
          "type": "ImportDeclaration"
        },
        {
          "end": 257,
          "importKind": "value",
          "source": "umi",
          "specifiers": [
            {
              "imported": "PluginManager",
              "local": "PluginManager",
              "type": "ImportSpecifier"
            }
          ],
          "start": 221,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\core\\polyfill.ts": [
        {
          "end": 190,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.error.cause.js",
          "specifiers": [],
          "start": 93,
          "type": "ImportDeclaration"
        },
        {
          "end": 292,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.aggregate-error.js",
          "specifiers": [],
          "start": 191,
          "type": "ImportDeclaration"
        },
        {
          "end": 400,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.aggregate-error.cause.js",
          "specifiers": [],
          "start": 293,
          "type": "ImportDeclaration"
        },
        {
          "end": 495,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.at.js",
          "specifiers": [],
          "start": 401,
          "type": "ImportDeclaration"
        },
        {
          "end": 597,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.find-last.js",
          "specifiers": [],
          "start": 496,
          "type": "ImportDeclaration"
        },
        {
          "end": 705,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.find-last-index.js",
          "specifiers": [],
          "start": 598,
          "type": "ImportDeclaration"
        },
        {
          "end": 802,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.push.js",
          "specifiers": [],
          "start": 706,
          "type": "ImportDeclaration"
        },
        {
          "end": 901,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.reduce.js",
          "specifiers": [],
          "start": 803,
          "type": "ImportDeclaration"
        },
        {
          "end": 1006,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.reduce-right.js",
          "specifiers": [],
          "start": 902,
          "type": "ImportDeclaration"
        },
        {
          "end": 1110,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.to-reversed.js",
          "specifiers": [],
          "start": 1007,
          "type": "ImportDeclaration"
        },
        {
          "end": 1212,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.to-sorted.js",
          "specifiers": [],
          "start": 1111,
          "type": "ImportDeclaration"
        },
        {
          "end": 1315,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.to-spliced.js",
          "specifiers": [],
          "start": 1213,
          "type": "ImportDeclaration"
        },
        {
          "end": 1412,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.array.with.js",
          "specifiers": [],
          "start": 1316,
          "type": "ImportDeclaration"
        },
        {
          "end": 1511,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.map.group-by.js",
          "specifiers": [],
          "start": 1413,
          "type": "ImportDeclaration"
        },
        {
          "end": 1613,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.object.group-by.js",
          "specifiers": [],
          "start": 1512,
          "type": "ImportDeclaration"
        },
        {
          "end": 1714,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.object.has-own.js",
          "specifiers": [],
          "start": 1614,
          "type": "ImportDeclaration"
        },
        {
          "end": 1812,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.promise.any.js",
          "specifiers": [],
          "start": 1715,
          "type": "ImportDeclaration"
        },
        {
          "end": 1921,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.promise.with-resolvers.js",
          "specifiers": [],
          "start": 1813,
          "type": "ImportDeclaration"
        },
        {
          "end": 2029,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.reflect.to-string-tag.js",
          "specifiers": [],
          "start": 1922,
          "type": "ImportDeclaration"
        },
        {
          "end": 2128,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.regexp.flags.js",
          "specifiers": [],
          "start": 2030,
          "type": "ImportDeclaration"
        },
        {
          "end": 2236,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.at-alternative.js",
          "specifiers": [],
          "start": 2129,
          "type": "ImportDeclaration"
        },
        {
          "end": 2344,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.is-well-formed.js",
          "specifiers": [],
          "start": 2237,
          "type": "ImportDeclaration"
        },
        {
          "end": 2449,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.replace-all.js",
          "specifiers": [],
          "start": 2345,
          "type": "ImportDeclaration"
        },
        {
          "end": 2557,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.string.to-well-formed.js",
          "specifiers": [],
          "start": 2450,
          "type": "ImportDeclaration"
        },
        {
          "end": 2658,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.at.js",
          "specifiers": [],
          "start": 2558,
          "type": "ImportDeclaration"
        },
        {
          "end": 2766,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.find-last.js",
          "specifiers": [],
          "start": 2659,
          "type": "ImportDeclaration"
        },
        {
          "end": 2880,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.find-last-index.js",
          "specifiers": [],
          "start": 2767,
          "type": "ImportDeclaration"
        },
        {
          "end": 2982,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.set.js",
          "specifiers": [],
          "start": 2881,
          "type": "ImportDeclaration"
        },
        {
          "end": 3092,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.to-reversed.js",
          "specifiers": [],
          "start": 2983,
          "type": "ImportDeclaration"
        },
        {
          "end": 3200,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.to-sorted.js",
          "specifiers": [],
          "start": 3093,
          "type": "ImportDeclaration"
        },
        {
          "end": 3303,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/es.typed-array.with.js",
          "specifiers": [],
          "start": 3201,
          "type": "ImportDeclaration"
        },
        {
          "end": 3422,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.suppressed-error.constructor.js",
          "specifiers": [],
          "start": 3304,
          "type": "ImportDeclaration"
        },
        {
          "end": 3529,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.from-async.js",
          "specifiers": [],
          "start": 3423,
          "type": "ImportDeclaration"
        },
        {
          "end": 3636,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.filter-out.js",
          "specifiers": [],
          "start": 3530,
          "type": "ImportDeclaration"
        },
        {
          "end": 3746,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.filter-reject.js",
          "specifiers": [],
          "start": 3637,
          "type": "ImportDeclaration"
        },
        {
          "end": 3848,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group.js",
          "specifiers": [],
          "start": 3747,
          "type": "ImportDeclaration"
        },
        {
          "end": 3953,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group-by.js",
          "specifiers": [],
          "start": 3849,
          "type": "ImportDeclaration"
        },
        {
          "end": 4065,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group-by-to-map.js",
          "specifiers": [],
          "start": 3954,
          "type": "ImportDeclaration"
        },
        {
          "end": 4174,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.group-to-map.js",
          "specifiers": [],
          "start": 4066,
          "type": "ImportDeclaration"
        },
        {
          "end": 4289,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.is-template-object.js",
          "specifiers": [],
          "start": 4175,
          "type": "ImportDeclaration"
        },
        {
          "end": 4396,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.last-index.js",
          "specifiers": [],
          "start": 4290,
          "type": "ImportDeclaration"
        },
        {
          "end": 4502,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.last-item.js",
          "specifiers": [],
          "start": 4397,
          "type": "ImportDeclaration"
        },
        {
          "end": 4608,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array.unique-by.js",
          "specifiers": [],
          "start": 4503,
          "type": "ImportDeclaration"
        },
        {
          "end": 4720,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array-buffer.detached.js",
          "specifiers": [],
          "start": 4609,
          "type": "ImportDeclaration"
        },
        {
          "end": 4832,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array-buffer.transfer.js",
          "specifiers": [],
          "start": 4721,
          "type": "ImportDeclaration"
        },
        {
          "end": 4960,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js",
          "specifiers": [],
          "start": 4833,
          "type": "ImportDeclaration"
        },
        {
          "end": 5085,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-disposable-stack.constructor.js",
          "specifiers": [],
          "start": 4961,
          "type": "ImportDeclaration"
        },
        {
          "end": 5202,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.constructor.js",
          "specifiers": [],
          "start": 5086,
          "type": "ImportDeclaration"
        },
        {
          "end": 5324,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.as-indexed-pairs.js",
          "specifiers": [],
          "start": 5203,
          "type": "ImportDeclaration"
        },
        {
          "end": 5443,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.async-dispose.js",
          "specifiers": [],
          "start": 5325,
          "type": "ImportDeclaration"
        },
        {
          "end": 5553,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.drop.js",
          "specifiers": [],
          "start": 5444,
          "type": "ImportDeclaration"
        },
        {
          "end": 5664,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.every.js",
          "specifiers": [],
          "start": 5554,
          "type": "ImportDeclaration"
        },
        {
          "end": 5776,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.filter.js",
          "specifiers": [],
          "start": 5665,
          "type": "ImportDeclaration"
        },
        {
          "end": 5886,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.find.js",
          "specifiers": [],
          "start": 5777,
          "type": "ImportDeclaration"
        },
        {
          "end": 6000,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.flat-map.js",
          "specifiers": [],
          "start": 5887,
          "type": "ImportDeclaration"
        },
        {
          "end": 6114,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.for-each.js",
          "specifiers": [],
          "start": 6001,
          "type": "ImportDeclaration"
        },
        {
          "end": 6224,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.from.js",
          "specifiers": [],
          "start": 6115,
          "type": "ImportDeclaration"
        },
        {
          "end": 6337,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.indexed.js",
          "specifiers": [],
          "start": 6225,
          "type": "ImportDeclaration"
        },
        {
          "end": 6446,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.map.js",
          "specifiers": [],
          "start": 6338,
          "type": "ImportDeclaration"
        },
        {
          "end": 6558,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.reduce.js",
          "specifiers": [],
          "start": 6447,
          "type": "ImportDeclaration"
        },
        {
          "end": 6668,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.some.js",
          "specifiers": [],
          "start": 6559,
          "type": "ImportDeclaration"
        },
        {
          "end": 6778,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.take.js",
          "specifiers": [],
          "start": 6669,
          "type": "ImportDeclaration"
        },
        {
          "end": 6892,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.async-iterator.to-array.js",
          "specifiers": [],
          "start": 6779,
          "type": "ImportDeclaration"
        },
        {
          "end": 6995,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.bigint.range.js",
          "specifiers": [],
          "start": 6893,
          "type": "ImportDeclaration"
        },
        {
          "end": 7099,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.composite-key.js",
          "specifiers": [],
          "start": 6996,
          "type": "ImportDeclaration"
        },
        {
          "end": 7206,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.composite-symbol.js",
          "specifiers": [],
          "start": 7100,
          "type": "ImportDeclaration"
        },
        {
          "end": 7318,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.get-float16.js",
          "specifiers": [],
          "start": 7207,
          "type": "ImportDeclaration"
        },
        {
          "end": 7436,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.get-uint8-clamped.js",
          "specifiers": [],
          "start": 7319,
          "type": "ImportDeclaration"
        },
        {
          "end": 7548,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.set-float16.js",
          "specifiers": [],
          "start": 7437,
          "type": "ImportDeclaration"
        },
        {
          "end": 7666,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.data-view.set-uint8-clamped.js",
          "specifiers": [],
          "start": 7549,
          "type": "ImportDeclaration"
        },
        {
          "end": 7785,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.disposable-stack.constructor.js",
          "specifiers": [],
          "start": 7667,
          "type": "ImportDeclaration"
        },
        {
          "end": 7896,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.demethodize.js",
          "specifiers": [],
          "start": 7786,
          "type": "ImportDeclaration"
        },
        {
          "end": 8007,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.is-callable.js",
          "specifiers": [],
          "start": 7897,
          "type": "ImportDeclaration"
        },
        {
          "end": 8121,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.is-constructor.js",
          "specifiers": [],
          "start": 8008,
          "type": "ImportDeclaration"
        },
        {
          "end": 8229,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.metadata.js",
          "specifiers": [],
          "start": 8122,
          "type": "ImportDeclaration"
        },
        {
          "end": 8336,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.function.un-this.js",
          "specifiers": [],
          "start": 8230,
          "type": "ImportDeclaration"
        },
        {
          "end": 8447,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.constructor.js",
          "specifiers": [],
          "start": 8337,
          "type": "ImportDeclaration"
        },
        {
          "end": 8563,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.as-indexed-pairs.js",
          "specifiers": [],
          "start": 8448,
          "type": "ImportDeclaration"
        },
        {
          "end": 8670,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.dispose.js",
          "specifiers": [],
          "start": 8564,
          "type": "ImportDeclaration"
        },
        {
          "end": 8774,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.drop.js",
          "specifiers": [],
          "start": 8671,
          "type": "ImportDeclaration"
        },
        {
          "end": 8879,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.every.js",
          "specifiers": [],
          "start": 8775,
          "type": "ImportDeclaration"
        },
        {
          "end": 8985,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.filter.js",
          "specifiers": [],
          "start": 8880,
          "type": "ImportDeclaration"
        },
        {
          "end": 9089,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.find.js",
          "specifiers": [],
          "start": 8986,
          "type": "ImportDeclaration"
        },
        {
          "end": 9197,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.flat-map.js",
          "specifiers": [],
          "start": 9090,
          "type": "ImportDeclaration"
        },
        {
          "end": 9305,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.for-each.js",
          "specifiers": [],
          "start": 9198,
          "type": "ImportDeclaration"
        },
        {
          "end": 9409,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.from.js",
          "specifiers": [],
          "start": 9306,
          "type": "ImportDeclaration"
        },
        {
          "end": 9516,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.indexed.js",
          "specifiers": [],
          "start": 9410,
          "type": "ImportDeclaration"
        },
        {
          "end": 9619,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.map.js",
          "specifiers": [],
          "start": 9517,
          "type": "ImportDeclaration"
        },
        {
          "end": 9724,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.range.js",
          "specifiers": [],
          "start": 9620,
          "type": "ImportDeclaration"
        },
        {
          "end": 9830,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.reduce.js",
          "specifiers": [],
          "start": 9725,
          "type": "ImportDeclaration"
        },
        {
          "end": 9934,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.some.js",
          "specifiers": [],
          "start": 9831,
          "type": "ImportDeclaration"
        },
        {
          "end": 10038,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.take.js",
          "specifiers": [],
          "start": 9935,
          "type": "ImportDeclaration"
        },
        {
          "end": 10146,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.to-array.js",
          "specifiers": [],
          "start": 10039,
          "type": "ImportDeclaration"
        },
        {
          "end": 10254,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.iterator.to-async.js",
          "specifiers": [],
          "start": 10147,
          "type": "ImportDeclaration"
        },
        {
          "end": 10361,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.json.is-raw-json.js",
          "specifiers": [],
          "start": 10255,
          "type": "ImportDeclaration"
        },
        {
          "end": 10462,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.json.parse.js",
          "specifiers": [],
          "start": 10362,
          "type": "ImportDeclaration"
        },
        {
          "end": 10566,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.json.raw-json.js",
          "specifiers": [],
          "start": 10463,
          "type": "ImportDeclaration"
        },
        {
          "end": 10671,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.delete-all.js",
          "specifiers": [],
          "start": 10567,
          "type": "ImportDeclaration"
        },
        {
          "end": 10773,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.emplace.js",
          "specifiers": [],
          "start": 10672,
          "type": "ImportDeclaration"
        },
        {
          "end": 10873,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.every.js",
          "specifiers": [],
          "start": 10774,
          "type": "ImportDeclaration"
        },
        {
          "end": 10974,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.filter.js",
          "specifiers": [],
          "start": 10874,
          "type": "ImportDeclaration"
        },
        {
          "end": 11073,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.find.js",
          "specifiers": [],
          "start": 10975,
          "type": "ImportDeclaration"
        },
        {
          "end": 11176,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.find-key.js",
          "specifiers": [],
          "start": 11074,
          "type": "ImportDeclaration"
        },
        {
          "end": 11275,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.from.js",
          "specifiers": [],
          "start": 11177,
          "type": "ImportDeclaration"
        },
        {
          "end": 11378,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.includes.js",
          "specifiers": [],
          "start": 11276,
          "type": "ImportDeclaration"
        },
        {
          "end": 11479,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.key-by.js",
          "specifiers": [],
          "start": 11379,
          "type": "ImportDeclaration"
        },
        {
          "end": 11580,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.key-of.js",
          "specifiers": [],
          "start": 11480,
          "type": "ImportDeclaration"
        },
        {
          "end": 11683,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.map-keys.js",
          "specifiers": [],
          "start": 11581,
          "type": "ImportDeclaration"
        },
        {
          "end": 11788,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.map-values.js",
          "specifiers": [],
          "start": 11684,
          "type": "ImportDeclaration"
        },
        {
          "end": 11888,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.merge.js",
          "specifiers": [],
          "start": 11789,
          "type": "ImportDeclaration"
        },
        {
          "end": 11985,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.of.js",
          "specifiers": [],
          "start": 11889,
          "type": "ImportDeclaration"
        },
        {
          "end": 12086,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.reduce.js",
          "specifiers": [],
          "start": 11986,
          "type": "ImportDeclaration"
        },
        {
          "end": 12185,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.some.js",
          "specifiers": [],
          "start": 12087,
          "type": "ImportDeclaration"
        },
        {
          "end": 12286,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.update.js",
          "specifiers": [],
          "start": 12186,
          "type": "ImportDeclaration"
        },
        {
          "end": 12397,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.update-or-insert.js",
          "specifiers": [],
          "start": 12287,
          "type": "ImportDeclaration"
        },
        {
          "end": 12498,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.map.upsert.js",
          "specifiers": [],
          "start": 12398,
          "type": "ImportDeclaration"
        },
        {
          "end": 12599,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.clamp.js",
          "specifiers": [],
          "start": 12499,
          "type": "ImportDeclaration"
        },
        {
          "end": 12706,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.deg-per-rad.js",
          "specifiers": [],
          "start": 12600,
          "type": "ImportDeclaration"
        },
        {
          "end": 12809,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.degrees.js",
          "specifiers": [],
          "start": 12707,
          "type": "ImportDeclaration"
        },
        {
          "end": 12911,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.fscale.js",
          "specifiers": [],
          "start": 12810,
          "type": "ImportDeclaration"
        },
        {
          "end": 13015,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.f16round.js",
          "specifiers": [],
          "start": 12912,
          "type": "ImportDeclaration"
        },
        {
          "end": 13116,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.iaddh.js",
          "specifiers": [],
          "start": 13016,
          "type": "ImportDeclaration"
        },
        {
          "end": 13217,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.imulh.js",
          "specifiers": [],
          "start": 13117,
          "type": "ImportDeclaration"
        },
        {
          "end": 13318,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.isubh.js",
          "specifiers": [],
          "start": 13218,
          "type": "ImportDeclaration"
        },
        {
          "end": 13425,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.rad-per-deg.js",
          "specifiers": [],
          "start": 13319,
          "type": "ImportDeclaration"
        },
        {
          "end": 13528,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.radians.js",
          "specifiers": [],
          "start": 13426,
          "type": "ImportDeclaration"
        },
        {
          "end": 13629,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.scale.js",
          "specifiers": [],
          "start": 13529,
          "type": "ImportDeclaration"
        },
        {
          "end": 13736,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.seeded-prng.js",
          "specifiers": [],
          "start": 13630,
          "type": "ImportDeclaration"
        },
        {
          "end": 13839,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.signbit.js",
          "specifiers": [],
          "start": 13737,
          "type": "ImportDeclaration"
        },
        {
          "end": 13940,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.math.umulh.js",
          "specifiers": [],
          "start": 13840,
          "type": "ImportDeclaration"
        },
        {
          "end": 14049,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.number.from-string.js",
          "specifiers": [],
          "start": 13941,
          "type": "ImportDeclaration"
        },
        {
          "end": 14152,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.number.range.js",
          "specifiers": [],
          "start": 14050,
          "type": "ImportDeclaration"
        },
        {
          "end": 14265,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.object.iterate-entries.js",
          "specifiers": [],
          "start": 14153,
          "type": "ImportDeclaration"
        },
        {
          "end": 14375,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.object.iterate-keys.js",
          "specifiers": [],
          "start": 14266,
          "type": "ImportDeclaration"
        },
        {
          "end": 14487,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.object.iterate-values.js",
          "specifiers": [],
          "start": 14376,
          "type": "ImportDeclaration"
        },
        {
          "end": 14588,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.observable.js",
          "specifiers": [],
          "start": 14488,
          "type": "ImportDeclaration"
        },
        {
          "end": 14690,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.promise.try.js",
          "specifiers": [],
          "start": 14589,
          "type": "ImportDeclaration"
        },
        {
          "end": 14804,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.define-metadata.js",
          "specifiers": [],
          "start": 14691,
          "type": "ImportDeclaration"
        },
        {
          "end": 14918,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.delete-metadata.js",
          "specifiers": [],
          "start": 14805,
          "type": "ImportDeclaration"
        },
        {
          "end": 15029,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-metadata.js",
          "specifiers": [],
          "start": 14919,
          "type": "ImportDeclaration"
        },
        {
          "end": 15145,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js",
          "specifiers": [],
          "start": 15030,
          "type": "ImportDeclaration"
        },
        {
          "end": 15260,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-own-metadata.js",
          "specifiers": [],
          "start": 15146,
          "type": "ImportDeclaration"
        },
        {
          "end": 15380,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js",
          "specifiers": [],
          "start": 15261,
          "type": "ImportDeclaration"
        },
        {
          "end": 15491,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.has-metadata.js",
          "specifiers": [],
          "start": 15381,
          "type": "ImportDeclaration"
        },
        {
          "end": 15606,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.has-own-metadata.js",
          "specifiers": [],
          "start": 15492,
          "type": "ImportDeclaration"
        },
        {
          "end": 15713,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.reflect.metadata.js",
          "specifiers": [],
          "start": 15607,
          "type": "ImportDeclaration"
        },
        {
          "end": 15817,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.regexp.escape.js",
          "specifiers": [],
          "start": 15714,
          "type": "ImportDeclaration"
        },
        {
          "end": 15919,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.add-all.js",
          "specifiers": [],
          "start": 15818,
          "type": "ImportDeclaration"
        },
        {
          "end": 16024,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.delete-all.js",
          "specifiers": [],
          "start": 15920,
          "type": "ImportDeclaration"
        },
        {
          "end": 16132,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.difference.v2.js",
          "specifiers": [],
          "start": 16025,
          "type": "ImportDeclaration"
        },
        {
          "end": 16237,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.difference.js",
          "specifiers": [],
          "start": 16133,
          "type": "ImportDeclaration"
        },
        {
          "end": 16337,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.every.js",
          "specifiers": [],
          "start": 16238,
          "type": "ImportDeclaration"
        },
        {
          "end": 16438,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.filter.js",
          "specifiers": [],
          "start": 16338,
          "type": "ImportDeclaration"
        },
        {
          "end": 16537,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.find.js",
          "specifiers": [],
          "start": 16439,
          "type": "ImportDeclaration"
        },
        {
          "end": 16636,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.from.js",
          "specifiers": [],
          "start": 16538,
          "type": "ImportDeclaration"
        },
        {
          "end": 16746,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.intersection.v2.js",
          "specifiers": [],
          "start": 16637,
          "type": "ImportDeclaration"
        },
        {
          "end": 16853,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.intersection.js",
          "specifiers": [],
          "start": 16747,
          "type": "ImportDeclaration"
        },
        {
          "end": 16967,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js",
          "specifiers": [],
          "start": 16854,
          "type": "ImportDeclaration"
        },
        {
          "end": 17078,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-disjoint-from.js",
          "specifiers": [],
          "start": 16968,
          "type": "ImportDeclaration"
        },
        {
          "end": 17188,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js",
          "specifiers": [],
          "start": 17079,
          "type": "ImportDeclaration"
        },
        {
          "end": 17295,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-subset-of.js",
          "specifiers": [],
          "start": 17189,
          "type": "ImportDeclaration"
        },
        {
          "end": 17407,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js",
          "specifiers": [],
          "start": 17296,
          "type": "ImportDeclaration"
        },
        {
          "end": 17516,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.is-superset-of.js",
          "specifiers": [],
          "start": 17408,
          "type": "ImportDeclaration"
        },
        {
          "end": 17615,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.join.js",
          "specifiers": [],
          "start": 17517,
          "type": "ImportDeclaration"
        },
        {
          "end": 17713,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.map.js",
          "specifiers": [],
          "start": 17616,
          "type": "ImportDeclaration"
        },
        {
          "end": 17810,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.of.js",
          "specifiers": [],
          "start": 17714,
          "type": "ImportDeclaration"
        },
        {
          "end": 17911,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.reduce.js",
          "specifiers": [],
          "start": 17811,
          "type": "ImportDeclaration"
        },
        {
          "end": 18010,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.some.js",
          "specifiers": [],
          "start": 17912,
          "type": "ImportDeclaration"
        },
        {
          "end": 18128,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js",
          "specifiers": [],
          "start": 18011,
          "type": "ImportDeclaration"
        },
        {
          "end": 18243,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.symmetric-difference.js",
          "specifiers": [],
          "start": 18129,
          "type": "ImportDeclaration"
        },
        {
          "end": 18346,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.union.v2.js",
          "specifiers": [],
          "start": 18244,
          "type": "ImportDeclaration"
        },
        {
          "end": 18446,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.set.union.js",
          "specifiers": [],
          "start": 18347,
          "type": "ImportDeclaration"
        },
        {
          "end": 18546,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.at.js",
          "specifiers": [],
          "start": 18447,
          "type": "ImportDeclaration"
        },
        {
          "end": 18650,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.cooked.js",
          "specifiers": [],
          "start": 18547,
          "type": "ImportDeclaration"
        },
        {
          "end": 18759,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.code-points.js",
          "specifiers": [],
          "start": 18651,
          "type": "ImportDeclaration"
        },
        {
          "end": 18863,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.string.dedent.js",
          "specifiers": [],
          "start": 18760,
          "type": "ImportDeclaration"
        },
        {
          "end": 18974,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.async-dispose.js",
          "specifiers": [],
          "start": 18864,
          "type": "ImportDeclaration"
        },
        {
          "end": 19079,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.dispose.js",
          "specifiers": [],
          "start": 18975,
          "type": "ImportDeclaration"
        },
        {
          "end": 19197,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-registered-symbol.js",
          "specifiers": [],
          "start": 19080,
          "type": "ImportDeclaration"
        },
        {
          "end": 19308,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-registered.js",
          "specifiers": [],
          "start": 19198,
          "type": "ImportDeclaration"
        },
        {
          "end": 19426,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-well-known-symbol.js",
          "specifiers": [],
          "start": 19309,
          "type": "ImportDeclaration"
        },
        {
          "end": 19537,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.is-well-known.js",
          "specifiers": [],
          "start": 19427,
          "type": "ImportDeclaration"
        },
        {
          "end": 19642,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.matcher.js",
          "specifiers": [],
          "start": 19538,
          "type": "ImportDeclaration"
        },
        {
          "end": 19748,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.metadata.js",
          "specifiers": [],
          "start": 19643,
          "type": "ImportDeclaration"
        },
        {
          "end": 19858,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.metadata-key.js",
          "specifiers": [],
          "start": 19749,
          "type": "ImportDeclaration"
        },
        {
          "end": 19966,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.observable.js",
          "specifiers": [],
          "start": 19859,
          "type": "ImportDeclaration"
        },
        {
          "end": 20077,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.pattern-match.js",
          "specifiers": [],
          "start": 19967,
          "type": "ImportDeclaration"
        },
        {
          "end": 20186,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.symbol.replace-all.js",
          "specifiers": [],
          "start": 20078,
          "type": "ImportDeclaration"
        },
        {
          "end": 20299,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.from-async.js",
          "specifiers": [],
          "start": 20187,
          "type": "ImportDeclaration"
        },
        {
          "end": 20412,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.filter-out.js",
          "specifiers": [],
          "start": 20300,
          "type": "ImportDeclaration"
        },
        {
          "end": 20528,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.filter-reject.js",
          "specifiers": [],
          "start": 20413,
          "type": "ImportDeclaration"
        },
        {
          "end": 20639,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.group-by.js",
          "specifiers": [],
          "start": 20529,
          "type": "ImportDeclaration"
        },
        {
          "end": 20752,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.to-spliced.js",
          "specifiers": [],
          "start": 20640,
          "type": "ImportDeclaration"
        },
        {
          "end": 20864,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.typed-array.unique-by.js",
          "specifiers": [],
          "start": 20753,
          "type": "ImportDeclaration"
        },
        {
          "end": 20978,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.from-base64.js",
          "specifiers": [],
          "start": 20865,
          "type": "ImportDeclaration"
        },
        {
          "end": 21089,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.from-hex.js",
          "specifiers": [],
          "start": 20979,
          "type": "ImportDeclaration"
        },
        {
          "end": 21201,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.to-base64.js",
          "specifiers": [],
          "start": 21090,
          "type": "ImportDeclaration"
        },
        {
          "end": 21310,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.uint8-array.to-hex.js",
          "specifiers": [],
          "start": 21202,
          "type": "ImportDeclaration"
        },
        {
          "end": 21420,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.delete-all.js",
          "specifiers": [],
          "start": 21311,
          "type": "ImportDeclaration"
        },
        {
          "end": 21524,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.from.js",
          "specifiers": [],
          "start": 21421,
          "type": "ImportDeclaration"
        },
        {
          "end": 21626,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.of.js",
          "specifiers": [],
          "start": 21525,
          "type": "ImportDeclaration"
        },
        {
          "end": 21733,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.emplace.js",
          "specifiers": [],
          "start": 21627,
          "type": "ImportDeclaration"
        },
        {
          "end": 21839,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-map.upsert.js",
          "specifiers": [],
          "start": 21734,
          "type": "ImportDeclaration"
        },
        {
          "end": 21946,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.add-all.js",
          "specifiers": [],
          "start": 21840,
          "type": "ImportDeclaration"
        },
        {
          "end": 22056,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.delete-all.js",
          "specifiers": [],
          "start": 21947,
          "type": "ImportDeclaration"
        },
        {
          "end": 22160,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.from.js",
          "specifiers": [],
          "start": 22057,
          "type": "ImportDeclaration"
        },
        {
          "end": 22262,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/esnext.weak-set.of.js",
          "specifiers": [],
          "start": 22161,
          "type": "ImportDeclaration"
        },
        {
          "end": 22369,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.dom-exception.stack.js",
          "specifiers": [],
          "start": 22263,
          "type": "ImportDeclaration"
        },
        {
          "end": 22466,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.immediate.js",
          "specifiers": [],
          "start": 22370,
          "type": "ImportDeclaration"
        },
        {
          "end": 22558,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.self.js",
          "specifiers": [],
          "start": 22467,
          "type": "ImportDeclaration"
        },
        {
          "end": 22662,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.structured-clone.js",
          "specifiers": [],
          "start": 22559,
          "type": "ImportDeclaration"
        },
        {
          "end": 22763,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url.can-parse.js",
          "specifiers": [],
          "start": 22663,
          "type": "ImportDeclaration"
        },
        {
          "end": 22875,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url-search-params.delete.js",
          "specifiers": [],
          "start": 22764,
          "type": "ImportDeclaration"
        },
        {
          "end": 22984,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url-search-params.has.js",
          "specifiers": [],
          "start": 22876,
          "type": "ImportDeclaration"
        },
        {
          "end": 23094,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/core-js/modules/web.url-search-params.size.js",
          "specifiers": [],
          "start": 22985,
          "type": "ImportDeclaration"
        },
        {
          "end": 23189,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/regenerator-runtime/runtime.js",
          "specifiers": [],
          "start": 23095,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\core\\route.tsx": [
        {
          "end": 119,
          "importKind": "value",
          "source": "react",
          "specifiers": [
            {
              "local": "React",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 93,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\core\\terminal.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\exports.ts": [
        {
          "end": 150,
          "exportKind": "value",
          "source": "./core/defineApp",
          "specifiers": [
            {
              "exported": "defineApp",
              "local": "defineApp",
              "type": "ExportSpecifier"
            }
          ],
          "start": 106,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 204,
          "exportKind": "type",
          "source": "./core/defineApp",
          "specifiers": [
            {
              "exported": "RuntimeConfig",
              "local": "RuntimeConfig",
              "type": "ExportSpecifier"
            }
          ],
          "start": 151,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 831,
          "exportKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
          "specifiers": [
            {
              "exported": "createBrowserHistory",
              "local": "createBrowserHistory",
              "type": "ExportSpecifier"
            },
            {
              "exported": "createHashHistory",
              "local": "createHashHistory",
              "type": "ExportSpecifier"
            },
            {
              "exported": "createMemoryHistory",
              "local": "createMemoryHistory",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Helmet",
              "local": "Helmet",
              "type": "ExportSpecifier"
            },
            {
              "exported": "HelmetProvider",
              "local": "HelmetProvider",
              "type": "ExportSpecifier"
            },
            {
              "exported": "createSearchParams",
              "local": "createSearchParams",
              "type": "ExportSpecifier"
            },
            {
              "exported": "generatePath",
              "local": "generatePath",
              "type": "ExportSpecifier"
            },
            {
              "exported": "matchPath",
              "local": "matchPath",
              "type": "ExportSpecifier"
            },
            {
              "exported": "matchRoutes",
              "local": "matchRoutes",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Navigate",
              "local": "Navigate",
              "type": "ExportSpecifier"
            },
            {
              "exported": "NavLink",
              "local": "NavLink",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Outlet",
              "local": "Outlet",
              "type": "ExportSpecifier"
            },
            {
              "exported": "resolvePath",
              "local": "resolvePath",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useLocation",
              "local": "useLocation",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useMatch",
              "local": "useMatch",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useNavigate",
              "local": "useNavigate",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useOutlet",
              "local": "useOutlet",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useOutletContext",
              "local": "useOutletContext",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useParams",
              "local": "useParams",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useResolvedPath",
              "local": "useResolvedPath",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useRoutes",
              "local": "useRoutes",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useSearchParams",
              "local": "useSearchParams",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useAppData",
              "local": "useAppData",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useClientLoaderData",
              "local": "useClientLoaderData",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useLoaderData",
              "local": "useLoaderData",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useRouteProps",
              "local": "useRouteProps",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useSelectedRoutes",
              "local": "useSelectedRoutes",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useServerLoaderData",
              "local": "useServerLoaderData",
              "type": "ExportSpecifier"
            },
            {
              "exported": "renderClient",
              "local": "renderClient",
              "type": "ExportSpecifier"
            },
            {
              "exported": "__getRoot",
              "local": "__getRoot",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Link",
              "local": "Link",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useRouteData",
              "local": "useRouteData",
              "type": "ExportSpecifier"
            },
            {
              "exported": "__useFetcher",
              "local": "__useFetcher",
              "type": "ExportSpecifier"
            },
            {
              "exported": "withRouter",
              "local": "withRouter",
              "type": "ExportSpecifier"
            }
          ],
          "start": 259,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 952,
          "exportKind": "type",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
          "specifiers": [
            {
              "exported": "History",
              "local": "History",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ClientLoader",
              "local": "ClientLoader",
              "type": "ExportSpecifier"
            }
          ],
          "start": 832,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1113,
          "exportKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/umi/client/client/plugin.js",
          "specifiers": [
            {
              "exported": "ApplyPluginsType",
              "local": "ApplyPluginsType",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PluginManager",
              "local": "PluginManager",
              "type": "ExportSpecifier"
            }
          ],
          "start": 981,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1170,
          "exportKind": "value",
          "source": "./core/history",
          "specifiers": [
            {
              "exported": "history",
              "local": "history",
              "type": "ExportSpecifier"
            },
            {
              "exported": "createHistory",
              "local": "createHistory",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1114,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1214,
          "exportKind": "value",
          "source": "./core/terminal",
          "specifiers": [
            {
              "exported": "terminal",
              "local": "terminal",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1171,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1337,
          "exportKind": "value",
          "source": "./testBrowser",
          "specifiers": [
            {
              "exported": "TestBrowser",
              "local": "TestBrowser",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1293,
          "type": "ExportNamedDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\testBrowser.tsx": [
        {
          "end": 144,
          "importKind": "value",
          "source": "react",
          "specifiers": [
            {
              "local": "React",
              "type": "ImportDefaultSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            }
          ],
          "start": 93,
          "type": "ImportDeclaration"
        },
        {
          "end": 184,
          "importKind": "value",
          "source": "umi",
          "specifiers": [
            {
              "imported": "ApplyPluginsType",
              "local": "ApplyPluginsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 145,
          "type": "ImportDeclaration"
        },
        {
          "end": 310,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
          "specifiers": [
            {
              "imported": "renderClient",
              "local": "renderClient",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RenderClientOpts",
              "local": "RenderClientOpts",
              "type": "ImportSpecifier"
            }
          ],
          "start": 185,
          "type": "ImportDeclaration"
        },
        {
          "end": 358,
          "importKind": "value",
          "source": "./core/history",
          "specifiers": [
            {
              "imported": "createHistory",
              "local": "createHistory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 311,
          "type": "ImportDeclaration"
        },
        {
          "end": 411,
          "importKind": "value",
          "source": "./core/plugin",
          "specifiers": [
            {
              "imported": "createPluginManager",
              "local": "createPluginManager",
              "type": "ImportSpecifier"
            }
          ],
          "start": 359,
          "type": "ImportDeclaration"
        },
        {
          "end": 453,
          "importKind": "value",
          "source": "./core/route",
          "specifiers": [
            {
              "imported": "getRoutes",
              "local": "getRoutes",
              "type": "ImportSpecifier"
            }
          ],
          "start": 412,
          "type": "ImportDeclaration"
        },
        {
          "end": 494,
          "importKind": "type",
          "source": "history",
          "specifiers": [
            {
              "imported": "Location",
              "local": "Location",
              "type": "ImportSpecifier"
            }
          ],
          "start": 454,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\.umi\\umi.ts": [
        {
          "end": 118,
          "importKind": "value",
          "source": "./core/polyfill",
          "specifiers": [],
          "start": 93,
          "type": "ImportDeclaration"
        },
        {
          "end": 227,
          "importKind": "value",
          "source": "D:/trae_projects/makemd/makemd/dashboard/node_modules/@umijs/renderer-react",
          "specifiers": [
            {
              "imported": "renderClient",
              "local": "renderClient",
              "type": "ImportSpecifier"
            }
          ],
          "start": 120,
          "type": "ImportDeclaration"
        },
        {
          "end": 269,
          "importKind": "value",
          "source": "./core/route",
          "specifiers": [
            {
              "imported": "getRoutes",
              "local": "getRoutes",
              "type": "ImportSpecifier"
            }
          ],
          "start": 228,
          "type": "ImportDeclaration"
        },
        {
          "end": 322,
          "importKind": "value",
          "source": "./core/plugin",
          "specifiers": [
            {
              "imported": "createPluginManager",
              "local": "createPluginManager",
              "type": "ImportSpecifier"
            }
          ],
          "start": 270,
          "type": "ImportDeclaration"
        },
        {
          "end": 370,
          "importKind": "value",
          "source": "./core/history",
          "specifiers": [
            {
              "imported": "createHistory",
              "local": "createHistory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 323,
          "type": "ImportDeclaration"
        },
        {
          "end": 410,
          "importKind": "value",
          "source": "umi",
          "specifiers": [
            {
              "imported": "ApplyPluginsType",
              "local": "ApplyPluginsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 371,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\app.ts": [
        {
          "end": 545,
          "source": "./mock/browser",
          "start": 529,
          "type": "DynamicImport"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\components\\HierarchySelector\\index.tsx": [
        {
          "end": 459,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useCallback",
              "local": "useCallback",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Cascader",
              "local": "Cascader",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TreeSelect",
              "local": "TreeSelect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ApartmentOutlined",
              "local": "ApartmentOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BankOutlined",
              "local": "BankOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownOutlined",
              "local": "DownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 163,
          "type": "ImportDeclaration"
        },
        {
          "end": 518,
          "importKind": "type",
          "source": "antd/es/cascader",
          "specifiers": [
            {
              "imported": "DefaultOptionType",
              "local": "DefaultOptionType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 460,
          "type": "ImportDeclaration"
        },
        {
          "end": 563,
          "importKind": "type",
          "source": "antd",
          "specifiers": [
            {
              "imported": "TreeSelectProps",
              "local": "TreeSelectProps",
              "type": "ImportSpecifier"
            }
          ],
          "start": 519,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\components\\Navbar.tsx": [
        {
          "end": 137,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MenuOutlined",
              "local": "MenuOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "XOutlined",
              "local": "XOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Link",
              "local": "Link",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useLocation",
              "local": "useLocation",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\components\\ai-suggestion\\AISuggestionDisplay.tsx": [
        {
          "end": 457,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "List",
              "local": "List",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Collapse",
              "local": "Collapse",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popover",
              "local": "Popover",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RobotOutlined",
              "local": "RobotOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChartOutlined",
              "local": "LineChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PieChartOutlined",
              "local": "PieChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowUpOutlined",
              "local": "ArrowUpOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowDownOutlined",
              "local": "ArrowDownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "QuestionCircleOutlined",
              "local": "QuestionCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Panel",
              "local": "Panel",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\components\\human-approval\\HumanApprovalForm.tsx": [
        {
          "end": 370,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Radio",
              "local": "Radio",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SaveOutlined",
              "local": "SaveOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UndoOutlined",
              "local": "UndoOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExclamationCircleOutlined",
              "local": "ExclamationCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TextArea",
              "local": "TextArea",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\contexts\\LocaleContext.tsx": [
        {
          "end": 89,
          "importKind": "value",
          "source": "react",
          "specifiers": [
            {
              "imported": "createContext",
              "local": "createContext",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useContext",
              "local": "useContext",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReactNode",
              "local": "ReactNode",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useCallback",
              "local": "useCallback",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\contexts\\UserContext.tsx": [
        {
          "end": 87,
          "importKind": "value",
          "source": "react",
          "specifiers": [
            {
              "imported": "createContext",
              "local": "createContext",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useContext",
              "local": "useContext",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReactNode",
              "local": "ReactNode",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\imports\\antd.ts": [
        {
          "end": 759,
          "importKind": "value",
          "source": "antd",
          "specifiers": [
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Dropdown",
              "local": "Dropdown",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Menu",
              "local": "Menu",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Drawer",
              "local": "Drawer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Image",
              "local": "Image",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Steps",
              "local": "Steps",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Pagination",
              "local": "Pagination",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Upload",
              "local": "Upload",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popover",
              "local": "Popover",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tree",
              "local": "Tree",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TreeSelect",
              "local": "TreeSelect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Radio",
              "local": "Radio",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Slider",
              "local": "Slider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AutoComplete",
              "local": "AutoComplete",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Cascader",
              "local": "Cascader",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TimePicker",
              "local": "TimePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Calendar",
              "local": "Calendar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "List",
              "local": "List",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Skeleton",
              "local": "Skeleton",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Empty",
              "local": "Empty",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Result",
              "local": "Result",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Segmented",
              "local": "Segmented",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tour",
              "local": "Tour",
              "type": "ImportSpecifier"
            },
            {
              "imported": "App",
              "local": "App",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Rate",
              "local": "Rate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Avatar",
              "local": "Avatar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Collapse",
              "local": "Collapse",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Layout",
              "local": "Layout",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ConfigProvider",
              "local": "ConfigProvider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "theme",
              "local": "theme",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Breadcrumb",
              "local": "Breadcrumb",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Affix",
              "local": "Affix",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Anchor",
              "local": "Anchor",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BackTop",
              "local": "BackTop",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ConfigProvider",
              "local": "AntConfigProvider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Carousel",
              "local": "Carousel",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ColorPicker",
              "local": "ColorPicker",
              "type": "ImportSpecifier"
            }
          ],
          "start": 22,
          "type": "ImportDeclaration"
        },
        {
          "end": 1641,
          "exportKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "exported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ExportSpecifier"
            },
            {
              "exported": "TablePaginationConfig",
              "local": "TablePaginationConfig",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1569,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1739,
          "exportKind": "type",
          "source": "antd/es/table/interface",
          "specifiers": [
            {
              "exported": "FilterValue",
              "local": "FilterValue",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SorterResult",
              "local": "SorterResult",
              "type": "ExportSpecifier"
            },
            {
              "exported": "TableCurrentDataSource",
              "local": "TableCurrentDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1642,
          "type": "ExportNamedDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\imports\\charts.ts": [
        {
          "end": 465,
          "exportKind": "value",
          "source": "recharts",
          "specifiers": [
            {
              "exported": "Line",
              "local": "Line",
              "type": "ExportSpecifier"
            },
            {
              "exported": "LineChart",
              "local": "LineChart",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Bar",
              "local": "Bar",
              "type": "ExportSpecifier"
            },
            {
              "exported": "BarChart",
              "local": "BarChart",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Scatter",
              "local": "Scatter",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ScatterChart",
              "local": "ScatterChart",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Radar",
              "local": "Radar",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RadarChart",
              "local": "RadarChart",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RadialBar",
              "local": "RadialBar",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RadialBarChart",
              "local": "RadialBarChart",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Funnel",
              "local": "Funnel",
              "type": "ExportSpecifier"
            },
            {
              "exported": "FunnelChart",
              "local": "FunnelChart",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Sankey",
              "local": "Sankey",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Treemap",
              "local": "Treemap",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ResponsiveContainer",
              "local": "ResponsiveContainer",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Legend",
              "local": "Legend",
              "type": "ExportSpecifier"
            },
            {
              "exported": "XAxis",
              "local": "XAxis",
              "type": "ExportSpecifier"
            },
            {
              "exported": "YAxis",
              "local": "YAxis",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ZAxis",
              "local": "ZAxis",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CartesianGrid",
              "local": "CartesianGrid",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Cell",
              "local": "Cell",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ReferenceLine",
              "local": "ReferenceLine",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ReferenceArea",
              "local": "ReferenceArea",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ReferenceDot",
              "local": "ReferenceDot",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Brush",
              "local": "Brush",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PolarGrid",
              "local": "PolarGrid",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PolarAngleAxis",
              "local": "PolarAngleAxis",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PolarRadiusAxis",
              "local": "PolarRadiusAxis",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PieChart",
              "local": "PieChart",
              "type": "ExportSpecifier"
            },
            {
              "exported": "AreaChart",
              "local": "AreaChart",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RechartsTooltip",
              "local": "Tooltip",
              "type": "ExportSpecifier"
            }
          ],
          "start": 22,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 535,
          "exportKind": "value",
          "source": "recharts",
          "specifiers": [
            {
              "exported": "RechartsPie",
              "local": "Pie",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RechartsArea",
              "local": "Area",
              "type": "ExportSpecifier"
            }
          ],
          "start": 467,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 601,
          "exportKind": "value",
          "source": "@ant-design/charts",
          "specifiers": [
            {
              "exported": "Area",
              "local": "Area",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Pie",
              "local": "Pie",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Column",
              "local": "Column",
              "type": "ExportSpecifier"
            },
            {
              "exported": "DualAxes",
              "local": "DualAxes",
              "type": "ExportSpecifier"
            }
          ],
          "start": 536,
          "type": "ExportNamedDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\imports\\constants.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\imports\\datasources.ts": [
        {
          "end": 67,
          "exportKind": "value",
          "source": "../services/productDataSource",
          "specifiers": [
            {
              "exported": "productDataSource",
              "local": "productDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 130,
          "exportKind": "value",
          "source": "../services/orderDataSource",
          "specifiers": [
            {
              "exported": "orderDataSource",
              "local": "orderDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 68,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 201,
          "exportKind": "value",
          "source": "../services/marketingDataSource",
          "specifiers": [
            {
              "exported": "marketingDataSource",
              "local": "marketingDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 131,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 272,
          "exportKind": "value",
          "source": "../services/dashboardDataSource",
          "specifiers": [
            {
              "exported": "dashboardDataSource",
              "local": "dashboardDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 202,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 343,
          "exportKind": "value",
          "source": "../services/inventoryDataSource",
          "specifiers": [
            {
              "exported": "inventoryDataSource",
              "local": "inventoryDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 273,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 410,
          "exportKind": "value",
          "source": "../services/financeDataSource",
          "specifiers": [
            {
              "exported": "financeDataSource",
              "local": "financeDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 344,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 481,
          "exportKind": "value",
          "source": "../services/suppliersDataSource",
          "specifiers": [
            {
              "exported": "suppliersDataSource",
              "local": "suppliersDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 411,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 546,
          "exportKind": "value",
          "source": "../services/returnDataSource",
          "specifiers": [
            {
              "exported": "returnDataSource",
              "local": "returnDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 482,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 615,
          "exportKind": "value",
          "source": "../services/settingsDataSource",
          "specifiers": [
            {
              "exported": "settingsDataSource",
              "local": "settingsDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 547,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 676,
          "exportKind": "value",
          "source": "../services/userDataSource",
          "specifiers": [
            {
              "exported": "userDataSource",
              "local": "userDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 616,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 741,
          "exportKind": "value",
          "source": "../services/abTestDataSource",
          "specifiers": [
            {
              "exported": "abTestDataSource",
              "local": "abTestDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 677,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 822,
          "exportKind": "value",
          "source": "../services/adOptimizationDataSource",
          "specifiers": [
            {
              "exported": "adOptimizationDataSource",
              "local": "adOptimizationDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 742,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 895,
          "exportKind": "value",
          "source": "../services/afterSalesDataSource",
          "specifiers": [
            {
              "exported": "afterSalesDataSource",
              "local": "afterSalesDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 823,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 972,
          "exportKind": "value",
          "source": "../services/aiActionTaskDataSource",
          "specifiers": [
            {
              "exported": "aiActionTaskDataSource",
              "local": "aiActionTaskDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 896,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1049,
          "exportKind": "value",
          "source": "../services/aiSuggestionDataSource",
          "specifiers": [
            {
              "exported": "aiSuggestionDataSource",
              "local": "aiSuggestionDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 973,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1120,
          "exportKind": "value",
          "source": "../services/analyticsDataSource",
          "specifiers": [
            {
              "exported": "analyticsDataSource",
              "local": "analyticsDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1050,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1191,
          "exportKind": "value",
          "source": "../services/arbitrageDataSource",
          "specifiers": [
            {
              "exported": "arbitrageDataSource",
              "local": "arbitrageDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1121,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1270,
          "exportKind": "value",
          "source": "../services/autoExecutionDataSource",
          "specifiers": [
            {
              "exported": "autoExecutionDataSource",
              "local": "autoExecutionDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1192,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1339,
          "exportKind": "value",
          "source": "../services/b2bTradeDataSource",
          "specifiers": [
            {
              "exported": "b2bTradeDataSource",
              "local": "b2bTradeDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1271,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1420,
          "exportKind": "value",
          "source": "../services/batchOperationDataSource",
          "specifiers": [
            {
              "exported": "batchOperationDataSource",
              "local": "batchOperationDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1340,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1491,
          "exportKind": "value",
          "source": "../services/blacklistDataSource",
          "specifiers": [
            {
              "exported": "blacklistDataSource",
              "local": "blacklistDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1421,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1566,
          "exportKind": "value",
          "source": "../services/certificateDataSource",
          "specifiers": [
            {
              "exported": "certificateDataSource",
              "local": "certificateDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1492,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1631,
          "exportKind": "value",
          "source": "../services/clientDataSource",
          "specifiers": [
            {
              "exported": "clientDataSource",
              "local": "clientDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1567,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1728,
          "exportKind": "value",
          "source": "../services/crossBorderIntegrationDataSource",
          "specifiers": [
            {
              "exported": "crossBorderIntegrationDataSource",
              "local": "crossBorderIntegrationDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1632,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1809,
          "exportKind": "value",
          "source": "../services/dynamicPricingDataSource",
          "specifiers": [
            {
              "exported": "dynamicPricingDataSource",
              "local": "dynamicPricingDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1729,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1892,
          "exportKind": "value",
          "source": "../services/executionResultDataSource",
          "specifiers": [
            {
              "exported": "executionResultDataSource",
              "local": "executionResultDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1810,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 1971,
          "exportKind": "value",
          "source": "../services/humanApprovalDataSource",
          "specifiers": [
            {
              "exported": "humanApprovalDataSource",
              "local": "humanApprovalDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1893,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2054,
          "exportKind": "value",
          "source": "../services/independentSiteDataSource",
          "specifiers": [
            {
              "exported": "independentSiteDataSource",
              "local": "independentSiteDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1972,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2129,
          "exportKind": "value",
          "source": "../services/leaderboardDataSource",
          "specifiers": [
            {
              "exported": "leaderboardDataSource",
              "local": "leaderboardDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2055,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2210,
          "exportKind": "value",
          "source": "../services/lightweightClientService",
          "specifiers": [
            {
              "exported": "lightweightClientService",
              "local": "lightweightClientService",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2130,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2281,
          "exportKind": "value",
          "source": "../services/logisticsDataSource",
          "specifiers": [
            {
              "exported": "logisticsDataSource",
              "local": "logisticsDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2211,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2370,
          "exportKind": "value",
          "source": "../services/materialProcessingDataSource",
          "specifiers": [
            {
              "exported": "materialProcessingDataSource",
              "local": "materialProcessingDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2282,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2451,
          "exportKind": "value",
          "source": "../services/operationAgentDataSource",
          "specifiers": [
            {
              "exported": "operationAgentDataSource",
              "local": "operationAgentDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2371,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2528,
          "exportKind": "value",
          "source": "../services/platformAuthDataSource",
          "specifiers": [
            {
              "exported": "platformAuthDataSource",
              "local": "platformAuthDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2452,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2603,
          "exportKind": "value",
          "source": "../services/procurementDataSource",
          "specifiers": [
            {
              "exported": "procurementDataSource",
              "local": "procurementDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2529,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2694,
          "exportKind": "value",
          "source": "../services/productManagementDataSource",
          "specifiers": [
            {
              "exported": "ProductManagementMockDataSource",
              "local": "ProductManagementMockDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2604,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2779,
          "exportKind": "value",
          "source": "../services/productSelectionDataSource",
          "specifiers": [
            {
              "exported": "productSelectionDataSource",
              "local": "productSelectionDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2695,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2846,
          "exportKind": "value",
          "source": "../services/reportsDataSource",
          "specifiers": [
            {
              "exported": "reportsDataSource",
              "local": "reportsDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2780,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 2919,
          "exportKind": "value",
          "source": "../services/saasTenantDataSource",
          "specifiers": [
            {
              "exported": "saasTenantDataSource",
              "local": "saasTenantDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2847,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 3000,
          "exportKind": "value",
          "source": "../services/serviceManagerDataSource",
          "specifiers": [
            {
              "exported": "serviceManagerDataSource",
              "local": "serviceManagerDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 2920,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 3073,
          "exportKind": "value",
          "source": "../services/shopReportDataSource",
          "specifiers": [
            {
              "exported": "shopReportDataSource",
              "local": "shopReportDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 3001,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 3152,
          "exportKind": "value",
          "source": "../services/storeCreationDataSource",
          "specifiers": [
            {
              "exported": "storeCreationDataSource",
              "local": "storeCreationDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 3074,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 3225,
          "exportKind": "value",
          "source": "../services/taskCenterDataSource",
          "specifiers": [
            {
              "exported": "taskCenterDataSource",
              "local": "taskCenterDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 3153,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 3314,
          "exportKind": "value",
          "source": "../services/unifiedFulfillmentDataSource",
          "specifiers": [
            {
              "exported": "unifiedFulfillmentDataSource",
              "local": "unifiedFulfillmentDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 3226,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 3385,
          "exportKind": "value",
          "source": "../services/userAssetDataSource",
          "specifiers": [
            {
              "exported": "userAssetDataSource",
              "local": "userAssetDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 3315,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 3456,
          "exportKind": "value",
          "source": "../services/warehouseDataSource",
          "specifiers": [
            {
              "exported": "warehouseDataSource",
              "local": "warehouseDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 3386,
          "type": "ExportNamedDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\imports\\icons.ts": [
        {
          "end": 2868,
          "exportKind": "value",
          "source": "@ant-design/icons",
          "specifiers": [
            {
              "exported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "TruckOutlined",
              "local": "TruckOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MoreOutlined",
              "local": "MoreOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ExportOutlined",
              "local": "ExportOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "FireOutlined",
              "local": "FireOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "StarOutlined",
              "local": "StarOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "TrophyOutlined",
              "local": "TrophyOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "AimOutlined",
              "local": "AimOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RiseOutlined",
              "local": "RiseOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "EnvironmentOutlined",
              "local": "EnvironmentOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CheckOutlined",
              "local": "CheckOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "UndoOutlined",
              "local": "UndoOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "AlertOutlined",
              "local": "AlertOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "InboxOutlined",
              "local": "InboxOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CreditCardOutlined",
              "local": "CreditCardOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "TransactionOutlined",
              "local": "TransactionOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CustomerServiceOutlined",
              "local": "CustomerServiceOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SortAscendingOutlined",
              "local": "SortAscendingOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SortDescendingOutlined",
              "local": "SortDescendingOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PrinterOutlined",
              "local": "PrinterOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MessageOutlined",
              "local": "MessageOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ExclamationCircleOutlined",
              "local": "ExclamationCircleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "AmazonOutlined",
              "local": "AmazonOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SendOutlined",
              "local": "SendOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SaveOutlined",
              "local": "SaveOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "BoxPlotOutlined",
              "local": "BoxPlotOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PictureOutlined",
              "local": "PictureOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "TranslationOutlined",
              "local": "TranslationOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "LinkOutlined",
              "local": "LinkOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "GlobalOutlined",
              "local": "GlobalOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "AppstoreOutlined",
              "local": "AppstoreOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "UploadOutlined",
              "local": "UploadOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "EyeInvisibleOutlined",
              "local": "EyeInvisibleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CopyOutlined",
              "local": "CopyOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ArrowUpOutlined",
              "local": "ArrowUpOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ArrowDownOutlined",
              "local": "ArrowDownOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "OrderedListOutlined",
              "local": "OrderedListOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "LineChartOutlined",
              "local": "LineChartOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ShoppingOutlined",
              "local": "ShoppingOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PauseCircleOutlined",
              "local": "PauseCircleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RocketOutlined",
              "local": "RocketOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RobotOutlined",
              "local": "RobotOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "VideoCameraOutlined",
              "local": "VideoCameraOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PieChartOutlined",
              "local": "PieChartOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ScheduleOutlined",
              "local": "ScheduleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "DownOutlined",
              "local": "DownOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "UpOutlined",
              "local": "UpOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "LeftOutlined",
              "local": "LeftOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RightOutlined",
              "local": "RightOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ArrowRightOutlined",
              "local": "ArrowRightOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ArrowLeftOutlined",
              "local": "ArrowLeftOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CloseOutlined",
              "local": "CloseOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MinusOutlined",
              "local": "MinusOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PlusCircleOutlined",
              "local": "PlusCircleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ExclamationCircleFilled",
              "local": "ExclamationCircleFilled",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CheckCircleFilled",
              "local": "CheckCircleFilled",
              "type": "ExportSpecifier"
            },
            {
              "exported": "LoadingOutlined",
              "local": "LoadingOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "StopOutlined",
              "local": "StopOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "HistoryOutlined",
              "local": "HistoryOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CrownOutlined",
              "local": "CrownOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "DashboardOutlined",
              "local": "DashboardOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "DatabaseOutlined",
              "local": "DatabaseOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "DesktopOutlined",
              "local": "DesktopOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "FolderOutlined",
              "local": "FolderOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "FundOutlined",
              "local": "FundOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "HomeOutlined",
              "local": "HomeOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "LaptopOutlined",
              "local": "LaptopOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MailOutlined",
              "local": "MailOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MobileOutlined",
              "local": "MobileOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "NotificationOutlined",
              "local": "NotificationOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "QuestionCircleOutlined",
              "local": "QuestionCircleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SafetyOutlined",
              "local": "SafetyOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ScanOutlined",
              "local": "ScanOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ShareAltOutlined",
              "local": "ShareAltOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ShoppingCartOutlined",
              "local": "ShoppingCartOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "TeamOutlined",
              "local": "TeamOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "UserOutlined",
              "local": "UserOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "DisconnectOutlined",
              "local": "DisconnectOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "GroupOutlined",
              "local": "GroupOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MonitorOutlined",
              "local": "MonitorOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "FallOutlined",
              "local": "FallOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "AreaChartOutlined",
              "local": "AreaChartOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ProductOutlined",
              "local": "ProductOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CalendarOutlined",
              "local": "CalendarOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "BellOutlined",
              "local": "BellOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MenuFoldOutlined",
              "local": "MenuFoldOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MenuUnfoldOutlined",
              "local": "MenuUnfoldOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "LogoutOutlined",
              "local": "LogoutOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ApartmentOutlined",
              "local": "ApartmentOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "BankOutlined",
              "local": "BankOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PhoneOutlined",
              "local": "PhoneOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "LockOutlined",
              "local": "LockOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ApiOutlined",
              "local": "ApiOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MenuOutlined",
              "local": "MenuOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "XOutlined",
              "local": "XOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "WalletOutlined",
              "local": "WalletOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SwapOutlined",
              "local": "SwapOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ExperimentOutlined",
              "local": "ExperimentOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MinusCircleOutlined",
              "local": "MinusCircleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "PercentageOutlined",
              "local": "PercentageOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "AuditOutlined",
              "local": "AuditOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "EyeTwoTone",
              "local": "EyeTwoTone",
              "type": "ExportSpecifier"
            },
            {
              "exported": "LoginOutlined",
              "local": "LoginOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "GoogleOutlined",
              "local": "GoogleOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "GithubOutlined",
              "local": "GithubOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "UserAddOutlined",
              "local": "UserAddOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ToolOutlined",
              "local": "ToolOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "FileExcelOutlined",
              "local": "FileExcelOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CalculatorOutlined",
              "local": "CalculatorOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "BulbOutlined",
              "local": "BulbOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RestOutlined",
              "local": "RestOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RadarChartOutlined",
              "local": "RadarChartOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SafetyCertificateOutlined",
              "local": "SafetyCertificateOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "FileSearchOutlined",
              "local": "FileSearchOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "TwitterOutlined",
              "local": "TwitterOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "LinkedinOutlined",
              "local": "LinkedinOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RedoOutlined",
              "local": "RedoOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "TabletOutlined",
              "local": "TabletOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "DragOutlined",
              "local": "DragOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "StarFilled",
              "local": "StarFilled",
              "type": "ExportSpecifier"
            },
            {
              "exported": "SoundOutlined",
              "local": "SoundOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "StockOutlined",
              "local": "StockOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CloudServerOutlined",
              "local": "CloudServerOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CloudDownloadOutlined",
              "local": "CloudDownloadOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "UnlockOutlined",
              "local": "UnlockOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "TagOutlined",
              "local": "TagOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CarOutlined",
              "local": "CarOutlined",
              "type": "ExportSpecifier"
            },
            {
              "exported": "BarcodeOutlined",
              "local": "BarcodeOutlined",
              "type": "ExportSpecifier"
            }
          ],
          "start": 22,
          "type": "ExportNamedDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\imports\\index.ts": [
        {
          "end": 46,
          "source": "./react",
          "start": 22,
          "type": "ExportAllDeclaration"
        },
        {
          "end": 70,
          "source": "./antd",
          "start": 47,
          "type": "ExportAllDeclaration"
        },
        {
          "end": 95,
          "source": "./icons",
          "start": 71,
          "type": "ExportAllDeclaration"
        },
        {
          "end": 121,
          "source": "./charts",
          "start": 96,
          "type": "ExportAllDeclaration"
        },
        {
          "end": 146,
          "source": "./utils",
          "start": 122,
          "type": "ExportAllDeclaration"
        },
        {
          "end": 177,
          "source": "./datasources",
          "start": 147,
          "type": "ExportAllDeclaration"
        },
        {
          "end": 206,
          "source": "./constants",
          "start": 178,
          "type": "ExportAllDeclaration"
        },
        {
          "end": 231,
          "source": "./types",
          "start": 207,
          "type": "ExportAllDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\imports\\react.ts": [
        {
          "end": 312,
          "exportKind": "value",
          "source": "react",
          "specifiers": [
            {
              "exported": "useState",
              "local": "useState",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useEffect",
              "local": "useEffect",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useCallback",
              "local": "useCallback",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useMemo",
              "local": "useMemo",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useRef",
              "local": "useRef",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useContext",
              "local": "useContext",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useReducer",
              "local": "useReducer",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useImperativeHandle",
              "local": "useImperativeHandle",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useLayoutEffect",
              "local": "useLayoutEffect",
              "type": "ExportSpecifier"
            },
            {
              "exported": "createContext",
              "local": "createContext",
              "type": "ExportSpecifier"
            },
            {
              "exported": "memo",
              "local": "memo",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Component",
              "local": "Component",
              "type": "ExportSpecifier"
            },
            {
              "exported": "forwardRef",
              "local": "forwardRef",
              "type": "ExportSpecifier"
            },
            {
              "exported": "lazy",
              "local": "lazy",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Suspense",
              "local": "Suspense",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Children",
              "local": "Children",
              "type": "ExportSpecifier"
            },
            {
              "exported": "isValidElement",
              "local": "isValidElement",
              "type": "ExportSpecifier"
            },
            {
              "exported": "cloneElement",
              "local": "cloneElement",
              "type": "ExportSpecifier"
            },
            {
              "exported": "createElement",
              "local": "createElement",
              "type": "ExportSpecifier"
            }
          ],
          "start": 22,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 576,
          "exportKind": "type",
          "source": "react",
          "specifiers": [
            {
              "exported": "FC",
              "local": "FC",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ComponentType",
              "local": "ComponentType",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MemoExoticComponent",
              "local": "MemoExoticComponent",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ReactNode",
              "local": "ReactNode",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ChangeEvent",
              "local": "ChangeEvent",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MouseEvent",
              "local": "MouseEvent",
              "type": "ExportSpecifier"
            },
            {
              "exported": "KeyboardEvent",
              "local": "KeyboardEvent",
              "type": "ExportSpecifier"
            },
            {
              "exported": "FormEvent",
              "local": "FormEvent",
              "type": "ExportSpecifier"
            },
            {
              "exported": "RefObject",
              "local": "RefObject",
              "type": "ExportSpecifier"
            },
            {
              "exported": "MutableRefObject",
              "local": "MutableRefObject",
              "type": "ExportSpecifier"
            },
            {
              "exported": "InputHTMLAttributes",
              "local": "InputHTMLAttributes",
              "type": "ExportSpecifier"
            },
            {
              "exported": "CSSProperties",
              "local": "CSSProperties",
              "type": "ExportSpecifier"
            },
            {
              "exported": "HTMLAttributes",
              "local": "HTMLAttributes",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ComponentProps",
              "local": "ComponentProps",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Key",
              "local": "Key",
              "type": "ExportSpecifier"
            }
          ],
          "start": 313,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 673,
          "exportKind": "value",
          "source": "react-router-dom",
          "specifiers": [
            {
              "exported": "useNavigate",
              "local": "useNavigate",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useLocation",
              "local": "useLocation",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useParams",
              "local": "useParams",
              "type": "ExportSpecifier"
            },
            {
              "exported": "useSearchParams",
              "local": "useSearchParams",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Outlet",
              "local": "Outlet",
              "type": "ExportSpecifier"
            }
          ],
          "start": 577,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 714,
          "exportKind": "value",
          "source": "react-router-dom",
          "specifiers": [
            {
              "exported": "Link",
              "local": "Link",
              "type": "ExportSpecifier"
            }
          ],
          "start": 674,
          "type": "ExportNamedDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\imports\\types.ts": [
        {
          "end": 115,
          "exportKind": "type",
          "source": "../services/productDataSource",
          "specifiers": [
            {
              "exported": "Product",
              "local": "Product",
              "type": "ExportSpecifier"
            },
            {
              "exported": "Shop",
              "local": "Shop",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ProductFilter",
              "local": "ProductFilter",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ProductSort",
              "local": "ProductSort",
              "type": "ExportSpecifier"
            },
            {
              "exported": "ProductDataSource",
              "local": "ProductDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 183,
          "exportKind": "type",
          "source": "../services/orderDataSource",
          "specifiers": [
            {
              "exported": "OrderDataSource",
              "local": "OrderDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 116,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 279,
          "exportKind": "type",
          "source": "../services/productManagementDataSource",
          "specifiers": [
            {
              "exported": "ProductManagementMockDataSource",
              "local": "ProductManagementMockDataSource",
              "type": "ExportSpecifier"
            }
          ],
          "start": 184,
          "type": "ExportNamedDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\imports\\utils.ts": [
        {
          "end": 44,
          "exportKind": "value",
          "source": "moment",
          "specifiers": [
            {
              "exported": "moment",
              "local": "default",
              "type": "ExportSpecifier"
            }
          ],
          "start": 1,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 86,
          "exportKind": "value",
          "source": "dayjs",
          "specifiers": [
            {
              "exported": "dayjs",
              "local": "default",
              "type": "ExportSpecifier"
            }
          ],
          "start": 45,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 127,
          "importKind": "value",
          "source": "lodash/debounce",
          "specifiers": [
            {
              "local": "_debounce",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 87,
          "type": "ImportDeclaration"
        },
        {
          "end": 168,
          "importKind": "value",
          "source": "lodash/throttle",
          "specifiers": [
            {
              "local": "_throttle",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 128,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\layouts\\index.tsx": [
        {
          "end": 631,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useMemo",
              "local": "useMemo",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Layout",
              "local": "Layout",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Menu",
              "local": "Menu",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Avatar",
              "local": "Avatar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Dropdown",
              "local": "Dropdown",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DashboardOutlined",
              "local": "DashboardOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingOutlined",
              "local": "ShoppingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UserOutlined",
              "local": "UserOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TruckOutlined",
              "local": "TruckOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AlertOutlined",
              "local": "AlertOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MenuFoldOutlined",
              "local": "MenuFoldOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MenuUnfoldOutlined",
              "local": "MenuUnfoldOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BellOutlined",
              "local": "BellOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownOutlined",
              "local": "DownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WalletOutlined",
              "local": "WalletOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GlobalOutlined",
              "local": "GlobalOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RobotOutlined",
              "local": "RobotOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AppstoreOutlined",
              "local": "AppstoreOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChartOutlined",
              "local": "LineChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyOutlined",
              "local": "SafetyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CrownOutlined",
              "local": "CrownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SwapOutlined",
              "local": "SwapOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Header",
              "local": "Header",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Sider",
              "local": "Sider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Content",
              "local": "Content",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Link",
              "local": "Link",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useLocation",
              "local": "useLocation",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Outlet",
              "local": "Outlet",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 670,
          "importKind": "type",
          "source": "antd",
          "specifiers": [
            {
              "imported": "MenuProps",
              "local": "MenuProps",
              "type": "ImportSpecifier"
            }
          ],
          "start": 632,
          "type": "ImportDeclaration"
        },
        {
          "end": 782,
          "importKind": "value",
          "source": "@/contexts/UserContext",
          "specifiers": [
            {
              "imported": "UserProvider",
              "local": "UserProvider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useUser",
              "local": "useUser",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MOCK_USERS",
              "local": "MOCK_USERS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ROLE_CONFIG",
              "local": "ROLE_CONFIG",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FEATURES",
              "local": "FEATURES",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PERMISSIONS",
              "local": "PERMISSIONS",
              "type": "ImportSpecifier"
            }
          ],
          "start": 671,
          "type": "ImportDeclaration"
        },
        {
          "end": 852,
          "importKind": "value",
          "source": "@/contexts/LocaleContext",
          "specifiers": [
            {
              "imported": "LocaleProvider",
              "local": "LocaleProvider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useLocale",
              "local": "useLocale",
              "type": "ImportSpecifier"
            }
          ],
          "start": 783,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\mock\\browser.ts": [
        {
          "end": 218,
          "exportKind": "value",
          "source": "./msw",
          "specifiers": [
            {
              "exported": "worker",
              "local": "worker",
              "type": "ExportSpecifier"
            },
            {
              "exported": "startMSW",
              "local": "startMSW",
              "type": "ExportSpecifier"
            },
            {
              "exported": "stopMSW",
              "local": "stopMSW",
              "type": "ExportSpecifier"
            }
          ],
          "start": 168,
          "type": "ExportNamedDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\mock\\msw.ts": [
        {
          "end": 258,
          "importKind": "value",
          "source": "msw",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            },
            {
              "imported": "HttpResponse",
              "local": "HttpResponse",
              "type": "ImportSpecifier"
            }
          ],
          "start": 217,
          "type": "ImportDeclaration"
        },
        {
          "end": 301,
          "importKind": "value",
          "source": "msw/browser",
          "specifiers": [
            {
              "imported": "setupWorker",
              "local": "setupWorker",
              "type": "ImportSpecifier"
            }
          ],
          "start": 259,
          "type": "ImportDeclaration"
        },
        {
          "end": 488,
          "importKind": "value",
          "source": "./data/certificate.mock",
          "specifiers": [
            {
              "imported": "mockCertificates",
              "local": "mockCertificates",
              "type": "ImportSpecifier"
            },
            {
              "imported": "getMockCertificates",
              "local": "getMockCertificates",
              "type": "ImportSpecifier"
            },
            {
              "imported": "getMockCertificateById",
              "local": "getMockCertificateById",
              "type": "ImportSpecifier"
            },
            {
              "imported": "createMockCertificate",
              "local": "createMockCertificate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "updateMockCertificate",
              "local": "updateMockCertificate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "deleteMockCertificate",
              "local": "deleteMockCertificate",
              "type": "ImportSpecifier"
            }
          ],
          "start": 302,
          "type": "ImportDeclaration"
        },
        {
          "end": 544,
          "importKind": "type",
          "source": "@/types/certificate",
          "specifiers": [
            {
              "imported": "Certificate",
              "local": "Certificate",
              "type": "ImportSpecifier"
            }
          ],
          "start": 489,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\ABTest\\ABTestConfig.tsx": [
        {
          "end": 420,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Slider",
              "local": "Slider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Steps",
              "local": "Steps",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Radio",
              "local": "Radio",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExperimentOutlined",
              "local": "ExperimentOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SaveOutlined",
              "local": "SaveOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Step",
              "local": "Step",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 457,
          "importKind": "type",
          "source": "dayjs",
          "specifiers": [
            {
              "imported": "Dayjs",
              "local": "Dayjs",
              "type": "ImportSpecifier"
            }
          ],
          "start": 422,
          "type": "ImportDeclaration"
        },
        {
          "end": 569,
          "importKind": "value",
          "source": "@/services/abTestDataSource",
          "specifiers": [
            {
              "imported": "abTestDataSource",
              "local": "abTestDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ABTestConfig",
              "local": "ABTestConfigData",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TestVariant",
              "local": "TestVariant",
              "type": "ImportSpecifier"
            }
          ],
          "start": 459,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\AIActionTaskManager.tsx": [
        {
          "end": 813,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Dropdown",
              "local": "Dropdown",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Menu",
              "local": "Menu",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Steps",
              "local": "Steps",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PauseCircleOutlined",
              "local": "PauseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StopOutlined",
              "local": "StopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MoreOutlined",
              "local": "MoreOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RocketOutlined",
              "local": "RocketOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UserOutlined",
              "local": "UserOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RobotOutlined",
              "local": "RobotOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowRightOutlined",
              "local": "ArrowRightOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "aiActionTaskDataSource",
              "local": "aiActionTaskDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Step",
              "local": "Step",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 878,
          "importKind": "type",
          "source": "@/services/aiActionTaskDataSource",
          "specifiers": [
            {
              "imported": "AITask",
              "local": "AITask",
              "type": "ImportSpecifier"
            }
          ],
          "start": 814,
          "type": "ImportDeclaration"
        },
        {
          "end": 928,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 879,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\AIDecisionLog\\index.tsx": [
        {
          "end": 749,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useCallback",
              "local": "useCallback",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Drawer",
              "local": "Drawer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LinkOutlined",
              "local": "LinkOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExclamationCircleOutlined",
              "local": "ExclamationCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChartOutlined",
              "local": "LineChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Line",
              "local": "Line",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Pie",
              "local": "Pie",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 200,
          "type": "ImportDeclaration"
        },
        {
          "end": 778,
          "importKind": "value",
          "source": "moment",
          "specifiers": [
            {
              "local": "moment",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 750,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\AISuggestionPage.tsx": [
        {
          "end": 270,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RobotOutlined",
              "local": "RobotOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "aiSuggestionDataSource",
              "local": "aiSuggestionDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 342,
          "importKind": "type",
          "source": "../services/aiSuggestionDataSource",
          "specifiers": [
            {
              "imported": "AISuggestion",
              "local": "AISuggestion",
              "type": "ImportSpecifier"
            }
          ],
          "start": 271,
          "type": "ImportDeclaration"
        },
        {
          "end": 425,
          "importKind": "value",
          "source": "../components/ai-suggestion/AISuggestionDisplay",
          "specifiers": [
            {
              "local": "AISuggestionDisplay",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 343,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Ad\\AdDelivery.tsx": [
        {
          "end": 475,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RocketOutlined",
              "local": "RocketOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PauseCircleOutlined",
              "local": "PauseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 526,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 477,
          "type": "ImportDeclaration"
        },
        {
          "end": 554,
          "importKind": "value",
          "source": "dayjs",
          "specifiers": [
            {
              "local": "dayjs",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 528,
          "type": "ImportDeclaration"
        },
        {
          "end": 629,
          "importKind": "value",
          "source": "@/services/marketingDataSource",
          "specifiers": [
            {
              "imported": "marketingDataSource",
              "local": "marketingDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Ad",
              "local": "Ad",
              "type": "ImportSpecifier"
            }
          ],
          "start": 556,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Ad\\AdPlanPage.tsx": [
        {
          "end": 513,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PauseCircleOutlined",
              "local": "PauseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CalendarOutlined",
              "local": "CalendarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 564,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 515,
          "type": "ImportDeclaration"
        },
        {
          "end": 592,
          "importKind": "value",
          "source": "dayjs",
          "specifiers": [
            {
              "local": "dayjs",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 566,
          "type": "ImportDeclaration"
        },
        {
          "end": 667,
          "importKind": "value",
          "source": "@/services/marketingDataSource",
          "specifiers": [
            {
              "imported": "marketingDataSource",
              "local": "marketingDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Ad",
              "local": "Ad",
              "type": "ImportSpecifier"
            }
          ],
          "start": 594,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Ad\\index.tsx": [
        {
          "end": 542,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PauseCircleOutlined",
              "local": "PauseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RocketOutlined",
              "local": "RocketOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "VideoCameraOutlined",
              "local": "VideoCameraOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ScheduleOutlined",
              "local": "ScheduleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "marketingDataSource",
              "local": "marketingDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TextArea",
              "local": "TextArea",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 600,
          "importKind": "type",
          "source": "@/services/marketingDataSource",
          "specifiers": [
            {
              "imported": "Ad",
              "local": "Ad",
              "type": "ImportSpecifier"
            }
          ],
          "start": 543,
          "type": "ImportDeclaration"
        },
        {
          "end": 639,
          "importKind": "value",
          "source": "./AdPlanPage",
          "specifiers": [
            {
              "local": "AdPlanPage",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 601,
          "type": "ImportDeclaration"
        },
        {
          "end": 678,
          "importKind": "value",
          "source": "./AdDelivery",
          "specifiers": [
            {
              "local": "AdDelivery",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 640,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\AfterSales\\RefundProcess.tsx": [
        {
          "end": 436,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AuditOutlined",
              "local": "AuditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TextArea",
              "local": "TextArea",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 487,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 438,
          "type": "ImportDeclaration"
        },
        {
          "end": 560,
          "importKind": "value",
          "source": "@/services/afterSalesDataSource",
          "specifiers": [
            {
              "imported": "afterSalesDataSource",
              "local": "afterSalesDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 489,
          "type": "ImportDeclaration"
        },
        {
          "end": 650,
          "importKind": "type",
          "source": "@/services/afterSalesDataSource",
          "specifiers": [
            {
              "imported": "RefundRecord",
              "local": "RefundRecordType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 562,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\AfterSales\\index.tsx": [
        {
          "end": 110,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AlertOutlined",
              "local": "AlertOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Analytics\\index.tsx": [
        {
          "end": 1349,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Radio",
              "local": "Radio",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Dropdown",
              "local": "Dropdown",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "List",
              "local": "List",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Avatar",
              "local": "Avatar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Empty",
              "local": "Empty",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Slider",
              "local": "Slider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Collapse",
              "local": "Collapse",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Steps",
              "local": "Steps",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Drawer",
              "local": "Drawer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popover",
              "local": "Popover",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChartOutlined",
              "local": "LineChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PieChartOutlined",
              "local": "PieChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiseOutlined",
              "local": "RiseOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FallOutlined",
              "local": "FallOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShareAltOutlined",
              "local": "ShareAltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CalendarOutlined",
              "local": "CalendarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProductOutlined",
              "local": "ProductOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "OrderedListOutlined",
              "local": "OrderedListOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AreaChartOutlined",
              "local": "AreaChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FundOutlined",
              "local": "FundOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DashboardOutlined",
              "local": "DashboardOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GlobalOutlined",
              "local": "GlobalOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TeamOutlined",
              "local": "TeamOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingCartOutlined",
              "local": "ShoppingCartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InboxOutlined",
              "local": "InboxOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowUpOutlined",
              "local": "ArrowUpOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowDownOutlined",
              "local": "ArrowDownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MoreOutlined",
              "local": "MoreOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExportOutlined",
              "local": "ExportOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PrinterOutlined",
              "local": "PrinterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MailOutlined",
              "local": "MailOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BellOutlined",
              "local": "BellOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Line",
              "local": "Line",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Column",
              "local": "Column",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Pie",
              "local": "Pie",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Area",
              "local": "Area",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DualAxes",
              "local": "DualAxes",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Panel",
              "local": "Panel",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Step",
              "local": "Step",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 1400,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1351,
          "type": "ImportDeclaration"
        },
        {
          "end": 1561,
          "importKind": "value",
          "source": "@/services/analyticsDataSource",
          "specifiers": [
            {
              "imported": "analyticsDataSource",
              "local": "analyticsDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProductAnalytics",
              "local": "ProductAnalytics",
              "type": "ImportSpecifier"
            },
            {
              "imported": "OrderAnalytics",
              "local": "OrderAnalytics",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProfitAnalytics",
              "local": "ProfitAnalytics",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RealtimeMetrics",
              "local": "RealtimeMetrics",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AlertRule",
              "local": "AlertRule",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Dashboard",
              "local": "Dashboard",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1402,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Audit\\index.tsx": [
        {
          "end": 268,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 330,
          "importKind": "value",
          "source": "@/services/auditDataSource",
          "specifiers": [
            {
              "imported": "AuditDataSource",
              "local": "AuditDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 269,
          "type": "ImportDeclaration"
        },
        {
          "end": 391,
          "importKind": "type",
          "source": "@/services/auditDataSource",
          "specifiers": [
            {
              "imported": "AuditItem",
              "local": "AuditItem",
              "type": "ImportSpecifier"
            }
          ],
          "start": 331,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Auth\\LoginPage.tsx": [
        {
          "end": 384,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UserOutlined",
              "local": "UserOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LockOutlined",
              "local": "LockOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyOutlined",
              "local": "SafetyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeInvisibleOutlined",
              "local": "EyeInvisibleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeTwoTone",
              "local": "EyeTwoTone",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LoginOutlined",
              "local": "LoginOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GoogleOutlined",
              "local": "GoogleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GithubOutlined",
              "local": "GithubOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Link",
              "local": "Link",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 439,
          "importKind": "value",
          "source": "@/contexts/LocaleContext",
          "specifiers": [
            {
              "imported": "useLocale",
              "local": "useLocale",
              "type": "ImportSpecifier"
            }
          ],
          "start": 386,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Auth\\RegisterPage.tsx": [
        {
          "end": 494,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Steps",
              "local": "Steps",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UserOutlined",
              "local": "UserOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LockOutlined",
              "local": "LockOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MailOutlined",
              "local": "MailOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyOutlined",
              "local": "SafetyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeInvisibleOutlined",
              "local": "EyeInvisibleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeTwoTone",
              "local": "EyeTwoTone",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UserAddOutlined",
              "local": "UserAddOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowLeftOutlined",
              "local": "ArrowLeftOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowRightOutlined",
              "local": "ArrowRightOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BankOutlined",
              "local": "BankOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PhoneOutlined",
              "local": "PhoneOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Link",
              "local": "Link",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Step",
              "local": "Step",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Auth\\ResetPasswordPage.tsx": [
        {
          "end": 318,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Steps",
              "local": "Steps",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Result",
              "local": "Result",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MailOutlined",
              "local": "MailOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyOutlined",
              "local": "SafetyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LockOutlined",
              "local": "LockOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeInvisibleOutlined",
              "local": "EyeInvisibleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeTwoTone",
              "local": "EyeTwoTone",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowLeftOutlined",
              "local": "ArrowLeftOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Link",
              "local": "Link",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Step",
              "local": "Step",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\AutoExecution\\components\\EvolutionStage.tsx": [
        {
          "end": 395,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Steps",
              "local": "Steps",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RobotOutlined",
              "local": "RobotOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UserOutlined",
              "local": "UserOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyOutlined",
              "local": "SafetyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LockOutlined",
              "local": "LockOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 109,
          "type": "ImportDeclaration"
        },
        {
          "end": 496,
          "importKind": "value",
          "source": "@/services/autoExecutionDataSource",
          "specifiers": [
            {
              "imported": "AutomationLevel",
              "local": "AutomationLevel",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LEVEL_CAPABILITIES",
              "local": "LEVEL_CAPABILITIES",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiskLevel",
              "local": "RiskLevel",
              "type": "ImportSpecifier"
            }
          ],
          "start": 396,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\AutoExecution\\components\\ThresholdConfigForm.tsx": [
        {
          "end": 360,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Slider",
              "local": "Slider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyOutlined",
              "local": "SafetyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BellOutlined",
              "local": "BellOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 115,
          "type": "ImportDeclaration"
        },
        {
          "end": 465,
          "importKind": "value",
          "source": "@/services/autoExecutionDataSource",
          "specifiers": [
            {
              "imported": "AutoExecutionConfig",
              "local": "AutoExecutionConfig",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiskLevel",
              "local": "RiskLevel",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LEVEL_CAPABILITIES",
              "local": "LEVEL_CAPABILITIES",
              "type": "ImportSpecifier"
            }
          ],
          "start": 361,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\AutoExecution\\index.tsx": [
        {
          "end": 680,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyOutlined",
              "local": "SafetyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExclamationCircleOutlined",
              "local": "ExclamationCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiseOutlined",
              "local": "RiseOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FallOutlined",
              "local": "FallOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "HistoryOutlined",
              "local": "HistoryOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TextArea",
              "local": "TextArea",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 108,
          "type": "ImportDeclaration"
        },
        {
          "end": 730,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 681,
          "type": "ImportDeclaration"
        },
        {
          "end": 933,
          "importKind": "value",
          "source": "@/services/autoExecutionDataSource",
          "specifiers": [
            {
              "imported": "autoExecutionDataSource",
              "local": "autoExecutionDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AutoExecutionConfig",
              "local": "AutoExecutionConfig",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LevelEvolutionRecord",
              "local": "LevelEvolutionRecord",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AutomationLevel",
              "local": "AutomationLevel",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DecisionModule",
              "local": "DecisionModule",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MODULE_NAMES",
              "local": "MODULE_NAMES",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LEVEL_CAPABILITIES",
              "local": "LEVEL_CAPABILITIES",
              "type": "ImportSpecifier"
            }
          ],
          "start": 731,
          "type": "ImportDeclaration"
        },
        {
          "end": 1001,
          "importKind": "value",
          "source": "./components/ThresholdConfigForm",
          "specifiers": [
            {
              "local": "ThresholdConfigForm",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 934,
          "type": "ImportDeclaration"
        },
        {
          "end": 1059,
          "importKind": "value",
          "source": "./components/EvolutionStage",
          "specifiers": [
            {
              "local": "EvolutionStage",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 1002,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\AutoPilot\\index.tsx": [
        {
          "end": 665,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RobotOutlined",
              "local": "RobotOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PauseCircleOutlined",
              "local": "PauseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StopOutlined",
              "local": "StopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "HistoryOutlined",
              "local": "HistoryOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DashboardOutlined",
              "local": "DashboardOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingCartOutlined",
              "local": "ShoppingCartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ToolOutlined",
              "local": "ToolOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 715,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 666,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\AutoProductSelection\\index.tsx": [
        {
          "end": 1070,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useCallback",
              "local": "useCallback",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Slider",
              "local": "Slider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Drawer",
              "local": "Drawer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Empty",
              "local": "Empty",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingOutlined",
              "local": "ShoppingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PauseCircleOutlined",
              "local": "PauseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowUpOutlined",
              "local": "ArrowUpOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowDownOutlined",
              "local": "ArrowDownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StarOutlined",
              "local": "StarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FireOutlined",
              "local": "FireOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RobotOutlined",
              "local": "RobotOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AlertOutlined",
              "local": "AlertOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiseOutlined",
              "local": "RiseOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 229,
          "type": "ImportDeclaration"
        },
        {
          "end": 1120,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1071,
          "type": "ImportDeclaration"
        },
        {
          "end": 1149,
          "importKind": "value",
          "source": "moment",
          "specifiers": [
            {
              "local": "moment",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 1121,
          "type": "ImportDeclaration"
        },
        {
          "end": 1316,
          "importKind": "value",
          "source": "@/services/productSelectionDataSource",
          "specifiers": [
            {
              "imported": "productSelectionDataSource",
              "local": "productSelectionDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProductPoolQueryParams",
              "local": "ProductPoolQueryParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SelectionRuleQueryParams",
              "local": "SelectionRuleQueryParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ListingTaskQueryParams",
              "local": "ListingTaskQueryParams",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1150,
          "type": "ImportDeclaration"
        },
        {
          "end": 1442,
          "importKind": "type",
          "source": "@/mock/data/productSelection.mock",
          "specifiers": [
            {
              "imported": "ProductPool",
              "local": "ProductPool",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SelectionRule",
              "local": "SelectionRule",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ListingTask",
              "local": "ListingTask",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AutoListingConfig",
              "local": "AutoListingConfig",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1317,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\B2B\\BatchOrder.tsx": [
        {
          "end": 45,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\B2B\\ContractManage.tsx": [
        {
          "end": 45,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\B2B\\EnterpriseQuote.tsx": [
        {
          "end": 45,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\B2B\\index.tsx": [
        {
          "end": 58,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useLocation",
              "local": "useLocation",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Blacklist\\index.tsx": [
        {
          "end": 110,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AlertOutlined",
              "local": "AlertOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\ClientManagement.tsx": [
        {
          "end": 592,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tree",
              "local": "Tree",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Radio",
              "local": "Radio",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Slider",
              "local": "Slider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DisconnectOutlined",
              "local": "DisconnectOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AlertOutlined",
              "local": "AlertOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GroupOutlined",
              "local": "GroupOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "HomeOutlined",
              "local": "HomeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MonitorOutlined",
              "local": "MonitorOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "clientDataSource",
              "local": "clientDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 665,
          "importKind": "type",
          "source": "../services/clientDataSource",
          "specifiers": [
            {
              "imported": "Client",
              "local": "Client",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClientGroup",
              "local": "ClientGroup",
              "type": "ImportSpecifier"
            }
          ],
          "start": 593,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Compliance\\CertificateManage.tsx": [
        {
          "end": 773,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Upload",
              "local": "Upload",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UploadOutlined",
              "local": "UploadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BellOutlined",
              "local": "BellOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 218,
          "type": "ImportDeclaration"
        },
        {
          "end": 824,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 775,
          "type": "ImportDeclaration"
        },
        {
          "end": 852,
          "importKind": "value",
          "source": "dayjs",
          "specifiers": [
            {
              "local": "dayjs",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 826,
          "type": "ImportDeclaration"
        },
        {
          "end": 968,
          "importKind": "value",
          "source": "@/services/certificateDataSource",
          "specifiers": [
            {
              "imported": "certificateDataSource",
              "local": "certificateDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "__DATA_SOURCE_TYPE__",
              "local": "__DATA_SOURCE_TYPE__",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CertificateStatus",
              "local": "CertificateStatus",
              "type": "ImportSpecifier"
            }
          ],
          "start": 854,
          "type": "ImportDeclaration"
        },
        {
          "end": 1020,
          "importKind": "value",
          "source": "@/types/certificate",
          "specifiers": [
            {
              "imported": "Certificate",
              "local": "Certificate",
              "type": "ImportSpecifier"
            }
          ],
          "start": 970,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Compliance\\index.tsx": [
        {
          "end": 651,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useCallback",
              "local": "useCallback",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Upload",
              "local": "Upload",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Drawer",
              "local": "Drawer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AuditOutlined",
              "local": "AuditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UploadOutlined",
              "local": "UploadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyOutlined",
              "local": "SafetyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckOutlined",
              "local": "CheckOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "HistoryOutlined",
              "local": "HistoryOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 701,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 652,
          "type": "ImportDeclaration"
        },
        {
          "end": 730,
          "importKind": "value",
          "source": "moment",
          "specifiers": [
            {
              "local": "moment",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 702,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\DashboardPage.tsx": [
        {
          "end": 496,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowUpOutlined",
              "local": "ArrowUpOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowDownOutlined",
              "local": "ArrowDownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "OrderedListOutlined",
              "local": "OrderedListOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChartOutlined",
              "local": "LineChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingOutlined",
              "local": "ShoppingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RechartsArea",
              "local": "RechartsArea",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AreaChart",
              "local": "AreaChart",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CartesianGrid",
              "local": "CartesianGrid",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ResponsiveContainer",
              "local": "ResponsiveContainer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RechartsTooltip",
              "local": "RechartsTooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "XAxis",
              "local": "XAxis",
              "type": "ImportSpecifier"
            },
            {
              "imported": "YAxis",
              "local": "YAxis",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "dashboardDataSource",
              "local": "dashboardDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 551,
          "importKind": "value",
          "source": "../contexts/LocaleContext",
          "specifiers": [
            {
              "imported": "useLocale",
              "local": "useLocale",
              "type": "ImportSpecifier"
            }
          ],
          "start": 497,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\DynamicPricing\\index.tsx": [
        {
          "end": 583,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useCallback",
              "local": "useCallback",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "List",
              "local": "List",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Avatar",
              "local": "Avatar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiseOutlined",
              "local": "RiseOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FallOutlined",
              "local": "FallOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChartOutlined",
              "local": "LineChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BellOutlined",
              "local": "BellOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TrophyOutlined",
              "local": "TrophyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AimOutlined",
              "local": "AimOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 612,
          "importKind": "value",
          "source": "moment",
          "specifiers": [
            {
              "local": "moment",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 584,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\ExecutionResults.tsx": [
        {
          "end": 534,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CalendarOutlined",
              "local": "CalendarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "executionResultDataSource",
              "local": "executionResultDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 622,
          "importKind": "type",
          "source": "../services/executionResultDataSource",
          "specifiers": [
            {
              "imported": "ExecutionResult",
              "local": "ExecutionResult",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StatData",
              "local": "StatData",
              "type": "ImportSpecifier"
            }
          ],
          "start": 535,
          "type": "ImportDeclaration"
        },
        {
          "end": 649,
          "importKind": "value",
          "source": "dayjs",
          "specifiers": [
            {
              "local": "dayjs",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 623,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Finance\\Reconciliation.tsx": [
        {
          "end": 289,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExportOutlined",
              "local": "ExportOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 377,
          "importKind": "value",
          "source": "@/services/financeDataSource",
          "specifiers": [
            {
              "imported": "financeDataSource",
              "local": "financeDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReconciliationRecord",
              "local": "ReconciliationRecord",
              "type": "ImportSpecifier"
            }
          ],
          "start": 290,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Finance\\Transactions.tsx": [
        {
          "end": 667,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useMemo",
              "local": "useMemo",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Drawer",
              "local": "Drawer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExportOutlined",
              "local": "ExportOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowUpOutlined",
              "local": "ArrowUpOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowDownOutlined",
              "local": "ArrowDownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChart",
              "local": "LineChart",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Line",
              "local": "Line",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Bar",
              "local": "Bar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RechartsPie",
              "local": "RechartsPie",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ResponsiveContainer",
              "local": "ResponsiveContainer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Legend",
              "local": "Legend",
              "type": "ImportSpecifier"
            },
            {
              "imported": "XAxis",
              "local": "XAxis",
              "type": "ImportSpecifier"
            },
            {
              "imported": "YAxis",
              "local": "YAxis",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CartesianGrid",
              "local": "CartesianGrid",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Cell",
              "local": "Cell",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 696,
          "importKind": "value",
          "source": "moment",
          "specifiers": [
            {
              "local": "moment",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 668,
          "type": "ImportDeclaration"
        },
        {
          "end": 762,
          "importKind": "value",
          "source": "@/services/financeDataSource",
          "specifiers": [
            {
              "imported": "financeDataSource",
              "local": "financeDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 697,
          "type": "ImportDeclaration"
        },
        {
          "end": 827,
          "importKind": "type",
          "source": "@/services/financeDataSource",
          "specifiers": [
            {
              "imported": "Transaction",
              "local": "Transaction",
              "type": "ImportSpecifier"
            }
          ],
          "start": 763,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Finance\\index.tsx": [
        {
          "end": 442,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowUpOutlined",
              "local": "ArrowUpOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowDownOutlined",
              "local": "ArrowDownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CreditCardOutlined",
              "local": "CreditCardOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TransactionOutlined",
              "local": "TransactionOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Line",
              "local": "Line",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Column",
              "local": "Column",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Pie",
              "local": "Pie",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 492,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 443,
          "type": "ImportDeclaration"
        },
        {
          "end": 521,
          "importKind": "value",
          "source": "moment",
          "specifiers": [
            {
              "local": "moment",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 493,
          "type": "ImportDeclaration"
        },
        {
          "end": 587,
          "importKind": "value",
          "source": "@/services/financeDataSource",
          "specifiers": [
            {
              "imported": "financeDataSource",
              "local": "financeDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 522,
          "type": "ImportDeclaration"
        },
        {
          "end": 674,
          "importKind": "type",
          "source": "@/services/financeDataSource",
          "specifiers": [
            {
              "imported": "Transaction",
              "local": "FinanceTransaction",
              "type": "ImportSpecifier"
            }
          ],
          "start": 588,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Governance\\index.tsx": [
        {
          "end": 268,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 340,
          "importKind": "value",
          "source": "@/services/governanceDataSource",
          "specifiers": [
            {
              "imported": "GovernanceDataSource",
              "local": "GovernanceDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 269,
          "type": "ImportDeclaration"
        },
        {
          "end": 411,
          "importKind": "type",
          "source": "@/services/governanceDataSource",
          "specifiers": [
            {
              "imported": "GovernanceItem",
              "local": "GovernanceItem",
              "type": "ImportSpecifier"
            }
          ],
          "start": 341,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Homepage.tsx": [
        {
          "end": 339,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Link",
              "local": "Link",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useLocation",
              "local": "useLocation",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowRightOutlined",
              "local": "ArrowRightOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MenuOutlined",
              "local": "MenuOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "XOutlined",
              "local": "XOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TwitterOutlined",
              "local": "TwitterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LinkedinOutlined",
              "local": "LinkedinOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GithubOutlined",
              "local": "GithubOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 382,
          "importKind": "value",
          "source": "@/components/Navbar",
          "specifiers": [
            {
              "local": "Navbar",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 341,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\HumanApprovalPage.tsx": [
        {
          "end": 348,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "humanApprovalDataSource",
              "local": "humanApprovalDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 413,
          "importKind": "type",
          "source": "../services/humanApprovalDataSource",
          "specifiers": [
            {
              "imported": "Task",
              "local": "Task",
              "type": "ImportSpecifier"
            }
          ],
          "start": 349,
          "type": "ImportDeclaration"
        },
        {
          "end": 493,
          "importKind": "value",
          "source": "../components/human-approval/HumanApprovalForm",
          "specifiers": [
            {
              "local": "HumanApprovalForm",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 414,
          "type": "ImportDeclaration"
        },
        {
          "end": 576,
          "importKind": "value",
          "source": "../components/ai-suggestion/AISuggestionDisplay",
          "specifiers": [
            {
              "local": "AISuggestionDisplay",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 494,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\IndependentSite\\DomainManagement.tsx": [
        {
          "end": 436,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LinkOutlined",
              "local": "LinkOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExclamationCircleOutlined",
              "local": "ExclamationCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GlobalOutlined",
              "local": "GlobalOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyCertificateOutlined",
              "local": "SafetyCertificateOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReactNode",
              "local": "ReactNode",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\IndependentSite\\IndependentSiteAnalytics.tsx": [
        {
          "end": 394,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useParams",
              "local": "useParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Line",
              "local": "Line",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Column",
              "local": "Column",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Pie",
              "local": "Pie",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Area",
              "local": "Area",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DualAxes",
              "local": "DualAxes",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExportOutlined",
              "local": "ExportOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingCartOutlined",
              "local": "ShoppingCartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TeamOutlined",
              "local": "TeamOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiseOutlined",
              "local": "RiseOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\IndependentSite\\IndependentSiteCreate.tsx": [
        {
          "end": 160,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Upload",
              "local": "Upload",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UploadOutlined",
              "local": "UploadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 242,
          "importKind": "value",
          "source": "@/services/independentSiteDataSource",
          "specifiers": [
            {
              "imported": "independentSiteDataSource",
              "local": "independentSiteDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 161,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\IndependentSite\\IndependentSiteList.tsx": [
        {
          "end": 238,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 337,
          "importKind": "value",
          "source": "@/services/independentSiteDataSource",
          "specifiers": [
            {
              "imported": "independentSiteDataSource",
              "local": "independentSiteDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "IndependentSite",
              "local": "IndependentSite",
              "type": "ImportSpecifier"
            }
          ],
          "start": 239,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\IndependentSite\\IndependentSiteOrder.tsx": [
        {
          "end": 237,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useParams",
              "local": "useParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 330,
          "importKind": "value",
          "source": "@/services/independentSiteDataSource",
          "specifiers": [
            {
              "imported": "independentSiteDataSource",
              "local": "independentSiteDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SiteOrder",
              "local": "SiteOrder",
              "type": "ImportSpecifier"
            }
          ],
          "start": 238,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\IndependentSite\\IndependentSiteProduct.tsx": [
        {
          "end": 430,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useParams",
              "local": "useParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Upload",
              "local": "Upload",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Image",
              "local": "Image",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UploadOutlined",
              "local": "UploadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExportOutlined",
              "local": "ExportOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingCartOutlined",
              "local": "ShoppingCartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InboxOutlined",
              "local": "InboxOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Key",
              "local": "Key",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 480,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 431,
          "type": "ImportDeclaration"
        },
        {
          "end": 575,
          "importKind": "value",
          "source": "@/services/independentSiteDataSource",
          "specifiers": [
            {
              "imported": "independentSiteDataSource",
              "local": "independentSiteDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SiteProduct",
              "local": "SiteProduct",
              "type": "ImportSpecifier"
            }
          ],
          "start": 481,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\IndependentSite\\SiteTemplates.tsx": [
        {
          "end": 285,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StarOutlined",
              "local": "StarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StarFilled",
              "local": "StarFilled",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\IndependentSite\\index.tsx": [
        {
          "end": 32,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 89,
          "importKind": "value",
          "source": "./IndependentSiteList",
          "specifiers": [
            {
              "local": "IndependentSiteList",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 33,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Inventory\\Warehouses.tsx": [
        {
          "end": 222,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 303,
          "importKind": "value",
          "source": "@/services/inventoryDataSource",
          "specifiers": [
            {
              "imported": "inventoryDataSource",
              "local": "inventoryDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Warehouse",
              "local": "Warehouse",
              "type": "ImportSpecifier"
            }
          ],
          "start": 223,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Inventory\\index.tsx": [
        {
          "end": 227,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InboxOutlined",
              "local": "InboxOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AlertOutlined",
              "local": "AlertOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "inventoryDataSource",
              "local": "inventoryDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 279,
          "importKind": "type",
          "source": "@/types/inventory",
          "specifiers": [
            {
              "imported": "Inventory",
              "local": "Inventory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 228,
          "type": "ImportDeclaration"
        },
        {
          "end": 332,
          "importKind": "value",
          "source": "@/types/inventory",
          "specifiers": [
            {
              "imported": "InventoryStatus",
              "local": "InventoryStatus",
              "type": "ImportSpecifier"
            }
          ],
          "start": 280,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Leaderboard\\index.tsx": [
        {
          "end": 311,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TrophyOutlined",
              "local": "TrophyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiseOutlined",
              "local": "RiseOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PercentageOutlined",
              "local": "PercentageOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CrownOutlined",
              "local": "CrownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FireOutlined",
              "local": "FireOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StarOutlined",
              "local": "StarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 361,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 312,
          "type": "ImportDeclaration"
        },
        {
          "end": 478,
          "importKind": "value",
          "source": "@/services/leaderboardDataSource",
          "specifiers": [
            {
              "imported": "leaderboardDataSource",
              "local": "leaderboardDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LeaderboardEntry",
              "local": "LeaderboardEntry",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LeaderboardData",
              "local": "LeaderboardData",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MyRank",
              "local": "MyRank",
              "type": "ImportSpecifier"
            }
          ],
          "start": 362,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Logistics\\FreightCalc.tsx": [
        {
          "end": 417,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Radio",
              "local": "Radio",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CalculatorOutlined",
              "local": "CalculatorOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TruckOutlined",
              "local": "TruckOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EnvironmentOutlined",
              "local": "EnvironmentOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RightOutlined",
              "local": "RightOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TextArea",
              "local": "TextArea",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 468,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 419,
          "type": "ImportDeclaration"
        },
        {
          "end": 563,
          "importKind": "value",
          "source": "@/services/logisticsDataSource",
          "specifiers": [
            {
              "imported": "logisticsDataSource",
              "local": "logisticsDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Shipment",
              "local": "Shipment",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FreightQuote",
              "local": "FreightQuote",
              "type": "ImportSpecifier"
            }
          ],
          "start": 470,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Logistics\\index.tsx": [
        {
          "end": 110,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TruckOutlined",
              "local": "TruckOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Marketing\\Competitors.tsx": [
        {
          "end": 248,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChartOutlined",
              "local": "LineChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PieChartOutlined",
              "local": "PieChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 395,
          "importKind": "value",
          "source": "recharts",
          "specifiers": [
            {
              "imported": "BarChart",
              "local": "BarChart",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Bar",
              "local": "Bar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChart",
              "local": "LineChart",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Line",
              "local": "Line",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PieChart",
              "local": "PieChart",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Pie",
              "local": "Pie",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Cell",
              "local": "Cell",
              "type": "ImportSpecifier"
            },
            {
              "imported": "XAxis",
              "local": "XAxis",
              "type": "ImportSpecifier"
            },
            {
              "imported": "YAxis",
              "local": "YAxis",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CartesianGrid",
              "local": "CartesianGrid",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Legend",
              "local": "Legend",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ResponsiveContainer",
              "local": "ResponsiveContainer",
              "type": "ImportSpecifier"
            }
          ],
          "start": 249,
          "type": "ImportDeclaration"
        },
        {
          "end": 477,
          "importKind": "value",
          "source": "@/services/marketingDataSource",
          "specifiers": [
            {
              "imported": "marketingDataSource",
              "local": "marketingDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Competitor",
              "local": "Competitor",
              "type": "ImportSpecifier"
            }
          ],
          "start": 396,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Merchant\\index.tsx": [
        {
          "end": 95,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\MultiShopReport\\index.tsx": [
        {
          "end": 747,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useCallback",
              "local": "useCallback",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "List",
              "local": "List",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Avatar",
              "local": "Avatar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Dropdown",
              "local": "Dropdown",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Menu",
              "local": "Menu",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingCartOutlined",
              "local": "ShoppingCartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiseOutlined",
              "local": "RiseOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FallOutlined",
              "local": "FallOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StockOutlined",
              "local": "StockOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PercentageOutlined",
              "local": "PercentageOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AlertOutlined",
              "local": "AlertOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowUpOutlined",
              "local": "ArrowUpOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowDownOutlined",
              "local": "ArrowDownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 205,
          "type": "ImportDeclaration"
        },
        {
          "end": 817,
          "importKind": "value",
          "source": "@ant-design/charts",
          "specifiers": [
            {
              "imported": "Line",
              "local": "Line",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Column",
              "local": "Column",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Pie",
              "local": "Pie",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Area",
              "local": "Area",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Funnel",
              "local": "Funnel",
              "type": "ImportSpecifier"
            }
          ],
          "start": 748,
          "type": "ImportDeclaration"
        },
        {
          "end": 846,
          "importKind": "value",
          "source": "moment",
          "specifiers": [
            {
              "local": "moment",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 818,
          "type": "ImportDeclaration"
        },
        {
          "end": 914,
          "importKind": "value",
          "source": "../../components/HierarchySelector",
          "specifiers": [
            {
              "local": "HierarchySelector",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 847,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\OperationAgentEnhanced.tsx": [
        {
          "end": 1458,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useCallback",
              "local": "useCallback",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useMemo",
              "local": "useMemo",
              "type": "ImportSpecifier"
            },
            {
              "imported": "memo",
              "local": "memo",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "List",
              "local": "List",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Avatar",
              "local": "Avatar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Drawer",
              "local": "Drawer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Result",
              "local": "Result",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Empty",
              "local": "Empty",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Collapse",
              "local": "Collapse",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PauseCircleOutlined",
              "local": "PauseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloudServerOutlined",
              "local": "CloudServerOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ScheduleOutlined",
              "local": "ScheduleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyCertificateOutlined",
              "local": "SafetyCertificateOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DesktopOutlined",
              "local": "DesktopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GlobalOutlined",
              "local": "GlobalOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloudDownloadOutlined",
              "local": "CloudDownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExclamationCircleOutlined",
              "local": "ExclamationCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "HistoryOutlined",
              "local": "HistoryOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MonitorOutlined",
              "local": "MonitorOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingCartOutlined",
              "local": "ShoppingCartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UserOutlined",
              "local": "UserOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LockOutlined",
              "local": "LockOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UnlockOutlined",
              "local": "UnlockOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LinkOutlined",
              "local": "LinkOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TabPane",
              "local": "TabPane",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 341,
          "type": "ImportDeclaration"
        },
        {
          "end": 1540,
          "importKind": "value",
          "source": "../services/lightweightClientService",
          "specifiers": [
            {
              "imported": "lightweightClientService",
              "local": "lightweightClientService",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1460,
          "type": "ImportDeclaration"
        },
        {
          "end": 1708,
          "importKind": "value",
          "source": "../services/cloud-service",
          "specifiers": [
            {
              "imported": "cloudService",
              "local": "cloudService",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CreateInstanceRequest",
              "local": "CreateInstanceRequest",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloudInstance",
              "local": "CloudInstance",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloudProvider",
              "local": "CloudProvider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloudRegion",
              "local": "CloudRegion",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InstanceType",
              "local": "InstanceType",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloudImage",
              "local": "CloudImage",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InstanceMetrics",
              "local": "InstanceMetrics",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1542,
          "type": "ImportDeclaration"
        },
        {
          "end": 1825,
          "importKind": "value",
          "source": "../services/cloud-control-layer",
          "specifiers": [
            {
              "imported": "CloudControlLayerService",
              "local": "CloudControlLayerService",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ControlCommand",
              "local": "ControlCommand",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LayerStatus",
              "local": "LayerStatus",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1710,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\OperationLogs\\index.tsx": [
        {
          "end": 418,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExportOutlined",
              "local": "ExportOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Radio",
              "local": "Radio",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Empty",
              "local": "Empty",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Dropdown",
              "local": "Dropdown",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 554,
          "importKind": "value",
          "source": "@/services/operationLogDataSource",
          "specifiers": [
            {
              "imported": "LOOP_OPTIONS",
              "local": "LOOP_OPTIONS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "STAGE_OPTIONS",
              "local": "STAGE_OPTIONS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ACTOR_OPTIONS",
              "local": "ACTOR_OPTIONS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ACTION_OPTIONS",
              "local": "ACTION_OPTIONS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "OperationLogDataSource",
              "local": "OperationLogDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 419,
          "type": "ImportDeclaration"
        },
        {
          "end": 648,
          "importKind": "type",
          "source": "@/services/operationLogDataSource",
          "specifiers": [
            {
              "imported": "OperationLogItem",
              "local": "OperationLogItem",
              "type": "ImportSpecifier"
            },
            {
              "imported": "OperationLogQuery",
              "local": "OperationLogQuery",
              "type": "ImportSpecifier"
            }
          ],
          "start": 555,
          "type": "ImportDeclaration"
        },
        {
          "end": 675,
          "importKind": "value",
          "source": "dayjs",
          "specifiers": [
            {
              "local": "dayjs",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 649,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Orders\\ExceptionOrder.tsx": [
        {
          "end": 453,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExclamationCircleOutlined",
              "local": "ExclamationCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TextArea",
              "local": "TextArea",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 504,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 455,
          "type": "ImportDeclaration"
        },
        {
          "end": 567,
          "importKind": "value",
          "source": "@/services/orderDataSource",
          "specifiers": [
            {
              "imported": "orderDataSource",
              "local": "orderDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 506,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Orders\\index.tsx": [
        {
          "end": 447,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AlertOutlined",
              "local": "AlertOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TruckOutlined",
              "local": "TruckOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Link",
              "local": "Link",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Area",
              "local": "Area",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Pie",
              "local": "Pie",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Column",
              "local": "Column",
              "type": "ImportSpecifier"
            },
            {
              "imported": "orderDataSource",
              "local": "orderDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 476,
          "importKind": "value",
          "source": "moment",
          "specifiers": [
            {
              "local": "moment",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 448,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Procurement\\index.tsx": [
        {
          "end": 710,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Rate",
              "local": "Rate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Drawer",
              "local": "Drawer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "List",
              "local": "List",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Avatar",
              "local": "Avatar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingOutlined",
              "local": "ShoppingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TeamOutlined",
              "local": "TeamOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CarOutlined",
              "local": "CarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InboxOutlined",
              "local": "InboxOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StarOutlined",
              "local": "StarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PhoneOutlined",
              "local": "PhoneOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MailOutlined",
              "local": "MailOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EnvironmentOutlined",
              "local": "EnvironmentOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TextArea",
              "local": "TextArea",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 749,
          "importKind": "type",
          "source": "antd",
          "specifiers": [
            {
              "imported": "TabsProps",
              "local": "TabsProps",
              "type": "ImportSpecifier"
            }
          ],
          "start": 711,
          "type": "ImportDeclaration"
        },
        {
          "end": 799,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 750,
          "type": "ImportDeclaration"
        },
        {
          "end": 826,
          "importKind": "value",
          "source": "dayjs",
          "specifiers": [
            {
              "local": "dayjs",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 800,
          "type": "ImportDeclaration"
        },
        {
          "end": 1060,
          "importKind": "value",
          "source": "@/services/procurementDataSource",
          "specifiers": [
            {
              "imported": "procurementDataSource",
              "local": "procurementDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SUPPLIER_STATUS_COLORS",
              "local": "SUPPLIER_STATUS_COLORS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SUPPLIER_LEVEL_COLORS",
              "local": "SUPPLIER_LEVEL_COLORS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PROCUREMENT_STATUS_COLORS",
              "local": "PROCUREMENT_STATUS_COLORS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PROCUREMENT_STATUS_TEXT",
              "local": "PROCUREMENT_STATUS_TEXT",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PAYMENT_STATUS_COLORS",
              "local": "PAYMENT_STATUS_COLORS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "QUALITY_STATUS_COLORS",
              "local": "QUALITY_STATUS_COLORS",
              "type": "ImportSpecifier"
            }
          ],
          "start": 827,
          "type": "ImportDeclaration"
        },
        {
          "end": 1208,
          "importKind": "value",
          "source": "@/types/procurement",
          "specifiers": [
            {
              "imported": "Supplier",
              "local": "Supplier",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProcurementRecord",
              "local": "ProcurementRecord",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProcurementStats",
              "local": "ProcurementStats",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProcurementStatus",
              "local": "ProcurementStatus",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SupplierStatus",
              "local": "SupplierStatus",
              "type": "ImportSpecifier"
            },
            {
              "imported": "QualityStatus",
              "local": "QualityStatus",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1061,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Product\\AIPricing\\index.tsx": [
        {
          "end": 304,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Link",
              "local": "Link",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CalculatorOutlined",
              "local": "CalculatorOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SaveOutlined",
              "local": "SaveOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "HistoryOutlined",
              "local": "HistoryOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChartOutlined",
              "local": "LineChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Item",
              "local": "Item",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 371,
          "importKind": "value",
          "source": "@/services/productDataSource",
          "specifiers": [
            {
              "imported": "productDataSource",
              "local": "productDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 306,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Product\\CrossPlatformManage.tsx": [
        {
          "end": 583,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Dropdown",
              "local": "Dropdown",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Menu",
              "local": "Menu",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Image",
              "local": "Image",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GlobalOutlined",
              "local": "GlobalOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AmazonOutlined",
              "local": "AmazonOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingOutlined",
              "local": "ShoppingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ExclamationCircleOutlined",
              "local": "ExclamationCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LinkOutlined",
              "local": "LinkOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowUpOutlined",
              "local": "ArrowUpOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ArrowDownOutlined",
              "local": "ArrowDownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 633,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 584,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Product\\ProductPublishForm.tsx": [
        {
          "end": 561,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Upload",
              "local": "Upload",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Image",
              "local": "Image",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SaveOutlined",
              "local": "SaveOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SendOutlined",
              "local": "SendOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InfoCircleOutlined",
              "local": "InfoCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BoxPlotOutlined",
              "local": "BoxPlotOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PictureOutlined",
              "local": "PictureOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "VideoCameraOutlined",
              "local": "VideoCameraOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TranslationOutlined",
              "local": "TranslationOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TextArea",
              "local": "TextArea",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 622,
          "importKind": "type",
          "source": "antd/es/upload/interface",
          "specifiers": [
            {
              "imported": "UploadFile",
              "local": "UploadFile",
              "type": "ImportSpecifier"
            }
          ],
          "start": 563,
          "type": "ImportDeclaration"
        },
        {
          "end": 806,
          "importKind": "value",
          "source": "@/services/materialProcessingDataSource",
          "specifiers": [
            {
              "imported": "materialProcessingDataSource",
              "local": "materialProcessingDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ImageToImageParams",
              "local": "ImageToImageParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ImageToVideoParams",
              "local": "ImageToVideoParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "STYLE_OPTIONS",
              "local": "STYLE_OPTIONS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TRANSLATION_LANGUAGES",
              "local": "TRANSLATION_LANGUAGES",
              "type": "ImportSpecifier"
            }
          ],
          "start": 624,
          "type": "ImportDeclaration"
        },
        {
          "end": 860,
          "importKind": "value",
          "source": "@/contexts/LocaleContext",
          "specifiers": [
            {
              "imported": "useLocale",
              "local": "useLocale",
              "type": "ImportSpecifier"
            }
          ],
          "start": 807,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Product\\ProfitMonitor\\index.tsx": [
        {
          "end": 416,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChart",
              "local": "LineChart",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Line",
              "local": "Line",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AreaChart",
              "local": "AreaChart",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Area",
              "local": "Area",
              "type": "ImportSpecifier"
            },
            {
              "imported": "XAxis",
              "local": "XAxis",
              "type": "ImportSpecifier"
            },
            {
              "imported": "YAxis",
              "local": "YAxis",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CartesianGrid",
              "local": "CartesianGrid",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Legend",
              "local": "Legend",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ResponsiveContainer",
              "local": "ResponsiveContainer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AlertOutlined",
              "local": "AlertOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UpOutlined",
              "local": "UpOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownOutlined",
              "local": "DownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 482,
          "importKind": "value",
          "source": "@/services/productDataSource",
          "specifiers": [
            {
              "imported": "productDataSource",
              "local": "productDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 417,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Product\\index.tsx": [
        {
          "end": 393,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UploadOutlined",
              "local": "UploadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GlobalOutlined",
              "local": "GlobalOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Link",
              "local": "Link",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 450,
          "importKind": "value",
          "source": "./CrossPlatformManage",
          "specifiers": [
            {
              "local": "CrossPlatformManage",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 394,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Reports\\index.tsx": [
        {
          "end": 747,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Radio",
              "local": "Radio",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Dropdown",
              "local": "Dropdown",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Menu",
              "local": "Menu",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LineChartOutlined",
              "local": "LineChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PieChartOutlined",
              "local": "PieChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiseOutlined",
              "local": "RiseOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DownloadOutlined",
              "local": "DownloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShareAltOutlined",
              "local": "ShareAltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CalendarOutlined",
              "local": "CalendarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProductOutlined",
              "local": "ProductOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "OrderedListOutlined",
              "local": "OrderedListOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FallOutlined",
              "local": "FallOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 798,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 749,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Role\\index.tsx": [
        {
          "end": 228,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Checkbox",
              "local": "Checkbox",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tree",
              "local": "Tree",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 302,
          "importKind": "value",
          "source": "@/services/settingsDataSource",
          "specifiers": [
            {
              "imported": "settingsDataSource",
              "local": "settingsDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Role",
              "local": "Role",
              "type": "ImportSpecifier"
            }
          ],
          "start": 229,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Settings\\PlatformAuth.tsx": [
        {
          "end": 416,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LinkOutlined",
              "local": "LinkOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ApiOutlined",
              "local": "ApiOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 466,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 417,
          "type": "ImportDeclaration"
        },
        {
          "end": 542,
          "importKind": "value",
          "source": "@/services/platformAuthDataSource",
          "specifiers": [
            {
              "imported": "platformAuthDataSource",
              "local": "platformAuthDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 467,
          "type": "ImportDeclaration"
        },
        {
          "end": 626,
          "importKind": "value",
          "source": "@/types/platform",
          "specifiers": [
            {
              "imported": "PlatformAccount",
              "local": "PlatformAccount",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlatformAccountStats",
              "local": "PlatformAccountStats",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Platform",
              "local": "Platform",
              "type": "ImportSpecifier"
            }
          ],
          "start": 543,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Settings\\ServiceManager.tsx": [
        {
          "end": 375,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DashboardOutlined",
              "local": "DashboardOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 414,
          "importKind": "type",
          "source": "antd",
          "specifiers": [
            {
              "imported": "TabsProps",
              "local": "TabsProps",
              "type": "ImportSpecifier"
            }
          ],
          "start": 376,
          "type": "ImportDeclaration"
        },
        {
          "end": 464,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 415,
          "type": "ImportDeclaration"
        },
        {
          "end": 586,
          "importKind": "value",
          "source": "@/services/serviceManagerDataSource",
          "specifiers": [
            {
              "imported": "serviceManagerDataSource",
              "local": "serviceManagerDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ServiceInfo",
              "local": "ServiceInfo",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ServiceStats",
              "local": "ServiceStats",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ServicePreset",
              "local": "ServicePreset",
              "type": "ImportSpecifier"
            }
          ],
          "start": 465,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Settings\\index.tsx": [
        {
          "end": 128,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SafetyOutlined",
              "local": "SafetyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Sovereignty\\index.tsx": [
        {
          "end": 268,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 342,
          "importKind": "value",
          "source": "@/services/sovereigntyDataSource",
          "specifiers": [
            {
              "imported": "SovereigntyDataSource",
              "local": "SovereigntyDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 269,
          "type": "ImportDeclaration"
        },
        {
          "end": 415,
          "importKind": "type",
          "source": "@/services/sovereigntyDataSource",
          "specifiers": [
            {
              "imported": "SovereigntyItem",
              "local": "SovereigntyItem",
              "type": "ImportSpecifier"
            }
          ],
          "start": 343,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\StrategyMarketplace\\index.tsx": [
        {
          "end": 617,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Spin",
              "local": "Spin",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Rate",
              "local": "Rate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Empty",
              "local": "Empty",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FireOutlined",
              "local": "FireOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StarOutlined",
              "local": "StarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RocketOutlined",
              "local": "RocketOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PercentageOutlined",
              "local": "PercentageOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PauseCircleOutlined",
              "local": "PauseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CloseCircleOutlined",
              "local": "CloseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BulbOutlined",
              "local": "BulbOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TagOutlined",
              "local": "TagOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Paragraph",
              "local": "Paragraph",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 667,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 618,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Suppliers\\index.tsx": [
        {
          "end": 358,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Rate",
              "local": "Rate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UserOutlined",
              "local": "UserOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PhoneOutlined",
              "local": "PhoneOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MailOutlined",
              "local": "MailOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "HomeOutlined",
              "local": "HomeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useNavigate",
              "local": "useNavigate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TextArea",
              "local": "TextArea",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 438,
          "importKind": "value",
          "source": "@/services/suppliersDataSource",
          "specifiers": [
            {
              "imported": "suppliersDataSource",
              "local": "suppliersDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Supplier",
              "local": "Supplier",
              "type": "ImportSpecifier"
            }
          ],
          "start": 359,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\TaskCenter\\index.tsx": [
        {
          "end": 785,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Dropdown",
              "local": "Dropdown",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Menu",
              "local": "Menu",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Switch",
              "local": "Switch",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Steps",
              "local": "Steps",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlayCircleOutlined",
              "local": "PlayCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PauseCircleOutlined",
              "local": "PauseCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StopOutlined",
              "local": "StopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ReloadOutlined",
              "local": "ReloadOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MoreOutlined",
              "local": "MoreOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SettingOutlined",
              "local": "SettingOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RocketOutlined",
              "local": "RocketOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ThunderboltOutlined",
              "local": "ThunderboltOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FileTextOutlined",
              "local": "FileTextOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarChartOutlined",
              "local": "BarChartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Step",
              "local": "Step",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 864,
          "importKind": "value",
          "source": "@/services/taskCenterDataSource",
          "specifiers": [
            {
              "imported": "taskCenterDataSource",
              "local": "taskCenterDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Task",
              "local": "Task",
              "type": "ImportSpecifier"
            }
          ],
          "start": 787,
          "type": "ImportDeclaration"
        },
        {
          "end": 915,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 866,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\TestRoute.tsx": [
        {
          "end": 32,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\UserAsset\\UserAssets.tsx": [
        {
          "end": 554,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DatePicker",
              "local": "DatePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "List",
              "local": "List",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Avatar",
              "local": "Avatar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UserOutlined",
              "local": "UserOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DollarOutlined",
              "local": "DollarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TrophyOutlined",
              "local": "TrophyOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CrownOutlined",
              "local": "CrownOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "GiftOutlined",
              "local": "GiftOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FireOutlined",
              "local": "FireOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StarOutlined",
              "local": "StarOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WalletOutlined",
              "local": "WalletOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShoppingCartOutlined",
              "local": "ShoppingCartOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ClockCircleOutlined",
              "local": "ClockCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RiseOutlined",
              "local": "RiseOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "RangePicker",
              "local": "RangePicker",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 605,
          "importKind": "type",
          "source": "antd/es/table",
          "specifiers": [
            {
              "imported": "ColumnsType",
              "local": "ColumnsType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 556,
          "type": "ImportDeclaration"
        },
        {
          "end": 633,
          "importKind": "value",
          "source": "dayjs",
          "specifiers": [
            {
              "local": "dayjs",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 607,
          "type": "ImportDeclaration"
        },
        {
          "end": 728,
          "importKind": "value",
          "source": "@/services/userAssetDataSource",
          "specifiers": [
            {
              "imported": "userAssetDataSource",
              "local": "userAssetDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "UserAsset",
              "local": "UserAsset",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MemberLevel",
              "local": "MemberLevel",
              "type": "ImportSpecifier"
            }
          ],
          "start": 635,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\User\\index.tsx": [
        {
          "end": 252,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Title",
              "local": "Title",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Item",
              "local": "Item",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 327,
          "importKind": "value",
          "source": "@/services/settingsDataSource",
          "specifiers": [
            {
              "imported": "settingsDataSource",
              "local": "settingsDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "User",
              "local": "User",
              "type": "ImportSpecifier"
            }
          ],
          "start": 254,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\pages\\Warehouse\\index.tsx": [
        {
          "end": 645,
          "importKind": "value",
          "source": "@/imports",
          "specifiers": [
            {
              "imported": "useState",
              "local": "useState",
              "type": "ImportSpecifier"
            },
            {
              "imported": "useEffect",
              "local": "useEffect",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Card",
              "local": "Card",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Table",
              "local": "Table",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Button",
              "local": "Button",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Space",
              "local": "Space",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tag",
              "local": "Tag",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Row",
              "local": "Row",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Col",
              "local": "Col",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Statistic",
              "local": "Statistic",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Modal",
              "local": "Modal",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Form",
              "local": "Form",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Input",
              "local": "Input",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InputNumber",
              "local": "InputNumber",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Select",
              "local": "Select",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tabs",
              "local": "Tabs",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Tooltip",
              "local": "Tooltip",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Progress",
              "local": "Progress",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Badge",
              "local": "Badge",
              "type": "ImportSpecifier"
            },
            {
              "imported": "message",
              "local": "message",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Descriptions",
              "local": "Descriptions",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Divider",
              "local": "Divider",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Alert",
              "local": "Alert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Timeline",
              "local": "Timeline",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Popconfirm",
              "local": "Popconfirm",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Drawer",
              "local": "Drawer",
              "type": "ImportSpecifier"
            },
            {
              "imported": "List",
              "local": "List",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Avatar",
              "local": "Avatar",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Typography",
              "local": "Typography",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Text",
              "local": "Text",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "ShopOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InboxOutlined",
              "local": "InboxOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BarcodeOutlined",
              "local": "BarcodeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarningOutlined",
              "local": "WarningOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CheckCircleOutlined",
              "local": "CheckCircleOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SyncOutlined",
              "local": "SyncOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlusOutlined",
              "local": "PlusOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EditOutlined",
              "local": "EditOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DeleteOutlined",
              "local": "DeleteOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "EyeOutlined",
              "local": "EyeOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SearchOutlined",
              "local": "SearchOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FilterOutlined",
              "local": "FilterOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "LinkOutlined",
              "local": "LinkOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ShopOutlined",
              "local": "WarehouseOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StockOutlined",
              "local": "StockOutlined",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Option",
              "local": "Option",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Search",
              "local": "Search",
              "type": "ImportSpecifier"
            },
            {
              "imported": "FC",
              "local": "FC",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 740,
          "importKind": "value",
          "source": "@/services/warehouseDataSource",
          "specifiers": [
            {
              "imported": "warehouseDataSource",
              "local": "warehouseDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MAPPING_TYPE_NAMES",
              "local": "MAPPING_TYPE_NAMES",
              "type": "ImportSpecifier"
            }
          ],
          "start": 646,
          "type": "ImportDeclaration"
        },
        {
          "end": 905,
          "importKind": "value",
          "source": "@/types/warehouse",
          "specifiers": [
            {
              "imported": "Warehouse",
              "local": "Warehouse",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarehouseStock",
              "local": "WarehouseStock",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SalesSku",
              "local": "SalesSku",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SkuMapping",
              "local": "SkuMapping",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StockMovement",
              "local": "StockMovement",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InventoryAlert",
              "local": "InventoryAlert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StockAvailability",
              "local": "StockAvailability",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MappingType",
              "local": "MappingType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 741,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\abTestDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\adOptimizationDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\afterSalesDataSource.ts": [
        {
          "end": 280,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 250,
          "type": "ImportDeclaration"
        },
        {
          "end": 330,
          "importKind": "value",
          "source": "@/types/datasource",
          "specifiers": [
            {
              "imported": "IDataSource",
              "local": "IDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 281,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\aiActionTaskDataSource.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\aiSuggestionDataSource.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\analyticsDataSource.ts": [
        {
          "end": 282,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 252,
          "type": "ImportDeclaration"
        },
        {
          "end": 332,
          "importKind": "value",
          "source": "@/types/datasource",
          "specifiers": [
            {
              "imported": "IDataSource",
              "local": "IDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 283,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\arbitrageDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\auditDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\autoExecutionDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\b2bTradeDataSource.ts": [
        {
          "end": 284,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 254,
          "type": "ImportDeclaration"
        },
        {
          "end": 334,
          "importKind": "value",
          "source": "@/types/datasource",
          "specifiers": [
            {
              "imported": "IDataSource",
              "local": "IDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 285,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\baseDataSource.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\batchOperationDataSource.ts": [
        {
          "end": 182,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 152,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\blacklistDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\certificateDataSource.ts": [
        {
          "end": 292,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 262,
          "type": "ImportDeclaration"
        },
        {
          "end": 403,
          "importKind": "value",
          "source": "@/types/certificate",
          "specifiers": [
            {
              "imported": "Certificate",
              "local": "Certificate",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CertificateQueryParams",
              "local": "CertificateQueryParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CertificateStatus",
              "local": "CertificateStatus",
              "type": "ImportSpecifier"
            },
            {
              "imported": "CertificateType",
              "local": "CertificateType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 293,
          "type": "ImportDeclaration"
        },
        {
          "end": 453,
          "importKind": "value",
          "source": "@/types/datasource",
          "specifiers": [
            {
              "imported": "IDataSource",
              "local": "IDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 404,
          "type": "ImportDeclaration"
        },
        {
          "end": 546,
          "importKind": "value",
          "source": "./dataSourceFactory",
          "specifiers": [
            {
              "imported": "BaseDataSource",
              "local": "BaseDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BaseMockDataSource",
              "local": "BaseMockDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DataSourceFactory",
              "local": "DataSourceFactory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 454,
          "type": "ImportDeclaration"
        },
        {
          "end": 603,
          "exportKind": "type",
          "source": "@/types/certificate",
          "specifiers": [
            {
              "exported": "Certificate",
              "local": "Certificate",
              "type": "ExportSpecifier"
            }
          ],
          "start": 548,
          "type": "ExportNamedDeclaration"
        },
        {
          "end": 4781,
          "exportKind": "value",
          "source": "./dataSourceFactory",
          "specifiers": [
            {
              "exported": "__MOCK__",
              "local": "__MOCK__",
              "type": "ExportSpecifier"
            },
            {
              "exported": "__DATA_SOURCE_TYPE__",
              "local": "__DATA_SOURCE_TYPE__",
              "type": "ExportSpecifier"
            }
          ],
          "start": 4712,
          "type": "ExportNamedDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\clientDataSource.ts": [
        {
          "end": 214,
          "importKind": "value",
          "source": "./lightweightClientService",
          "specifiers": [
            {
              "imported": "lightweightClientService",
              "local": "lightweightClientService",
              "type": "ImportSpecifier"
            }
          ],
          "start": 144,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\cloud-control-layer.ts": [
        {
          "end": 350,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 320,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\cloud-service.ts": [
        {
          "end": 132,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 102,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\crossBorderIntegrationDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\dashboardDataSource.ts": [
        {
          "end": 207,
          "importKind": "value",
          "source": "./baseDataSource",
          "specifiers": [
            {
              "imported": "BaseDataSource",
              "local": "BaseDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DataSourceFactory",
              "local": "DataSourceFactory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 138,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\dataSourceFactory.ts": [
        {
          "end": 86,
          "importKind": "value",
          "source": "@/types/datasource",
          "specifiers": [
            {
              "imported": "IDataSource",
              "local": "IDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "IMockDataSource",
              "local": "IMockDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 20,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\dynamicPricingDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\executionResultDataSource.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\financeDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 101,
          "importKind": "value",
          "source": "./baseDataSource",
          "specifiers": [
            {
              "imported": "BaseDataSource",
              "local": "BaseDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DataSourceFactory",
              "local": "DataSourceFactory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 32,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\governanceDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\http.ts": [
        {
          "end": 27,
          "importKind": "value",
          "source": "axios",
          "specifiers": [
            {
              "local": "axios",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\humanApprovalDataSource.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\independentSiteDataSource.ts": [
        {
          "end": 289,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 259,
          "type": "ImportDeclaration"
        },
        {
          "end": 356,
          "importKind": "value",
          "source": "@/types/datasource",
          "specifiers": [
            {
              "imported": "IDataSource",
              "local": "IDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "IMockDataSource",
              "local": "IMockDataSource",
              "type": "ImportSpecifier"
            }
          ],
          "start": 290,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\inventoryDataSource.ts": [
        {
          "end": 109,
          "importKind": "value",
          "source": "../types/inventory",
          "specifiers": [
            {
              "imported": "Inventory",
              "local": "Inventory",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InventoryFilterParams",
              "local": "InventoryFilterParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InventoryStatistics",
              "local": "InventoryStatistics",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InventoryStatus",
              "local": "InventoryStatus",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\leaderboardDataSource.ts": [
        {
          "end": 158,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 128,
          "type": "ImportDeclaration"
        },
        {
          "end": 251,
          "importKind": "value",
          "source": "./dataSourceFactory",
          "specifiers": [
            {
              "imported": "BaseDataSource",
              "local": "BaseDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "BaseMockDataSource",
              "local": "BaseMockDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DataSourceFactory",
              "local": "DataSourceFactory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 159,
          "type": "ImportDeclaration"
        },
        {
          "end": 3735,
          "exportKind": "value",
          "source": "./dataSourceFactory",
          "specifiers": [
            {
              "exported": "__MOCK__",
              "local": "__MOCK__",
              "type": "ExportSpecifier"
            },
            {
              "exported": "__DATA_SOURCE_TYPE__",
              "local": "__DATA_SOURCE_TYPE__",
              "type": "ExportSpecifier"
            }
          ],
          "start": 3666,
          "type": "ExportNamedDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\lightweightClientService.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\logisticsDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\marketingDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\materialProcessingDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\operationAgentDataSource.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\operationLogDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\orderDataSource.ts": [
        {
          "end": 175,
          "importKind": "value",
          "source": "../types/order",
          "specifiers": [
            {
              "imported": "Order",
              "local": "Order",
              "type": "ImportSpecifier"
            }
          ],
          "start": 136,
          "type": "ImportDeclaration"
        },
        {
          "end": 245,
          "importKind": "value",
          "source": "./baseDataSource",
          "specifiers": [
            {
              "imported": "BaseDataSource",
              "local": "BaseDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DataSourceFactory",
              "local": "DataSourceFactory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 176,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\platformAuthDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 105,
          "importKind": "value",
          "source": "@/types/platform",
          "specifiers": [
            {
              "imported": "PlatformAccount",
              "local": "PlatformAccount",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PlatformAccountStats",
              "local": "PlatformAccountStats",
              "type": "ImportSpecifier"
            }
          ],
          "start": 32,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\procurementDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 219,
          "importKind": "value",
          "source": "@/types/procurement",
          "specifiers": [
            {
              "imported": "Supplier",
              "local": "Supplier",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProcurementRecord",
              "local": "ProcurementRecord",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProcurementStats",
              "local": "ProcurementStats",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SupplierPerformance",
              "local": "SupplierPerformance",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProcurementStatus",
              "local": "ProcurementStatus",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SupplierStatus",
              "local": "SupplierStatus",
              "type": "ImportSpecifier"
            },
            {
              "imported": "PaymentStatus",
              "local": "PaymentStatus",
              "type": "ImportSpecifier"
            },
            {
              "imported": "QualityStatus",
              "local": "QualityStatus",
              "type": "ImportSpecifier"
            }
          ],
          "start": 32,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\productDataSource.ts": [
        {
          "end": 169,
          "importKind": "value",
          "source": "moment",
          "specifiers": [
            {
              "local": "moment",
              "type": "ImportDefaultSpecifier"
            }
          ],
          "start": 141,
          "type": "ImportDeclaration"
        },
        {
          "end": 239,
          "importKind": "value",
          "source": "./baseDataSource",
          "specifiers": [
            {
              "imported": "BaseDataSource",
              "local": "BaseDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "DataSourceFactory",
              "local": "DataSourceFactory",
              "type": "ImportSpecifier"
            }
          ],
          "start": 170,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\productManagementDataSource.ts": [
        {
          "end": 437,
          "importKind": "value",
          "source": "../types/productManagement",
          "specifiers": [
            {
              "imported": "ExtendedProduct",
              "local": "ExtendedProduct",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProductFilterParams",
              "local": "ProductFilterParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProductSortParams",
              "local": "ProductSortParams",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProductStatistics",
              "local": "ProductStatistics",
              "type": "ImportSpecifier"
            },
            {
              "imported": "Shop",
              "local": "Shop",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProductManagementStatus",
              "local": "ProductManagementStatus",
              "type": "ImportSpecifier"
            }
          ],
          "start": 268,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\productSelectionDataSource.ts": [
        {
          "end": 298,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 268,
          "type": "ImportDeclaration"
        },
        {
          "end": 564,
          "importKind": "value",
          "source": "@/mock/data/productSelection.mock",
          "specifiers": [
            {
              "imported": "mockProductSelections",
              "local": "mockProductSelections",
              "type": "ImportSpecifier"
            },
            {
              "imported": "mockProductSelectionDetail",
              "local": "mockProductSelectionDetail",
              "type": "ImportSpecifier"
            },
            {
              "imported": "mockCreateProductSelection",
              "local": "mockCreateProductSelection",
              "type": "ImportSpecifier"
            },
            {
              "imported": "mockUpdateProductSelection",
              "local": "mockUpdateProductSelection",
              "type": "ImportSpecifier"
            },
            {
              "imported": "mockDeleteProductSelection",
              "local": "mockDeleteProductSelection",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ProductPool",
              "local": "ProductPool",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SelectionRule",
              "local": "SelectionRule",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ListingTask",
              "local": "ListingTask",
              "type": "ImportSpecifier"
            },
            {
              "imported": "AutoListingConfig",
              "local": "AutoListingConfig",
              "type": "ImportSpecifier"
            }
          ],
          "start": 299,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\reportsDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\returnDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\saasTenantDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 143,
          "importKind": "value",
          "source": "./saasTenantTypes",
          "specifiers": [
            {
              "imported": "SaasTenantDataSource",
              "local": "SaasTenantDataSource",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SaasTenant",
              "local": "SaasTenant",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TenantDomain",
              "local": "TenantDomain",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TenantUser",
              "local": "TenantUser",
              "type": "ImportSpecifier"
            },
            {
              "imported": "TenantSettings",
              "local": "TenantSettings",
              "type": "ImportSpecifier"
            }
          ],
          "start": 32,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\serviceManagerDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 122,
          "importKind": "value",
          "source": "../../../server/src/config/serviceConfig",
          "specifiers": [
            {
              "imported": "SERVICE_CONFIGS",
              "local": "SERVICE_CONFIGS",
              "type": "ImportSpecifier"
            },
            {
              "imported": "ServiceConfig",
              "local": "ServiceConfig",
              "type": "ImportSpecifier"
            }
          ],
          "start": 32,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\settingsDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\shopReportDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\sovereigntyDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\storeCreationDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\suppliersDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\taskCenterDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\unifiedFulfillmentDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\userAssetDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\userDataSource.ts": [
        {
          "end": 173,
          "importKind": "value",
          "source": "../types/user",
          "specifiers": [
            {
              "imported": "User",
              "local": "User",
              "type": "ImportSpecifier"
            }
          ],
          "start": 136,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\services\\warehouseDataSource.ts": [
        {
          "end": 31,
          "importKind": "value",
          "source": "./http",
          "specifiers": [
            {
              "imported": "http",
              "local": "http",
              "type": "ImportSpecifier"
            }
          ],
          "start": 1,
          "type": "ImportDeclaration"
        },
        {
          "end": 256,
          "importKind": "value",
          "source": "@/types/warehouse",
          "specifiers": [
            {
              "imported": "Warehouse",
              "local": "Warehouse",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarehouseSku",
              "local": "WarehouseSku",
              "type": "ImportSpecifier"
            },
            {
              "imported": "WarehouseStock",
              "local": "WarehouseStock",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SalesSku",
              "local": "SalesSku",
              "type": "ImportSpecifier"
            },
            {
              "imported": "SkuMapping",
              "local": "SkuMapping",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StockMovement",
              "local": "StockMovement",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StockReservation",
              "local": "StockReservation",
              "type": "ImportSpecifier"
            },
            {
              "imported": "InventoryAlert",
              "local": "InventoryAlert",
              "type": "ImportSpecifier"
            },
            {
              "imported": "StockAvailability",
              "local": "StockAvailability",
              "type": "ImportSpecifier"
            },
            {
              "imported": "OrderFulfillmentPlan",
              "local": "OrderFulfillmentPlan",
              "type": "ImportSpecifier"
            },
            {
              "imported": "MappingType",
              "local": "MappingType",
              "type": "ImportSpecifier"
            }
          ],
          "start": 32,
          "type": "ImportDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\types\\certificate.ts": [
        {
          "end": 69,
          "source": "../../../server/src/shared/types/domain/Certificate",
          "start": 1,
          "type": "ExportAllDeclaration"
        }
      ],
      "D:\\trae_projects\\makemd\\makemd\\dashboard\\src\\types\\inventory.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\server\\src\\config\\serviceConfig.ts": [],
      "D:\\trae_projects\\makemd\\makemd\\server\\src\\shared\\types\\domain\\Certificate.ts": []
    }
  }
}
