快乐的梦鱼 1 месяц назад
Родитель
Сommit
5235e8ceac

+ 3 - 0
components.d.ts

@@ -23,12 +23,15 @@ declare module 'vue' {
     PageLeftTitleRightContent: typeof import('./src/components/parts/PageLeftTitleRightContent.vue')['default']
     PageRoot: typeof import('./src/components/parts/PageRoot.vue')['default']
     PageTopTitleBottomContent: typeof import('./src/components/parts/PageTopTitleBottomContent.vue')['default']
+    Pagination: typeof import('./src/components/small/Pagination.vue')['default']
     RouterLink: typeof import('vue-router')['RouterLink']
     RouterView: typeof import('vue-router')['RouterView']
     ScrollLeftRightButton: typeof import('./src/components/small/ScrollLeftRightButton.vue')['default']
     ScrollLeftRightButton2: typeof import('./src/components/small/ScrollLeftRightButton2.vue')['default']
+    SimpleLoading: typeof import('./src/components/small/SimpleLoading.vue')['default']
     SimplePageContentLoader: typeof import('./src/components/SimplePageContentLoader.vue')['default']
     SimplePageListContentLoader: typeof import('./src/components/SimplePageListContentLoader.vue')['default']
+    SimplePageListContentPager: typeof import('./src/components/SimplePageListContentPager.vue')['default']
     SimplePopup: typeof import('./src/components/SimplePopup.vue')['default']
     SimpleRemoveRichHtml: typeof import('./src/components/SimpleRemoveRichHtml.vue')['default']
     SimpleRichHtml: typeof import('./src/components/SimpleRichHtml.vue')['default']

+ 11 - 238
package-lock.json

@@ -12,9 +12,9 @@
         "@imengyu/js-request-transform": "^0.3.5",
         "@imengyu/vue-scroll-rect": "^0.1.7",
         "@vitejs/plugin-legacy": "^7.2.1",
-        "ant-design-vue": "^4.2.6",
         "md5": "^2.3.0",
         "pinia": "^3.0.3",
+        "sweetalert2": "^11.22.4",
         "three": "^0.178.0",
         "vue": "^3.5.17",
         "vue-router": "^4.5.1",
@@ -50,34 +50,6 @@
         "node": ">=6.0.0"
       }
     },
-    "node_modules/@ant-design/colors": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz",
-      "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@ctrl/tinycolor": "^3.4.0"
-      }
-    },
-    "node_modules/@ant-design/icons-svg": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz",
-      "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==",
-      "license": "MIT"
-    },
-    "node_modules/@ant-design/icons-vue": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz",
-      "integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==",
-      "license": "MIT",
-      "dependencies": {
-        "@ant-design/colors": "^6.0.0",
-        "@ant-design/icons-svg": "^4.2.1"
-      },
-      "peerDependencies": {
-        "vue": ">=3.0.3"
-      }
-    },
     "node_modules/@antfu/utils": {
       "version": "0.7.10",
       "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz",
@@ -1567,15 +1539,6 @@
         "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
       }
     },
-    "node_modules/@babel/runtime": {
-      "version": "7.27.6",
-      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.6.tgz",
-      "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/template": {
       "version": "7.27.2",
       "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz",
@@ -1628,15 +1591,6 @@
       "devOptional": true,
       "license": "(Apache-2.0 AND BSD-3-Clause)"
     },
-    "node_modules/@ctrl/tinycolor": {
-      "version": "3.6.1",
-      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
-      "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/@dimforge/rapier3d-compat": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/@dimforge/rapier3d-compat/-/rapier3d-compat-0.12.0.tgz",
@@ -1644,18 +1598,6 @@
       "dev": true,
       "license": "Apache-2.0"
     },
-    "node_modules/@emotion/hash": {
-      "version": "0.9.2",
-      "resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.9.2.tgz",
-      "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
-      "license": "MIT"
-    },
-    "node_modules/@emotion/unitless": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.8.1.tgz",
-      "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==",
-      "license": "MIT"
-    },
     "node_modules/@esbuild/aix-ppc64": {
       "version": "0.25.8",
       "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz",
@@ -2446,16 +2388,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/@simonwep/pickr": {
-      "version": "1.8.2",
-      "resolved": "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz",
-      "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==",
-      "license": "MIT",
-      "dependencies": {
-        "core-js": "^3.15.1",
-        "nanopop": "^2.1.0"
-      }
-    },
     "node_modules/@sindresorhus/merge-streams": {
       "version": "4.0.0",
       "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
@@ -2949,46 +2881,6 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/ant-design-vue": {
-      "version": "4.2.6",
-      "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-4.2.6.tgz",
-      "integrity": "sha512-t7eX13Yj3i9+i5g9lqFyYneoIb3OzTvQjq9Tts1i+eiOd3Eva/6GagxBSXM1fOCjqemIu0FYVE1ByZ/38epR3Q==",
-      "license": "MIT",
-      "dependencies": {
-        "@ant-design/colors": "^6.0.0",
-        "@ant-design/icons-vue": "^7.0.0",
-        "@babel/runtime": "^7.10.5",
-        "@ctrl/tinycolor": "^3.5.0",
-        "@emotion/hash": "^0.9.0",
-        "@emotion/unitless": "^0.8.0",
-        "@simonwep/pickr": "~1.8.0",
-        "array-tree-filter": "^2.1.0",
-        "async-validator": "^4.0.0",
-        "csstype": "^3.1.1",
-        "dayjs": "^1.10.5",
-        "dom-align": "^1.12.1",
-        "dom-scroll-into-view": "^2.0.0",
-        "lodash": "^4.17.21",
-        "lodash-es": "^4.17.15",
-        "resize-observer-polyfill": "^1.5.1",
-        "scroll-into-view-if-needed": "^2.2.25",
-        "shallow-equal": "^1.0.0",
-        "stylis": "^4.1.3",
-        "throttle-debounce": "^5.0.0",
-        "vue-types": "^3.0.0",
-        "warning": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=12.22.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/ant-design-vue"
-      },
-      "peerDependencies": {
-        "vue": ">=3.2.0"
-      }
-    },
     "node_modules/anymatch": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
@@ -3016,18 +2908,6 @@
         "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
-    "node_modules/array-tree-filter": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
-      "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==",
-      "license": "MIT"
-    },
-    "node_modules/async-validator": {
-      "version": "4.2.5",
-      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
-      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
-      "license": "MIT"
-    },
     "node_modules/babel-plugin-polyfill-corejs2": {
       "version": "0.4.14",
       "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz",
@@ -3267,12 +3147,6 @@
       "license": "MIT",
       "peer": true
     },
-    "node_modules/compute-scroll-into-view": {
-      "version": "1.0.20",
-      "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz",
-      "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==",
-      "license": "MIT"
-    },
     "node_modules/confbox": {
       "version": "0.2.2",
       "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.2.2.tgz",
@@ -3451,18 +3325,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/dom-align": {
-      "version": "1.12.4",
-      "resolved": "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz",
-      "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==",
-      "license": "MIT"
-    },
-    "node_modules/dom-scroll-into-view": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz",
-      "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==",
-      "license": "MIT"
-    },
     "node_modules/electron-to-chromium": {
       "version": "1.5.190",
       "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.190.tgz",
@@ -3894,15 +3756,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/is-plain-object": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz",
-      "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/is-stream": {
       "version": "4.0.1",
       "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz",
@@ -4045,36 +3898,12 @@
         "url": "https://github.com/sponsors/antfu"
       }
     },
-    "node_modules/lodash": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-      "license": "MIT"
-    },
-    "node_modules/lodash-es": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
-      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
-      "license": "MIT"
-    },
     "node_modules/lodash.debounce": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
       "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
       "license": "MIT"
     },
-    "node_modules/loose-envify": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz",
-      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-      "license": "MIT",
-      "dependencies": {
-        "js-tokens": "^3.0.0 || ^4.0.0"
-      },
-      "bin": {
-        "loose-envify": "cli.js"
-      }
-    },
     "node_modules/lru-cache": {
       "version": "5.1.1",
       "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -4227,12 +4056,6 @@
         "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
       }
     },
-    "node_modules/nanopop": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmmirror.com/nanopop/-/nanopop-2.4.2.tgz",
-      "integrity": "sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==",
-      "license": "MIT"
-    },
     "node_modules/node-releases": {
       "version": "2.0.19",
       "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz",
@@ -4620,12 +4443,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/resize-observer-polyfill": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
-      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==",
-      "license": "MIT"
-    },
     "node_modules/resolve": {
       "version": "1.22.10",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
@@ -5011,15 +4828,6 @@
         "node": ">=14.0.0"
       }
     },
-    "node_modules/scroll-into-view-if-needed": {
-      "version": "2.2.31",
-      "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz",
-      "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==",
-      "license": "MIT",
-      "dependencies": {
-        "compute-scroll-into-view": "^1.0.20"
-      }
-    },
     "node_modules/semver": {
       "version": "6.3.1",
       "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
@@ -5029,12 +4837,6 @@
         "semver": "bin/semver.js"
       }
     },
-    "node_modules/shallow-equal": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz",
-      "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==",
-      "license": "MIT"
-    },
     "node_modules/shebang-command": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -5151,12 +4953,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/stylis": {
-      "version": "4.3.6",
-      "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.6.tgz",
-      "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==",
-      "license": "MIT"
-    },
     "node_modules/superjson": {
       "version": "2.2.2",
       "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz",
@@ -5197,6 +4993,16 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/sweetalert2": {
+      "version": "11.22.4",
+      "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.22.4.tgz",
+      "integrity": "sha512-JwcRODfozxiKmspFp+xctZ2izAmLAKbRPcoLMEW7LdugN/YmNrX1LT7hdBW87qsgupEO1ukBBuB17KzKFKW0tg==",
+      "license": "MIT",
+      "funding": {
+        "type": "individual",
+        "url": "https://github.com/sponsors/limonte"
+      }
+    },
     "node_modules/sync-child-process": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/sync-child-process/-/sync-child-process-1.0.2.tgz",
@@ -5251,15 +5057,6 @@
       "integrity": "sha512-ybFIB0+x8mz0wnZgSGy2MO/WCO6xZhQSZnmfytSPyNpM0sBafGRVhdaj+erYh5U+RhQOAg/eXqw5uVDiM2BjhQ==",
       "license": "MIT"
     },
-    "node_modules/throttle-debounce": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz",
-      "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12.22"
-      }
-    },
     "node_modules/tinyglobby": {
       "version": "0.2.14",
       "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz",
@@ -5730,21 +5527,6 @@
         "typescript": ">=5.0.0"
       }
     },
-    "node_modules/vue-types": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz",
-      "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==",
-      "license": "MIT",
-      "dependencies": {
-        "is-plain-object": "3.0.1"
-      },
-      "engines": {
-        "node": ">=10.15.0"
-      },
-      "peerDependencies": {
-        "vue": "^3.0.0"
-      }
-    },
     "node_modules/vue3-carousel": {
       "version": "0.16.0",
       "resolved": "https://registry.npmmirror.com/vue3-carousel/-/vue3-carousel-0.16.0.tgz",
@@ -5766,15 +5548,6 @@
         "vue": "^3.2"
       }
     },
-    "node_modules/warning": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz",
-      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
-      "license": "MIT",
-      "dependencies": {
-        "loose-envify": "^1.0.0"
-      }
-    },
     "node_modules/webpack-virtual-modules": {
       "version": "0.6.2",
       "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",

+ 1 - 1
package.json

@@ -15,9 +15,9 @@
     "@imengyu/js-request-transform": "^0.3.5",
     "@imengyu/vue-scroll-rect": "^0.1.7",
     "@vitejs/plugin-legacy": "^7.2.1",
-    "ant-design-vue": "^4.2.6",
     "md5": "^2.3.0",
     "pinia": "^3.0.3",
+    "sweetalert2": "^11.22.4",
     "three": "^0.178.0",
     "vue": "^3.5.17",
     "vue-router": "^4.5.1",

+ 1 - 11
src/App.vue

@@ -1,5 +1,4 @@
 <script setup lang="ts">
-import zhCN from 'ant-design-vue/es/locale/zh_CN';
 import { RouterView } from 'vue-router'
 import { useTvFocusImprovement } from './composeable/TvFocusImprovement';
 
@@ -7,16 +6,7 @@ useTvFocusImprovement(true);
 </script>
 
 <template>
-  <a-config-provider
-    :locale="zhCN"
-    :theme="{
-      token: {
-        colorPrimary: '#bc5f29',
-      },
-    }"
-  >
-    <RouterView />
-  </a-config-provider>
+  <RouterView />
 </template>
 
 <style scoped>

+ 10 - 7
src/api/RequestModules.ts

@@ -18,7 +18,7 @@ import {
   RequestResponse} from "@imengyu/imengyu-utils/dist/request";
 import { appendGetUrlParams, appendPostParams } from "@imengyu/imengyu-utils/dist/request/utils/Utils";
 import type { DataModel, NewDataModel } from "@imengyu/js-request-transform";
-import { Modal } from "ant-design-vue";
+import Swal from 'sweetalert2';
 import { StringUtils } from "@imengyu/imengyu-utils";
 
 /**
@@ -180,9 +180,10 @@ function responseErrReoprtInceptor<T extends DataModel>(instance: RequestCoreIns
 export function reportError<T extends DataModel>(instance: RequestCoreInstance<T>, response: RequestApiError | Error) {
   if (isDev) {
     if (response instanceof RequestApiError) {
-      Modal.error({
+      Swal.fire({
+        icon: 'error',
         title: `请求错误 ${response.apiName} : ${response.errorMessage}`,
-        content: response.toString() +
+        text: response.toString() +
           '\r\n请求接口:' + response.apiName +
           '\r\n请求地址:' + response.apiUrl +
           '\r\n请求参数:' + JSON.stringify(response.rawRequest) +
@@ -191,9 +192,10 @@ export function reportError<T extends DataModel>(instance: RequestCoreInstance<T
           '\r\n信息:' + response.errorCodeMessage,
       });
     } else {
-      Modal.error({
+      Swal.fire({
+        icon: 'error',
         title: '错误报告 代码错误',
-        content: response?.stack || ('' + response),
+        text: response?.stack || ('' + response),
       });
     }
   } else {    
@@ -204,9 +206,10 @@ export function reportError<T extends DataModel>(instance: RequestCoreInstance<T
     errMsg += '服务出现了异常,请稍后重试或联系客服。';
     errMsg += '版本:' + AppCofig.version;
 
-    Modal.error({
+    Swal.fire({
       title: '抱歉',
-      content: errMsg
+      icon: 'error',
+      text: errMsg
     });
 }
 }

+ 32 - 15
src/components/SimplePageContentLoader.vue

@@ -1,17 +1,16 @@
 <template>
   <div
     v-if="loader?.loadStatus.value == 'loading'"
-    style="height: 200px;display: flex;justify-content: center;align-items: center;"
+    class="loader"
   >
-    <a-spin tip="加载中" />
+    <SimpleLoading />
   </div>
   <div
     v-else-if="loader?.loadStatus.value == 'error'"
-    style="min-height: 200rpx"
+    class="error"
   >
-    <a-empty :description="loader.loadError.value" >
-      <a-button  @click="handleRetry">重试</a-button>
-    </a-empty>
+    <h1>{{ loader.loadError.value }}</h1>
+    <button @click="handleRetry">重试</button>
   </div>
   <template v-else-if="loader?.loadStatus.value == 'finished' || loader?.loadStatus.value == 'nomore'">
     <slot />
@@ -21,20 +20,20 @@
     style="min-height: 200rpx"
     class="empty"
   >
-    <a-empty :description="emptyView?.text ?? '暂无数据'">
-      <a-button
-        v-if="emptyView?.button"
-        @click="emptyView?.buttonClick ?? handleRetry"
-      >
-        {{emptyView?.buttonText ?? '刷新'}}
-      </a-button>
-    </a-empty>
+    <h1>{{ emptyView?.text ?? '暂无数据' }}</h1>
+    <button 
+      v-if="emptyView?.button"
+      @click="emptyView?.buttonClick ?? handleRetry"
+    >
+      {{emptyView?.buttonText ?? '刷新'}}
+    </button>
   </div>
 </template>
 
 <script setup lang="ts">
 import { onMounted, ref, type PropType } from 'vue';
 import type { ILoaderCommon } from '../composeable/LoaderCommon';
+import SimpleLoading from './small/SimpleLoading.vue';
 
 const props = defineProps({	
   loader: {
@@ -77,4 +76,22 @@ function handleLoad() {
   loaded.value = true;
   props.loader.loadData(undefined);
 }
-</script>
+
+</script>
+
+<style lang="scss" scoped>
+.loader {
+  height: 200px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+.error, .empty {
+  min-height: 200px;
+  text-align: center;
+
+  h1 {
+    font-size: 0.8rem;
+  }
+}
+</style>

+ 20 - 13
src/components/SimplePageListContentLoader.vue

@@ -4,29 +4,27 @@
       v-if="loader?.loadStatus.value == 'loading'"
       class="full"
     >
-      <a-spin tip="加载中" />
+      <SimpleLoading />
     </div>
     <div
       v-else-if="loader?.loadStatus.value == 'error'"
-      class="full"
+      class="full error"
     >
-      <a-empty :description="loader.loadError.value" >
-        <a-button  @click="handleRetry">重试</a-button>
-      </a-empty>
+      <h1>{{ loader.loadError.value }}</h1>
+      <button @click="handleRetry">重试</button>
     </div>
     <slot></slot>
     <div
       v-if="showEmpty || loader?.loadStatus.value == 'nomore'"
       class="full empty"
     >
-      <a-empty :description="emptyView?.text ?? '暂无数据'">
-        <a-button
-          v-if="emptyView?.button"
-          @click="emptyView?.buttonClick ?? handleRetry"
-        >
-          {{emptyView?.buttonText ?? '刷新'}}
-        </a-button>
-      </a-empty>
+      <h1>{{ emptyView?.text ?? '暂无数据' }}</h1>
+      <button 
+        v-if="emptyView?.button"
+        @click="emptyView?.buttonClick ?? handleRetry"
+      >
+        {{emptyView?.buttonText ?? '刷新'}}
+      </button>
     </div>
   </div>
 </template>
@@ -34,6 +32,7 @@
 <script setup lang="ts">
 import { onMounted, ref, type PropType } from 'vue';
 import type { ILoaderCommon } from '../composeable/LoaderCommon';
+import SimpleLoading from './small/SimpleLoading.vue';
 
 const props = defineProps({	
   loader: {
@@ -91,8 +90,16 @@ function handleLoad() {
   height: 100%;
   z-index: 10;
   display: flex;
+  flex-direction: column;
   justify-content: center;
   align-items: center;
+  min-height: 200px;
+  text-align: center;
+
+  h1 {
+    font-size: 0.8rem;
+  }
 }
 
+
 </style>

+ 23 - 0
src/components/SimplePageListContentPager.vue

@@ -0,0 +1,23 @@
+<template>
+  <div class="d-flex flex-row justify-center mt-3 flex-shrink-0">
+    <Pagination
+      v-if="loader.totalPages.value > 1"
+      v-model:currentPage="loader.page.value"
+      :totalPages="loader.totalPages.value"
+    />
+  </div>
+</template>
+
+<script setup lang="ts">
+import type { PropType } from 'vue';
+import type { ISimplePageListLoader } from '@/composeable/SimplePagerDataLoader';
+import Pagination from './small/Pagination.vue';
+
+const props = defineProps({	
+  loader: {
+    type: Object as PropType<ISimplePageListLoader<any, any>>,
+    default: null,
+  },
+})
+
+</script>

+ 3 - 0
src/components/parts/PageRoot.vue

@@ -85,6 +85,9 @@ defineProps({
 
   &.full {
     max-width: initial;
+    width: calc(100% - 40px);
+    height: calc(100vh - 80px);
+    padding: 20px;
   }
 }
 .back {

+ 1 - 0
src/components/parts/PageTopTitleBottomContent.vue

@@ -89,5 +89,6 @@ watch(activeIndex, (newValue) => {
   flex: 1;
   max-width: 100%;
   overflow: hidden;
+
 }
 </style>

+ 5 - 5
src/components/small/HoriontalLargeList.vue

@@ -70,7 +70,7 @@ onMounted(() => {
   position: relative;
   overflow: hidden;
   overflow-x: scroll;
-  height: 20vw;
+  height: 22vw;
 
   &::-webkit-scrollbar {
     display: none;
@@ -84,11 +84,11 @@ onMounted(() => {
   }
 
   &.full {
-    height: 25vw;
+    height: 28vw;
 
     .item {
-      width: 16vw;
-      height: 16vw;
+      width: 18vw;
+      height: 18vw;
       margin: 0 2vw;
 
       &.active {
@@ -135,7 +135,7 @@ onMounted(() => {
   .inner {
     width: 100%;
     height: 100%;
-    padding: 30px;
+    //padding: 30px;
   }
   img {
     border-radius: 50%;

+ 129 - 0
src/components/small/Pagination.vue

@@ -0,0 +1,129 @@
+<template>
+  <!-- 分页组件 -->
+  <div class="pagination">
+    <!-- 上一页按钮 -->
+    <div
+      :class="[
+        'page-button',
+        currentPage > 1 ? 'enable' : ''
+      ]"
+      :tabindex="currentPage > 1 ? 1 : undefined"
+      @click="goToPage(currentPage - 1)"
+    >
+      &lt;
+    </div>
+
+    <!-- 页码按钮 -->
+    <div
+      v-for="page in visiblePages"
+      :key="page"
+      class="page-button enable"
+      :class="{ active: page === currentPage }"
+      :tabindex="page === currentPage ? undefined : 1"
+      @click="goToPage(page)"
+    >
+      {{ page }}
+    </div>
+
+    <!-- 下一页按钮 -->
+    <div
+      :class="[
+        'page-button',
+        currentPage < totalPages ? 'enable' : ''
+      ]"
+      :tabindex="currentPage < totalPages ? 1 : undefined"
+      @click="goToPage(currentPage + 1)"
+    >
+      &gt;
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { computed } from "vue";
+
+const props = defineProps({
+  /**
+   * 当前页码
+   */
+  currentPage: {
+    type: Number,
+    required: true,
+  },
+  /**
+   * 总页数
+   */
+  totalPages: {
+    type: Number,
+    required: true,
+  },
+});
+
+const emit = defineEmits(["update:currentPage"]);
+
+// 计算显示的页码范围
+const visiblePages = computed(() => {
+  const pages = [];
+  const maxPagesToShow = 10; // 最多显示 10 个页码
+  const halfMax = Math.floor(maxPagesToShow / 2);
+
+  // 计算起始页码
+  let startPage = Math.max(1, props.currentPage - halfMax);
+  let endPage = startPage + maxPagesToShow - 1;
+
+  // 如果超出总页数,调整起始页码
+  if (endPage > props.totalPages) {
+    endPage = props.totalPages;
+    startPage = Math.max(1, endPage - maxPagesToShow + 1);
+  }
+
+  for (let i = startPage; i <= endPage; i++) {
+    pages.push(i);
+  }
+
+  return pages;
+});
+
+// 跳转到指定页码
+const goToPage = (page: number) => {
+  if (page >= 1 && page <= props.totalPages) {
+    emit("update:currentPage", page);
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.pagination {
+  display: flex;
+  justify-content: center;
+  gap: 5px;
+  margin-top: 15px;
+}
+.page-button {
+  width: 1.5rem;
+  height: 1.5rem;
+  font-size: 0.9rem;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background-color: var(--color-light-bg);
+  border: 2px solid var(--color-primary);
+  border-radius: 4px;
+  color: var(--color-text);
+  cursor: pointer;
+  opacity: 0.4;
+
+  &:focus {
+    outline: 2px solid var(--color-primary2);
+    transform: scale(1.05);
+  }
+  &.enable {
+    opacity: 1;
+  }
+}
+.page-button.active {
+  background-color: var(--color-primary2);
+  color: var(--color-text-light);
+  border-color: var(--color-primary2);
+}
+</style>

+ 4 - 0
src/components/small/ScrollLeftRightButton2.vue

@@ -56,6 +56,10 @@ function scrollLr(direction: 'left' | 'right') {
   padding-top: 60px;
 
   .btn {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+
     cursor: pointer;
 
     &:active {

+ 24 - 0
src/components/small/SimpleLoading.vue

@@ -0,0 +1,24 @@
+<template>
+  <div class="simple-loading" />
+</template>
+
+<style>
+.simple-loading {
+
+  width: 30px;
+  height: 30px;
+  border: 2px solid var(--color-primary);
+  border-top-color: transparent;
+  border-radius: 100%;
+  animation: circle infinite 0.75s linear;
+}
+
+@keyframes circle {
+  0% {
+    transform: rotate(0);
+  }
+  100% {
+    transform: rotate(360deg);
+  }
+}
+</style>

+ 0 - 1
src/main.ts

@@ -1,6 +1,5 @@
 import './assets/scss/main.scss'
 import './assets/scss/mengyuu/index.scss'
-import 'ant-design-vue/dist/reset.css';
 import '@imengyu/vue-scroll-rect/lib/vue-scroll-rect.css';
 import "vue3-carousel/carousel.css";
 

+ 2 - 2
src/views/AnswerView.vue

@@ -7,8 +7,8 @@ import Box2 from '@/components/small/Box2.vue';
 import { useSimpleDataLoader } from '@/composeable/SimpleDataLoader';
 import { RandomUtils, waitTimeOut } from '@imengyu/imengyu-utils';
 import { ScrollRect } from '@imengyu/vue-scroll-rect';
-import { message } from 'ant-design-vue';
 import { computed, reactive, ref } from 'vue';
+import Swal from 'sweetalert2';
 
 const userName = ref(RandomUtils.genNonDuplicateID(6));
 const isAnswer = ref(false);
@@ -58,7 +58,7 @@ async function nextQuestion() {
   if (currentState.value !== -1)
     return;
   if (currentSelectIndex.value === -1 && currentQuestion.value) {
-    message.info('请选择一个答案');
+    Swal.fire({ text: '请选择一个答案', icon: 'info' });
     return;
   }
   if (currentQuestion.value) {

+ 2 - 2
src/views/ArtifactModelDetailView.vue

@@ -38,7 +38,7 @@ const previewShow = ref(false);
     </template>
     <template #content>
       <SimplePageContentLoader :loader="newsData">
-        <div class="d-flex flex-row color-text-second size-ss h-90 position-relative">
+        <div class="d-flex flex-row color-text-second size-ss h-85 position-relative overflow-hidden">
           <!-- 左 文物介绍 -->
           <div class="d-flex flex-col w-30 flex-shrink-0">
             <Box1 class="h-50">
@@ -50,7 +50,7 @@ const previewShow = ref(false);
                 ]" />
               </ScrollRect>
             </Box1>
-            <Box1 class="h-50 mt-3">
+            <Box1 class="h-40 mt-3">
               <ScrollRect scroll="vertical">
                 <h3 class="text-bold size-base">文物实图</h3>
                 <ImageGrid class="mt-3" :data="newsData.content.value!.detail.images" :rowCount="3" imageHeight="120px">