Ver Fonte

feat:prj first init

叶静 há 1 mês atrás
commit
cc6d1cc58d
100 ficheiros alterados com 694 adições e 0 exclusões
  1. 15 0
      .env.dev
  2. 18 0
      .env.development
  3. 15 0
      .env.production
  4. 10 0
      .gitignore
  5. 6 0
      .prettierignore
  6. 10 0
      .prettierrc
  7. 15 0
      .promptx/memory/declarative.md
  8. 17 0
      .promptx/resource/project.registry.json
  9. 1 0
      README.md
  10. 169 0
      index.html
  11. 9 0
      jsconfig.json
  12. 65 0
      package.json
  13. BIN
      public/favicon.ico
  14. 344 0
      public/mockServiceWorker.js
  15. BIN
      public/static/images/chat/chat.mp3
  16. BIN
      public/static/images/chat/head.png
  17. BIN
      public/static/images/chat/loading.png
  18. BIN
      public/static/images/chat/notice.mp3
  19. BIN
      public/static/images/chat/warning.png
  20. BIN
      public/static/images/error/401.png
  21. BIN
      public/static/images/error/403.png
  22. BIN
      public/static/images/error/404.png
  23. BIN
      public/static/images/filemanager/doc.png
  24. BIN
      public/static/images/filemanager/group.png
  25. BIN
      public/static/images/filemanager/pdf.png
  26. BIN
      public/static/images/filemanager/ppt.png
  27. BIN
      public/static/images/filemanager/txt.png
  28. BIN
      public/static/images/filemanager/video.png
  29. BIN
      public/static/images/filemanager/weizhi.png
  30. BIN
      public/static/images/filemanager/xls.png
  31. BIN
      public/static/images/filemanager/zip.png
  32. BIN
      public/static/images/index/wechat0.png
  33. BIN
      public/static/images/index/wechat1.png
  34. BIN
      public/static/images/install/bg.png
  35. BIN
      public/static/images/install/img-01.png
  36. BIN
      public/static/images/install/logo.png
  37. BIN
      public/static/images/loading/logo.gif
  38. BIN
      public/static/images/loading/name-dark.png
  39. BIN
      public/static/images/loading/name-light.png
  40. BIN
      public/static/images/notification/email.png
  41. BIN
      public/static/images/notification/sms.png
  42. BIN
      public/static/images/platform/wechat/miniProgram.png
  43. BIN
      public/static/images/platform/wechat/officialAccount.png
  44. BIN
      public/static/images/platform/wechat/openPlatform.png
  45. BIN
      public/static/images/shop/activity/free_shipping.png
  46. BIN
      public/static/images/shop/activity/full_coupon.png
  47. BIN
      public/static/images/shop/activity/full_discount.png
  48. BIN
      public/static/images/shop/activity/full_gift.png
  49. BIN
      public/static/images/shop/activity/full_reduce.png
  50. BIN
      public/static/images/shop/activity/groupon.png
  51. BIN
      public/static/images/shop/activity/groupon_ladder.png
  52. BIN
      public/static/images/shop/activity/score_shop.png
  53. BIN
      public/static/images/shop/activity/seckill.png
  54. BIN
      public/static/images/shop/activity/signin.png
  55. BIN
      public/static/images/shop/activity/wechat_mplive.png
  56. BIN
      public/static/images/shop/category/first_one.png
  57. BIN
      public/static/images/shop/category/first_two.png
  58. BIN
      public/static/images/shop/category/second_one.png
  59. BIN
      public/static/images/shop/category/success.png
  60. BIN
      public/static/images/shop/category/third_one.png
  61. BIN
      public/static/images/shop/category/warning.png
  62. BIN
      public/static/images/shop/config/H5.png
  63. BIN
      public/static/images/shop/config/H5BG.png
  64. BIN
      public/static/images/shop/config/WechatMiniProgram.png
  65. BIN
      public/static/images/shop/config/WechatMiniProgramBG.png
  66. BIN
      public/static/images/shop/config/WechatOfficialAccount.png
  67. BIN
      public/static/images/shop/config/WechatOfficialAccountBG.png
  68. BIN
      public/static/images/shop/config/app.png
  69. BIN
      public/static/images/shop/config/appBG.png
  70. BIN
      public/static/images/shop/config/icon-right.png
  71. BIN
      public/static/images/shop/config/upgrade-config.png
  72. BIN
      public/static/images/shop/dashboard/aftersale.png
  73. BIN
      public/static/images/shop/dashboard/noSend.png
  74. BIN
      public/static/images/shop/dashboard/order.png
  75. BIN
      public/static/images/shop/dashboard/payAmount.png
  76. BIN
      public/static/images/shop/dashboard/payOrder.png
  77. BIN
      public/static/images/shop/dashboard/refund.png
  78. BIN
      public/static/images/shop/dashboard/top1.png
  79. BIN
      public/static/images/shop/dashboard/top2.png
  80. BIN
      public/static/images/shop/dashboard/top3.png
  81. BIN
      public/static/images/shop/dashboard/top4.png
  82. BIN
      public/static/images/shop/dashboard/top5.png
  83. BIN
      public/static/images/shop/decorate/avatar.png
  84. BIN
      public/static/images/shop/decorate/black.png
  85. BIN
      public/static/images/shop/decorate/coupon.png
  86. BIN
      public/static/images/shop/decorate/couponCard.png
  87. BIN
      public/static/images/shop/decorate/couponCardStyle.png
  88. BIN
      public/static/images/shop/decorate/floatMenu.png
  89. BIN
      public/static/images/shop/decorate/golden.png
  90. BIN
      public/static/images/shop/decorate/goodsCard.png
  91. BIN
      public/static/images/shop/decorate/goodsShelves.png
  92. BIN
      public/static/images/shop/decorate/green.png
  93. BIN
      public/static/images/shop/decorate/groupon.png
  94. BIN
      public/static/images/shop/decorate/guidePage.png
  95. BIN
      public/static/images/shop/decorate/header-WechatMiniProgram.png
  96. BIN
      public/static/images/shop/decorate/header-WechatOfficialAccount.png
  97. BIN
      public/static/images/shop/decorate/header-android.png
  98. BIN
      public/static/images/shop/decorate/header-diypage.png
  99. BIN
      public/static/images/shop/decorate/header-ios.png
  100. BIN
      public/static/images/shop/decorate/hotzone.png

+ 15 - 0
.env.dev

@@ -0,0 +1,15 @@
+##### VITE SheepJS配置
+SHEEP_VERSION = v1.4.0
+
+SHEEP_BASE_URL = /
+
+# 开发环境接口域名
+SHEEP_DEV_BASE_URL = https://shop.trust-will.com
+
+# 开发模式端口号
+SHEEP_DEV_PORT = 3001
+# 预览模式端口号
+SHEEP_PREVIEW_PORT = 3002
+
+# 缓存前缀 使用localStorage
+SHEEP_CACHE_PREFIX = _SHEEP_ 

+ 18 - 0
.env.development

@@ -0,0 +1,18 @@
+##### VITE SheepJS配置
+SHEEP_VERSION = v1.4.0
+
+SHEEP_BASE_URL = /
+
+# 开发环境接口域名
+ SHEEP_DEV_BASE_URL = https://shop.trust-will.com
+
+# 开发模式端口号
+SHEEP_DEV_PORT = 3001
+# 预览模式端口号
+SHEEP_PREVIEW_PORT = 3002RR
+
+# 缓存前缀 使用localStorage
+SHEEP_CACHE_PREFIX = _SHEEP_
+
+# Mock 服务配置
+SHEEP_USE_MOCK = true

+ 15 - 0
.env.production

@@ -0,0 +1,15 @@
+##### VITE SheepJS配置
+SHEEP_VERSION = v1.4.0
+
+SHEEP_BASE_URL = https://shop.fusenlink.com
+
+# 开发环境接口域名
+SHEEP_DEV_BASE_URL = https://shop.fusenlink.com
+
+# 开发模式端口号
+SHEEP_DEV_PORT = 3001
+# 预览模式端口号
+SHEEP_PREVIEW_PORT = 3002
+
+# 缓存前缀 使用localStorage
+SHEEP_CACHE_PREFIX = _SHEEP_ 

+ 10 - 0
.gitignore

@@ -0,0 +1,10 @@
+node_modules
+.DS_Store
+dist
+*.local
+.env
+yarn.lock
+yarn-error.log
+package-lock.json
+pnpm-lock.yaml
+.vscode

+ 6 - 0
.prettierignore

@@ -0,0 +1,6 @@
+/dist/*
+/node_modules/**
+/public/*
+
+**/*.svg
+**/*.sh

+ 10 - 0
.prettierrc

@@ -0,0 +1,10 @@
+{
+  "printWidth": 100,
+  "semi": true,
+  "vueIndentScriptAndStyle": true,
+  "singleQuote": true,
+  "trailingComma": "all",
+  "proseWrap": "never",
+  "htmlWhitespaceSensitivity": "strict",
+  "endOfLine": "auto"
+}

+ 15 - 0
.promptx/memory/declarative.md

@@ -0,0 +1,15 @@
+# 陈述性记忆
+
+## 高价值记忆(评分 ≥ 7)
+
+- 2025/07/07 10:11 START
+用户采用了其他项目的管理中台来构建新系统,需要解决部分接口在新系统不存在的问题。我为用户创建了完整的本地数据模拟系统,包括:1. admin.js核心模拟文件,包含init和loginConfig两个主要接口的模拟数据;2. 支持异步请求模拟、环境切换、日志记录等功能;3. 提供了使用示例、集成示例和详细文档;4. 支持浏览器控制台调试工具。用户使用Vue3+Element Plus+ESLint+Prettier技术栈。 --tags Vue3 Element-Plus 模拟数据 API接口 前端开发 本地数据
+--tags #工具使用 #评分:8 #有效期:长期
+- END
+
+
+
+- 2025/07/07 10:24 START
+用户要求移除登录页面所有关于微信扫码登录和验证码相关的代码,只保留账号密码登录和逻辑。我成功完成了这个任务:1. 移除了模板中的验证码输入框、微信登录按钮、扫码登录区域;2. 移除了脚本中的wechatApi导入、验证码字段、相关验证规则和所有验证码/微信相关函数;3. 移除了样式中的验证码、扫码登录相关样式;4. 保留了纯净的账号密码登录、记住我、记住用户、密码显示隐藏等核心功能。最终实现了简洁高效的登录页面。 --tags Vue3 登录页面 移除功能 微信登录 验证码 代码重构
+--tags #最佳实践 #评分:8 #有效期:长期
+- END

+ 17 - 0
.promptx/resource/project.registry.json

@@ -0,0 +1,17 @@
+{
+  "version": "2.0.0",
+  "source": "project",
+  "metadata": {
+    "version": "2.0.0",
+    "description": "project 级资源注册表",
+    "createdAt": "2025-07-07T09:33:02.225Z",
+    "updatedAt": "2025-07-07T09:33:02.226Z",
+    "resourceCount": 0
+  },
+  "resources": [],
+  "stats": {
+    "totalResources": 0,
+    "byProtocol": {},
+    "bySource": {}
+  }
+}

+ 1 - 0
README.md

@@ -0,0 +1 @@
+bandhuBuy-admin

+ 169 - 0
index.html

@@ -0,0 +1,169 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="renderer" content="webkit" />
+    <meta
+      name="viewport"
+      content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0"
+    />
+    <title>...</title>
+    <link rel="icon" href="/favicon.ico" />
+
+    <script>
+      var _hmt = _hmt || [];
+      (function () {
+        var hm = document.createElement('script');
+        hm.src = 'https://hm.baidu.com/hm.js?2ee8eb28c33a68658297424bb090ebea';
+        var s = document.getElementsByTagName('script')[0];
+        s.parentNode.insertBefore(hm, s);
+      })();
+    </script>
+    <meta name="referrer" content="no-referrer" />
+
+    <style>
+      html,
+      body,
+      #app {
+        height: 100%;
+        margin: 0;
+        padding: 0;
+        font-family:
+          -apple-system,
+          BlinkMacSystemFont,
+          Helvetica Neue,
+          PingFang SC,
+          Microsoft YaHei,
+          Source Han Sans SC,
+          Noto Sans CJK SC,
+          sans-serif;
+      }
+
+      .preload {
+        display: flex !important;
+        flex-direction: column !important;
+        height: 100% !important;
+        letter-spacing: 1px;
+        background: radial-gradient(circle at 1px 1px, #e4e4e4 1px, #fdfdfd 0);
+        background-size: 16px 16px;
+        position: fixed !important;
+        top: 0 !important;
+        left: 0 !important;
+        width: 100% !important;
+        z-index: 9999 !important;
+      }
+
+      .preload.dark {
+        background: radial-gradient(circle at 1px 1px, #524d52 1px, #2c2c2c 0);
+        background-size: 16px 16px;
+      }
+
+      .preload .container {
+        display: flex !important;
+        justify-content: center !important;
+        align-items: center !important;
+        flex-direction: column !important;
+        width: 100% !important;
+        user-select: none;
+        flex-grow: 1 !important;
+        height: 100% !important;
+      }
+
+      .preload .box {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        margin-bottom: 20px;
+      }
+
+      .preload .name {
+        text-shadow: 0px 2px 6px rgba(0, 0, 0, 0.24);
+      }
+
+      .preload .name .left {
+        font-weight: 400;
+        font-size: 43px;
+        line-height: 62px;
+        text-transform: uppercase;
+        letter-spacing: 1px;
+      }
+
+      .preload .name .right {
+        font-weight: 200;
+        font-size: 43px;
+        line-height: 62px;
+        letter-spacing: 1px;
+        text-transform: uppercase;
+      }
+
+      .preload.light .name {
+        color: #262626;
+      }
+
+      .preload.dark .name {
+        color: #d6d6d6;
+      }
+
+      .preload .logo {
+        width: 48px;
+        height: 48px;
+        margin-right: 12px;
+        filter: drop-shadow(0px 2px 6px rgba(0, 0, 0, 0.24));
+      }
+
+      .preload .title {
+        color: #595959;
+        font-weight: 400;
+        font-size: 14px;
+        width: fit-content;
+        height: 20px;
+        line-height: 20px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        /* text-shadow: 0px 2px 4px rgba(0, 0, 0, 0.24); */
+      }
+
+      .dark .title {
+        color: #adadad;
+      }
+    </style>
+  </head>
+
+  <body>
+    <div id="app">
+      <div class="preload">
+        <div class="container">
+          <div class="box">
+            <img class="logo" src="/static/images/loading/logo.gif" />
+            <div class="name"><span class="left">BANDHU</span><span class="right">BUY</span></div>
+          </div>
+          <div class="title">应用加载中,请稍等片刻...</div>
+        </div>
+      </div>
+    </div>
+    <script type="module" src="/src/main.js"></script>
+  </body>
+  <script>
+    document.querySelector('.preload').className = `preload ${
+      JSON.parse(localStorage.getItem('_SHEEP_darkMode'))?.data
+    }`;
+  </script>
+  <style>
+    /* 去除浏览器表单自动填充样式*/
+    input:-webkit-autofill,
+    textarea:-webkit-autofill,
+    select:-webkit-autofill {
+      -webkit-text-fill-color: #000 !important;
+      -webkit-box-shadow: 0 0 0px 1000px transparent inset !important;
+      background-color: transparent;
+      background-image: none;
+      transition: background-color 50000s ease-in-out 0s;
+    }
+
+    input {
+      background-color: transparent;
+    }
+  </style>
+</html>

+ 9 - 0
jsconfig.json

@@ -0,0 +1,9 @@
+{
+    "compilerOptions": {
+      "jsx": "preserve",
+      "baseUrl": ".",
+      "paths": {
+        "@/*": ["./src/*"]
+      }
+    }
+  }

+ 65 - 0
package.json

@@ -0,0 +1,65 @@
+{
+  "name": "admin-panel",
+  "version": "0.1.2",
+  "author": {
+    "name": "callmeye"
+  },
+  "scripts": {
+    "dev": "vite",
+    "dev:mock": "vite --mode=development-mock",
+    "build": "vite build",
+    "prettier": "prettier --write  \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"",
+    "preview": "vite preview",
+    "test": "vite build && vite preview"
+  },
+  "dependencies": {
+    "@element-plus/icons-vue": "^2.1.0",
+    "@iconify/iconify": "^3.1.1",
+    "@vueuse/core": "^10.5.0",
+    "@vueuse/shared": "^10.5.0",
+    "@wangeditor/editor": "^5.1.23",
+    "@wangeditor/editor-for-vue": "^5.1.12",
+    "axios": "^1.5.1",
+    "clipboard": "^2.0.11",
+    "cropperjs": "^1.6.1",
+    "dayjs": "^1.11.10",
+    "echarts": "^5.4.3",
+    "element-plus": "2.3.9",
+    "fast-glob": "^3.3.1",
+    "html2canvas": "^1.4.1",
+    "lodash": "^4.17.21",
+    "lodash-contrib": "^241.2.1",
+    "mitt": "^3.0.1",
+    "normalize.css": "^8.0.1",
+    "nprogress": "^0.2.0",
+    "pinia": "^2.1.7",
+    "pinia-plugin-persistedstate": "^3.2.0",
+    "qrcode.vue": "^3.4.1",
+    "uuid": "^9.0.1",
+    "v-contextmenu": "^3.0.0",
+    "vue": "^3.3.5",
+    "vue-echarts": "^6.6.1",
+    "vue-jsonp": "^2.0.0",
+    "vue-router": "^4.2.5",
+    "vuedraggable": "^4.1.0",
+    "xlsx": "^0.18.5",
+    "xss": "^1.0.14"
+  },
+  "devDependencies": {
+    "@iconify/json": "^2.2.131",
+    "@vitejs/plugin-vue": "^4.4.0",
+    "@vitejs/plugin-vue-jsx": "^3.0.2",
+    "msw": "^2.10.3",
+    "prettier": "^3.0.3",
+    "sass": "1.77.6",
+    "vite": "^4.5.0",
+    "vite-plugin-compression": "^0.5.1",
+    "vite-plugin-purge-icons": "^0.9.2",
+    "vite-plugin-svg-icons": "^2.0.1"
+  },
+  "msw": {
+    "workerDirectory": [
+      "public"
+    ]
+  }
+}

BIN
public/favicon.ico


+ 344 - 0
public/mockServiceWorker.js

@@ -0,0 +1,344 @@
+/* eslint-disable */
+/* tslint:disable */
+
+/**
+ * Mock Service Worker.
+ * @see https://github.com/mswjs/msw
+ * - Please do NOT modify this file.
+ */
+
+const PACKAGE_VERSION = '2.10.3'
+const INTEGRITY_CHECKSUM = 'f5825c521429caf22a4dd13b66e243af'
+const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
+const activeClientIds = new Set()
+
+addEventListener('install', function () {
+  self.skipWaiting()
+})
+
+addEventListener('activate', function (event) {
+  event.waitUntil(self.clients.claim())
+})
+
+addEventListener('message', async function (event) {
+  const clientId = Reflect.get(event.source || {}, 'id')
+
+  if (!clientId || !self.clients) {
+    return
+  }
+
+  const client = await self.clients.get(clientId)
+
+  if (!client) {
+    return
+  }
+
+  const allClients = await self.clients.matchAll({
+    type: 'window',
+  })
+
+  switch (event.data) {
+    case 'KEEPALIVE_REQUEST': {
+      sendToClient(client, {
+        type: 'KEEPALIVE_RESPONSE',
+      })
+      break
+    }
+
+    case 'INTEGRITY_CHECK_REQUEST': {
+      sendToClient(client, {
+        type: 'INTEGRITY_CHECK_RESPONSE',
+        payload: {
+          packageVersion: PACKAGE_VERSION,
+          checksum: INTEGRITY_CHECKSUM,
+        },
+      })
+      break
+    }
+
+    case 'MOCK_ACTIVATE': {
+      activeClientIds.add(clientId)
+
+      sendToClient(client, {
+        type: 'MOCKING_ENABLED',
+        payload: {
+          client: {
+            id: client.id,
+            frameType: client.frameType,
+          },
+        },
+      })
+      break
+    }
+
+    case 'MOCK_DEACTIVATE': {
+      activeClientIds.delete(clientId)
+      break
+    }
+
+    case 'CLIENT_CLOSED': {
+      activeClientIds.delete(clientId)
+
+      const remainingClients = allClients.filter((client) => {
+        return client.id !== clientId
+      })
+
+      // Unregister itself when there are no more clients
+      if (remainingClients.length === 0) {
+        self.registration.unregister()
+      }
+
+      break
+    }
+  }
+})
+
+addEventListener('fetch', function (event) {
+  // Bypass navigation requests.
+  if (event.request.mode === 'navigate') {
+    return
+  }
+
+  // Opening the DevTools triggers the "only-if-cached" request
+  // that cannot be handled by the worker. Bypass such requests.
+  if (
+    event.request.cache === 'only-if-cached' &&
+    event.request.mode !== 'same-origin'
+  ) {
+    return
+  }
+
+  // Bypass all requests when there are no active clients.
+  // Prevents the self-unregistered worked from handling requests
+  // after it's been deleted (still remains active until the next reload).
+  if (activeClientIds.size === 0) {
+    return
+  }
+
+  const requestId = crypto.randomUUID()
+  event.respondWith(handleRequest(event, requestId))
+})
+
+/**
+ * @param {FetchEvent} event
+ * @param {string} requestId
+ */
+async function handleRequest(event, requestId) {
+  const client = await resolveMainClient(event)
+  const requestCloneForEvents = event.request.clone()
+  const response = await getResponse(event, client, requestId)
+
+  // Send back the response clone for the "response:*" life-cycle events.
+  // Ensure MSW is active and ready to handle the message, otherwise
+  // this message will pend indefinitely.
+  if (client && activeClientIds.has(client.id)) {
+    const serializedRequest = await serializeRequest(requestCloneForEvents)
+
+    // Clone the response so both the client and the library could consume it.
+    const responseClone = response.clone()
+
+    sendToClient(
+      client,
+      {
+        type: 'RESPONSE',
+        payload: {
+          isMockedResponse: IS_MOCKED_RESPONSE in response,
+          request: {
+            id: requestId,
+            ...serializedRequest,
+          },
+          response: {
+            type: responseClone.type,
+            status: responseClone.status,
+            statusText: responseClone.statusText,
+            headers: Object.fromEntries(responseClone.headers.entries()),
+            body: responseClone.body,
+          },
+        },
+      },
+      responseClone.body ? [serializedRequest.body, responseClone.body] : [],
+    )
+  }
+
+  return response
+}
+
+/**
+ * Resolve the main client for the given event.
+ * Client that issues a request doesn't necessarily equal the client
+ * that registered the worker. It's with the latter the worker should
+ * communicate with during the response resolving phase.
+ * @param {FetchEvent} event
+ * @returns {Promise<Client | undefined>}
+ */
+async function resolveMainClient(event) {
+  const client = await self.clients.get(event.clientId)
+
+  if (activeClientIds.has(event.clientId)) {
+    return client
+  }
+
+  if (client?.frameType === 'top-level') {
+    return client
+  }
+
+  const allClients = await self.clients.matchAll({
+    type: 'window',
+  })
+
+  return allClients
+    .filter((client) => {
+      // Get only those clients that are currently visible.
+      return client.visibilityState === 'visible'
+    })
+    .find((client) => {
+      // Find the client ID that's recorded in the
+      // set of clients that have registered the worker.
+      return activeClientIds.has(client.id)
+    })
+}
+
+/**
+ * @param {FetchEvent} event
+ * @param {Client | undefined} client
+ * @param {string} requestId
+ * @returns {Promise<Response>}
+ */
+async function getResponse(event, client, requestId) {
+  // Clone the request because it might've been already used
+  // (i.e. its body has been read and sent to the client).
+  const requestClone = event.request.clone()
+
+  function passthrough() {
+    // Cast the request headers to a new Headers instance
+    // so the headers can be manipulated with.
+    const headers = new Headers(requestClone.headers)
+
+    // Remove the "accept" header value that marked this request as passthrough.
+    // This prevents request alteration and also keeps it compliant with the
+    // user-defined CORS policies.
+    const acceptHeader = headers.get('accept')
+    if (acceptHeader) {
+      const values = acceptHeader.split(',').map((value) => value.trim())
+      const filteredValues = values.filter(
+        (value) => value !== 'msw/passthrough',
+      )
+
+      if (filteredValues.length > 0) {
+        headers.set('accept', filteredValues.join(', '))
+      } else {
+        headers.delete('accept')
+      }
+    }
+
+    return fetch(requestClone, { headers })
+  }
+
+  // Bypass mocking when the client is not active.
+  if (!client) {
+    return passthrough()
+  }
+
+  // Bypass initial page load requests (i.e. static assets).
+  // The absence of the immediate/parent client in the map of the active clients
+  // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet
+  // and is not ready to handle requests.
+  if (!activeClientIds.has(client.id)) {
+    return passthrough()
+  }
+
+  // Notify the client that a request has been intercepted.
+  const serializedRequest = await serializeRequest(event.request)
+  const clientMessage = await sendToClient(
+    client,
+    {
+      type: 'REQUEST',
+      payload: {
+        id: requestId,
+        ...serializedRequest,
+      },
+    },
+    [serializedRequest.body],
+  )
+
+  switch (clientMessage.type) {
+    case 'MOCK_RESPONSE': {
+      return respondWithMock(clientMessage.data)
+    }
+
+    case 'PASSTHROUGH': {
+      return passthrough()
+    }
+  }
+
+  return passthrough()
+}
+
+/**
+ * @param {Client} client
+ * @param {any} message
+ * @param {Array<Transferable>} transferrables
+ * @returns {Promise<any>}
+ */
+function sendToClient(client, message, transferrables = []) {
+  return new Promise((resolve, reject) => {
+    const channel = new MessageChannel()
+
+    channel.port1.onmessage = (event) => {
+      if (event.data && event.data.error) {
+        return reject(event.data.error)
+      }
+
+      resolve(event.data)
+    }
+
+    client.postMessage(message, [
+      channel.port2,
+      ...transferrables.filter(Boolean),
+    ])
+  })
+}
+
+/**
+ * @param {Response} response
+ * @returns {Response}
+ */
+function respondWithMock(response) {
+  // Setting response status code to 0 is a no-op.
+  // However, when responding with a "Response.error()", the produced Response
+  // instance will have status code set to 0. Since it's not possible to create
+  // a Response instance with status code 0, handle that use-case separately.
+  if (response.status === 0) {
+    return Response.error()
+  }
+
+  const mockedResponse = new Response(response.body, response)
+
+  Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, {
+    value: true,
+    enumerable: true,
+  })
+
+  return mockedResponse
+}
+
+/**
+ * @param {Request} request
+ */
+async function serializeRequest(request) {
+  return {
+    url: request.url,
+    mode: request.mode,
+    method: request.method,
+    headers: Object.fromEntries(request.headers.entries()),
+    cache: request.cache,
+    credentials: request.credentials,
+    destination: request.destination,
+    integrity: request.integrity,
+    redirect: request.redirect,
+    referrer: request.referrer,
+    referrerPolicy: request.referrerPolicy,
+    body: await request.arrayBuffer(),
+    keepalive: request.keepalive,
+  }
+}

BIN
public/static/images/chat/chat.mp3


BIN
public/static/images/chat/head.png


BIN
public/static/images/chat/loading.png


BIN
public/static/images/chat/notice.mp3


BIN
public/static/images/chat/warning.png


BIN
public/static/images/error/401.png


BIN
public/static/images/error/403.png


BIN
public/static/images/error/404.png


BIN
public/static/images/filemanager/doc.png


BIN
public/static/images/filemanager/group.png


BIN
public/static/images/filemanager/pdf.png


BIN
public/static/images/filemanager/ppt.png


BIN
public/static/images/filemanager/txt.png


BIN
public/static/images/filemanager/video.png


BIN
public/static/images/filemanager/weizhi.png


BIN
public/static/images/filemanager/xls.png


BIN
public/static/images/filemanager/zip.png


BIN
public/static/images/index/wechat0.png


BIN
public/static/images/index/wechat1.png


BIN
public/static/images/install/bg.png


BIN
public/static/images/install/img-01.png


BIN
public/static/images/install/logo.png


BIN
public/static/images/loading/logo.gif


BIN
public/static/images/loading/name-dark.png


BIN
public/static/images/loading/name-light.png


BIN
public/static/images/notification/email.png


BIN
public/static/images/notification/sms.png


BIN
public/static/images/platform/wechat/miniProgram.png


BIN
public/static/images/platform/wechat/officialAccount.png


BIN
public/static/images/platform/wechat/openPlatform.png


BIN
public/static/images/shop/activity/free_shipping.png


BIN
public/static/images/shop/activity/full_coupon.png


BIN
public/static/images/shop/activity/full_discount.png


BIN
public/static/images/shop/activity/full_gift.png


BIN
public/static/images/shop/activity/full_reduce.png


BIN
public/static/images/shop/activity/groupon.png


BIN
public/static/images/shop/activity/groupon_ladder.png


BIN
public/static/images/shop/activity/score_shop.png


BIN
public/static/images/shop/activity/seckill.png


BIN
public/static/images/shop/activity/signin.png


BIN
public/static/images/shop/activity/wechat_mplive.png


BIN
public/static/images/shop/category/first_one.png


BIN
public/static/images/shop/category/first_two.png


BIN
public/static/images/shop/category/second_one.png


BIN
public/static/images/shop/category/success.png


BIN
public/static/images/shop/category/third_one.png


BIN
public/static/images/shop/category/warning.png


BIN
public/static/images/shop/config/H5.png


BIN
public/static/images/shop/config/H5BG.png


BIN
public/static/images/shop/config/WechatMiniProgram.png


BIN
public/static/images/shop/config/WechatMiniProgramBG.png


BIN
public/static/images/shop/config/WechatOfficialAccount.png


BIN
public/static/images/shop/config/WechatOfficialAccountBG.png


BIN
public/static/images/shop/config/app.png


BIN
public/static/images/shop/config/appBG.png


BIN
public/static/images/shop/config/icon-right.png


BIN
public/static/images/shop/config/upgrade-config.png


BIN
public/static/images/shop/dashboard/aftersale.png


BIN
public/static/images/shop/dashboard/noSend.png


BIN
public/static/images/shop/dashboard/order.png


BIN
public/static/images/shop/dashboard/payAmount.png


BIN
public/static/images/shop/dashboard/payOrder.png


BIN
public/static/images/shop/dashboard/refund.png


BIN
public/static/images/shop/dashboard/top1.png


BIN
public/static/images/shop/dashboard/top2.png


BIN
public/static/images/shop/dashboard/top3.png


BIN
public/static/images/shop/dashboard/top4.png


BIN
public/static/images/shop/dashboard/top5.png


BIN
public/static/images/shop/decorate/avatar.png


BIN
public/static/images/shop/decorate/black.png


BIN
public/static/images/shop/decorate/coupon.png


BIN
public/static/images/shop/decorate/couponCard.png


BIN
public/static/images/shop/decorate/couponCardStyle.png


BIN
public/static/images/shop/decorate/floatMenu.png


BIN
public/static/images/shop/decorate/golden.png


BIN
public/static/images/shop/decorate/goodsCard.png


BIN
public/static/images/shop/decorate/goodsShelves.png


BIN
public/static/images/shop/decorate/green.png


BIN
public/static/images/shop/decorate/groupon.png


BIN
public/static/images/shop/decorate/guidePage.png


BIN
public/static/images/shop/decorate/header-WechatMiniProgram.png


BIN
public/static/images/shop/decorate/header-WechatOfficialAccount.png


BIN
public/static/images/shop/decorate/header-android.png


BIN
public/static/images/shop/decorate/header-diypage.png


BIN
public/static/images/shop/decorate/header-ios.png


BIN
public/static/images/shop/decorate/hotzone.png


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff