shaogen1995 преди 1 година
родител
ревизия
7eb45cc570
променени са 7 файла, в които са добавени 9556 реда и са изтрити 10271 реда
  1. 15 277
      package-lock.json
  2. 58 11
      src/pages/A7school/A7tab2M.tsx
  3. 1 1
      src/pages/A7school/A7table.tsx
  4. 5 0
      src/pages/A7school/index.module.scss
  5. 15 17
      src/pages/A9board/index.module.scss
  6. 254 185
      src/pages/A9board/index.tsx
  7. 9208 9780
      yarn.lock

+ 15 - 277
package-lock.json

@@ -22,11 +22,9 @@
         "braft-editor": "^2.3.9",
         "braft-utils": "^3.0.12",
         "dayjs": "^1.11.7",
-        "echarts": "^5.4.0",
-        "html2canvas": "^1.4.1",
+        "echarts": "^5.5.0",
         "js-base64": "^3.7.3",
         "js-export-excel": "^1.1.4",
-        "jspdf": "^2.5.1",
         "react": "^18.2.0",
         "react-dom": "^18.2.0",
         "react-redux": "^8.0.4",
@@ -3989,12 +3987,6 @@
       "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz",
       "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
     },
-    "node_modules/@types/raf": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz",
-      "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==",
-      "optional": true
-    },
     "node_modules/@types/range-parser": {
       "version": "1.2.4",
       "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz",
@@ -5009,17 +5001,6 @@
         "node": ">= 4.0.0"
       }
     },
-    "node_modules/atob": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
-      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
-      "bin": {
-        "atob": "bin/atob.js"
-      },
-      "engines": {
-        "node": ">= 4.5.0"
-      }
-    },
     "node_modules/autoprefixer": {
       "version": "10.4.13",
       "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.13.tgz",
@@ -5361,14 +5342,6 @@
       "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
     },
-    "node_modules/base64-arraybuffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
-      "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
-      "engines": {
-        "node": ">= 0.6.0"
-      }
-    },
     "node_modules/batch": {
       "version": "0.6.1",
       "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz",
@@ -5617,17 +5590,6 @@
         "node-int64": "^0.4.0"
       }
     },
-    "node_modules/btoa": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
-      "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==",
-      "bin": {
-        "btoa": "bin/btoa.js"
-      },
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
     "node_modules/buffer-from": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -5707,25 +5669,6 @@
       "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001427.tgz",
       "integrity": "sha512-lfXQ73oB9c8DP5Suxaszm+Ta2sr/4tf8+381GkIm1MLj/YdLf+rEDyDSRCzeltuyTVGm+/s18gdZ0q+Wmp8VsQ=="
     },
-    "node_modules/canvg": {
-      "version": "3.0.10",
-      "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz",
-      "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==",
-      "optional": true,
-      "dependencies": {
-        "@babel/runtime": "^7.12.5",
-        "@types/raf": "^3.4.0",
-        "core-js": "^3.8.3",
-        "raf": "^3.4.1",
-        "regenerator-runtime": "^0.13.7",
-        "rgbcolor": "^1.0.1",
-        "stackblur-canvas": "^2.0.0",
-        "svg-pathdata": "^6.0.3"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
     "node_modules/case-sensitive-paths-webpack-plugin": {
       "version": "2.4.0",
       "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
@@ -6201,14 +6144,6 @@
         "postcss": "^8.4"
       }
     },
-    "node_modules/css-line-break": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
-      "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
-      "dependencies": {
-        "utrie": "^1.0.2"
-      }
-    },
     "node_modules/css-loader": {
       "version": "6.7.1",
       "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.7.1.tgz",
@@ -6859,12 +6794,6 @@
         "node": ">= 4"
       }
     },
-    "node_modules/dompurify": {
-      "version": "2.4.7",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz",
-      "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==",
-      "optional": true
-    },
     "node_modules/domutils": {
       "version": "2.8.0",
       "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz",
@@ -6934,12 +6863,12 @@
       "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="
     },
     "node_modules/echarts": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz",
-      "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==",
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.0.tgz",
+      "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==",
       "dependencies": {
         "tslib": "2.3.0",
-        "zrender": "5.4.4"
+        "zrender": "5.5.0"
       }
     },
     "node_modules/echarts/node_modules/tslib": {
@@ -8081,11 +8010,6 @@
         "asap": "~2.0.3"
       }
     },
-    "node_modules/fflate": {
-      "version": "0.4.8",
-      "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz",
-      "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="
-    },
     "node_modules/file-entry-cache": {
       "version": "6.0.1",
       "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -8878,18 +8802,6 @@
         "webpack": "^5.20.0"
       }
     },
-    "node_modules/html2canvas": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
-      "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
-      "dependencies": {
-        "css-line-break": "^2.1.0",
-        "text-segmentation": "^1.0.3"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
     "node_modules/htmlparser2": {
       "version": "6.1.0",
       "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz",
@@ -11576,23 +11488,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/jspdf": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz",
-      "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==",
-      "dependencies": {
-        "@babel/runtime": "^7.14.0",
-        "atob": "^2.1.2",
-        "btoa": "^1.2.1",
-        "fflate": "^0.4.8"
-      },
-      "optionalDependencies": {
-        "canvg": "^3.0.6",
-        "core-js": "^3.6.0",
-        "dompurify": "^2.2.0",
-        "html2canvas": "^1.0.0-rc.5"
-      }
-    },
     "node_modules/jsx-ast-utils": {
       "version": "3.3.3",
       "resolved": "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
@@ -15244,15 +15139,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/rgbcolor": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
-      "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
-      "optional": true,
-      "engines": {
-        "node": ">= 0.8.15"
-      }
-    },
     "node_modules/rimraf": {
       "version": "3.0.2",
       "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz",
@@ -15854,15 +15740,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/stackblur-canvas": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz",
-      "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==",
-      "optional": true,
-      "engines": {
-        "node": ">=0.1.14"
-      }
-    },
     "node_modules/stackframe": {
       "version": "1.3.4",
       "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz",
@@ -16120,15 +15997,6 @@
       "resolved": "https://registry.npmmirror.com/svg-parser/-/svg-parser-2.0.4.tgz",
       "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="
     },
-    "node_modules/svg-pathdata": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
-      "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
-      "optional": true,
-      "engines": {
-        "node": ">=12.0.0"
-      }
-    },
     "node_modules/svgo": {
       "version": "1.3.2",
       "resolved": "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz",
@@ -16370,14 +16238,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/text-segmentation": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
-      "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
-      "dependencies": {
-        "utrie": "^1.0.2"
-      }
-    },
     "node_modules/text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
@@ -16778,14 +16638,6 @@
         "node": ">= 0.4.0"
       }
     },
-    "node_modules/utrie": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
-      "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
-      "dependencies": {
-        "base64-arraybuffer": "^1.0.2"
-      }
-    },
     "node_modules/uuid": {
       "version": "8.3.2",
       "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
@@ -17766,9 +17618,9 @@
       }
     },
     "node_modules/zrender": {
-      "version": "5.4.4",
-      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz",
-      "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==",
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.5.0.tgz",
+      "integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==",
       "dependencies": {
         "tslib": "2.3.0"
       }
@@ -20629,12 +20481,6 @@
       "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz",
       "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
     },
-    "@types/raf": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz",
-      "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==",
-      "optional": true
-    },
     "@types/range-parser": {
       "version": "1.2.4",
       "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz",
@@ -21481,11 +21327,6 @@
       "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
       "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
     },
-    "atob": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
-      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
-    },
     "autoprefixer": {
       "version": "10.4.13",
       "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.13.tgz",
@@ -21753,11 +21594,6 @@
       "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
     },
-    "base64-arraybuffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
-      "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
-    },
     "batch": {
       "version": "0.6.1",
       "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz",
@@ -21959,11 +21795,6 @@
         "node-int64": "^0.4.0"
       }
     },
-    "btoa": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
-      "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g=="
-    },
     "buffer-from": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -22028,22 +21859,6 @@
       "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001427.tgz",
       "integrity": "sha512-lfXQ73oB9c8DP5Suxaszm+Ta2sr/4tf8+381GkIm1MLj/YdLf+rEDyDSRCzeltuyTVGm+/s18gdZ0q+Wmp8VsQ=="
     },
-    "canvg": {
-      "version": "3.0.10",
-      "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz",
-      "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime": "^7.12.5",
-        "@types/raf": "^3.4.0",
-        "core-js": "^3.8.3",
-        "raf": "^3.4.1",
-        "regenerator-runtime": "^0.13.7",
-        "rgbcolor": "^1.0.1",
-        "stackblur-canvas": "^2.0.0",
-        "svg-pathdata": "^6.0.3"
-      }
-    },
     "case-sensitive-paths-webpack-plugin": {
       "version": "2.4.0",
       "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
@@ -22417,14 +22232,6 @@
         "postcss-selector-parser": "^6.0.9"
       }
     },
-    "css-line-break": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
-      "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
-      "requires": {
-        "utrie": "^1.0.2"
-      }
-    },
     "css-loader": {
       "version": "6.7.1",
       "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.7.1.tgz",
@@ -22932,12 +22739,6 @@
         "domelementtype": "^2.2.0"
       }
     },
-    "dompurify": {
-      "version": "2.4.7",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz",
-      "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==",
-      "optional": true
-    },
     "domutils": {
       "version": "2.8.0",
       "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz",
@@ -22997,12 +22798,12 @@
       "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="
     },
     "echarts": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz",
-      "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==",
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.0.tgz",
+      "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==",
       "requires": {
         "tslib": "2.3.0",
-        "zrender": "5.4.4"
+        "zrender": "5.5.0"
       },
       "dependencies": {
         "tslib": {
@@ -23913,11 +23714,6 @@
         }
       }
     },
-    "fflate": {
-      "version": "0.4.8",
-      "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz",
-      "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="
-    },
     "file-entry-cache": {
       "version": "6.0.1",
       "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -24539,15 +24335,6 @@
         "tapable": "^2.0.0"
       }
     },
-    "html2canvas": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
-      "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
-      "requires": {
-        "css-line-break": "^2.1.0",
-        "text-segmentation": "^1.0.3"
-      }
-    },
     "htmlparser2": {
       "version": "6.1.0",
       "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz",
@@ -26634,21 +26421,6 @@
       "resolved": "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.1.tgz",
       "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ=="
     },
-    "jspdf": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz",
-      "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==",
-      "requires": {
-        "@babel/runtime": "^7.14.0",
-        "atob": "^2.1.2",
-        "btoa": "^1.2.1",
-        "canvg": "^3.0.6",
-        "core-js": "^3.6.0",
-        "dompurify": "^2.2.0",
-        "fflate": "^0.4.8",
-        "html2canvas": "^1.0.0-rc.5"
-      }
-    },
     "jsx-ast-utils": {
       "version": "3.3.3",
       "resolved": "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
@@ -29260,12 +29032,6 @@
       "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
       "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
     },
-    "rgbcolor": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
-      "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
-      "optional": true
-    },
     "rimraf": {
       "version": "3.0.2",
       "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz",
@@ -29757,12 +29523,6 @@
         }
       }
     },
-    "stackblur-canvas": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz",
-      "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==",
-      "optional": true
-    },
     "stackframe": {
       "version": "1.3.4",
       "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz",
@@ -29966,12 +29726,6 @@
       "resolved": "https://registry.npmmirror.com/svg-parser/-/svg-parser-2.0.4.tgz",
       "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="
     },
-    "svg-pathdata": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
-      "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
-      "optional": true
-    },
     "svgo": {
       "version": "1.3.2",
       "resolved": "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz",
@@ -30162,14 +29916,6 @@
         "minimatch": "^3.0.4"
       }
     },
-    "text-segmentation": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
-      "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
-      "requires": {
-        "utrie": "^1.0.2"
-      }
-    },
     "text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
@@ -30471,14 +30217,6 @@
       "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
       "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
     },
-    "utrie": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
-      "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
-      "requires": {
-        "base64-arraybuffer": "^1.0.2"
-      }
-    },
     "uuid": {
       "version": "8.3.2",
       "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
@@ -31280,9 +31018,9 @@
       "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
     },
     "zrender": {
-      "version": "5.4.4",
-      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz",
-      "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==",
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.5.0.tgz",
+      "integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==",
       "requires": {
         "tslib": "2.3.0"
       },

+ 58 - 11
src/pages/A7school/A7tab2M.tsx

@@ -1,11 +1,20 @@
 import React, { useCallback, useEffect, useRef, useState } from "react";
 import styles from "./index.module.scss";
-import { Button, DatePicker, Form, FormInstance, Input, Modal } from "antd";
+import {
+  Button,
+  DatePicker,
+  Form,
+  FormInstance,
+  Input,
+  Modal,
+  Radio,
+} from "antd";
 import MyPopconfirm from "@/components/MyPopconfirm";
 import ZupOne from "@/components/ZupOne";
 import { MessageFu } from "@/utils/message";
 import { A7_APIgetInfoBook, A7_APIsaveBook } from "@/store/action/A7school";
 import dayjs from "dayjs";
+import TextArea from "antd/es/input/TextArea";
 
 type Props = {
   fId: number;
@@ -23,6 +32,8 @@ function A7tab2M({ fId, closeFu, addTableFu, upTableFu }: Props) {
     if (res.code === 0) {
       const data = res.data;
 
+      if (data.type === "link") setIsLink(true);
+
       FormBoxRef.current?.setFieldsValue({
         ...data,
         myTime: dayjs(data.publishDate),
@@ -57,6 +68,9 @@ function A7tab2M({ fId, closeFu, addTableFu, upTableFu }: Props) {
   // 附件 是否 已经点击过确定
   const [fileCheck, setFileCheck] = useState(false);
 
+  // 附件和链接的选择
+  const [isLink, setIsLink] = useState(false);
+
   // 没有通过校验
   const onFinishFailed = useCallback(() => {
     setFileCheck(true);
@@ -69,7 +83,11 @@ function A7tab2M({ fId, closeFu, addTableFu, upTableFu }: Props) {
       const coverUrl1 = ZupOneRef1.current?.fileComFileResFu();
       const coverUrl2 = ZupOneRef2.current?.fileComFileResFu();
 
-      if (!coverUrl1.filePath || !coverUrl2.filePath) return;
+      if (!coverUrl1.filePath) return;
+
+      if (!isLink) {
+        if (!coverUrl2.filePath) return;
+      }
 
       // 发布日期
       const publishDate = dayjs(values.myTime).format("YYYY-MM-DD");
@@ -77,10 +95,11 @@ function A7tab2M({ fId, closeFu, addTableFu, upTableFu }: Props) {
       const obj = {
         ...values,
         id: fId > 0 ? fId : null,
-        fileName: coverUrl2.fileName,
-        filePath: coverUrl2.filePath,
+        fileName: coverUrl2?.fileName || "",
+        filePath: coverUrl2?.filePath || "",
         thumb: coverUrl1.filePath,
         publishDate,
+        type: isLink ? "link" : "file",
       };
 
       const res = await A7_APIsaveBook(obj);
@@ -91,7 +110,7 @@ function A7tab2M({ fId, closeFu, addTableFu, upTableFu }: Props) {
         closeFu();
       }
     },
-    [addTableFu, closeFu, fId, upTableFu]
+    [addTableFu, closeFu, fId, isLink, upTableFu]
   );
 
   return (
@@ -122,7 +141,6 @@ function A7tab2M({ fId, closeFu, addTableFu, upTableFu }: Props) {
           >
             <Input maxLength={10} showCount placeholder="请输入内容" />
           </Form.Item>
-
           {/* 刊物封面 */}
           <div className="formRow">
             <div className="formLeft">
@@ -145,14 +163,45 @@ function A7tab2M({ fId, closeFu, addTableFu, upTableFu }: Props) {
               />
             </div>
           </div>
-
-          {/* 刊物附件  */}
           <div className="formRow">
             <div className="formLeft">
               <span>* </span>
-              刊物附件
+              刊物内容
             </div>
             <div className="formRight">
+              <div className="A7radio">
+                <Radio
+                  value={!isLink}
+                  checked={!isLink}
+                  onClick={() => setIsLink(false)}
+                >
+                  附件
+                </Radio>
+                <Radio
+                  value={isLink}
+                  checked={isLink}
+                  onClick={() => setIsLink(true)}
+                >
+                  链接
+                </Radio>
+              </div>
+            </div>
+          </div>
+          {/* 刊物附件 | 链接 */}
+          {isLink ? (
+            <Form.Item
+              label="链接"
+              name="link"
+              rules={[{ required: true, message: "请输入刊物链接!" }]}
+              getValueFromEvent={(e) => e.target.value.replace(/\s+/g, "")}
+            >
+              <TextArea maxLength={200} showCount placeholder="请输入内容" />
+            </Form.Item>
+          ) : null}
+
+          <div className="formRow" hidden={isLink}>
+            <div className="formLeft"></div>
+            <div className="formRight">
               <ZupOne
                 ref={ZupOneRef2}
                 isLook={false}
@@ -168,7 +217,6 @@ function A7tab2M({ fId, closeFu, addTableFu, upTableFu }: Props) {
               />
             </div>
           </div>
-
           <Form.Item
             label="发布日期"
             name="myTime"
@@ -176,7 +224,6 @@ function A7tab2M({ fId, closeFu, addTableFu, upTableFu }: Props) {
           >
             <DatePicker />
           </Form.Item>
-
           {/* 确定和取消按钮 */}
           <Form.Item className="A7mbtn">
             <Button type="primary" htmlType="submit">

+ 1 - 1
src/pages/A7school/A7table.tsx

@@ -103,7 +103,7 @@ function A7tab1({ type, editTableFu }: Props, ref: any) {
             <span>排序值</span>&nbsp;
             <Tooltip title="数字越小,排序越前">
               <div className="A7tableTitInco">
-                <QuestionCircleOutlined />
+                <QuestionCircleOutlined rev={undefined} />
               </div>
             </Tooltip>
           </div>

+ 5 - 0
src/pages/A7school/index.module.scss

@@ -79,6 +79,11 @@
 
           .formRight {
             width: calc(100% - 103px);
+            .A7radio{
+              position: relative;
+              top: 3px;
+              margin-bottom: 15px;
+            }
           }
         }
 

+ 15 - 17
src/pages/A9board/index.module.scss

@@ -6,7 +6,7 @@
     .decorator{
       width: 8px;
       height: 22px;
-      background-color: #b5b5b5;
+      background-color: var(--themeColor);
       border-radius: 3px;
       margin-right: 10px;
     }
@@ -23,6 +23,7 @@
     width: 100%;
     height: 40px;
     .bar-left{
+      width: 292px !important;
       position: absolute;
       left: 0;
       height: 100%;
@@ -37,6 +38,7 @@
       text-overflow: ellipsis;
     }
     .bar-right{
+      width: calc(100% - 282px) !important;
       position: absolute;
       right: 0;
       height: 100%;
@@ -111,6 +113,7 @@
     flex-direction: column;
     align-items: flex-start;
     gap: 10px;
+    overflow: auto;
     p.update-time{
       flex: 0 0 auto;
     }
@@ -123,21 +126,18 @@
       gap: 25px;
     }
     .chart-area{
-      $design-page-width: 1256px;
-      $design-page-height: 680px;
-      flex: 1 0 1px;
       width: 100%;
+      height: calc(100% - 30px);
       display: flex;
       justify-content: space-between;
       .column-1{
-        flex: 0 0 auto;
-        width: calc(660px / $design-page-width * 100%);
+        width: 55%;
+        height: 100%;
         display: flex;
         flex-direction: column;
         justify-content: space-between;
         .total-visit{
-          flex: 0 0 auto;
-          height: calc(499px / $design-page-height * 100%);
+          height: calc(100% - 160px);
           .chart-1{
             flex: 1 1 auto;
             display: flex;
@@ -152,12 +152,12 @@
             }
           }
           .chart-2{
-            flex: 0 0 auto;
+            width: 100%;
+            // flex: 0 0 auto;
           }
         }
         .total-visitor{
-          flex: 0 0 auto;
-          height: calc(169px / $design-page-height * 100%);
+          height: 150px;
           display: flex;
           flex-direction: column;
           .chart-area{
@@ -169,14 +169,13 @@
         }
       }
       .column-2{
-        flex: 0 0 auto;
-        width: calc(587px / $design-page-width * 100%);
+        width: 43%;
+        height: 100%;
         display: flex;
         flex-direction: column;
         justify-content: space-between;
         .hot-remain{
-          flex: 0 0 auto;
-          height: calc(377px / $design-page-height * 100%);
+          height: calc(100% - 400px);
           .chart-1{
             flex: 1 0 auto;
             display: flex;
@@ -192,8 +191,7 @@
           }
         }
         .love-coin{
-          flex: 0 0 auto;
-          height: calc(292px / $design-page-height * 100%);
+          height: 390px;
           .chart-1{
             flex: 1 0 auto;
             display: flex;

+ 254 - 185
src/pages/A9board/index.tsx

@@ -1,335 +1,407 @@
-import React, {useEffect, useRef, useState} from "react";
+import React, { useEffect, useRef, useState } from "react";
 import styles from "./index.module.scss";
 import * as echarts from "echarts";
 import { A9_APIgetData } from "@/store/action/A9board";
+import dayjs from "dayjs";
 
-function ChartTitle({text} : {text: string}) {
+function ChartTitle({ text }: { text: string }) {
   return (
     <div className={styles.ChartTitle}>
       <div className="decorator"></div>
       <h3 className="chart-title">{text}</h3>
     </div>
-  )
+  );
 }
 
-function DataBar({keyName1, value1, keyName2, value2}: {
-  keyName1: string,
-  value1: number,
-  keyName2: string,
-  value2: number,
+function DataBar({
+  keyName1,
+  value1,
+  keyName2,
+  value2,
+}: {
+  keyName1: string;
+  value1: number;
+  keyName2: string;
+  value2: number;
 }) {
-  if ((value1 + value2) === 0) {
-    return null
+  if (value1 + value2 === 0) {
+    return null;
   }
 
-  const v1Rate = value1 / (value1 + value2)
-  const v2Rate = value2 / (value1 + value2)
-  const bar1Width = `calc(${v1Rate * 100}% + 10px - 4px)`
-  const bar2Width = `calc(${v2Rate * 100}% + 10px - 4px)`
+  const v1Rate = value1 / (value1 + value2);
+  const v2Rate = value2 / (value1 + value2);
+  const bar1Width = `calc(${v1Rate * 100}% + 10px - 4px)`;
+  const bar2Width = `calc(${v2Rate * 100}% + 10px - 4px)`;
 
   return (
     <div className={styles.DataBar}>
-      <div className="bar-left" style={{
+      <div
+        className="bar-left"
+        style={{
           width: bar1Width,
           clipPath: `polygon(0 0, calc(100% - (10px - 4px) - 10px) 0, 100% 100%, 0 100%)`,
         }}
       >
-        <div className="name" title={keyName1}>{keyName1}</div>
-        <div className="value">{(v1Rate * 100).toFixed(2) }%</div>
+        <div className="name" title={keyName1}>
+          {keyName1}
+        </div>
+        <div className="value">{(v1Rate * 100).toFixed(2)}%</div>
       </div>
-      <div className="bar-right" style={{
+      <div
+        className="bar-right"
+        style={{
           width: bar2Width,
           clipPath: `polygon( 0 0, 100% 0, 100% 100%, calc(10px - 4px + 10px) 100%)`,
         }}
       >
         <div className="value">{(v2Rate * 100).toFixed()}%</div>
-        <div className="name" title={keyName2}>{keyName2}</div>
+        <div className="name" title={keyName2}>
+          {keyName2}
+        </div>
       </div>
     </div>
-  )
+  );
 }
 
-function DataList({className, list, reverseOrder}: {
-  className?: string,
+function DataList({
+  className,
+  list,
+  reverseOrder,
+}: {
+  className?: string;
   list: {
-    key: string,
-    value: number
-  }[],
-  reverseOrder?: boolean,
+    key: string;
+    value: number;
+  }[];
+  reverseOrder?: boolean;
 }) {
   return (
     <ul className={`${styles.DataList} ${className}`}>
-      {list.map((item: {
-        key: string,
-        value: number,
-      }) => {
+      {list.map((item: { key: string; value: number }) => {
         if (reverseOrder) {
           return (
             <li key={item.key}>
               <div
                 className="value"
                 style={{
-                  textAlign: 'right',
+                  textAlign: "right",
                 }}
               >
                 {item.value}
               </div>
               <div className="key">{item.key}</div>
             </li>
-          )
+          );
         } else {
           return (
             <li key={item.key}>
-              <div className="key"
+              <div
+                className="key"
                 style={{
-                  textAlign: 'right',
+                  textAlign: "right",
                 }}
               >
                 {item.key}
               </div>
               <div className="value">{item.value}</div>
             </li>
-          )
+          );
         }
       })}
     </ul>
-  )
+  );
 }
 
-function BinChart({className, list}: {
-  className?: string,
+function BinChart({
+  className,
+  list,
+}: {
+  className?: string;
   list: {
-    key: string,
-    value: number
-  }[],
+    key: string;
+    value: number;
+  }[];
 }) {
-  let maxValue = 0
+  let maxValue = 0;
   for (const item of list) {
     if (item.value > maxValue) {
-      maxValue = item.value
+      maxValue = item.value;
     }
   }
-  let trackValue = 0
+  let trackValue = 0;
   if (maxValue === 0) {
-    trackValue = 1
+    trackValue = 1;
   } else {
-    trackValue = maxValue * 1.2
+    trackValue = maxValue * 1.2;
   }
 
   return (
     <div className={`${styles.BinChart} ${className}`}>
-      {list.map((item: {
-        key: string,
-        value: number,
-      }) => {
+      {list.map((item: { key: string; value: number }) => {
         return (
           <div className="bin-track" key={item.key}>
-            <div className="bin" style={{
-              width: `${item.value / trackValue * 100}%`
-            }}></div>
+            <div
+              className="bin"
+              style={{
+                width: `${(item.value / trackValue) * 100}%`,
+              }}
+            ></div>
           </div>
-        )
+        );
       })}
     </div>
-  )
+  );
 }
 
 function A9board() {
   const chartRefTotalVisit = useRef(null);
   const chartRefLoveCoin = useRef(null);
 
-  const [pageVisitData, setPageVisitData] = useState([])
-  const [totalVisitData, setTotalVisitData] = useState(0)
+  const [pageVisitData, setPageVisitData] = useState([]);
+  const [totalVisitData, setTotalVisitData] = useState(0);
   const [browserVisitData, setBrowserVisitData] = useState({
-    keyName1: '小程序访客',
+    keyName1: "小程序访客",
     value1: 0,
-    keyName2: '网页端访客',
+    keyName2: "网页端访客",
     value2: 0,
-  })
-  const [totalVisitorData, setTotalVisitorData] = useState({
-    keyName1: '注册访客',
-    value1: 0,
-    keyName2: '非注册访客',
-    value2: 0,
-  })
-  const [totaltotalVisitorData, setTotaltotalVisitorData] = useState(0)
-  const [hotRelicData, setHotRelicData] = useState<{
-    key: string,
-    value: number,
-  }[]>([])
-  const [loveCoinData, setLoveCoinData] = useState<{
-    key: string,
-    value: number,
-  }[]>([])
-  const [totalLoveCoinData, setTotalLoveCoinData] = useState(0)
+  });
+  // const [totalVisitorData, setTotalVisitorData] = useState({
+  //   keyName1: '注册访客',
+  //   value1: 0,
+  //   keyName2: '非注册访客',
+  //   value2: 0,
+  // })
+  const [totaltotalVisitorData, setTotaltotalVisitorData] = useState(0);
+  const [hotRelicData, setHotRelicData] = useState<
+    {
+      key: string;
+      value: number;
+    }[]
+  >([]);
+  const [loveCoinData, setLoveCoinData] = useState<
+    {
+      key: string;
+      value: number;
+    }[]
+  >([]);
+  const [totalLoveCoinData, setTotalLoveCoinData] = useState(0);
 
   useEffect(() => {
     A9_APIgetData().then((res) => {
-      console.log('sdfsdf', res);
+      // console.log('sdfsdf', res);
+
+      let totalVisitNum = 0;
 
-      let totalVisitNum = 0
-      setPageVisitData(res.data['总访问量'].map((item: {
-        groupKey: string,
-        pcsPc: number,
-        pcsWx: number,
-      }) => {
-        totalVisitNum += (item.pcsPc + item.pcsWx)
-        return {
-          key: item.groupKey,
-          value: item.pcsPc + item.pcsWx,
+      const resData = res.data["总访问量"].map(
+        (item: { groupKey: string; pcsPc: number; pcsWx: number }) => {
+          totalVisitNum += item.pcsPc + item.pcsWx;
+          return {
+            key: item.groupKey,
+            value: item.pcsPc + item.pcsWx,
+          };
         }
-      }))
-      setTotalVisitData(totalVisitNum)
+      );
 
+      setPageVisitData(resData.sort((a: any, b: any) => b.value - a.value));
+      setTotalVisitData(totalVisitNum);
 
-      let wxVisitNum = 0
-      let pcVisitNum = 0
-      for (const iterator of res.data['总访问量']) {
-        wxVisitNum += iterator.pcsWx
-        pcVisitNum += iterator.pcsPc
+      let wxVisitNum = 0;
+      let pcVisitNum = 0;
+      for (const iterator of res.data["总访问量"]) {
+        wxVisitNum += iterator.pcsWx;
+        pcVisitNum += iterator.pcsPc;
       }
       setBrowserVisitData({
-        keyName1: '小程序访客',
+        keyName1: "小程序访客",
         value1: wxVisitNum,
-        keyName2: '网页端访客',
+        keyName2: "网页端访客",
         value2: pcVisitNum,
-      })
+      });
 
-      setTotalVisitorData({
-        keyName1: '注册访客',
-        value1: res.data['总访客数'].pcsWx, // 后端字段命名如此,并非错误
-        keyName2: '非注册访客',
-        value2: res.data['总访客数'].pcsPc, // 后端字段命名如此,并非错误
-      })
-      setTotaltotalVisitorData(res.data['总访客数'].pcsWx + res.data['总访客数'].pcsPc)
+      // setTotalVisitorData({
+      //   keyName1: '注册访客',
+      //   value1: res.data['总访客数'].pcsWx, // 后端字段命名如此,并非错误
+      //   keyName2: '非注册访客',
+      //   value2: res.data['总访客数'].pcsPc, // 后端字段命名如此,并非错误
+      // })
+      setTotaltotalVisitorData(
+        res.data["总访客数"].pcsWx + res.data["总访客数"].pcsPc
+      );
 
-      const hotRelicDataTemp: {
-        key: string,
-        value: number,
-      }[] = []
-      for (const key in res.data['热门遗存']) {
-        if (Object.prototype.hasOwnProperty.call(res.data['热门遗存'], key)) {
-          const element = res.data['热门遗存'][key];
+      let hotRelicDataTemp: {
+        key: string;
+        value: number;
+      }[] = [];
+      for (const key in res.data["热门遗存"]) {
+        if (Object.prototype.hasOwnProperty.call(res.data["热门遗存"], key)) {
+          const element = res.data["热门遗存"][key];
           hotRelicDataTemp.push({
             key,
             value: element,
-          })
+          });
         }
       }
-      setHotRelicData(hotRelicDataTemp)
 
-      const loveCoinDataTemp: {
-        key: string,
-        value: number,
-      }[] = []
-      let totalLoveCoinDataTemp = 0
-      for (const key in res.data['爱心币奖励']) {
-        if (Object.prototype.hasOwnProperty.call(res.data['爱心币奖励'], key)) {
-          const element = res.data['爱心币奖励'][key];
+      hotRelicDataTemp = hotRelicDataTemp
+        .sort((a, b) => b.value - a.value)
+        .filter((v, i) => v.value && i < 5);
+
+      setHotRelicData(hotRelicDataTemp);
+
+      let loveCoinDataTemp: {
+        key: string;
+        value: number;
+      }[] = [];
+      let totalLoveCoinDataTemp = 0;
+      for (const key in res.data["爱心币奖励"]) {
+        if (Object.prototype.hasOwnProperty.call(res.data["爱心币奖励"], key)) {
+          const element = res.data["爱心币奖励"][key];
           loveCoinDataTemp.push({
             key,
             value: element,
-          })
-          totalLoveCoinDataTemp += element
+          });
+          totalLoveCoinDataTemp += element;
         }
       }
-      setLoveCoinData(loveCoinDataTemp)
-      setTotalLoveCoinData(totalLoveCoinDataTemp)
-    })
-  }, [])
+      loveCoinDataTemp=loveCoinDataTemp.sort((a,b)=>b.value-a.value)
+      setLoveCoinData(loveCoinDataTemp);
+      setTotalLoveCoinData(totalLoveCoinDataTemp);
+    });
+  }, []);
 
   useEffect(() => {
-      const chartTotalVisitOption = {
-        tooltip: {
-          trigger: 'item'
+    const chartTotalVisitOption = {
+      tooltip: {
+        trigger: "item",
+      },
+      series: [
+        {
+          name: "",
+          type: "pie",
+          radius: ["55%", "75%"],
+          avoidLabelOverlap: false,
+          itemStyle: {
+            borderRadius: 10,
+            borderColor: "#fff",
+            borderWidth: 2,
+          },
+          label: {
+            show: false,
+            position: "center",
+          },
+          labelLine: {
+            show: false,
+          },
+          data: pageVisitData.map((item: { key: string; value: number }) => {
+            return {
+              name: item.key,
+              value: item.value,
+            };
+          }),
+       
+          emphasis: {
+            itemStyle: {
+              shadowBlur: 10,
+              shadowOffsetX: 0,
+              shadowColor: "rgba(0, 0, 0, 0.5)",
+            },
+          },
         },
-        series: [
-          {
-            name: 'Access From',
-            type: 'pie',
-            radius: '60%',
-            data: pageVisitData.map((item: {
-              key: string,
-              value: number,
-            }) => {
-              return {
-                name: item.key,
-                value: item.value
-              }
-            }),
-            emphasis: {
-              itemStyle: {
-                shadowBlur: 10,
-                shadowOffsetX: 0,
-                shadowColor: 'rgba(0, 0, 0, 0.5)'
-              }
-            }
-          }
-        ]
-      }
-  
-      echarts.init(chartRefTotalVisit.current).setOption(chartTotalVisitOption);
-  }, [pageVisitData])
-  
+      ],
+    };
+
+    echarts.init(chartRefTotalVisit.current).setOption(chartTotalVisitOption);
+  }, [pageVisitData]);
+
   useEffect(() => {
     const chartLoveCoinOption = {
       tooltip: {
-        trigger: 'item'
+        trigger: "item",
       },
       series: [
         {
-          name: 'Access From',
-          type: 'pie',
-          radius: '60%',
-          data: loveCoinData.map(item => {
+          name: "",
+          type: "pie",
+          radius: ["65%", "95%"],
+          avoidLabelOverlap: false,
+          itemStyle: {
+            borderRadius: 10,
+            borderColor: "#fff",
+            borderWidth: 2,
+          },
+          label: {
+            show: false,
+            position: "center",
+          },
+          labelLine: {
+            show: false,
+          },
+          data: loveCoinData.map((item) => {
             return {
               name: item.key,
               value: item.value,
-            }
+            };
           }),
           emphasis: {
             itemStyle: {
               shadowBlur: 10,
               shadowOffsetX: 0,
-              shadowColor: 'rgba(0, 0, 0, 0.5)'
-            }
-          }
-        }
-      ]
-    }
-  
+              shadowColor: "rgba(0, 0, 0, 0.5)",
+            },
+          },
+        },
+      ],
+    };
+
     echarts.init(chartRefLoveCoin.current).setOption(chartLoveCoinOption);
-  }, [loveCoinData])
+  }, [loveCoinData]);
+
+
+  const [dayTime,setDayTime] =useState('')
+
+  useEffect(()=>{
+    const time =dayjs(Date.now()).format('YYYY-MM-DD')
+    setDayTime(time)
+  },[])
 
   return (
     <div className={styles.A9board}>
       <div className="pageTitle">数据看板</div>
-      <p className="update-time">统计数据更新于 2024-04-06 6:00</p>
+      <p className="update-time">统计数据更新于 {dayTime} 6:00</p>
       <div className="chart-area">
         <div className="column-1">
           <div className="total-visit chart-card">
             <ChartTitle text={`总访问量:${totalVisitData}`}></ChartTitle>
             <div className="chart-1">
               <div className="pie-chart" ref={chartRefTotalVisit}></div>
-              <DataList
-                className="data-list"
-                list={pageVisitData}
-              ></DataList>
+              <DataList className="data-list" list={pageVisitData}></DataList>
             </div>
             <div className="chart-2">
-              <DataBar keyName1={browserVisitData.keyName1} value1={browserVisitData.value1} keyName2={browserVisitData.keyName2} value2={browserVisitData.value2}></DataBar>
+              <DataBar
+                keyName1={browserVisitData.keyName1}
+                value1={browserVisitData.value1}
+                keyName2={browserVisitData.keyName2}
+                value2={browserVisitData.value2}
+              ></DataBar>
             </div>
           </div>
           <div className="total-visitor chart-card">
-            <ChartTitle text={`总访客数:${totaltotalVisitorData}`}></ChartTitle>
+            <ChartTitle
+              text={`总访客数:${totaltotalVisitorData}`}
+            ></ChartTitle>
             <div className="chart-area">
-              <DataBar keyName1={'注册访客'} value1={1} keyName2={'非注册访客'} value2={2}></DataBar>
+              <DataBar
+                keyName1={"注册访客"}
+                value1={1}
+                keyName2={"非注册访客"}
+                value2={2}
+              ></DataBar>
             </div>
           </div>
         </div>
         <div className="column-2">
           <div className="hot-remain chart-card">
-            <ChartTitle text={'热门遗存'}></ChartTitle>
+            <ChartTitle text={"热门遗存"}></ChartTitle>
             <div className="chart-1">
               <DataList
                 className="data-list"
@@ -345,10 +417,7 @@ function A9board() {
             <ChartTitle text={`爱心币奖励:${totalLoveCoinData}`}></ChartTitle>
             <div className="chart-1">
               <div className="pie-chart" ref={chartRefLoveCoin}></div>
-              <DataList
-                className="data-list"
-                list={loveCoinData}
-              ></DataList>
+              <DataList className="data-list" list={loveCoinData}></DataList>
             </div>
           </div>
         </div>

Файловите разлики са ограничени, защото са твърде много
+ 9208 - 9780
yarn.lock