From 10aa6436cccd259fcb983c740c0b681df2af7277 Mon Sep 17 00:00:00 2001 From: wang <3202024218@qq.com> Date: Wed, 18 Jun 2025 10:44:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=85=A5=E8=BF=9C=E7=AB=AF=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- goldminer/README.md | 37 +- goldminer/backend/app.py | 142 ++++++- goldminer/backend/goldminer.db | Bin 24576 -> 0 bytes goldminer/backend/instance/goldminer.db | Bin 24576 -> 0 bytes goldminer/backend/requirements.txt | 3 +- goldminer/backend/run_server.py | 7 +- ...fd17828cdabe77f389e1a117abb9d28213e38.json | 1 + ...500218c0fd5914925b637ad652e30756d0bad.json | 1 + ...00ec293edf069426fccff4d7d1cb80e7afabf.json | 1 + ...1750a0af1aff3f6efd4909591c1a7dbf15ef7.json | 1 + ...e7f70cf48b008c1b7713c387302e26d96514c.json | 1 + ...942ecf602d67cc6b9f85959b53371988acb9d.json | 1 + ...02337fd6a4bc19b1d69dc5f0e0de1aa6da2cb.json | 1 + ...842f1e2f820fdc23569ba19f8e99fac9a1c43.json | 1 + ...8b223f0c5af1dbf31c0bc90c444ee477eb5fa.json | 1 + ...cdf49e7caffd622d2c597a321df5604b6bff8.json | 1 + ...d436ca56de8fdd0494f8ceb73f3b225d3e4dc.json | 1 + ...ba9650873605a34833ec47e932072997f8ae9.json | 1 + ...25520b92be7f640514b9ab887d0f763c57f81.json | 1 + ...9cd127841d0d483f4a55bd0cc730870bff531.json | 1 + ...686269d07e4445abd66c435a736b864faa935.json | 1 + ...072272c4547c62ad5df135b3dfd1ec3d12084.json | 1 + ...4819503589a808fa47c44ef18fbc0b2fbe10f.json | 1 + ...3c66cda0672d52bd2f7c7676d17732965bf48.json | 1 + ...8f755d50545ac5a9a48437113d849ea907dde.json | 1 + ...988486a496afa269f57f837bc4a3ef38296f7.json | 1 + ...f991c3c538ddaba1743b1fddecfee859d74ab.json | 1 + ...e047a42689495b316f4ccf0132835616d9935.json | 1 + ...5870a21c6d94d67e7b85dfc7a85bf069d4fc0.json | 1 + ...b24fbab96f689bdab093b6abe1477c2e86aa3.json | 1 + ...6cdc20fb31bd5c9a2c753dbe718e0c7186234.json | 1 + ...b71bc071ef932c8eb733dd6579d3dedc6e764.json | 1 + ...547d0481413307a01d8f2e32207a3888aa735.json | 1 + ...59dc61828308c409545f6ad8052af1fb7d271.json | 1 + ...b8a7f2437693515b00c190351d9f0a9284406.json | 1 + ...372538d4c4328f115bc76b5889b80337d1d87.json | 1 + ...48d185fbb15d83773ab054c18ce01f9895ab6.json | 1 + ...1a6d00a236d01acaf7a6760ba84aa4ac7c797.json | 1 + ...a7e29ed4b97c8809e1a1a82aa6e744ebc6818.json | 1 + ...cd34c8d2519b549e34f1299d77700864e25f4.json | 1 + ...7fcb1cf78a87ee5a294e8a06efbc2aaa5e94e.json | 1 + ...431f0bab6c497c36747b8bfd497bc7e03ecbf.json | 1 + ...009c2f844b97869a742fa70bcb4d7a76f9318.json | 1 + ...f7161f5a8a215a7d5fc0cb4fc42fb9f21a947.json | 1 + ...72fc530bbc9118ea21e379237fa042311232e.json | 1 + ...27ff5dcc27656dc290fee4dd87b59e53b2373.json | 1 + ...4cbb2b1f30d966c8e83437867dcc2b18ec4c5.json | 1 + ...eeb6b30a0c4104a244c1cf37cde75d848f444.json | 1 + ...36acd10655f3489b6a1caa3689ff074400c0a.json | 1 + ...2a13ec46ab49e7d2eebca0b32b265239ee7b4.json | 1 + ...2d75809ac119860d7127261cb44a6cff6eb2e.json | 1 + ...70cf6d34f4c33cb7ba493f78936267c8ec289.json | 1 + ...0ad81e1002558ad748ba3c17ec00c677a90b9.json | 1 + ...166591019072d49138daf414e40f3c84323aa.json | 1 + ...1394a70fdaaa8904d1583196ee87206cf58db.json | 1 + ...818e519c488bd2a3aa5e13795f18e40d03a92.json | 1 + ...d43928959a999f23b717e83f57a7ba4983c9f.json | 1 + ...0e4fa3903830092aa2cab994a5ed3fa0c06d2.json | 1 + ...06e7c7d784517678bc40872235a154227c632.json | 1 + ...969b5ea9c00d99df2e9f9cc29ee7314d23edf.json | 1 + ...939fd6ecf839d4b882b5d9c0b69dbe4768803.json | 1 + ...f5c6bd53b79725b9e70990c5725cae76ba832.json | 1 + ...6fc51b5c3dfacedf193194df3e517751791d4.json | 1 + ...ff1f7c8c2aa03687d02e6dd84f51cbb131659.json | 1 + ...bb186773b72ca7a63ec271541ab351401a231.json | 1 + ...48b357b26fa7e43abd490f4a965b6715bc349.json | 1 + ...0f66d0a51e338f211b46a09248d94b751be2f.json | 1 + ...1aff7dff43d104544e09510f063db8d9e11ae.json | 1 + ...0ccc3a3cadcbbf48333be5c205bf8b044079e.json | 1 + ...f0d73be921d74b1821a3ac149056e838bcb66.json | 1 + ...29c2c06ed2a930779942c55e86d04752408ab.json | 1 + ...c3eb09c51380b46261cd928fb098df2132597.json | 1 + ...97f1c91c9458d70ffbcbf441196e855b6e821.json | 1 + ...e85a6f63c88f67efd4bf045bdae4cfaea2bd4.json | 1 + ...360866e312f5c22165329c08ef7217463b43a.json | 1 + ...762c0ee2a74bb27983f56ac7e642337f23bde.json | 1 + ...4950f3f22870bd7b088523f97fe0ff5d7c2ba.json | 1 + ...489fda3a5afbe7e623db8102091f32ab85c70.json | 1 + ...cb830cdd2492b6f03615a0bc862e4d83e89e6.json | 1 + ...d05ce9172180f8d4a914e28e7d1c48ec74e0b.json | 1 + ...6a61f3ed0f2b54ff49dfcbfbed54bd2cd28a7.json | 1 + ...0dc4ec98d2af32c894d6044e3adef07a6d709.json | 1 + ...a5ecea5b0fa485909c41ae59f8b06de2343f1.json | 1 + ...edad4b852e8f6b4b57f1cb96865c7aaea45d1.json | 1 + ...2aeeea7cbbd620cc7a0752f287ff769b16a57.json | 1 + ...9f6d6487f69a6573490d5dbac58f9f2c56de6.json | 1 + ...37cbbd0840458095369b373fbd96b5ecd6b69.json | 1 + ...c48bd8c3927e40a2d1346c509f1f0b0c20273.json | 1 + ...3c310b4ffacc75a8cafc3e21da3cfef6e94ce.json | 1 + ...047f33bda46ae7374a64962302effa5c35db4.json | 1 + ...b7ca9eda797e8b2a6bc2337df84ac7b5bc7d9.json | 1 + ...595a88d956d68e5c7e29a32c80ab63092b4f0.json | 1 + ...c984a05499d9336cb98116a7cb1c96aa9fcb0.json | 1 + ...c332c5463cb19c0526dffd2e3b8586aea8252.json | 1 + ...55e13cb2960536ffa8fc019e55d63699ebf69.json | 1 + ...b878554cd9ee695132840819bb7b6763be5a1.json | 1 + ...9365f44451963c6ffc2723cf85818ff723d78.json | 1 + ...31e67d25d305384ca990a73a489a4ae1c6e1a.json | 1 + ...36fe37fbb1bbc56025de2f3aa8109b10e92e3.json | 1 + ...d6d32b60e70d906e10683df609a2aae86df17.json | 1 + ...7778b07ca037a2b219619d39023fc212955eb.json | 1 + ...5a3a5227f7099d55a05aef59e57acfdc8f6a3.json | 1 + ...b62bef983a620fc3b8b24007997f704c04161.json | 1 + ...69a43947bff07fadbb285ca2cd0da9df2118f.json | 1 + ...dd33ba7221e219c2b8f88bcdc38d157f92093.json | 1 + ...14d162c6f97e39ec3bb64474bc5cdf5ce2804.json | 1 + ...99eb35475572d1207e9333373d4c88a43aa37.json | 1 + ...e76600b1c4160681faa4d87556a9bf1d6d8ff.json | 1 + ...a070e07e2ffae10a570f65c85bb1336765632.json | 1 + ...3abe7812cc57656a1d52e02346f053585fe9c.json | 1 + ...2aa690e8cb38143475efa2c6dd57e45d4c338.json | 1 + ...fb2059eaf96004c94f0617712ed1c93b43ed7.json | 1 + ...668a71e2fb4c38e43790847fcb8801f8d094b.json | 1 + ...9febae56515a46f34f1754a5cce7b686510a7.json | 1 + ...d13da02d0e18c57ed6ccb7b3c42d61d68efd1.json | 1 + ...3c01432457fe976d5b320ff0a756da6058972.json | 1 + ...53e0559a65bc12b98c8916090603cfc22887f.json | 1 + ...593b1ad69e9c4b696ae055d7410ce7580c500.json | 1 + ...3d15b7488ab7e97ae9ef951f491b0a3884290.json | 1 + ...79e5f0be55f030748f9e8b4b19484e05f0f58.json | 1 + ...2341699471d65b2e1bfddc00680ea02a4b194.json | 1 + ...a0a60d767766cced992ffb701e22b1beb08c9.json | 1 + ...525df9c7ad55a23dff50191a4914346e1bdf8.json | 1 + ...220ff56c5c95d0dcbb2b02e59784fb27b279a.json | 1 + ...73af1c28b2d7d147b6ce6adb2e0cca2e0ac6f.json | 1 + ...c7dc254d2943bc1aef075bed1768d8e9d3567.json | 1 + ...74a19eefba2f66357a542683930e814fc2962.json | 1 + ...37fefb23e36f2d03ac2433a7077c345f980c3.json | 1 + ...1bb379a422973d65c32add66628cb4031fd1f.json | 1 + ...8f2518b614355763d90a050b77f390e8f70b9.json | 1 + ...98638025d37e2b0d25b48b5724ab7c95f99fb.json | 1 + ...e606ecc9ce82fc0d43877cba2da8b4ef7f9d6.json | 1 + ...2a8c3a8ddf9df164b7cd5e6d919ab79c55017.json | 1 + ...1e138171bf7002a03100772e81e83a54fb471.json | 1 + ...3579234cb4b4ff3263357a85a1ed230ab41e2.json | 1 + ...e3057c0980f7ec5082761decc6db3ef41d485.json | 1 + ...86df2910eda8e48e0c915dff2768f1976c9cf.json | 1 + ...7334f0fdee3b63ea5688dea4cd220dac84ca4.json | 1 + ...c397430596c2f88a65af62595b4993345d005.json | 1 + ...95cf90c24f85aed926239c1adf813d2bbf6aa.json | 1 + ...7c0c4bab07492f8ba6be1ab55e59c20a9e2c7.json | 1 + ...55a51d54a21f9a0a6bc14b963c3a63909caf1.json | 1 + ...ec7d9f497fc5558280d0932d8cbf2ce49f8cc.json | 1 + ...d5cd1cbd8c004c96e1a88512285c1efacc0c6.json | 1 + ...cd0cd39e04bd1c7f01a5977d88345f8fe092f.json | 1 + ...6f052a4193e960179bd7af7c7489850be99f0.json | 1 + ...5ce5fb63e0a068c17ee22cd0896b57ecd1c3a.json | 1 + ...b2b6938adfb71413d2113ed9ad2c075806cb8.json | 1 + ...8b5aa411a64045140c2c03f19f53cda5fd323.json | 1 + ...88902992ee1593e78ff1c2273a3793a2c7288.json | 1 + ...81346a59ee54ea0f3d71ad0530d9d663df5f4.json | 1 + ...43ba08dd08a734e07d7386a1ed83a7720b8cf.json | 1 + ...2fb280c712e9c522b102e79c612ee105ad1d5.json | 1 + ...85046034a9454a0c1818f21254d493d384590.json | 1 + ...472aa1127548727d43cee5c90f24b490ffb34.json | 1 + ...d52a87a1202284fd10ecf83fb435014f9b013.json | 1 + ...6e78fbcee4450cedea72beceecf6a6407a945.json | 1 + ...031cbb5da04b2df5a5e73fe893d89f06eea5b.json | 1 + ...78eb8cfb430421f6cb955fc5b8ecfd13e0f71.json | 1 + ...15e8d45230d421daf8c68421648f6a9636799.json | 1 + ...24544c8215d3a569badd9c63c8f2211ea8a7d.json | 1 + ...fcb48529c21ac4b7548c13d39833044015a07.json | 1 + ...32dcd20b260a4b0d7092135fb4e9824e1f129.json | 1 + ...7c44fb4797916144b6bc0da7be40ba8ebea8f.json | 1 + ...a1ed2bcb7a6d79aaf2e4da109fa98177b1d02.json | 1 + ...5f79e734d2f0e0a357308027824f057bf86f4.json | 1 + ...18a723e2a580a68c32265069f0af82a7dcd74.json | 1 + ...4462ddea38c82e2aef09f2d8138cc38569f0c.json | 1 + ...b20e5c60b2c09099a47ed8a7a96c1b2f1e6d1.json | 1 + ...a0bd4839a3b367be302711f9bb34959e794b1.json | 1 + ...1bc83d413796072161e7954b8d7e07778a103.json | 1 + ...a4c46cf617ccbab47ead92d110c2b0d40ee59.json | 1 + ...4711cd8d8df0fb2758130a9a3caf5e7ba5ef6.json | 1 + ...b7b05fa2327f71385f42ff339c1ac99c5bbd8.json | 1 + ...94b9f783a8d9c388ec8fdb9d39aeb6513062c.json | 1 + .../node_modules/.cache/eslint/123ee647.json | 2 +- .../node_modules/.cache/eslint/68c8e53b.json | 2 +- .../frontend/node_modules/.package-lock.json | 6 +- goldminer/frontend/package-lock.json | 6 +- goldminer/frontend/src/components/Game.vue | 371 ++++++++++++++---- goldminer/start.bat | 3 +- 181 files changed, 627 insertions(+), 121 deletions(-) delete mode 100644 goldminer/backend/goldminer.db delete mode 100644 goldminer/backend/instance/goldminer.db create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/0096e99a95b36a4fa355e983e7dfd17828cdabe77f389e1a117abb9d28213e38.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/0129600a156507d3b182db73560500218c0fd5914925b637ad652e30756d0bad.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/01de799bddae0c5cbdc51999dc500ec293edf069426fccff4d7d1cb80e7afabf.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/02b1ac2b69382a03cc02c6638a61750a0af1aff3f6efd4909591c1a7dbf15ef7.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/033ab71179be3b556ad2fa87fb4e7f70cf48b008c1b7713c387302e26d96514c.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/06035bc6f22c3ebaa088a081ec0942ecf602d67cc6b9f85959b53371988acb9d.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/07c96e6683d2e1b7bd5db4772d002337fd6a4bc19b1d69dc5f0e0de1aa6da2cb.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/0d200a6acb602b889150dbbd293842f1e2f820fdc23569ba19f8e99fac9a1c43.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/0e1732639a78dfc4c72f6f87e168b223f0c5af1dbf31c0bc90c444ee477eb5fa.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/0f44c0f775a171b327907a16497cdf49e7caffd622d2c597a321df5604b6bff8.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/10e063d2264efd943c348cc4d9fd436ca56de8fdd0494f8ceb73f3b225d3e4dc.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/12be9abf217c7366a695328fea7ba9650873605a34833ec47e932072997f8ae9.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/1d93a060fa1b3e985be6cc252fb25520b92be7f640514b9ab887d0f763c57f81.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/1f025ae82a4c8f1779b12d51cbb9cd127841d0d483f4a55bd0cc730870bff531.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/1f5211af313ffcea215c71cdf31686269d07e4445abd66c435a736b864faa935.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/23bb56d076642a8997e2861e0ea072272c4547c62ad5df135b3dfd1ec3d12084.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/2438f3acbcd09d607883e8e98dc4819503589a808fa47c44ef18fbc0b2fbe10f.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/244e7957daea43475d6fbce33a53c66cda0672d52bd2f7c7676d17732965bf48.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/255b8bc1abf0ccc8526a4ed32428f755d50545ac5a9a48437113d849ea907dde.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/264f9e869e3f9346f22d0d3e810988486a496afa269f57f837bc4a3ef38296f7.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/275e510382d48d97e1778c2b9f2f991c3c538ddaba1743b1fddecfee859d74ab.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/28eefb1ad7c8533f4ea85ffef28e047a42689495b316f4ccf0132835616d9935.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/2ccf2254ba3fb90018edd1b78a05870a21c6d94d67e7b85dfc7a85bf069d4fc0.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/2dce345a33fb4307052fb959497b24fbab96f689bdab093b6abe1477c2e86aa3.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/36957590164f9412df40a69d7476cdc20fb31bd5c9a2c753dbe718e0c7186234.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/373401fff68bd1d312d6ad648f3b71bc071ef932c8eb733dd6579d3dedc6e764.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/377ffd2e756eddc62a63930c888547d0481413307a01d8f2e32207a3888aa735.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/3884b7d7225847905a1535386bf59dc61828308c409545f6ad8052af1fb7d271.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/397a5370bf52230682d5f9b53d7b8a7f2437693515b00c190351d9f0a9284406.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/3bd16ae96abf1712ae9e27c806e372538d4c4328f115bc76b5889b80337d1d87.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/3ea236e5c15a80689f524e48e8e48d185fbb15d83773ab054c18ce01f9895ab6.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/425c81dccb6a3e4e0f2f87a09d01a6d00a236d01acaf7a6760ba84aa4ac7c797.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/44a9474fbc04b504c037ae1e5dca7e29ed4b97c8809e1a1a82aa6e744ebc6818.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/4638917aec120b1776d5eb9a88ecd34c8d2519b549e34f1299d77700864e25f4.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/47521dec81fb57dc81c749d44127fcb1cf78a87ee5a294e8a06efbc2aaa5e94e.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/491cff01c04f0613b30de973ea2431f0bab6c497c36747b8bfd497bc7e03ecbf.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/49f2b669e0752cc7ada08cf8272009c2f844b97869a742fa70bcb4d7a76f9318.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/4c921fb186633c71a0c2acd8cf9f7161f5a8a215a7d5fc0cb4fc42fb9f21a947.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/4cebc8c229a9cd59479d840158672fc530bbc9118ea21e379237fa042311232e.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/4dfa42b81dd71f19a13ca8ae51127ff5dcc27656dc290fee4dd87b59e53b2373.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/4edef9ddfe72191bbff3ac7cbfd4cbb2b1f30d966c8e83437867dcc2b18ec4c5.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/4fbc3d397315bbeb15037c0307beeb6b30a0c4104a244c1cf37cde75d848f444.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/50c680986614862e8167c2c1fea36acd10655f3489b6a1caa3689ff074400c0a.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/54ccee0f48716c16e2b9ab42c5d2a13ec46ab49e7d2eebca0b32b265239ee7b4.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/5fe2b09630cea9f497589c6e5002d75809ac119860d7127261cb44a6cff6eb2e.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/607a814261b869082829297356170cf6d34f4c33cb7ba493f78936267c8ec289.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/6098edd7ee65272f1a75b03d9960ad81e1002558ad748ba3c17ec00c677a90b9.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/629ea23659a7f01506ade9e7e9b166591019072d49138daf414e40f3c84323aa.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/63f1191a1c82cf7d74e23b1d2c51394a70fdaaa8904d1583196ee87206cf58db.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/6522c935c6a6d5fd6e9fddc960b818e519c488bd2a3aa5e13795f18e40d03a92.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/66d14e86801378636ac90676e69d43928959a999f23b717e83f57a7ba4983c9f.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/66e363f2e8d3e5d077a6148ba210e4fa3903830092aa2cab994a5ed3fa0c06d2.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/68fd486d5aeec21cf1bb583106006e7c7d784517678bc40872235a154227c632.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/6b89ce336ea5d12641d5ffea459969b5ea9c00d99df2e9f9cc29ee7314d23edf.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/6c2c6824f1e636740be896947c2939fd6ecf839d4b882b5d9c0b69dbe4768803.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/6e15e3db63d53261e6d138b95cbf5c6bd53b79725b9e70990c5725cae76ba832.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/6e2ab4965c70888def55ac0f65c6fc51b5c3dfacedf193194df3e517751791d4.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/6f761af0af9dcfa7d8b8ca18ad8ff1f7c8c2aa03687d02e6dd84f51cbb131659.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/70948f4a04a6eddc45753be26b9bb186773b72ca7a63ec271541ab351401a231.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/709bca86f427e2c37d7a8a39b1448b357b26fa7e43abd490f4a965b6715bc349.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/73c8767da5c01a7d4acbba08e030f66d0a51e338f211b46a09248d94b751be2f.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/76f25959dbbd947e81b5afa4b861aff7dff43d104544e09510f063db8d9e11ae.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/7897b1084c2231246f22b9260e80ccc3a3cadcbbf48333be5c205bf8b044079e.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/7ab584e635d06eb565cfe90324cf0d73be921d74b1821a3ac149056e838bcb66.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/7af32fd3d985c09a86e6dd2450529c2c06ed2a930779942c55e86d04752408ab.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/7b1e722700373bc31fd9a16903dc3eb09c51380b46261cd928fb098df2132597.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/7b85bfd604c6a1aeea88a96074597f1c91c9458d70ffbcbf441196e855b6e821.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/7da0ffa1de0726272d8c1e18f23e85a6f63c88f67efd4bf045bdae4cfaea2bd4.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/7eef1df3e7cc9fcf1c71d5fe831360866e312f5c22165329c08ef7217463b43a.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/804b8a4eaa9169ccf6e4e3a4787762c0ee2a74bb27983f56ac7e642337f23bde.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/82249167455627effd465d5b7b44950f3f22870bd7b088523f97fe0ff5d7c2ba.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/83e4cc05ee7d388a57b19dbb629489fda3a5afbe7e623db8102091f32ab85c70.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/853473066c55f41182ab537fdc2cb830cdd2492b6f03615a0bc862e4d83e89e6.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/86daba04a794c0c5e185d3d6a02d05ce9172180f8d4a914e28e7d1c48ec74e0b.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/86ffd547016efc116ee2c0b95f76a61f3ed0f2b54ff49dfcbfbed54bd2cd28a7.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/881a5cd25bff49d4be148608e8d0dc4ec98d2af32c894d6044e3adef07a6d709.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/8d0b1ab24ac560ae411b7f1ccf3a5ecea5b0fa485909c41ae59f8b06de2343f1.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/8d2c2aef379f3689beb19491e06edad4b852e8f6b4b57f1cb96865c7aaea45d1.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/8d7d43fa1ad72eab396e9185a782aeeea7cbbd620cc7a0752f287ff769b16a57.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/8dd8a19947416e74d6e88abccd49f6d6487f69a6573490d5dbac58f9f2c56de6.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/8e35c1f83e95d610cc647f4e15137cbbd0840458095369b373fbd96b5ecd6b69.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/904c0dcc7cec321c4fe5e85d022c48bd8c3927e40a2d1346c509f1f0b0c20273.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/91b38a08ca3a6e7418b50d36c523c310b4ffacc75a8cafc3e21da3cfef6e94ce.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/9333cabc8a223ca7f8797335760047f33bda46ae7374a64962302effa5c35db4.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/94e232fd2b34eb5f66b555967ebb7ca9eda797e8b2a6bc2337df84ac7b5bc7d9.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/95ab03c3dd86d1b518d49d6dd7f595a88d956d68e5c7e29a32c80ab63092b4f0.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/96efd9fe753f25d42974c13d6c9c984a05499d9336cb98116a7cb1c96aa9fcb0.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/9ae7c881b046e832229a83b564ec332c5463cb19c0526dffd2e3b8586aea8252.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/9bdf55a551505b3e4ceee71cb0155e13cb2960536ffa8fc019e55d63699ebf69.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/9d6665d7595618d41d8e7515337b878554cd9ee695132840819bb7b6763be5a1.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/9d9f9ff27fcee4d565d7e4ec63c9365f44451963c6ffc2723cf85818ff723d78.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/9f91f2575213867bd1303bdd54c31e67d25d305384ca990a73a489a4ae1c6e1a.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a0109915b8592264632e0649a9c36fe37fbb1bbc56025de2f3aa8109b10e92e3.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a063a56e28ceb807d9357b8ef01d6d32b60e70d906e10683df609a2aae86df17.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a12a136fc5d7abddcffcbe38ad97778b07ca037a2b219619d39023fc212955eb.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a18e60a4990042a7f62666ceb0e5a3a5227f7099d55a05aef59e57acfdc8f6a3.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a24a52352c87c3b46f2f308e3c2b62bef983a620fc3b8b24007997f704c04161.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a2ac6bfb9381c4c4c5e7a2f539b69a43947bff07fadbb285ca2cd0da9df2118f.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a4480e625955e9ba525f53925f2dd33ba7221e219c2b8f88bcdc38d157f92093.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a65cf0dab9e063389c484c65e7e14d162c6f97e39ec3bb64474bc5cdf5ce2804.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a6b42350db8cdecfd9f0d2b13d899eb35475572d1207e9333373d4c88a43aa37.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a76503f760080dc453da3dc5f3ae76600b1c4160681faa4d87556a9bf1d6d8ff.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a7a8cff3e4e37e0878e9c10f441a070e07e2ffae10a570f65c85bb1336765632.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/a7d0eacb6ac2c6911ac49055f783abe7812cc57656a1d52e02346f053585fe9c.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/aacdbed4c037ad150918c6138bb2aa690e8cb38143475efa2c6dd57e45d4c338.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/aad09fa1fd07bc5bc3e368085e7fb2059eaf96004c94f0617712ed1c93b43ed7.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/ab5a9b71246e4307ee252a94868668a71e2fb4c38e43790847fcb8801f8d094b.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/ab7a8b8d40667835367ed786f5b9febae56515a46f34f1754a5cce7b686510a7.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/ac9ae1921bbd647ca8e0163b3d5d13da02d0e18c57ed6ccb7b3c42d61d68efd1.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/ad85d152fb8bd04924325e9d51b3c01432457fe976d5b320ff0a756da6058972.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/aee27882610be467cbc16d6a6fa53e0559a65bc12b98c8916090603cfc22887f.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/b251c89e9a0137312a3694c5ffe593b1ad69e9c4b696ae055d7410ce7580c500.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/b2932c1f171ea772940f3c45dde3d15b7488ab7e97ae9ef951f491b0a3884290.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/b4a9e507fd61d255b9a9bd22a6879e5f0be55f030748f9e8b4b19484e05f0f58.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/b531907c83ec5e57b0605ed8ee22341699471d65b2e1bfddc00680ea02a4b194.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/bc5cf0ce023b7768c76879225fba0a60d767766cced992ffb701e22b1beb08c9.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/be97178dd95119bae3ec0a98171525df9c7ad55a23dff50191a4914346e1bdf8.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/c2b79271b107f22139355af060e220ff56c5c95d0dcbb2b02e59784fb27b279a.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/c5f856630c963bfdb132d53ec7573af1c28b2d7d147b6ce6adb2e0cca2e0ac6f.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/c6c424371283ccf9d87c168b486c7dc254d2943bc1aef075bed1768d8e9d3567.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/c6d02e96e303abc76b62e8c738a74a19eefba2f66357a542683930e814fc2962.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/c93cbe44c6cb78c203b7b0868a337fefb23e36f2d03ac2433a7077c345f980c3.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/ca765c688b7dc3e5be86de8472e1bb379a422973d65c32add66628cb4031fd1f.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/ca80fd158c03fbb12c04b71ffe88f2518b614355763d90a050b77f390e8f70b9.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/cc6ca55790ce06b0d3a38d6c82998638025d37e2b0d25b48b5724ab7c95f99fb.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/cc9af794875ad97e9029005d2b9e606ecc9ce82fc0d43877cba2da8b4ef7f9d6.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/cd68127e5bf550e893c39b3a3522a8c3a8ddf9df164b7cd5e6d919ab79c55017.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/cdfacc4b0ec70da6155643fb0961e138171bf7002a03100772e81e83a54fb471.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/d0dc068e75f6578a15defe3d3a33579234cb4b4ff3263357a85a1ed230ab41e2.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/d48814f5f764d5d4ce68e4ec012e3057c0980f7ec5082761decc6db3ef41d485.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/d5febc782effc6f337ed4b4810486df2910eda8e48e0c915dff2768f1976c9cf.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/d6e3ff5781f83c8ef789fbb26c47334f0fdee3b63ea5688dea4cd220dac84ca4.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/d7cf75a6cdc64507d1600c945a6c397430596c2f88a65af62595b4993345d005.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/d93fc602cfccaf2dce9d6a6c0ae95cf90c24f85aed926239c1adf813d2bbf6aa.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/dac063cca30146a1185d6ef76597c0c4bab07492f8ba6be1ab55e59c20a9e2c7.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/de98802a7f0a4e00bb1dec70b2255a51d54a21f9a0a6bc14b963c3a63909caf1.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/df2a97fb46a684b82f18c8ff930ec7d9f497fc5558280d0932d8cbf2ce49f8cc.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/dfc7a6103dfb85149e3f8abb2b2d5cd1cbd8c004c96e1a88512285c1efacc0c6.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e0380be500c96fb0fbea8e99355cd0cd39e04bd1c7f01a5977d88345f8fe092f.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e12efcc5777df873c48eedc37ba6f052a4193e960179bd7af7c7489850be99f0.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e21dddff5393acaef9b192437835ce5fb63e0a068c17ee22cd0896b57ecd1c3a.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e252d122a2331f5d4a9cc26cb0fb2b6938adfb71413d2113ed9ad2c075806cb8.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e29ebf09582deaeeefcd6f3cd048b5aa411a64045140c2c03f19f53cda5fd323.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e3027bb7c0b1a7f76ac8f642f1488902992ee1593e78ff1c2273a3793a2c7288.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e4a0b3117c293382374862d01e981346a59ee54ea0f3d71ad0530d9d663df5f4.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e5a2266705da13f694ba453f42343ba08dd08a734e07d7386a1ed83a7720b8cf.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e653cb057ee805b874b0840b6582fb280c712e9c522b102e79c612ee105ad1d5.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e68f107fd21cf924235dc1b271e85046034a9454a0c1818f21254d493d384590.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e8ec66b8b7dff3a17a186b3b101472aa1127548727d43cee5c90f24b490ffb34.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/e9302129840a7ad3044d74fe22ed52a87a1202284fd10ecf83fb435014f9b013.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/ed49ee6069f6d16cf30836a3a826e78fbcee4450cedea72beceecf6a6407a945.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/ee4e56862ea3648a9525fa61e5b031cbb5da04b2df5a5e73fe893d89f06eea5b.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/ef329313c32f51df4b6c273af8278eb8cfb430421f6cb955fc5b8ecfd13e0f71.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/f031149926ed2690b5478f47a4415e8d45230d421daf8c68421648f6a9636799.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/f0cd505817ccc690074aea3960e24544c8215d3a569badd9c63c8f2211ea8a7d.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/f11ca441bbc2481beb9e32c7e76fcb48529c21ac4b7548c13d39833044015a07.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/f1402d20bb8e133e363c0b41aec32dcd20b260a4b0d7092135fb4e9824e1f129.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/f601169db79921773d3850045927c44fb4797916144b6bc0da7be40ba8ebea8f.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/f60605127e5afdf2ef0a693d10fa1ed2bcb7a6d79aaf2e4da109fa98177b1d02.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/f6b52e127fee57e6da255c209c65f79e734d2f0e0a357308027824f057bf86f4.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/f993b38e8a2498c39da03c662f418a723e2a580a68c32265069f0af82a7dcd74.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/fa39159883e85a1ca052cd11c964462ddea38c82e2aef09f2d8138cc38569f0c.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/fb6fc9e99b5ad67cdefe3bf4f7db20e5c60b2c09099a47ed8a7a96c1b2f1e6d1.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/fc9309df4fb3cd669d6804413a9a0bd4839a3b367be302711f9bb34959e794b1.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/fcf44c6bb210ed03f8b3975bf9f1bc83d413796072161e7954b8d7e07778a103.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/fd2c25d6802cf9d878e6e37f7dfa4c46cf617ccbab47ead92d110c2b0d40ee59.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/fdb1803e629b1b6f52517cdd82e4711cd8d8df0fb2758130a9a3caf5e7ba5ef6.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/fddf86f16ab0e80ed1f9d067d2db7b05fa2327f71385f42ff339c1ac99c5bbd8.json create mode 100644 goldminer/frontend/node_modules/.cache/babel-loader/ff5135747916f1773dd0103872894b9f783a8d9c388ec8fdb9d39aeb6513062c.json diff --git a/goldminer/README.md b/goldminer/README.md index 6bd82d93..d31926ef 100644 --- a/goldminer/README.md +++ b/goldminer/README.md @@ -18,25 +18,34 @@ goldminer/ │ │ └── main.js # 入口文件 │ ├── package.json │ └── vue.config.js -├── run.py # 启动脚本 -└── run.bat # 一键启动批处理文件 +└── start.bat # 一键启动批处理文件 ``` ## 系统架构 下图展示了黄金矿工游戏的系统架构: -![系统架构图](https://mermaid.ink/img/eyJjb2RlIjoiZ3JhcGggVEQ7XG4gICAgQVtcIueUqOaIt+a1j-imvuWZqFwiXSAtLT58orWpl3wgQltcIlZ1ZSDliY3nq69cIl1cbiAgICBCIC0tPnxBUEkg6K-35rGCfCBDW1wiRmxhc2sg5ZCO56uvXCJdXG4gICAgQyAtLT586ZSZ5bqmfCBCXG4gICAgXG4gICAgc3ViZ3JhcGggXCLliY3nq68gbG9jYWxob3N0OjgwODBcIlxuICAgIEIgLS0-fOa4suafk3wgRFtcIkFwcC52dWVcIl1cbiAgICBEIC0tPnzljIXlkKt8IEVbXCJHYW1lLnZ1ZVwiXVxuICAgIEUgLS0-fOa4uOaIj-mAu-i-kXwgRltcIua4uOaIj-W-queOr1wiXVxuICAgIEYgLS0-fOabtOaWsHwgR1tcIkNhbnZhcyDmuLLmn5NcIl1cbiAgICBlbmRcbiAgICBcbiAgICBzdWJncmFwaCBcIuWQjuerryBsb2NhbGhvc3Q6NTAwMFwiXG4gICAgQyAtLT585bGP5oCn5paH5Lu26LWE5rqQfCBIW1wiaW5kZXguaHRtbFwiXVxuICAgIEMgLS0-fEFQSXwgSVtcIi9hcGkvaGVhbHRoXCJdXG4gICAgZW5kIiwibWVybWFpZCI6e30sInVwZGF0ZUVkaXRvciI6ZmFsc2UsImF1dG9TeW5jIjp0cnVlLCJ1cGRhdGVEaWFncmFtIjpmYWxzZX0) +![系统架构图](https://mermaid.ink/img/eyJjb2RlIjoiZ3JhcGggVEQ7XG4gICAgQVtcIueUqOaIt+a1j-imvuWZqFwiXSAtLT58orWpl3wgQltcIlZ1ZSDliY3nq69cIl1cbiAgICBCIC0tPnxBUEkg6K-35rGCfCBDW1wiRmxhc2sg5ZCO56uvXCJdXG4gICAgQyAtLT586ZSZ5bqmfCBCXG4gICAgXG4gICAgc3ViZ3JhcGggXCLliY3nq68gbG9jYWxob3N0OjgwODBcIlxuICAgIEIgLS0-fOa4suafk3wgRFtcIkFwcC52dWVcIl1cbiAgICBEIC0tPnzljIXlkKt8IEVbXCJHYW1lLnZ1ZVwiXVxuICAgIEUgLS0-fOa4uOaIj-mAu-i-kXwgRltcIua4uOaIj-W-queOr1wiXVxuICAgIEYgLS0-fOabtOaWsHwgR1tcIkNhbnZhcyDmuLLmn5NcIl1cbiAgICBlbmRcbiAgICBcbiAgICBzdWJncmFwaCBcIuWQjuerryBsb2NhbGhvc3Q6NTAwMFwiXG4gICAgQyAtLT585bGP5oCn5paH5Lu26LWE5rqQfCBIW1wiaW5kZXguaHRtbFwiXVxuICAgIEMgLS0-fEFQSXwgSVtcIi9hcGkvaGVhbHRoXCJdXG4gICAgQyAtLT586ZO+5o6lIENsb3VkfCBKW1wiTXlTUUwg5LqR5pWw5o2u5bqTXCJdXG4gICAgZW5kIiwibWVybWFpZCI6e30sInVwZGF0ZUVkaXRvciI6ZmFsc2UsImF1dG9TeW5jIjp0cnVlLCJ1cGRhdGVEaWFncmFtIjpmYWxzZX0) + +## 数据库配置 + +本项目使用云端MySQL数据库存储用户数据、游戏记录和聊天信息。 + +数据库配置信息: +- 数据库类型:MySQL 8.4.3 +- 服务提供商:SQLPub.com +- 数据库名称:goldminer +- 连接地址:mysql2.sqlpub.com:3307 ## 安装和运行 ### 快速启动(推荐) -直接双击 `run.bat` 文件即可一键启动游戏。 +直接双击 `start.bat` 文件即可一键启动游戏。 这个脚本会自动: 1. 检查并安装所需的后端依赖 -2. 检查并创建必要的配置文件 +2. 连接到云端数据库并创建必要的表(如果不存在) 3. 同时启动后端和前端服务器 4. 自动在浏览器中打开游戏 @@ -70,21 +79,12 @@ python app.py cd goldminer/frontend ``` -2. 创建Babel配置文件(如果不存在) -``` -echo module.exports = { > babel.config.js -echo presets: [ >> babel.config.js -echo '@vue/cli-plugin-babel/preset' >> babel.config.js -echo ] >> babel.config.js -echo } >> babel.config.js -``` - -3. 安装依赖 +2. 安装依赖 ``` npm install ``` -4. 开发模式运行 +3. 开发模式运行 ``` npm run serve ``` @@ -107,6 +107,7 @@ npm run serve ## 技术栈 -- 后端:Flask +- 后端:Flask, SQLAlchemy, PyMySQL - 前端:Vue 3 -- 通信:Axios \ No newline at end of file +- 数据库:MySQL 8.4.3 (云端) +- 通信:Axios, Socket.IO \ No newline at end of file diff --git a/goldminer/backend/app.py b/goldminer/backend/app.py index d526fdcb..d3cc5e95 100644 --- a/goldminer/backend/app.py +++ b/goldminer/backend/app.py @@ -6,16 +6,37 @@ from flask_socketio import SocketIO, emit, join_room, leave_room import os import uuid from datetime import datetime +from sqlalchemy.exc import OperationalError +import logging + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) app = Flask(__name__, static_folder='../frontend/dist') app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'dev_key_for_goldminer') -app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///goldminer.db' + +# 云端MySQL数据库配置 +DB_USER = os.environ.get('DB_USER', 'goldminer') +DB_PASSWORD = os.environ.get('DB_PASSWORD', 'nBAWq9DDwJ14Fugq') +DB_HOST = os.environ.get('DB_HOST', 'mysql2.sqlpub.com') +DB_PORT = os.environ.get('DB_PORT', '3307') +DB_NAME = os.environ.get('DB_NAME', 'goldminer') + +# 构建MySQL连接字符串,包含端口 +app.config['SQLALCHEMY_DATABASE_URI'] = f'mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False +app.config['SQLALCHEMY_ECHO'] = True # 开启SQL查询日志,方便调试 + +logger.info(f"连接到云端数据库: {DB_HOST}:{DB_PORT}/{DB_NAME}") CORS(app, supports_credentials=True, origins=['*']) # Enable CORS with credentials for all origins db = SQLAlchemy(app) socketio = SocketIO(app, cors_allowed_origins="*", engineio_logger=True) +# 跟踪所有活跃游戏会话 +active_games = {} # 用户ID -> 游戏状态 +sid_to_user = {} # Socket ID -> 用户ID映射 + # 用户模型 class User(db.Model): id = db.Column(db.Integer, primary_key=True) @@ -67,9 +88,24 @@ class ChatMessage(db.Model): room = db.relationship('ChatRoom', backref=db.backref('messages', lazy=True)) user = db.relationship('User', backref=db.backref('messages', lazy=True)) -# 创建数据库表 -with app.app_context(): - db.create_all() +# 检查数据库连接并创建表 +def init_db(): + with app.app_context(): + try: + logger.info("正在连接到云端MySQL数据库...") + # 尝试创建表结构(如果不存在) + db.create_all() + logger.info("数据库连接成功,并且所有表都已创建(如果不存在)。") + except OperationalError as e: + logger.error("无法连接到云端MySQL数据库。请检查您的数据库配置和网络连接。") + logger.error(f"错误详情: {e}") + logger.error("请确保:") + logger.error(f"1. 能够访问数据库服务器 {DB_HOST}:{DB_PORT}") + logger.error(f"2. 数据库 '{DB_NAME}' 存在且用户 '{DB_USER}' 有权限访问。") + logger.error(f"3. 提供的密码是正确的。") + # 这里不会阻止应用启动,但会记录错误 + except Exception as e: + logger.error(f"初始化数据库时发生未知错误: {e}") # 注册API @app.route('/api/register', methods=['POST']) @@ -173,6 +209,10 @@ def update_score(): if data['score'] > user.high_score: user.high_score = data['score'] db.session.commit() + + # 发送排行榜更新事件 + send_leaderboard_update() + return jsonify({'message': '高分已更新', 'high_score': user.high_score}) return jsonify({'message': '分数未超过历史最高分', 'high_score': user.high_score}) @@ -352,11 +392,37 @@ def handle_connect(): user_id = session.get('user_id') if not user_id: return False # 拒绝未登录用户的连接 - print(f'Client connected: {request.sid}') + + # 记录用户的Socket ID + sid_to_user[request.sid] = user_id + print(f'Client connected: {request.sid}, User ID: {user_id}') + + # 发送当前的排行榜和活跃游戏状态 + send_leaderboard_update() + send_active_games_update() @socketio.on('disconnect') def handle_disconnect(): - print(f'Client disconnected: {request.sid}') + # 获取断开连接的用户ID + user_id = sid_to_user.get(request.sid) + print(f'Client disconnected: {request.sid}, User ID: {user_id}') + + # 从映射表中删除 + if request.sid in sid_to_user: + user_id = sid_to_user.pop(request.sid) + + # 如果该用户没有其他活跃连接,从游戏状态中移除 + if user_id in active_games: + user_still_active = False + for sid, uid in sid_to_user.items(): + if uid == user_id: + user_still_active = True + break + + if not user_still_active: + active_games.pop(user_id, None) + # 广播活跃游戏状态更新 + send_active_games_update() @socketio.on('join_room') def handle_join_room(data): @@ -448,5 +514,67 @@ def handle_send_message(data): 'created_at': message.created_at.isoformat() }, room=str(room_id)) +# 更新游戏状态处理 +@socketio.on('update_game_status') +def handle_game_status(data): + user_id = session.get('user_id') + if not user_id: + return + + # 获取用户信息 + user = User.query.get(user_id) + if not user: + return + + # 更新活跃游戏状态 + score = data.get('score', 0) + level = data.get('level', 1) + status = data.get('status', 'playing') + + active_games[user_id] = { + 'username': user.username, + 'score': score, + 'level': level, + 'status': status, + 'updated_at': datetime.utcnow().isoformat() + } + + # 广播活跃游戏状态更新 + send_active_games_update() + +# 高分更新处理 +@socketio.on('highscore_updated') +def handle_highscore_updated(data): + user_id = session.get('user_id') + if not user_id: + return + + # 广播排行榜更新 + send_leaderboard_update() + +# 发送排行榜更新 +def send_leaderboard_update(): + # 获取前10名高分用户 + top_users = User.query.order_by(User.high_score.desc()).limit(10).all() + + leaderboard = [] + for user in top_users: + leaderboard.append({ + 'id': user.id, + 'username': user.username, + 'high_score': user.high_score + }) + + # 广播给所有连接的客户端 + socketio.emit('leaderboard_update', {'leaderboard': leaderboard}) + +# 发送活跃游戏状态更新 +def send_active_games_update(): + # 广播活跃游戏状态 + socketio.emit('active_games_update', {'active_games': active_games}) + if __name__ == '__main__': - socketio.run(app, debug=True, host='0.0.0.0') \ No newline at end of file + # 在启动应用前初始化数据库 + init_db() + # 使用 eventlet 或 gevent 来获得更好的性能 + socketio.run(app, debug=True, host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/goldminer/backend/goldminer.db b/goldminer/backend/goldminer.db deleted file mode 100644 index bbdc98603f8c727b0d34805b9ee11ba7258701b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 zcmeI(y>Ht_6aa8iwq;AL!vcZf6dA(7b|kcBd3XGhx|Ff$M2IaXwA{u^i4%F0RLf#2 z(s7DTPKqKOG6Y>ZX6aC%K-PBf-_SMPlXS{hpkt4+(@M5v7wD1%?;uJ?-UlCld@^vd zv~hE_l`uJsx;r$HiSV8vioz$dEC|8{zGeCLs!Z|9_^TcMD)!Y!RWAt2x5a7cFJa=H z&xLbOrQfC>z56|{LID8~009sH0T2KI5CDNURNx+-n4F!T7r(ij(0ZHsO`3Q+ERJb| z`KPt@^~)}~j$L!)ntf%}k^5(m3;A3tkSo=ibJcO>>UvGCZmzC=DCcwCDBAHxwC%>M zJF4v{Ho4~9;*<4F=yw@SSm5z>z%q}fR#|h>^W1PNYqq;3Uw5|TLMtey$5z%|r*gHL z9xEKhQIuV0#c`eLlCyDm32DR75l7Jtj7X35I_Hb~Uyo1DUb-aScm4%U=jyqnm5GyF zhvyn;)uB5~{?vAtuGww@scP}$g-0X7M!2+MkNQdL4wJ8}udh0G^}k^C=IWhl)Yacx z9y?5@>%FUQ@W{PpD^8;BSN-+z0fYXQQ&Q%%w21wv%Z4Ueo84h;k0*!UWW!T2*zMA! z6?KLVZ$$0DW3<~DF?a;;S!s7x5+&l~?97aK|Bx~5oo<-{w)DsuTmzY79ZQ_sG>-S8 zZs0X(-25lM@X-7^`NnF~IPuz1qtzLBzcpKprZ;dmMkUr}wQ_UQkqhZ%q;VGW#mkxO z?8h^r(CP&2Zv17NukAg$n?${RFYV}|^m&Z`u}#6j89 zt5{!DjYVY2DlQY1pGZ-WscY(B3lD){#l*xaY5PTSO1RjIbB}f!U+i{<#=5>`EiGS5 zD)k24a+VRE(=o=>3hS6)9w{{v=TwWv#FAtwT`SoN!Q_(e3BWPj#sNcck=RY1C>qp8& zS2X^+du)6(miGI=e(~VZi|-!3_~FU3gU5e7I5x3XDifk$-86}|nBfD&c{`Ji7~Y+r bGQtYNs;-j-zWndSJ0uR?PbCUM80+fao6;Ue diff --git a/goldminer/backend/instance/goldminer.db b/goldminer/backend/instance/goldminer.db deleted file mode 100644 index 1f81f12e30898ec0b6e6a3a79612ccd762dd100c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 zcmeI)L2uhO6aZk!PLn2E;sHUC%YX_)iYCBfkd#P@-eqp8c4-r5b)2HTOrS_A*5JgM ztu#w_O1l9Ab}D+=dBD!Q?q3YM?XYVL?6})@8onR~wTj^nz{ho0v+&Wzp0?RJvJY^K;wl6#UlXFuaqAAB=i`NO&J)+f%) zFO{FBpS=ClW+8z92!H?xfB*=900@A<8z}IIT$q@f1fYA%zGQEi#W+os=_TLby= zv*YXyoCNu4=G+NQksOdGeuZpS0a_WGtbs_ez} zy;gM3p6t{KRnN%W=-93UuG`+UR@S28Iv+Pz*6Pjs-tFkVw~*<@;@FM#X0&p%Q5;)% z(T_#18QqAQQDZsUI37Y#aAu1ay&Gsz96PE!wRrf&*u>oB%kJaoAGG3JM=nL?!Z6qI zwMJU)$Zg}@tv8oHsy7!fLW{!#?~Vi;;ga=Zsq*ZB@vg0}uSWI8zri{>*U_a$jsDT~ z@^Q%AJ{tX&?RnhJ`gyl^a5_IWU~szRoRB#$Ec&Y3GiL@`$2>5d*anAco3lev@AYJ! zb$8BezSZsM*vQ__h{hv$Uln$*3ZmSdn7eezeSFMV)GoHt09$e76=);GC0J7>i}s^LZ2v15KURi zF=HX)p^;n*?(0NwBZ>V90u^e;xa5WyBofVh&NUUbuI7|5B_-!RL4+l!39%jaG4cf#S|AkQR3pKeHjL@O7~3{cfk^@*q~J0jX&MMYRH8$J zloTorxKRnUG9sYH4${`3zVPwOWAtl;RxK49DhX=@S3^!Ip@-5v8DnQ_cpmwUJiCRL zv%3dts=53yn-5q@nVm|ml}#*=I`owa5{enMv%ykgn6?8A?er3g5`}CBk)0ho|2Sn_ z1-33lJTV#>s!-x{Y-dMO#lr*>nJ_A`uazWvH8cr}BH{PrHKz0w4eaAOHd&00JNY0w4eaAOHd&@Hz`jlxJOg zH>zCh?H!xaczJfx-qk4n{%=3@4+#W700ck)1V8`;KmY_l00ck)1VG>o7AV&LZsk|U z{z3u)5C8!X009sH0T2KI5C8!X009tq4F%qF$DN8>pOmFj-wY_e;UQ{>6`%j7j2G+w zQsq0R^0R$_1Ogxc0w4eaAOHd&00JNY0w4eaAn-p4ES1KcN%u;<{QT=D&%gcQ*^gg6 gd;0y*f}R9bPAFq!$u9bf>ZNn5+y4x}IipPc1sSnNF#rGn diff --git a/goldminer/backend/requirements.txt b/goldminer/backend/requirements.txt index 260633af..5eadc6a9 100644 --- a/goldminer/backend/requirements.txt +++ b/goldminer/backend/requirements.txt @@ -3,4 +3,5 @@ flask-cors flask-sqlalchemy flask-socketio werkzeug -sqlalchemy<2.0.0 \ No newline at end of file +sqlalchemy<2.0.0 +pymysql \ No newline at end of file diff --git a/goldminer/backend/run_server.py b/goldminer/backend/run_server.py index 3d8087d3..90afc7c4 100644 --- a/goldminer/backend/run_server.py +++ b/goldminer/backend/run_server.py @@ -1,6 +1,9 @@ -from app import socketio, app +from app import socketio, app, init_db, DB_HOST, DB_PORT, DB_NAME if __name__ == '__main__': + # 在启动应用前初始化云端数据库 + print(f"连接到云端数据库: {DB_HOST}:{DB_PORT}/{DB_NAME}") + init_db() print("启动后端服务器...") print("监听所有网络接口 (0.0.0.0:5000)") - socketio.run(app, host='0.0.0.0', port=5000, debug=True) \ No newline at end of file + socketio.run(app, debug=True, host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/0096e99a95b36a4fa355e983e7dfd17828cdabe77f389e1a117abb9d28213e38.json b/goldminer/frontend/node_modules/.cache/babel-loader/0096e99a95b36a4fa355e983e7dfd17828cdabe77f389e1a117abb9d28213e38.json new file mode 100644 index 00000000..258f4934 --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/0096e99a95b36a4fa355e983e7dfd17828cdabe77f389e1a117abb9d28213e38.json @@ -0,0 +1 @@ +{"ast":null,"code":"export {};","map":{"version":3,"names":[],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/node_modules/@vue/devtools-api/lib/esm/api/context.js"],"sourcesContent":["export {};\r\n"],"mappings":"AAAA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/0129600a156507d3b182db73560500218c0fd5914925b637ad652e30756d0bad.json b/goldminer/frontend/node_modules/.cache/babel-loader/0129600a156507d3b182db73560500218c0fd5914925b637ad652e30756d0bad.json new file mode 100644 index 00000000..efccda2b --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/0129600a156507d3b182db73560500218c0fd5914925b637ad652e30756d0bad.json @@ -0,0 +1 @@ +{"ast":null,"code":"'use strict';\n\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n *\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}","map":{"version":3,"names":["isAbsoluteURL","url","test"],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/node_modules/axios/lib/helpers/isAbsoluteURL.js"],"sourcesContent":["'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n *\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nexport default function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\r\n}\r\n"],"mappings":"AAAA,YAAY;;AAEZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASA,aAAaA,CAACC,GAAG,EAAE;EACzC;EACA;EACA;EACA,OAAO,6BAA6B,CAACC,IAAI,CAACD,GAAG,CAAC;AAChD","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/01de799bddae0c5cbdc51999dc500ec293edf069426fccff4d7d1cb80e7afabf.json b/goldminer/frontend/node_modules/.cache/babel-loader/01de799bddae0c5cbdc51999dc500ec293edf069426fccff4d7d1cb80e7afabf.json new file mode 100644 index 00000000..c91ef35a --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/01de799bddae0c5cbdc51999dc500ec293edf069426fccff4d7d1cb80e7afabf.json @@ -0,0 +1 @@ +{"ast":null,"code":"'use strict';\n\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @param {?Object} response The response object\r\n *\r\n * @returns {*} The resulting transformed data\r\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n headers.normalize();\n return data;\n}","map":{"version":3,"names":["utils","defaults","AxiosHeaders","transformData","fns","response","config","context","headers","from","data","forEach","transform","fn","call","normalize","status","undefined"],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/node_modules/axios/lib/core/transformData.js"],"sourcesContent":["'use strict';\r\n\r\nimport utils from './../utils.js';\r\nimport defaults from '../defaults/index.js';\r\nimport AxiosHeaders from '../core/AxiosHeaders.js';\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @param {?Object} response The response object\r\n *\r\n * @returns {*} The resulting transformed data\r\n */\r\nexport default function transformData(fns, response) {\r\n const config = this || defaults;\r\n const context = response || config;\r\n const headers = AxiosHeaders.from(context.headers);\r\n let data = context.data;\r\n\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\r\n });\r\n\r\n headers.normalize();\r\n\r\n return data;\r\n}\r\n"],"mappings":"AAAA,YAAY;;AAAC;AAAA;AAEb,OAAOA,KAAK,MAAM,eAAe;AACjC,OAAOC,QAAQ,MAAM,sBAAsB;AAC3C,OAAOC,YAAY,MAAM,yBAAyB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,aAAaA,CAACC,GAAG,EAAEC,QAAQ,EAAE;EACnD,MAAMC,MAAM,GAAG,IAAI,IAAIL,QAAQ;EAC/B,MAAMM,OAAO,GAAGF,QAAQ,IAAIC,MAAM;EAClC,MAAME,OAAO,GAAGN,YAAY,CAACO,IAAI,CAACF,OAAO,CAACC,OAAO,CAAC;EAClD,IAAIE,IAAI,GAAGH,OAAO,CAACG,IAAI;EAEvBV,KAAK,CAACW,OAAO,CAACP,GAAG,EAAE,SAASQ,SAASA,CAACC,EAAE,EAAE;IACxCH,IAAI,GAAGG,EAAE,CAACC,IAAI,CAACR,MAAM,EAAEI,IAAI,EAAEF,OAAO,CAACO,SAAS,CAAC,CAAC,EAAEV,QAAQ,GAAGA,QAAQ,CAACW,MAAM,GAAGC,SAAS,CAAC;EAC3F,CAAC,CAAC;EAEFT,OAAO,CAACO,SAAS,CAAC,CAAC;EAEnB,OAAOL,IAAI;AACb","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/02b1ac2b69382a03cc02c6638a61750a0af1aff3f6efd4909591c1a7dbf15ef7.json b/goldminer/frontend/node_modules/.cache/babel-loader/02b1ac2b69382a03cc02c6638a61750a0af1aff3f6efd4909591c1a7dbf15ef7.json new file mode 100644 index 00000000..9ab7374e --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/02b1ac2b69382a03cc02c6638a61750a0af1aff3f6efd4909591c1a7dbf15ef7.json @@ -0,0 +1 @@ +{"ast":null,"code":"'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\r\n * Creates a new URL by combining the baseURL with the requestedURL,\r\n * only when the requestedURL is not already an absolute URL.\r\n * If the requestURL is absolute, this function returns the requestedURL untouched.\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} requestedURL Absolute or relative URL to combine\r\n *\r\n * @returns {string} The combined full path\r\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}","map":{"version":3,"names":["isAbsoluteURL","combineURLs","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl"],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/node_modules/axios/lib/core/buildFullPath.js"],"sourcesContent":["'use strict';\r\n\r\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\r\nimport combineURLs from '../helpers/combineURLs.js';\r\n\r\n/**\r\n * Creates a new URL by combining the baseURL with the requestedURL,\r\n * only when the requestedURL is not already an absolute URL.\r\n * If the requestURL is absolute, this function returns the requestedURL untouched.\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} requestedURL Absolute or relative URL to combine\r\n *\r\n * @returns {string} The combined full path\r\n */\r\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\r\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\r\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\r\n return combineURLs(baseURL, requestedURL);\r\n }\r\n return requestedURL;\r\n}\r\n"],"mappings":"AAAA,YAAY;;AAEZ,OAAOA,aAAa,MAAM,6BAA6B;AACvD,OAAOC,WAAW,MAAM,2BAA2B;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,aAAaA,CAACC,OAAO,EAAEC,YAAY,EAAEC,iBAAiB,EAAE;EAC9E,IAAIC,aAAa,GAAG,CAACN,aAAa,CAACI,YAAY,CAAC;EAChD,IAAID,OAAO,KAAKG,aAAa,IAAID,iBAAiB,IAAI,KAAK,CAAC,EAAE;IAC5D,OAAOJ,WAAW,CAACE,OAAO,EAAEC,YAAY,CAAC;EAC3C;EACA,OAAOA,YAAY;AACrB","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/033ab71179be3b556ad2fa87fb4e7f70cf48b008c1b7713c387302e26d96514c.json b/goldminer/frontend/node_modules/.cache/babel-loader/033ab71179be3b556ad2fa87fb4e7f70cf48b008c1b7713c387302e26d96514c.json new file mode 100644 index 00000000..1e16f5f8 --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/033ab71179be3b556ad2fa87fb4e7f70cf48b008c1b7713c387302e26d96514c.json @@ -0,0 +1 @@ +{"ast":null,"code":"import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nexport const decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1 ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n } : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n } else {\n return {\n base64: true,\n data\n }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n } else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n } else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};","map":{"version":3,"names":["ERROR_PACKET","PACKET_TYPES_REVERSE","decode","withNativeArrayBuffer","ArrayBuffer","decodePacket","encodedPacket","binaryType","type","data","mapBinary","charAt","decodeBase64Packet","substring","packetType","length","decoded","base64","Blob","buffer"],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/node_modules/engine.io-parser/build/esm/decodePacket.browser.js"],"sourcesContent":["import { ERROR_PACKET, PACKET_TYPES_REVERSE, } from \"./commons.js\";\r\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\r\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\r\nexport const decodePacket = (encodedPacket, binaryType) => {\r\n if (typeof encodedPacket !== \"string\") {\r\n return {\r\n type: \"message\",\r\n data: mapBinary(encodedPacket, binaryType),\r\n };\r\n }\r\n const type = encodedPacket.charAt(0);\r\n if (type === \"b\") {\r\n return {\r\n type: \"message\",\r\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType),\r\n };\r\n }\r\n const packetType = PACKET_TYPES_REVERSE[type];\r\n if (!packetType) {\r\n return ERROR_PACKET;\r\n }\r\n return encodedPacket.length > 1\r\n ? {\r\n type: PACKET_TYPES_REVERSE[type],\r\n data: encodedPacket.substring(1),\r\n }\r\n : {\r\n type: PACKET_TYPES_REVERSE[type],\r\n };\r\n};\r\nconst decodeBase64Packet = (data, binaryType) => {\r\n if (withNativeArrayBuffer) {\r\n const decoded = decode(data);\r\n return mapBinary(decoded, binaryType);\r\n }\r\n else {\r\n return { base64: true, data }; // fallback for old browsers\r\n }\r\n};\r\nconst mapBinary = (data, binaryType) => {\r\n switch (binaryType) {\r\n case \"blob\":\r\n if (data instanceof Blob) {\r\n // from WebSocket + binaryType \"blob\"\r\n return data;\r\n }\r\n else {\r\n // from HTTP long-polling or WebTransport\r\n return new Blob([data]);\r\n }\r\n case \"arraybuffer\":\r\n default:\r\n if (data instanceof ArrayBuffer) {\r\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\r\n return data;\r\n }\r\n else {\r\n // from WebTransport (Uint8Array)\r\n return data.buffer;\r\n }\r\n }\r\n};\r\n"],"mappings":"AAAA,SAASA,YAAY,EAAEC,oBAAoB,QAAS,cAAc;AAClE,SAASC,MAAM,QAAQ,iCAAiC;AACxD,MAAMC,qBAAqB,GAAG,OAAOC,WAAW,KAAK,UAAU;AAC/D,OAAO,MAAMC,YAAY,GAAGA,CAACC,aAAa,EAAEC,UAAU,KAAK;EACvD,IAAI,OAAOD,aAAa,KAAK,QAAQ,EAAE;IACnC,OAAO;MACHE,IAAI,EAAE,SAAS;MACfC,IAAI,EAAEC,SAAS,CAACJ,aAAa,EAAEC,UAAU;IAC7C,CAAC;EACL;EACA,MAAMC,IAAI,GAAGF,aAAa,CAACK,MAAM,CAAC,CAAC,CAAC;EACpC,IAAIH,IAAI,KAAK,GAAG,EAAE;IACd,OAAO;MACHA,IAAI,EAAE,SAAS;MACfC,IAAI,EAAEG,kBAAkB,CAACN,aAAa,CAACO,SAAS,CAAC,CAAC,CAAC,EAAEN,UAAU;IACnE,CAAC;EACL;EACA,MAAMO,UAAU,GAAGb,oBAAoB,CAACO,IAAI,CAAC;EAC7C,IAAI,CAACM,UAAU,EAAE;IACb,OAAOd,YAAY;EACvB;EACA,OAAOM,aAAa,CAACS,MAAM,GAAG,CAAC,GACzB;IACEP,IAAI,EAAEP,oBAAoB,CAACO,IAAI,CAAC;IAChCC,IAAI,EAAEH,aAAa,CAACO,SAAS,CAAC,CAAC;EACnC,CAAC,GACC;IACEL,IAAI,EAAEP,oBAAoB,CAACO,IAAI;EACnC,CAAC;AACT,CAAC;AACD,MAAMI,kBAAkB,GAAGA,CAACH,IAAI,EAAEF,UAAU,KAAK;EAC7C,IAAIJ,qBAAqB,EAAE;IACvB,MAAMa,OAAO,GAAGd,MAAM,CAACO,IAAI,CAAC;IAC5B,OAAOC,SAAS,CAACM,OAAO,EAAET,UAAU,CAAC;EACzC,CAAC,MACI;IACD,OAAO;MAAEU,MAAM,EAAE,IAAI;MAAER;IAAK,CAAC,CAAC,CAAC;EACnC;AACJ,CAAC;AACD,MAAMC,SAAS,GAAGA,CAACD,IAAI,EAAEF,UAAU,KAAK;EACpC,QAAQA,UAAU;IACd,KAAK,MAAM;MACP,IAAIE,IAAI,YAAYS,IAAI,EAAE;QACtB;QACA,OAAOT,IAAI;MACf,CAAC,MACI;QACD;QACA,OAAO,IAAIS,IAAI,CAAC,CAACT,IAAI,CAAC,CAAC;MAC3B;IACJ,KAAK,aAAa;IAClB;MACI,IAAIA,IAAI,YAAYL,WAAW,EAAE;QAC7B;QACA,OAAOK,IAAI;MACf,CAAC,MACI;QACD;QACA,OAAOA,IAAI,CAACU,MAAM;MACtB;EACR;AACJ,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/06035bc6f22c3ebaa088a081ec0942ecf602d67cc6b9f85959b53371988acb9d.json b/goldminer/frontend/node_modules/.cache/babel-loader/06035bc6f22c3ebaa088a081ec0942ecf602d67cc6b9f85959b53371988acb9d.json new file mode 100644 index 00000000..d60f770b --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/06035bc6f22c3ebaa088a081ec0942ecf602d67cc6b9f85959b53371988acb9d.json @@ -0,0 +1 @@ +{"ast":null,"code":"import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport { ref, onMounted, onUnmounted } from 'vue';\nimport { useRouter } from 'vue-router';\nimport axios from 'axios';\nimport { io } from 'socket.io-client';\nexport default {\n name: 'GameComponent',\n setup() {\n const router = useRouter();\n const gameCanvas = ref(null);\n const gameOver = ref(false);\n const gameDuration = ref(0); // 游戏时长(秒)\n const goldEarned = ref(0); // 获得的金币\n const timeLeft = ref(60); // 关卡剩余时间\n const levelTarget = ref(0); // 当前关卡目标分数\n const isPaused = ref(false); // 游戏暂停状态\n const leaderboard = ref([]); // 排行榜数据\n const activeGames = ref({}); // 活跃游戏状态\n let socket = null; // Socket.IO连接\n\n // 游戏状态\n const gameState = ref({\n score: 0,\n level: 1,\n objects: [],\n rope: {\n x: 400,\n y: 50,\n angle: Math.PI / 2,\n length: 0,\n isExtending: false,\n isRetracting: false,\n speed: 5,\n // 绳子伸缩速度\n swingSpeed: 0.02,\n // 绳子摆动速度\n swingDirection: 1,\n // 摆动方向: 1 向右, -1 向左\n maxLength: 500,\n // 绳子最大长度\n minAngle: 0.1,\n // 最小角度\n maxAngle: Math.PI - 0.1 // 最大角度\n },\n powerups: {\n speedBoost: false,\n speedBoostDuration: 0,\n magneticHook: false,\n magneticHookDuration: 0\n }\n });\n let ctx = null;\n let gameLoopId = null;\n let gameStartTime = null;\n let levelStartTime = null;\n let lastUpdateTime = null;\n\n // 对象类型及其属性\n const objectTypes = {\n gold_small: {\n width: 20,\n height: 20,\n value: 50,\n pullSpeed: 3\n },\n gold_medium: {\n width: 40,\n height: 40,\n value: 100,\n pullSpeed: 2\n },\n gold_large: {\n width: 60,\n height: 60,\n value: 250,\n pullSpeed: 1\n },\n diamond: {\n width: 30,\n height: 30,\n value: 600,\n pullSpeed: 2.5\n },\n rock: {\n width: 45,\n height: 45,\n value: 20,\n pullSpeed: 0.8\n },\n speed_boost: {\n width: 30,\n height: 30,\n value: 0,\n pullSpeed: 4,\n isPowerup: true\n },\n magnetic_hook: {\n width: 30,\n height: 30,\n value: 0,\n pullSpeed: 4,\n isPowerup: true\n }\n };\n\n // 生成单个随机对象\n const generateRandomObject = (idOffset, level) => {\n // 随机选择对象类型\n const typeIndex = Math.random();\n let type;\n\n // 根据关卡增加更多贵重物品的几率\n const diamondChance = Math.min(0.1 + level * 0.01, 0.2); // 随关卡增加,最多20%\n const largGoldChance = Math.min(0.2 + level * 0.01, 0.3); // 随关卡增加,最多30%\n const powerupChance = Math.min(0.05 + level * 0.005, 0.15); // 随关卡增加,最多15%\n\n if (typeIndex < powerupChance) {\n // 生成道具\n type = Math.random() < 0.5 ? 'speed_boost' : 'magnetic_hook';\n } else if (typeIndex < powerupChance + diamondChance) {\n type = 'diamond';\n } else if (typeIndex < powerupChance + diamondChance + largGoldChance) {\n type = 'gold_large';\n } else if (typeIndex < powerupChance + diamondChance + largGoldChance + 0.2) {\n type = 'gold_medium';\n } else if (typeIndex < powerupChance + diamondChance + largGoldChance + 0.5) {\n type = 'gold_small';\n } else {\n type = 'rock';\n }\n const typeProps = objectTypes[type];\n\n // 随机位置,避免重叠\n let x, y;\n let validPosition = false;\n let attempts = 0;\n while (!validPosition && attempts < 100) {\n x = 50 + Math.random() * 700; // 留出边缘空间\n y = 150 + Math.random() * 350; // 不要太靠近顶部\n\n // 检查是否与现有对象重叠\n validPosition = true;\n for (const obj of gameState.value.objects) {\n const distance = Math.sqrt(Math.pow(x - obj.x, 2) + Math.pow(y - obj.y, 2));\n const minDistance = (typeProps.width + obj.width) / 2 + 30; // 增加间距,确保物体不会太靠近\n\n if (distance < minDistance) {\n validPosition = false;\n break;\n }\n }\n attempts++;\n }\n if (validPosition) {\n return {\n id: idOffset,\n type: type,\n x: x,\n y: y,\n width: typeProps.width,\n height: typeProps.height,\n value: typeProps.value,\n pullSpeed: typeProps.pullSpeed,\n isPowerup: typeProps.isPowerup || false,\n taken: false\n };\n }\n return null;\n };\n\n // 计算关卡目标分数\n const calculateLevelTarget = level => {\n return 500 * level; // 简单线性增长的目标分数\n };\n\n // 初始化游戏\n const initGame = () => {\n gameState.value.score = 0;\n gameState.value.level = 1;\n gameState.value.objects = [];\n\n // 生成初始物件\n const objectCount = 5 + gameState.value.level * 2;\n for (let i = 0; i < objectCount; i++) {\n const newObject = generateRandomObject(i, gameState.value.level);\n if (newObject) {\n gameState.value.objects.push(newObject);\n }\n }\n gameState.value.rope = {\n x: 400,\n y: 50,\n angle: Math.PI / 2,\n length: 0,\n isExtending: false,\n isRetracting: false,\n speed: 5,\n swingSpeed: 0.02,\n swingDirection: 1,\n maxLength: 500,\n minAngle: 0.1,\n maxAngle: Math.PI - 0.1\n };\n gameState.value.powerups = {\n speedBoost: false,\n speedBoostDuration: 0,\n magneticHook: false,\n magneticHookDuration: 0\n };\n levelTarget.value = calculateLevelTarget(1);\n timeLeft.value = 60;\n gameOver.value = false;\n gameDuration.value = 0;\n goldEarned.value = 0;\n gameStartTime = Date.now();\n levelStartTime = Date.now();\n lastUpdateTime = Date.now();\n\n // 启动游戏循环\n if (gameLoopId) clearInterval(gameLoopId);\n gameLoopId = setInterval(gameLoop, 1000 / 60); // 约60帧每秒\n\n // 发送游戏状态更新\n updateGameStatus('playing');\n };\n\n // 更新游戏状态并发送到服务器\n const updateGameStatus = status => {\n if (socket) {\n socket.emit('update_game_status', {\n score: gameState.value.score,\n level: gameState.value.level,\n status: status // playing, paused, ended\n });\n }\n };\n\n // 获取状态文本\n const getStatusText = status => {\n switch (status) {\n case 'playing':\n return '游戏中';\n case 'paused':\n return '已暂停';\n case 'ended':\n return '已结束';\n default:\n return '未知';\n }\n };\n\n // 初始化Socket.IO连接\n const initSocketConnection = () => {\n // 服务器URL应该与当前站点相同(相对URL),以避免跨域问题\n socket = io({\n withCredentials: true,\n // 允许发送cookie等凭证\n transports: ['websocket', 'polling'],\n // 首选WebSocket,也支持轮询\n forceNew: false,\n // 如果已经存在连接,尝试复用\n reconnection: true,\n // 自动重连\n reconnectionAttempts: 5,\n // 最多重试5次\n reconnectionDelay: 1000 // 重连间隔1秒\n });\n\n // 连接成功事件\n socket.on('connect', () => {\n console.log('Socket.IO连接成功');\n\n // 连接成功后立即更新状态\n updateGameStatus('playing');\n });\n\n // 监听排行榜更新\n socket.on('leaderboard_update', data => {\n console.log('收到排行榜更新:', data);\n leaderboard.value = data.leaderboard || [];\n });\n\n // 监听活跃游戏状态更新\n socket.on('active_games_update', data => {\n console.log('收到活跃游戏更新:', data);\n activeGames.value = data.active_games || {};\n\n // 从活跃游戏列表中移除自己\n const userJson = localStorage.getItem('user');\n if (userJson) {\n const currentUser = JSON.parse(userJson);\n if (currentUser && currentUser.id && activeGames.value[currentUser.id]) {\n delete activeGames.value[currentUser.id];\n }\n }\n });\n\n // 监听错误和断连\n socket.on('error', error => {\n console.error('Socket.IO连接错误:', error);\n });\n socket.on('disconnect', reason => {\n console.log('Socket.IO连接断开:', reason);\n });\n };\n\n // 游戏主循环\n const gameLoop = () => {\n updateGame();\n draw();\n\n // 如果游戏暂停,不更新时间\n if (isPaused.value) return;\n\n // 更新游戏时长\n gameDuration.value = Math.floor((Date.now() - gameStartTime) / 1000);\n\n // 更新关卡剩余时间\n const elapsed = Math.floor((Date.now() - levelStartTime) / 1000);\n timeLeft.value = Math.max(0, 60 - elapsed);\n\n // 检查关卡时间是否结束\n if (timeLeft.value <= 0) {\n if (gameState.value.score >= levelTarget.value) {\n nextLevel();\n } else {\n endGame();\n }\n }\n };\n\n // 更新游戏状态\n const updateGame = () => {\n if (isPaused.value) return;\n const now = Date.now();\n const deltaTime = (now - (lastUpdateTime || now)) / 1000; // 转换为秒\n lastUpdateTime = now;\n const rope = gameState.value.rope;\n const powerups = gameState.value.powerups;\n\n // 更新道具持续时间\n if (powerups.speedBoost) {\n powerups.speedBoostDuration -= deltaTime;\n if (powerups.speedBoostDuration <= 0) {\n powerups.speedBoost = false;\n rope.speed = 5; // 恢复正常速度\n }\n }\n if (powerups.magneticHook) {\n powerups.magneticHookDuration -= deltaTime;\n if (powerups.magneticHookDuration <= 0) {\n powerups.magneticHook = false;\n }\n }\n\n // 绳子摆动\n if (!rope.isExtending && !rope.isRetracting) {\n rope.angle += rope.swingSpeed * rope.swingDirection;\n\n // 碰到边界时改变方向\n if (rope.angle <= rope.minAngle || rope.angle >= rope.maxAngle) {\n rope.swingDirection *= -1;\n }\n }\n\n // 绳子伸长\n if (rope.isExtending) {\n // 根据速度提升道具调整伸长速度\n const extendSpeed = powerups.speedBoost ? rope.speed * 1.5 : rope.speed;\n rope.length += extendSpeed;\n\n // 检查是否抓取到物体\n checkCollisions();\n\n // 绳子达到最大长度时开始收缩\n if (rope.length >= rope.maxLength) {\n rope.isExtending = false;\n rope.isRetracting = true;\n }\n }\n\n // 绳子收缩\n if (rope.isRetracting) {\n // 找到被抓取的物体\n const takenObject = gameState.value.objects.find(obj => obj.taken);\n\n // 收缩速度根据物体类型有所不同\n let retractionSpeed = rope.speed;\n if (takenObject) {\n retractionSpeed = powerups.speedBoost ? takenObject.pullSpeed * 1.5 : takenObject.pullSpeed;\n }\n rope.length -= retractionSpeed;\n\n // 绳子完全收缩后,检查得分并重置状态\n if (rope.length <= 0) {\n rope.length = 0;\n rope.isRetracting = false;\n\n // 如果有抓取的物体,增加分数\n if (takenObject) {\n // 处理不同类型的物体\n if (takenObject.isPowerup) {\n // 道具效果\n if (takenObject.type === 'speed_boost') {\n powerups.speedBoost = true;\n powerups.speedBoostDuration = 10; // 10秒加速效果\n } else if (takenObject.type === 'magnetic_hook') {\n powerups.magneticHook = true;\n powerups.magneticHookDuration = 15; // 15秒磁力钩效果\n }\n } else {\n // 普通物品得分\n gameState.value.score += takenObject.value;\n goldEarned.value += Math.floor(takenObject.value / 10); // 每10分对应1金币\n }\n\n // 移除被抓取的物体\n gameState.value.objects = gameState.value.objects.filter(obj => obj.id !== takenObject.id);\n\n // 在随机位置生成一个新物体\n const newObject = generateRandomObject(Date.now(), gameState.value.level);\n if (newObject) {\n gameState.value.objects.push(newObject);\n }\n }\n }\n }\n };\n\n // 检查绳子与物体的碰撞\n const checkCollisions = () => {\n const rope = gameState.value.rope;\n const powerups = gameState.value.powerups;\n const endX = rope.x + Math.cos(rope.angle) * rope.length;\n const endY = rope.y + Math.sin(rope.angle) * rope.length;\n for (const object of gameState.value.objects) {\n if (!object.taken) {\n // 简单的碰撞检测:计算绳子末端与物体中心的距离\n const distance = Math.sqrt(Math.pow(endX - object.x, 2) + Math.pow(endY - object.y, 2));\n\n // 磁力钩效果:增加抓取范围\n const grabRadius = powerups.magneticHook ? object.width * 0.75 : object.width / 2;\n\n // 如果距离小于物体半径,判定为抓取成功\n if (distance < grabRadius) {\n object.taken = true;\n rope.isExtending = false;\n rope.isRetracting = true;\n break;\n }\n }\n }\n };\n\n // 进入下一关\n const nextLevel = () => {\n gameState.value.level++;\n timeLeft.value = 60;\n levelStartTime = Date.now();\n levelTarget.value = calculateLevelTarget(gameState.value.level);\n\n // 重新生成所有物件\n gameState.value.objects = [];\n const objectCount = 5 + gameState.value.level * 2;\n for (let i = 0; i < objectCount; i++) {\n const newObject = generateRandomObject(i, gameState.value.level);\n if (newObject) {\n gameState.value.objects.push(newObject);\n }\n }\n\n // 增加难度\n gameState.value.rope.swingSpeed = Math.min(0.05, 0.02 + gameState.value.level * 0.005); // 随关卡增加摆动速度\n\n // 更新游戏状态\n updateGameStatus('playing');\n };\n\n // 结束游戏\n const endGame = () => {\n if (gameLoopId) clearInterval(gameLoopId);\n gameOver.value = true;\n gameDuration.value = Math.floor((Date.now() - gameStartTime) / 1000);\n\n // 计算获得的金币\n goldEarned.value = Math.floor(gameState.value.score / 10);\n\n // 提交分数到后端\n submitScore(gameState.value.score);\n\n // 保存游戏历史记录\n saveGameHistory();\n\n // 更新游戏状态\n updateGameStatus('ended');\n };\n\n // 提交分数到后端\n const submitScore = async score => {\n try {\n const response = await axios.post('/api/update_score', {\n score\n }, {\n withCredentials: true\n });\n console.log('分数提交成功:', response.data);\n\n // 更新localStorage中的用户信息\n const user = JSON.parse(localStorage.getItem('user'));\n if (user && response.data.high_score > user.high_score) {\n user.high_score = response.data.high_score;\n localStorage.setItem('user', JSON.stringify(user));\n\n // 如果创建了新的高分,发送到排行榜更新\n if (socket) {\n socket.emit('highscore_updated', {\n score: response.data.high_score\n });\n }\n }\n } catch (error) {\n console.error('分数提交失败:', error);\n }\n };\n\n // 保存游戏历史记录\n const saveGameHistory = async () => {\n try {\n const response = await axios.post('/api/save_game_history', {\n score: gameState.value.score,\n level: gameState.value.level,\n duration: gameDuration.value,\n goldEarned: goldEarned.value\n }, {\n withCredentials: true\n });\n console.log('游戏历史记录保存成功:', response.data);\n } catch (error) {\n console.error('游戏历史记录保存失败:', error);\n }\n };\n\n // 重新开始游戏\n const restartGame = () => {\n initGame();\n };\n\n // 暂停/继续游戏\n const togglePause = () => {\n isPaused.value = !isPaused.value;\n\n // 更新游戏状态\n updateGameStatus(isPaused.value ? 'paused' : 'playing');\n if (!isPaused.value) {\n // 继续游戏时,调整关卡开始时间,避免时间跳变\n const pauseDuration = Date.now() - lastUpdateTime;\n levelStartTime += pauseDuration;\n gameStartTime += pauseDuration;\n lastUpdateTime = Date.now();\n }\n };\n\n // 退出游戏\n const exitGame = () => {\n if (gameState.value.score > 0) {\n // 显示确认对话框\n if (confirm(`确定要退出游戏吗?当前得分: ${gameState.value.score}`)) {\n // 提交当前分数\n submitScore(gameState.value.score);\n\n // 保存游戏历史记录\n saveGameHistory();\n\n // 停止游戏循环\n if (gameLoopId) clearInterval(gameLoopId);\n\n // 更新游戏状态\n updateGameStatus('ended');\n\n // 返回到主菜单\n router.push('/highscores');\n }\n } else {\n // 如果没有得分,直接返回\n updateGameStatus('ended');\n router.push('/highscores');\n }\n };\n\n // 前往排行榜\n const goToLeaderboard = () => {\n router.push('/highscores');\n };\n\n // 绘制游戏\n const draw = () => {\n if (!ctx) return;\n\n // 清空画布\n ctx.clearRect(0, 0, 800, 600);\n\n // 绘制背景\n ctx.fillStyle = '#87CEEB';\n ctx.fillRect(0, 0, 800, 600);\n\n // 绘制地面\n ctx.fillStyle = '#8B4513';\n ctx.fillRect(0, 500, 800, 100);\n\n // 绘制矿工\n ctx.fillStyle = '#000';\n ctx.fillRect(gameState.value.rope.x - 15, 15, 30, 30);\n\n // 绘制绳子\n const rope = gameState.value.rope;\n ctx.beginPath();\n ctx.moveTo(rope.x, rope.y);\n const endX = rope.x + Math.cos(rope.angle) * rope.length;\n const endY = rope.y + Math.sin(rope.angle) * rope.length;\n ctx.lineTo(endX, endY);\n ctx.strokeStyle = '#000';\n ctx.lineWidth = 2;\n ctx.stroke();\n\n // 绘制绳索头部(钩子)\n const takenObject = gameState.value.objects.find(obj => obj.taken);\n if (!takenObject) {\n // 如果没有抓取物体,绘制钩子\n ctx.beginPath();\n ctx.arc(endX, endY, 5, 0, Math.PI * 2); // 绘制圆形钩子头部\n ctx.fillStyle = gameState.value.powerups.magneticHook ? '#4169E1' : '#444';\n ctx.fill();\n\n // 绘制钩子的弯曲部分\n ctx.beginPath();\n const hookAngle = rope.angle + 2 * Math.PI; // 钩子朝下\n const hookSize = 8;\n const hookStartX = endX;\n const hookStartY = endY;\n const hookEndX = hookStartX + Math.cos(hookAngle) * hookSize;\n const hookEndY = hookStartY + Math.sin(hookAngle) * hookSize;\n\n // 绘制钩子的弧线\n ctx.moveTo(hookStartX, hookStartY);\n ctx.quadraticCurveTo(hookStartX + Math.cos(hookAngle - 0.5) * hookSize * 1.5, hookStartY + Math.sin(hookAngle - 0.5) * hookSize * 1.5, hookEndX, hookEndY);\n ctx.lineWidth = 3;\n ctx.strokeStyle = gameState.value.powerups.magneticHook ? '#4169E1' : '#444';\n ctx.stroke();\n\n // 如果有磁力钩效果,绘制磁场范围\n if (gameState.value.powerups.magneticHook) {\n ctx.beginPath();\n ctx.arc(endX, endY, 30, 0, Math.PI * 2);\n ctx.strokeStyle = 'rgba(65, 105, 225, 0.5)';\n ctx.stroke();\n }\n }\n\n // 绘制游戏对象\n gameState.value.objects.forEach(object => {\n if (!object.taken) {\n // 绘制占位符\n let fillColor = '#808080';\n if (object.type.includes('gold')) {\n fillColor = '#FFD700';\n } else if (object.type === 'diamond') {\n fillColor = '#B9F2FF';\n } else if (object.type === 'speed_boost') {\n fillColor = '#FF4500';\n } else if (object.type === 'magnetic_hook') {\n fillColor = '#4169E1';\n }\n ctx.fillStyle = fillColor;\n ctx.fillRect(object.x - object.width / 2, object.y - object.height / 2, object.width, object.height);\n }\n });\n\n // 绘制被抓取的对象\n if (takenObject) {\n // 绘制占位符\n let fillColor = '#808080';\n if (takenObject.type.includes('gold')) {\n fillColor = '#FFD700';\n } else if (takenObject.type === 'diamond') {\n fillColor = '#B9F2FF';\n } else if (takenObject.type === 'speed_boost') {\n fillColor = '#FF4500';\n } else if (takenObject.type === 'magnetic_hook') {\n fillColor = '#4169E1';\n }\n ctx.fillStyle = fillColor;\n ctx.fillRect(endX - takenObject.width / 2, endY - takenObject.height / 2, takenObject.width, takenObject.height);\n }\n\n // 绘制道具状态指示器\n const powerups = gameState.value.powerups;\n if (powerups.speedBoost || powerups.magneticHook) {\n ctx.font = '16px Arial';\n ctx.fillStyle = '#FFF';\n ctx.textAlign = 'left';\n let yPos = 80;\n if (powerups.speedBoost) {\n ctx.fillText(`加速: ${Math.ceil(powerups.speedBoostDuration)}秒`, 20, yPos);\n yPos += 25;\n }\n if (powerups.magneticHook) {\n ctx.fillText(`磁力钩: ${Math.ceil(powerups.magneticHookDuration)}秒`, 20, yPos);\n }\n }\n\n // 绘制暂停状态\n if (isPaused.value) {\n ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';\n ctx.fillRect(0, 0, 800, 600);\n ctx.font = '36px Arial';\n ctx.fillStyle = '#FFF';\n ctx.textAlign = 'center';\n ctx.fillText('游戏暂停', 400, 280);\n ctx.font = '20px Arial';\n ctx.fillText('按 P 键继续', 400, 330);\n ctx.fillText('点击\"退出游戏\"可保存当前得分并退出', 400, 370);\n }\n };\n\n // 绳子伸长\n const handleMouseDown = () => {\n if (isPaused.value) return;\n const rope = gameState.value.rope;\n if (!rope.isRetracting && !rope.isExtending) {\n rope.isExtending = true;\n }\n };\n\n // 绳子收缩\n const handleMouseUp = () => {\n const rope = gameState.value.rope;\n if (rope.isExtending) {\n rope.isExtending = false;\n rope.isRetracting = true;\n }\n };\n\n // 键盘控制\n const handleKeyDown = e => {\n if (e.code === 'Space') {\n handleMouseDown();\n } else if (e.code === 'KeyP') {\n togglePause();\n }\n };\n const handleKeyUp = e => {\n if (e.code === 'Space') {\n handleMouseUp();\n }\n };\n\n // 组件挂载\n onMounted(() => {\n if (!gameCanvas.value) return;\n ctx = gameCanvas.value.getContext('2d');\n\n // 初始化Socket连接\n initSocketConnection();\n\n // 初始化游戏\n initGame();\n\n // 添加键盘事件监听\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('keyup', handleKeyUp);\n\n // 添加鼠标事件监听\n gameCanvas.value.addEventListener('mousedown', handleMouseDown);\n window.addEventListener('mouseup', handleMouseUp);\n });\n\n // 组件卸载\n onUnmounted(() => {\n // 取消游戏循环\n if (gameLoopId) clearInterval(gameLoopId);\n\n // 移除事件监听\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('keyup', handleKeyUp);\n if (gameCanvas.value) {\n gameCanvas.value.removeEventListener('mousedown', handleMouseDown);\n }\n window.removeEventListener('mouseup', handleMouseUp);\n\n // 断开Socket连接\n if (socket) {\n updateGameStatus('ended');\n socket.disconnect();\n }\n });\n return {\n gameCanvas,\n gameState,\n gameOver,\n gameDuration,\n goldEarned,\n timeLeft,\n levelTarget,\n isPaused,\n leaderboard,\n activeGames,\n getStatusText,\n restartGame,\n togglePause,\n exitGame,\n goToLeaderboard\n };\n }\n};","map":{"version":3,"names":["ref","onMounted","onUnmounted","useRouter","axios","io","name","setup","router","gameCanvas","gameOver","gameDuration","goldEarned","timeLeft","levelTarget","isPaused","leaderboard","activeGames","socket","gameState","score","level","objects","rope","x","y","angle","Math","PI","length","isExtending","isRetracting","speed","swingSpeed","swingDirection","maxLength","minAngle","maxAngle","powerups","speedBoost","speedBoostDuration","magneticHook","magneticHookDuration","ctx","gameLoopId","gameStartTime","levelStartTime","lastUpdateTime","objectTypes","gold_small","width","height","value","pullSpeed","gold_medium","gold_large","diamond","rock","speed_boost","isPowerup","magnetic_hook","generateRandomObject","idOffset","typeIndex","random","type","diamondChance","min","largGoldChance","powerupChance","typeProps","validPosition","attempts","obj","distance","sqrt","pow","minDistance","id","taken","calculateLevelTarget","initGame","objectCount","i","newObject","push","Date","now","clearInterval","setInterval","gameLoop","updateGameStatus","status","emit","getStatusText","initSocketConnection","withCredentials","transports","forceNew","reconnection","reconnectionAttempts","reconnectionDelay","on","console","log","data","active_games","userJson","localStorage","getItem","currentUser","JSON","parse","error","reason","updateGame","draw","floor","elapsed","max","nextLevel","endGame","deltaTime","extendSpeed","checkCollisions","takenObject","find","retractionSpeed","filter","endX","cos","endY","sin","object","grabRadius","submitScore","saveGameHistory","response","post","user","high_score","setItem","stringify","duration","restartGame","togglePause","pauseDuration","exitGame","confirm","goToLeaderboard","clearRect","fillStyle","fillRect","beginPath","moveTo","lineTo","strokeStyle","lineWidth","stroke","arc","fill","hookAngle","hookSize","hookStartX","hookStartY","hookEndX","hookEndY","quadraticCurveTo","forEach","fillColor","includes","font","textAlign","yPos","fillText","ceil","handleMouseDown","handleMouseUp","handleKeyDown","e","code","handleKeyUp","getContext","window","addEventListener","removeEventListener","disconnect"],"sources":["E:\\学习\\网络应用开发\\Goldminer\\Goldminer_new\\goldminer\\frontend\\src\\components\\Game.vue"],"sourcesContent":["\r\n\r\n\r\n\r\n "],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/07c96e6683d2e1b7bd5db4772d002337fd6a4bc19b1d69dc5f0e0de1aa6da2cb.json b/goldminer/frontend/node_modules/.cache/babel-loader/07c96e6683d2e1b7bd5db4772d002337fd6a4bc19b1d69dc5f0e0de1aa6da2cb.json new file mode 100644 index 00000000..0716a28a --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/07c96e6683d2e1b7bd5db4772d002337fd6a4bc19b1d69dc5f0e0de1aa6da2cb.json @@ -0,0 +1 @@ +{"ast":null,"code":"import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createStaticVNode as _createStaticVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"leaderboard-container\"\n};\nconst _hoisted_2 = {\n key: 0,\n class: \"loading\"\n};\nconst _hoisted_3 = {\n key: 1,\n class: \"error-message\"\n};\nconst _hoisted_4 = {\n key: 2,\n class: \"leaderboard-content\"\n};\nconst _hoisted_5 = {\n key: 0,\n class: \"top-players\"\n};\nconst _hoisted_6 = {\n class: \"top-three\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"top-player second\"\n};\nconst _hoisted_8 = {\n class: \"avatar\"\n};\nconst _hoisted_9 = {\n class: \"username\"\n};\nconst _hoisted_10 = {\n class: \"score\"\n};\nconst _hoisted_11 = {\n class: \"top-player first\"\n};\nconst _hoisted_12 = {\n class: \"avatar\"\n};\nconst _hoisted_13 = {\n class: \"username\"\n};\nconst _hoisted_14 = {\n class: \"score\"\n};\nconst _hoisted_15 = {\n key: 1,\n class: \"top-player third\"\n};\nconst _hoisted_16 = {\n class: \"avatar\"\n};\nconst _hoisted_17 = {\n class: \"username\"\n};\nconst _hoisted_18 = {\n class: \"score\"\n};\nconst _hoisted_19 = {\n class: \"other-players\"\n};\nconst _hoisted_20 = {\n class: \"rank-col\"\n};\nconst _hoisted_21 = {\n class: \"player-col\"\n};\nconst _hoisted_22 = {\n class: \"player-avatar\"\n};\nconst _hoisted_23 = {\n class: \"player-name\"\n};\nconst _hoisted_24 = {\n class: \"score-col\"\n};\nconst _hoisted_25 = {\n class: \"date-col\"\n};\nconst _hoisted_26 = {\n key: 1,\n class: \"empty-leaderboard\"\n};\nconst _hoisted_27 = {\n class: \"leaderboard-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_router_link = _resolveComponent(\"router-link\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_cache[13] || (_cache[13] = _createElementVNode(\"div\", {\n class: \"leaderboard-header\"\n }, [_createElementVNode(\"h2\", null, \"排行榜\"), _createElementVNode(\"p\", {\n class: \"subtitle\"\n }, \"查看谁是最富有的矿工!\")], -1 /* HOISTED */)), $data.loading ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _cache[1] || (_cache[1] = [_createElementVNode(\"p\", null, \"加载排行榜数据中...\", -1 /* HOISTED */)]))) : $data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createElementVNode(\"p\", null, _toDisplayString($data.error), 1 /* TEXT */), _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = (...args) => $options.fetchLeaderboard && $options.fetchLeaderboard(...args)),\n class: \"retry-button\"\n }, \"重试\")])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [$data.leaderboard.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [_createCommentVNode(\" 前三名玩家 \"), _createElementVNode(\"div\", _hoisted_6, [_createCommentVNode(\" 第二名 \"), $data.leaderboard.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_cache[2] || (_cache[2] = _createElementVNode(\"div\", {\n class: \"rank\"\n }, \"2\", -1 /* HOISTED */)), _cache[3] || (_cache[3] = _createElementVNode(\"div\", {\n class: \"crown silver\"\n }, null, -1 /* HOISTED */)), _createElementVNode(\"div\", _hoisted_8, _toDisplayString($options.getInitial($data.leaderboard[1].username)), 1 /* TEXT */), _createElementVNode(\"div\", _hoisted_9, _toDisplayString($data.leaderboard[1].username), 1 /* TEXT */), _createElementVNode(\"div\", _hoisted_10, _toDisplayString($data.leaderboard[1].high_score), 1 /* TEXT */)])) : _createCommentVNode(\"v-if\", true), _createCommentVNode(\" 第一名 \"), _createElementVNode(\"div\", _hoisted_11, [_cache[4] || (_cache[4] = _createElementVNode(\"div\", {\n class: \"rank\"\n }, \"1\", -1 /* HOISTED */)), _cache[5] || (_cache[5] = _createElementVNode(\"div\", {\n class: \"crown gold\"\n }, null, -1 /* HOISTED */)), _createElementVNode(\"div\", _hoisted_12, _toDisplayString($options.getInitial($data.leaderboard[0].username)), 1 /* TEXT */), _createElementVNode(\"div\", _hoisted_13, _toDisplayString($data.leaderboard[0].username), 1 /* TEXT */), _createElementVNode(\"div\", _hoisted_14, _toDisplayString($data.leaderboard[0].high_score), 1 /* TEXT */)]), _createCommentVNode(\" 第三名 \"), $data.leaderboard.length > 2 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [_cache[6] || (_cache[6] = _createElementVNode(\"div\", {\n class: \"rank\"\n }, \"3\", -1 /* HOISTED */)), _cache[7] || (_cache[7] = _createElementVNode(\"div\", {\n class: \"crown bronze\"\n }, null, -1 /* HOISTED */)), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.getInitial($data.leaderboard[2].username)), 1 /* TEXT */), _createElementVNode(\"div\", _hoisted_17, _toDisplayString($data.leaderboard[2].username), 1 /* TEXT */), _createElementVNode(\"div\", _hoisted_18, _toDisplayString($data.leaderboard[2].high_score), 1 /* TEXT */)])) : _createCommentVNode(\"v-if\", true)]), _createCommentVNode(\" 其他玩家列表 \"), _createElementVNode(\"div\", _hoisted_19, [_cache[8] || (_cache[8] = _createStaticVNode(\"
排名
玩家
最高分
最后游戏
\", 1)), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.leaderboard.slice(3), (player, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: player.username,\n class: _normalizeClass([\"player-row\", {\n 'current-user': $options.isCurrentUser(player.username)\n }])\n }, [_createElementVNode(\"div\", _hoisted_20, _toDisplayString(index + 4), 1 /* TEXT */), _createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"div\", _hoisted_22, _toDisplayString($options.getInitial(player.username)), 1 /* TEXT */), _createElementVNode(\"div\", _hoisted_23, _toDisplayString(player.username), 1 /* TEXT */)]), _createElementVNode(\"div\", _hoisted_24, _toDisplayString(player.high_score), 1 /* TEXT */), _createElementVNode(\"div\", _hoisted_25, _toDisplayString($options.formatDate(player.last_login)), 1 /* TEXT */)], 2 /* CLASS */);\n }), 128 /* KEYED_FRAGMENT */))])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [_cache[10] || (_cache[10] = _createElementVNode(\"p\", null, \"目前还没有玩家记录。成为第一个登上排行榜的玩家吧!\", -1 /* HOISTED */)), _createVNode(_component_router_link, {\n to: \"/game\",\n class: \"play-button\"\n }, {\n default: _withCtx(() => _cache[9] || (_cache[9] = [_createTextVNode(\"开始游戏\")])),\n _: 1 /* STABLE */,\n __: [9]\n })])), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_router_link, {\n to: \"/profile\",\n class: \"action-link\"\n }, {\n default: _withCtx(() => _cache[11] || (_cache[11] = [_createTextVNode(\"返回个人主页\")])),\n _: 1 /* STABLE */,\n __: [11]\n }), _createVNode(_component_router_link, {\n to: \"/game\",\n class: \"action-link\"\n }, {\n default: _withCtx(() => _cache[12] || (_cache[12] = [_createTextVNode(\"开始游戏\")])),\n _: 1 /* STABLE */,\n __: [12]\n })])]))]);\n}","map":{"version":3,"names":["class","_createElementBlock","_hoisted_1","_createElementVNode","$data","loading","_hoisted_2","_cache","error","_hoisted_3","_toDisplayString","onClick","args","$options","fetchLeaderboard","_hoisted_4","leaderboard","length","_hoisted_5","_createCommentVNode","_hoisted_6","_hoisted_7","_hoisted_8","getInitial","username","_hoisted_9","_hoisted_10","high_score","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_Fragment","_renderList","slice","player","index","key","_normalizeClass","isCurrentUser","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","formatDate","last_login","_hoisted_26","_createVNode","_component_router_link","to","_hoisted_27"],"sources":["E:\\学习\\网络应用开发\\Goldminer\\Goldminer_new\\goldminer\\frontend\\src\\components\\Leaderboard.vue"],"sourcesContent":["\r\n\r\n\r\n\r\n "],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/0d200a6acb602b889150dbbd293842f1e2f820fdc23569ba19f8e99fac9a1c43.json b/goldminer/frontend/node_modules/.cache/babel-loader/0d200a6acb602b889150dbbd293842f1e2f820fdc23569ba19f8e99fac9a1c43.json new file mode 100644 index 00000000..9592cb40 --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/0d200a6acb602b889150dbbd293842f1e2f820fdc23569ba19f8e99fac9a1c43.json @@ -0,0 +1 @@ +{"ast":null,"code":"'use strict';\n\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport utils from '../utils.js';\n\n/**\r\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\r\n *\r\n * @param {string} name - The name of the property to get.\r\n *\r\n * @returns An array of strings.\r\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\r\n * Convert an array to an object.\r\n *\r\n * @param {Array} arr - The array to convert to an object.\r\n *\r\n * @returns An object with the same keys and values as the array.\r\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\r\n * It takes a FormData object and returns a JavaScript object\r\n *\r\n * @param {string} formData The FormData object to convert to JSON.\r\n *\r\n * @returns {Object | null} The converted object.\r\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n if (name === '__proto__') return true;\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n return !isNumericKey;\n }\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n const result = buildPath(path, value, target[name], index);\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n return !isNumericKey;\n }\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n return obj;\n }\n return null;\n}\nexport default formDataToJSON;","map":{"version":3,"names":["utils","parsePropPath","name","matchAll","map","match","arrayToObject","arr","obj","keys","Object","i","len","length","key","formDataToJSON","formData","buildPath","path","value","target","index","isNumericKey","Number","isFinite","isLast","isArray","hasOwnProp","isObject","result","isFormData","isFunction","entries","forEachEntry"],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/node_modules/axios/lib/helpers/formDataToJSON.js"],"sourcesContent":["'use strict';\r\n\r\nimport utils from '../utils.js';\r\n\r\n/**\r\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\r\n *\r\n * @param {string} name - The name of the property to get.\r\n *\r\n * @returns An array of strings.\r\n */\r\nfunction parsePropPath(name) {\r\n // foo[x][y][z]\r\n // foo.x.y.z\r\n // foo-x-y-z\r\n // foo x y z\r\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\r\n return match[0] === '[]' ? '' : match[1] || match[0];\r\n });\r\n}\r\n\r\n/**\r\n * Convert an array to an object.\r\n *\r\n * @param {Array} arr - The array to convert to an object.\r\n *\r\n * @returns An object with the same keys and values as the array.\r\n */\r\nfunction arrayToObject(arr) {\r\n const obj = {};\r\n const keys = Object.keys(arr);\r\n let i;\r\n const len = keys.length;\r\n let key;\r\n for (i = 0; i < len; i++) {\r\n key = keys[i];\r\n obj[key] = arr[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * It takes a FormData object and returns a JavaScript object\r\n *\r\n * @param {string} formData The FormData object to convert to JSON.\r\n *\r\n * @returns {Object | null} The converted object.\r\n */\r\nfunction formDataToJSON(formData) {\r\n function buildPath(path, value, target, index) {\r\n let name = path[index++];\r\n\r\n if (name === '__proto__') return true;\r\n\r\n const isNumericKey = Number.isFinite(+name);\r\n const isLast = index >= path.length;\r\n name = !name && utils.isArray(target) ? target.length : name;\r\n\r\n if (isLast) {\r\n if (utils.hasOwnProp(target, name)) {\r\n target[name] = [target[name], value];\r\n } else {\r\n target[name] = value;\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (!target[name] || !utils.isObject(target[name])) {\r\n target[name] = [];\r\n }\r\n\r\n const result = buildPath(path, value, target[name], index);\r\n\r\n if (result && utils.isArray(target[name])) {\r\n target[name] = arrayToObject(target[name]);\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\r\n const obj = {};\r\n\r\n utils.forEachEntry(formData, (name, value) => {\r\n buildPath(parsePropPath(name), value, obj, 0);\r\n });\r\n\r\n return obj;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport default formDataToJSON;\r\n"],"mappings":"AAAA,YAAY;;AAAC;AAAA;AAEb,OAAOA,KAAK,MAAM,aAAa;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,aAAaA,CAACC,IAAI,EAAE;EAC3B;EACA;EACA;EACA;EACA,OAAOF,KAAK,CAACG,QAAQ,CAAC,eAAe,EAAED,IAAI,CAAC,CAACE,GAAG,CAACC,KAAK,IAAI;IACxD,OAAOA,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,GAAGA,KAAK,CAAC,CAAC,CAAC,IAAIA,KAAK,CAAC,CAAC,CAAC;EACtD,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,aAAaA,CAACC,GAAG,EAAE;EAC1B,MAAMC,GAAG,GAAG,CAAC,CAAC;EACd,MAAMC,IAAI,GAAGC,MAAM,CAACD,IAAI,CAACF,GAAG,CAAC;EAC7B,IAAII,CAAC;EACL,MAAMC,GAAG,GAAGH,IAAI,CAACI,MAAM;EACvB,IAAIC,GAAG;EACP,KAAKH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;IACxBG,GAAG,GAAGL,IAAI,CAACE,CAAC,CAAC;IACbH,GAAG,CAACM,GAAG,CAAC,GAAGP,GAAG,CAACO,GAAG,CAAC;EACrB;EACA,OAAON,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASO,cAAcA,CAACC,QAAQ,EAAE;EAChC,SAASC,SAASA,CAACC,IAAI,EAAEC,KAAK,EAAEC,MAAM,EAAEC,KAAK,EAAE;IAC7C,IAAInB,IAAI,GAAGgB,IAAI,CAACG,KAAK,EAAE,CAAC;IAExB,IAAInB,IAAI,KAAK,WAAW,EAAE,OAAO,IAAI;IAErC,MAAMoB,YAAY,GAAGC,MAAM,CAACC,QAAQ,CAAC,CAACtB,IAAI,CAAC;IAC3C,MAAMuB,MAAM,GAAGJ,KAAK,IAAIH,IAAI,CAACL,MAAM;IACnCX,IAAI,GAAG,CAACA,IAAI,IAAIF,KAAK,CAAC0B,OAAO,CAACN,MAAM,CAAC,GAAGA,MAAM,CAACP,MAAM,GAAGX,IAAI;IAE5D,IAAIuB,MAAM,EAAE;MACV,IAAIzB,KAAK,CAAC2B,UAAU,CAACP,MAAM,EAAElB,IAAI,CAAC,EAAE;QAClCkB,MAAM,CAAClB,IAAI,CAAC,GAAG,CAACkB,MAAM,CAAClB,IAAI,CAAC,EAAEiB,KAAK,CAAC;MACtC,CAAC,MAAM;QACLC,MAAM,CAAClB,IAAI,CAAC,GAAGiB,KAAK;MACtB;MAEA,OAAO,CAACG,YAAY;IACtB;IAEA,IAAI,CAACF,MAAM,CAAClB,IAAI,CAAC,IAAI,CAACF,KAAK,CAAC4B,QAAQ,CAACR,MAAM,CAAClB,IAAI,CAAC,CAAC,EAAE;MAClDkB,MAAM,CAAClB,IAAI,CAAC,GAAG,EAAE;IACnB;IAEA,MAAM2B,MAAM,GAAGZ,SAAS,CAACC,IAAI,EAAEC,KAAK,EAAEC,MAAM,CAAClB,IAAI,CAAC,EAAEmB,KAAK,CAAC;IAE1D,IAAIQ,MAAM,IAAI7B,KAAK,CAAC0B,OAAO,CAACN,MAAM,CAAClB,IAAI,CAAC,CAAC,EAAE;MACzCkB,MAAM,CAAClB,IAAI,CAAC,GAAGI,aAAa,CAACc,MAAM,CAAClB,IAAI,CAAC,CAAC;IAC5C;IAEA,OAAO,CAACoB,YAAY;EACtB;EAEA,IAAItB,KAAK,CAAC8B,UAAU,CAACd,QAAQ,CAAC,IAAIhB,KAAK,CAAC+B,UAAU,CAACf,QAAQ,CAACgB,OAAO,CAAC,EAAE;IACpE,MAAMxB,GAAG,GAAG,CAAC,CAAC;IAEdR,KAAK,CAACiC,YAAY,CAACjB,QAAQ,EAAE,CAACd,IAAI,EAAEiB,KAAK,KAAK;MAC5CF,SAAS,CAAChB,aAAa,CAACC,IAAI,CAAC,EAAEiB,KAAK,EAAEX,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,OAAOA,GAAG;EACZ;EAEA,OAAO,IAAI;AACb;AAEA,eAAeO,cAAc","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/0e1732639a78dfc4c72f6f87e168b223f0c5af1dbf31c0bc90c444ee477eb5fa.json b/goldminer/frontend/node_modules/.cache/babel-loader/0e1732639a78dfc4c72f6f87e168b223f0c5af1dbf31c0bc90c444ee477eb5fa.json new file mode 100644 index 00000000..06e9efe3 --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/0e1732639a78dfc4c72f6f87e168b223f0c5af1dbf31c0bc90c444ee477eb5fa.json @@ -0,0 +1 @@ +{"ast":null,"code":"import { createApp } from 'vue';\nimport App from './App.vue';\nimport router from './router';\nimport axios from 'axios';\n\n// 配置axios默认URL,使用当前主机名而不是硬编码的localhost\nconst currentHost = window.location.hostname;\naxios.defaults.baseURL = process.env.NODE_ENV === 'production' ? '' : `http://${currentHost}:5000`;\nconst app = createApp(App);\napp.use(router);\napp.mount('#app');","map":{"version":3,"names":["createApp","App","router","axios","currentHost","window","location","hostname","defaults","baseURL","process","env","NODE_ENV","app","use","mount"],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/src/main.js"],"sourcesContent":["import { createApp } from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport axios from 'axios'\r\n\r\n// 配置axios默认URL,使用当前主机名而不是硬编码的localhost\r\nconst currentHost = window.location.hostname\r\naxios.defaults.baseURL = process.env.NODE_ENV === 'production' \r\n ? '' \r\n : `http://${currentHost}:5000`\r\n\r\nconst app = createApp(App)\r\napp.use(router)\r\napp.mount('#app') "],"mappings":"AAAA,SAASA,SAAS,QAAQ,KAAK;AAC/B,OAAOC,GAAG,MAAM,WAAW;AAC3B,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,KAAK,MAAM,OAAO;;AAEzB;AACA,MAAMC,WAAW,GAAGC,MAAM,CAACC,QAAQ,CAACC,QAAQ;AAC5CJ,KAAK,CAACK,QAAQ,CAACC,OAAO,GAAGC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,GAC1D,EAAE,GACF,UAAUR,WAAW,OAAO;AAEhC,MAAMS,GAAG,GAAGb,SAAS,CAACC,GAAG,CAAC;AAC1BY,GAAG,CAACC,GAAG,CAACZ,MAAM,CAAC;AACfW,GAAG,CAACE,KAAK,CAAC,MAAM,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/0f44c0f775a171b327907a16497cdf49e7caffd622d2c597a321df5604b6bff8.json b/goldminer/frontend/node_modules/.cache/babel-loader/0f44c0f775a171b327907a16497cdf49e7caffd622d2c597a321df5604b6bff8.json new file mode 100644 index 00000000..0380fc6a --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/0f44c0f775a171b327907a16497cdf49e7caffd622d2c597a321df5604b6bff8.json @@ -0,0 +1 @@ +{"ast":null,"code":"import { Polling } from \"./polling.js\";\n/**\r\n * HTTP long-polling based on the built-in `fetch()` method.\r\n *\r\n * Usage: browser, Node.js (since v18), Deno, Bun\r\n *\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/fetch\r\n * @see https://caniuse.com/fetch\r\n * @see https://nodejs.org/api/globals.html#fetch\r\n */\nexport class Fetch extends Polling {\n doPoll() {\n this._fetch().then(res => {\n if (!res.ok) {\n return this.onError(\"fetch read error\", res.status, res);\n }\n res.text().then(data => this.onData(data));\n }).catch(err => {\n this.onError(\"fetch read error\", err);\n });\n }\n doWrite(data, callback) {\n this._fetch(data).then(res => {\n if (!res.ok) {\n return this.onError(\"fetch write error\", res.status, res);\n }\n callback();\n }).catch(err => {\n this.onError(\"fetch write error\", err);\n });\n }\n _fetch(data) {\n var _a;\n const isPost = data !== undefined;\n const headers = new Headers(this.opts.extraHeaders);\n if (isPost) {\n headers.set(\"content-type\", \"text/plain;charset=UTF-8\");\n }\n (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.appendCookies(headers);\n return fetch(this.uri(), {\n method: isPost ? \"POST\" : \"GET\",\n body: isPost ? data : null,\n headers,\n credentials: this.opts.withCredentials ? \"include\" : \"omit\"\n }).then(res => {\n var _a;\n // @ts-ignore getSetCookie() was added in Node.js v19.7.0\n (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(res.headers.getSetCookie());\n return res;\n });\n }\n}","map":{"version":3,"names":["Polling","Fetch","doPoll","_fetch","then","res","ok","onError","status","text","data","onData","catch","err","doWrite","callback","_a","isPost","undefined","headers","Headers","opts","extraHeaders","set","socket","_cookieJar","appendCookies","fetch","uri","method","body","credentials","withCredentials","parseCookies","getSetCookie"],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/node_modules/engine.io-client/build/esm/transports/polling-fetch.js"],"sourcesContent":["import { Polling } from \"./polling.js\";\r\n/**\r\n * HTTP long-polling based on the built-in `fetch()` method.\r\n *\r\n * Usage: browser, Node.js (since v18), Deno, Bun\r\n *\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/fetch\r\n * @see https://caniuse.com/fetch\r\n * @see https://nodejs.org/api/globals.html#fetch\r\n */\r\nexport class Fetch extends Polling {\r\n doPoll() {\r\n this._fetch()\r\n .then((res) => {\r\n if (!res.ok) {\r\n return this.onError(\"fetch read error\", res.status, res);\r\n }\r\n res.text().then((data) => this.onData(data));\r\n })\r\n .catch((err) => {\r\n this.onError(\"fetch read error\", err);\r\n });\r\n }\r\n doWrite(data, callback) {\r\n this._fetch(data)\r\n .then((res) => {\r\n if (!res.ok) {\r\n return this.onError(\"fetch write error\", res.status, res);\r\n }\r\n callback();\r\n })\r\n .catch((err) => {\r\n this.onError(\"fetch write error\", err);\r\n });\r\n }\r\n _fetch(data) {\r\n var _a;\r\n const isPost = data !== undefined;\r\n const headers = new Headers(this.opts.extraHeaders);\r\n if (isPost) {\r\n headers.set(\"content-type\", \"text/plain;charset=UTF-8\");\r\n }\r\n (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.appendCookies(headers);\r\n return fetch(this.uri(), {\r\n method: isPost ? \"POST\" : \"GET\",\r\n body: isPost ? data : null,\r\n headers,\r\n credentials: this.opts.withCredentials ? \"include\" : \"omit\",\r\n }).then((res) => {\r\n var _a;\r\n // @ts-ignore getSetCookie() was added in Node.js v19.7.0\r\n (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(res.headers.getSetCookie());\r\n return res;\r\n });\r\n }\r\n}\r\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,KAAK,SAASD,OAAO,CAAC;EAC/BE,MAAMA,CAAA,EAAG;IACL,IAAI,CAACC,MAAM,CAAC,CAAC,CACRC,IAAI,CAAEC,GAAG,IAAK;MACf,IAAI,CAACA,GAAG,CAACC,EAAE,EAAE;QACT,OAAO,IAAI,CAACC,OAAO,CAAC,kBAAkB,EAAEF,GAAG,CAACG,MAAM,EAAEH,GAAG,CAAC;MAC5D;MACAA,GAAG,CAACI,IAAI,CAAC,CAAC,CAACL,IAAI,CAAEM,IAAI,IAAK,IAAI,CAACC,MAAM,CAACD,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CACGE,KAAK,CAAEC,GAAG,IAAK;MAChB,IAAI,CAACN,OAAO,CAAC,kBAAkB,EAAEM,GAAG,CAAC;IACzC,CAAC,CAAC;EACN;EACAC,OAAOA,CAACJ,IAAI,EAAEK,QAAQ,EAAE;IACpB,IAAI,CAACZ,MAAM,CAACO,IAAI,CAAC,CACZN,IAAI,CAAEC,GAAG,IAAK;MACf,IAAI,CAACA,GAAG,CAACC,EAAE,EAAE;QACT,OAAO,IAAI,CAACC,OAAO,CAAC,mBAAmB,EAAEF,GAAG,CAACG,MAAM,EAAEH,GAAG,CAAC;MAC7D;MACAU,QAAQ,CAAC,CAAC;IACd,CAAC,CAAC,CACGH,KAAK,CAAEC,GAAG,IAAK;MAChB,IAAI,CAACN,OAAO,CAAC,mBAAmB,EAAEM,GAAG,CAAC;IAC1C,CAAC,CAAC;EACN;EACAV,MAAMA,CAACO,IAAI,EAAE;IACT,IAAIM,EAAE;IACN,MAAMC,MAAM,GAAGP,IAAI,KAAKQ,SAAS;IACjC,MAAMC,OAAO,GAAG,IAAIC,OAAO,CAAC,IAAI,CAACC,IAAI,CAACC,YAAY,CAAC;IACnD,IAAIL,MAAM,EAAE;MACRE,OAAO,CAACI,GAAG,CAAC,cAAc,EAAE,0BAA0B,CAAC;IAC3D;IACA,CAACP,EAAE,GAAG,IAAI,CAACQ,MAAM,CAACC,UAAU,MAAM,IAAI,IAAIT,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,EAAE,CAACU,aAAa,CAACP,OAAO,CAAC;IAC5F,OAAOQ,KAAK,CAAC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE;MACrBC,MAAM,EAAEZ,MAAM,GAAG,MAAM,GAAG,KAAK;MAC/Ba,IAAI,EAAEb,MAAM,GAAGP,IAAI,GAAG,IAAI;MAC1BS,OAAO;MACPY,WAAW,EAAE,IAAI,CAACV,IAAI,CAACW,eAAe,GAAG,SAAS,GAAG;IACzD,CAAC,CAAC,CAAC5B,IAAI,CAAEC,GAAG,IAAK;MACb,IAAIW,EAAE;MACN;MACA,CAACA,EAAE,GAAG,IAAI,CAACQ,MAAM,CAACC,UAAU,MAAM,IAAI,IAAIT,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,EAAE,CAACiB,YAAY,CAAC5B,GAAG,CAACc,OAAO,CAACe,YAAY,CAAC,CAAC,CAAC;MAC9G,OAAO7B,GAAG;IACd,CAAC,CAAC;EACN;AACJ","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/10e063d2264efd943c348cc4d9fd436ca56de8fdd0494f8ceb73f3b225d3e4dc.json b/goldminer/frontend/node_modules/.cache/babel-loader/10e063d2264efd943c348cc4d9fd436ca56de8fdd0494f8ceb73f3b225d3e4dc.json new file mode 100644 index 00000000..14c3dfde --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/10e063d2264efd943c348cc4d9fd436ca56de8fdd0494f8ceb73f3b225d3e4dc.json @@ -0,0 +1 @@ +{"ast":null,"code":"'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport { VERSION } from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\r\n * Create an instance of Axios\r\n *\r\n * @param {Object} defaultConfig The default config for the instance\r\n *\r\n * @returns {Axios} A new instance of Axios\r\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {\n allOwnKeys: true\n });\n\n // Copy context to instance\n utils.extend(instance, context, null, {\n allOwnKeys: true\n });\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = AxiosHeaders;\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\naxios.getAdapter = adapters.getAdapter;\naxios.HttpStatusCode = HttpStatusCode;\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios;","map":{"version":3,"names":["utils","bind","Axios","mergeConfig","defaults","formDataToJSON","CanceledError","CancelToken","isCancel","VERSION","toFormData","AxiosError","spread","isAxiosError","AxiosHeaders","adapters","HttpStatusCode","createInstance","defaultConfig","context","instance","prototype","request","extend","allOwnKeys","create","instanceConfig","axios","Cancel","all","promises","Promise","formToJSON","thing","isHTMLForm","FormData","getAdapter","default"],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/node_modules/axios/lib/axios.js"],"sourcesContent":["'use strict';\r\n\r\nimport utils from './utils.js';\r\nimport bind from './helpers/bind.js';\r\nimport Axios from './core/Axios.js';\r\nimport mergeConfig from './core/mergeConfig.js';\r\nimport defaults from './defaults/index.js';\r\nimport formDataToJSON from './helpers/formDataToJSON.js';\r\nimport CanceledError from './cancel/CanceledError.js';\r\nimport CancelToken from './cancel/CancelToken.js';\r\nimport isCancel from './cancel/isCancel.js';\r\nimport {VERSION} from './env/data.js';\r\nimport toFormData from './helpers/toFormData.js';\r\nimport AxiosError from './core/AxiosError.js';\r\nimport spread from './helpers/spread.js';\r\nimport isAxiosError from './helpers/isAxiosError.js';\r\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\r\nimport adapters from './adapters/adapters.js';\r\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\r\n\r\n/**\r\n * Create an instance of Axios\r\n *\r\n * @param {Object} defaultConfig The default config for the instance\r\n *\r\n * @returns {Axios} A new instance of Axios\r\n */\r\nfunction createInstance(defaultConfig) {\r\n const context = new Axios(defaultConfig);\r\n const instance = bind(Axios.prototype.request, context);\r\n\r\n // Copy axios.prototype to instance\r\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\r\n\r\n // Copy context to instance\r\n utils.extend(instance, context, null, {allOwnKeys: true});\r\n\r\n // Factory for creating new instances\r\n instance.create = function create(instanceConfig) {\r\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\r\n };\r\n\r\n return instance;\r\n}\r\n\r\n// Create the default instance to be exported\r\nconst axios = createInstance(defaults);\r\n\r\n// Expose Axios class to allow class inheritance\r\naxios.Axios = Axios;\r\n\r\n// Expose Cancel & CancelToken\r\naxios.CanceledError = CanceledError;\r\naxios.CancelToken = CancelToken;\r\naxios.isCancel = isCancel;\r\naxios.VERSION = VERSION;\r\naxios.toFormData = toFormData;\r\n\r\n// Expose AxiosError class\r\naxios.AxiosError = AxiosError;\r\n\r\n// alias for CanceledError for backward compatibility\r\naxios.Cancel = axios.CanceledError;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\n\r\naxios.spread = spread;\r\n\r\n// Expose isAxiosError\r\naxios.isAxiosError = isAxiosError;\r\n\r\n// Expose mergeConfig\r\naxios.mergeConfig = mergeConfig;\r\n\r\naxios.AxiosHeaders = AxiosHeaders;\r\n\r\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\r\n\r\naxios.getAdapter = adapters.getAdapter;\r\n\r\naxios.HttpStatusCode = HttpStatusCode;\r\n\r\naxios.default = axios;\r\n\r\n// this module should only have a default export\r\nexport default axios\r\n"],"mappings":"AAAA,YAAY;;AAEZ,OAAOA,KAAK,MAAM,YAAY;AAC9B,OAAOC,IAAI,MAAM,mBAAmB;AACpC,OAAOC,KAAK,MAAM,iBAAiB;AACnC,OAAOC,WAAW,MAAM,uBAAuB;AAC/C,OAAOC,QAAQ,MAAM,qBAAqB;AAC1C,OAAOC,cAAc,MAAM,6BAA6B;AACxD,OAAOC,aAAa,MAAM,2BAA2B;AACrD,OAAOC,WAAW,MAAM,yBAAyB;AACjD,OAAOC,QAAQ,MAAM,sBAAsB;AAC3C,SAAQC,OAAO,QAAO,eAAe;AACrC,OAAOC,UAAU,MAAM,yBAAyB;AAChD,OAAOC,UAAU,MAAM,sBAAsB;AAC7C,OAAOC,MAAM,MAAM,qBAAqB;AACxC,OAAOC,YAAY,MAAM,2BAA2B;AACpD,OAAOC,YAAY,MAAM,wBAAwB;AACjD,OAAOC,QAAQ,MAAM,wBAAwB;AAC7C,OAAOC,cAAc,MAAM,6BAA6B;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,cAAcA,CAACC,aAAa,EAAE;EACrC,MAAMC,OAAO,GAAG,IAAIjB,KAAK,CAACgB,aAAa,CAAC;EACxC,MAAME,QAAQ,GAAGnB,IAAI,CAACC,KAAK,CAACmB,SAAS,CAACC,OAAO,EAAEH,OAAO,CAAC;;EAEvD;EACAnB,KAAK,CAACuB,MAAM,CAACH,QAAQ,EAAElB,KAAK,CAACmB,SAAS,EAAEF,OAAO,EAAE;IAACK,UAAU,EAAE;EAAI,CAAC,CAAC;;EAEpE;EACAxB,KAAK,CAACuB,MAAM,CAACH,QAAQ,EAAED,OAAO,EAAE,IAAI,EAAE;IAACK,UAAU,EAAE;EAAI,CAAC,CAAC;;EAEzD;EACAJ,QAAQ,CAACK,MAAM,GAAG,SAASA,MAAMA,CAACC,cAAc,EAAE;IAChD,OAAOT,cAAc,CAACd,WAAW,CAACe,aAAa,EAAEQ,cAAc,CAAC,CAAC;EACnE,CAAC;EAED,OAAON,QAAQ;AACjB;;AAEA;AACA,MAAMO,KAAK,GAAGV,cAAc,CAACb,QAAQ,CAAC;;AAEtC;AACAuB,KAAK,CAACzB,KAAK,GAAGA,KAAK;;AAEnB;AACAyB,KAAK,CAACrB,aAAa,GAAGA,aAAa;AACnCqB,KAAK,CAACpB,WAAW,GAAGA,WAAW;AAC/BoB,KAAK,CAACnB,QAAQ,GAAGA,QAAQ;AACzBmB,KAAK,CAAClB,OAAO,GAAGA,OAAO;AACvBkB,KAAK,CAACjB,UAAU,GAAGA,UAAU;;AAE7B;AACAiB,KAAK,CAAChB,UAAU,GAAGA,UAAU;;AAE7B;AACAgB,KAAK,CAACC,MAAM,GAAGD,KAAK,CAACrB,aAAa;;AAElC;AACAqB,KAAK,CAACE,GAAG,GAAG,SAASA,GAAGA,CAACC,QAAQ,EAAE;EACjC,OAAOC,OAAO,CAACF,GAAG,CAACC,QAAQ,CAAC;AAC9B,CAAC;AAEDH,KAAK,CAACf,MAAM,GAAGA,MAAM;;AAErB;AACAe,KAAK,CAACd,YAAY,GAAGA,YAAY;;AAEjC;AACAc,KAAK,CAACxB,WAAW,GAAGA,WAAW;AAE/BwB,KAAK,CAACb,YAAY,GAAGA,YAAY;AAEjCa,KAAK,CAACK,UAAU,GAAGC,KAAK,IAAI5B,cAAc,CAACL,KAAK,CAACkC,UAAU,CAACD,KAAK,CAAC,GAAG,IAAIE,QAAQ,CAACF,KAAK,CAAC,GAAGA,KAAK,CAAC;AAEjGN,KAAK,CAACS,UAAU,GAAGrB,QAAQ,CAACqB,UAAU;AAEtCT,KAAK,CAACX,cAAc,GAAGA,cAAc;AAErCW,KAAK,CAACU,OAAO,GAAGV,KAAK;;AAErB;AACA,eAAeA,KAAK","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/12be9abf217c7366a695328fea7ba9650873605a34833ec47e932072997f8ae9.json b/goldminer/frontend/node_modules/.cache/babel-loader/12be9abf217c7366a695328fea7ba9650873605a34833ec47e932072997f8ae9.json new file mode 100644 index 00000000..72ca74d4 --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/12be9abf217c7366a695328fea7ba9650873605a34833ec47e932072997f8ae9.json @@ -0,0 +1 @@ +{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// runtime helper for setting properties on components\n// in a tree-shakable way\nexports.default = (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n};","map":{"version":3,"names":["Object","defineProperty","exports","value","default","sfc","props","target","__vccOpts","key","val"],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/node_modules/vue-loader/dist/exportHelper.js"],"sourcesContent":["\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n// runtime helper for setting properties on components\r\n// in a tree-shakable way\r\nexports.default = (sfc, props) => {\r\n const target = sfc.__vccOpts || sfc;\r\n for (const [key, val] of props) {\r\n target[key] = val;\r\n }\r\n return target;\r\n};\r\n"],"mappings":"AAAA,YAAY;;AACZA,MAAM,CAACC,cAAc,CAACC,OAAO,EAAE,YAAY,EAAE;EAAEC,KAAK,EAAE;AAAK,CAAC,CAAC;AAC7D;AACA;AACAD,OAAO,CAACE,OAAO,GAAG,CAACC,GAAG,EAAEC,KAAK,KAAK;EAC9B,MAAMC,MAAM,GAAGF,GAAG,CAACG,SAAS,IAAIH,GAAG;EACnC,KAAK,MAAM,CAACI,GAAG,EAAEC,GAAG,CAAC,IAAIJ,KAAK,EAAE;IAC5BC,MAAM,CAACE,GAAG,CAAC,GAAGC,GAAG;EACrB;EACA,OAAOH,MAAM;AACjB,CAAC","ignoreList":[]},"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/1d93a060fa1b3e985be6cc252fb25520b92be7f640514b9ab887d0f763c57f81.json b/goldminer/frontend/node_modules/.cache/babel-loader/1d93a060fa1b3e985be6cc252fb25520b92be7f640514b9ab887d0f763c57f81.json new file mode 100644 index 00000000..fe3eea38 --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/1d93a060fa1b3e985be6cc252fb25520b92be7f640514b9ab887d0f763c57f81.json @@ -0,0 +1 @@ +{"ast":null,"code":"import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"game-container\"\n};\nconst _hoisted_2 = {\n class: \"game-header\"\n};\nconst _hoisted_3 = {\n class: \"game-info\"\n};\nconst _hoisted_4 = {\n class: \"game-controls\"\n};\nconst _hoisted_5 = {\n key: 0,\n class: \"powerup-indicators\"\n};\nconst _hoisted_6 = {\n key: 0,\n class: \"powerup-item\"\n};\nconst _hoisted_7 = {\n class: \"powerup-timer\"\n};\nconst _hoisted_8 = {\n key: 1,\n class: \"powerup-item\"\n};\nconst _hoisted_9 = {\n class: \"powerup-timer\"\n};\nconst _hoisted_10 = {\n class: \"game-main\"\n};\nconst _hoisted_11 = {\n ref: \"gameCanvas\",\n width: \"800\",\n height: \"600\",\n class: \"game-canvas\"\n};\nconst _hoisted_12 = {\n class: \"game-sidebar\"\n};\nconst _hoisted_13 = {\n class: \"live-leaderboard\"\n};\nconst _hoisted_14 = {\n key: 0,\n class: \"loading-text\"\n};\nconst _hoisted_15 = {\n key: 1,\n class: \"leaderboard-list\"\n};\nconst _hoisted_16 = {\n class: \"rank\"\n};\nconst _hoisted_17 = {\n class: \"name\"\n};\nconst _hoisted_18 = {\n class: \"score\"\n};\nconst _hoisted_19 = {\n class: \"active-players\"\n};\nconst _hoisted_20 = {\n key: 0,\n class: \"no-players\"\n};\nconst _hoisted_21 = {\n key: 1,\n class: \"players-list\"\n};\nconst _hoisted_22 = {\n class: \"name\"\n};\nconst _hoisted_23 = {\n class: \"level\"\n};\nconst _hoisted_24 = {\n class: \"score\"\n};\nconst _hoisted_25 = {\n key: 1,\n class: \"game-over-overlay\"\n};\nconst _hoisted_26 = {\n class: \"game-over-panel\"\n};\nconst _hoisted_27 = {\n class: \"game-stats\"\n};\nconst _hoisted_28 = {\n class: \"game-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", null, \"分数: \" + _toDisplayString($setup.gameState.score), 1 /* TEXT */), _createElementVNode(\"div\", null, \"关卡: \" + _toDisplayString($setup.gameState.level), 1 /* TEXT */), _createElementVNode(\"div\", null, \"目标: \" + _toDisplayString($setup.levelTarget), 1 /* TEXT */), _createElementVNode(\"div\", null, \"时间: \" + _toDisplayString($setup.timeLeft) + \"秒\", 1 /* TEXT */)]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = (...args) => $setup.togglePause && $setup.togglePause(...args)),\n class: \"control-btn\"\n }, _toDisplayString($setup.isPaused ? '继续' : '暂停'), 1 /* TEXT */), _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = (...args) => $setup.exitGame && $setup.exitGame(...args)),\n class: \"control-btn exit-btn\"\n }, \" 退出游戏 \")])]), $setup.gameState.powerups.speedBoost || $setup.gameState.powerups.magneticHook ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [$setup.gameState.powerups.speedBoost ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [_cache[4] || (_cache[4] = _createElementVNode(\"div\", {\n class: \"powerup-icon speed\"\n }, null, -1 /* HOISTED */)), _createElementVNode(\"div\", _hoisted_7, _toDisplayString(Math.ceil($setup.gameState.powerups.speedBoostDuration)) + \"s\", 1 /* TEXT */)])) : _createCommentVNode(\"v-if\", true), $setup.gameState.powerups.magneticHook ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [_cache[5] || (_cache[5] = _createElementVNode(\"div\", {\n class: \"powerup-icon magnet\"\n }, null, -1 /* HOISTED */)), _createElementVNode(\"div\", _hoisted_9, _toDisplayString(Math.ceil($setup.gameState.powerups.magneticHookDuration)) + \"s\", 1 /* TEXT */)])) : _createCommentVNode(\"v-if\", true)])) : _createCommentVNode(\"v-if\", true), _createElementVNode(\"div\", _hoisted_10, [_createElementVNode(\"canvas\", _hoisted_11, null, 512 /* NEED_PATCH */), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_cache[6] || (_cache[6] = _createElementVNode(\"h3\", null, \"实时排行榜\", -1 /* HOISTED */)), $setup.leaderboard.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, \"加载中...\")) : (_openBlock(), _createElementBlock(\"ul\", _hoisted_15, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.leaderboard, (player, index) => {\n return _openBlock(), _createElementBlock(\"li\", {\n key: index,\n class: \"leaderboard-item\"\n }, [_createElementVNode(\"span\", _hoisted_16, _toDisplayString(index + 1), 1 /* TEXT */), _createElementVNode(\"span\", _hoisted_17, _toDisplayString(player.username), 1 /* TEXT */), _createElementVNode(\"span\", _hoisted_18, _toDisplayString(player.high_score), 1 /* TEXT */)]);\n }), 128 /* KEYED_FRAGMENT */))]))]), _createElementVNode(\"div\", _hoisted_19, [_cache[7] || (_cache[7] = _createElementVNode(\"h3\", null, \"当前游戏玩家\", -1 /* HOISTED */)), Object.keys($setup.activeGames).length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, \"暂无其他玩家\")) : (_openBlock(), _createElementBlock(\"ul\", _hoisted_21, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.activeGames, (game, userId) => {\n return _openBlock(), _createElementBlock(\"li\", {\n key: userId,\n class: \"player-item\"\n }, [_createElementVNode(\"span\", _hoisted_22, _toDisplayString(game.username), 1 /* TEXT */), _createElementVNode(\"span\", _hoisted_23, \"关卡 \" + _toDisplayString(game.level), 1 /* TEXT */), _createElementVNode(\"span\", _hoisted_24, _toDisplayString(game.score) + \" 分\", 1 /* TEXT */), _createElementVNode(\"span\", {\n class: _normalizeClass([\"status\", game.status])\n }, _toDisplayString($setup.getStatusText(game.status)), 3 /* TEXT, CLASS */)]);\n }), 128 /* KEYED_FRAGMENT */))]))])])]), _cache[9] || (_cache[9] = _createElementVNode(\"div\", {\n class: \"game-instructions\"\n }, [_createElementVNode(\"p\", null, \"按住鼠标左键或空格键发射绳索,松开收回。按P键暂停游戏。\"), _createElementVNode(\"p\", null, \"收集金块和钻石,避开石头。注意寻找特殊道具!\")], -1 /* HOISTED */)), $setup.gameOver ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [_createElementVNode(\"div\", _hoisted_26, [_cache[8] || (_cache[8] = _createElementVNode(\"h2\", null, \"游戏结束\", -1 /* HOISTED */)), _createElementVNode(\"div\", _hoisted_27, [_createElementVNode(\"p\", null, \"最终得分: \" + _toDisplayString($setup.gameState.score), 1 /* TEXT */), _createElementVNode(\"p\", null, \"获得金币: \" + _toDisplayString($setup.goldEarned), 1 /* TEXT */), _createElementVNode(\"p\", null, \"游戏时长: \" + _toDisplayString($setup.gameDuration) + \"秒\", 1 /* TEXT */), _createElementVNode(\"p\", null, \"到达关卡: \" + _toDisplayString($setup.gameState.level), 1 /* TEXT */)]), _createElementVNode(\"div\", _hoisted_28, [_createElementVNode(\"button\", {\n onClick: _cache[2] || (_cache[2] = (...args) => $setup.restartGame && $setup.restartGame(...args)),\n class: \"btn primary\"\n }, \"重新开始\"), _createElementVNode(\"button\", {\n onClick: _cache[3] || (_cache[3] = (...args) => $setup.goToLeaderboard && $setup.goToLeaderboard(...args)),\n class: \"btn secondary\"\n }, \"查看排行榜\")])])])) : _createCommentVNode(\"v-if\", true)]);\n}","map":{"version":3,"names":["class","ref","width","height","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","$setup","gameState","score","level","levelTarget","timeLeft","_hoisted_4","onClick","_cache","args","togglePause","isPaused","exitGame","powerups","speedBoost","magneticHook","_hoisted_5","_hoisted_6","_hoisted_7","Math","ceil","speedBoostDuration","_hoisted_8","_hoisted_9","magneticHookDuration","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","leaderboard","length","_hoisted_14","_hoisted_15","_Fragment","_renderList","player","index","key","_hoisted_16","_hoisted_17","username","_hoisted_18","high_score","_hoisted_19","Object","keys","activeGames","_hoisted_20","_hoisted_21","game","userId","_hoisted_22","_hoisted_23","_hoisted_24","_normalizeClass","status","getStatusText","gameOver","_hoisted_25","_hoisted_26","_hoisted_27","goldEarned","gameDuration","_hoisted_28","restartGame","goToLeaderboard"],"sources":["E:\\学习\\网络应用开发\\Goldminer\\Goldminer_new\\goldminer\\frontend\\src\\components\\Game.vue"],"sourcesContent":["\r\n\r\n\r\n\r\n "],"mappings":";;EACOA,KAAK,EAAC;AAAgB;;EACpBA,KAAK,EAAC;AAAa;;EACjBA,KAAK,EAAC;AAAW;;EAMjBA,KAAK,EAAC;AAAe;;;EAUvBA,KAAK,EAAC;;;;EACiCA,KAAK,EAAC;;;EAEzCA,KAAK,EAAC;AAAe;;;EAEgBA,KAAK,EAAC;;;EAE3CA,KAAK,EAAC;AAAe;;EAIzBA,KAAK,EAAC;AAAW;;EACZC,GAAG,EAAC,YAAY;EAACC,KAAK,EAAC,KAAK;EAACC,MAAM,EAAC,KAAK;EAACH,KAAK,EAAC;;;EAEnDA,KAAK,EAAC;AAAc;;EAClBA,KAAK,EAAC;AAAkB;;;EAEUA,KAAK,EAAC;;;;EAChCA,KAAK,EAAC;;;EAEPA,KAAK,EAAC;AAAM;;EACZA,KAAK,EAAC;AAAM;;EACZA,KAAK,EAAC;AAAO;;EAKpBA,KAAK,EAAC;AAAgB;;;EAEyBA,KAAK,EAAC;;;;EAC7CA,KAAK,EAAC;;;EAEPA,KAAK,EAAC;AAAM;;EACZA,KAAK,EAAC;AAAO;;EACbA,KAAK,EAAC;AAAO;;;EAaRA,KAAK,EAAC;;;EACpBA,KAAK,EAAC;AAAiB;;EAErBA,KAAK,EAAC;AAAY;;EAMlBA,KAAK,EAAC;AAAc;;uBA1E/BI,mBAAA,CAgFM,OAhFNC,UAgFM,GA/EJC,mBAAA,CAeM,OAfNC,UAeM,GAdJD,mBAAA,CAKM,OALNE,UAKM,GAJJF,mBAAA,CAAoC,aAA/B,MAAI,GAAAG,gBAAA,CAAGC,MAAA,CAAAC,SAAS,CAACC,KAAK,kBAC3BN,mBAAA,CAAoC,aAA/B,MAAI,GAAAG,gBAAA,CAAGC,MAAA,CAAAC,SAAS,CAACE,KAAK,kBAC3BP,mBAAA,CAAgC,aAA3B,MAAI,GAAAG,gBAAA,CAAGC,MAAA,CAAAI,WAAW,kBACvBR,mBAAA,CAA8B,aAAzB,MAAI,GAAAG,gBAAA,CAAGC,MAAA,CAAAK,QAAQ,IAAG,GAAC,gB,GAE1BT,mBAAA,CAOM,OAPNU,UAOM,GANJV,mBAAA,CAES;IAFAW,OAAK,EAAAC,MAAA,QAAAA,MAAA,UAAAC,IAAA,KAAET,MAAA,CAAAU,WAAA,IAAAV,MAAA,CAAAU,WAAA,IAAAD,IAAA,CAAW;IAAEnB,KAAK,EAAC;sBAC9BU,MAAA,CAAAW,QAAQ,gCAEbf,mBAAA,CAES;IAFAW,OAAK,EAAAC,MAAA,QAAAA,MAAA,UAAAC,IAAA,KAAET,MAAA,CAAAY,QAAA,IAAAZ,MAAA,CAAAY,QAAA,IAAAH,IAAA,CAAQ;IAAEnB,KAAK,EAAC;KAAuB,QAEvD,E,KAIkCU,MAAA,CAAAC,SAAS,CAACY,QAAQ,CAACC,UAAU,IAAId,MAAA,CAAAC,SAAS,CAACY,QAAQ,CAACE,YAAY,I,cAAtGrB,mBAAA,CASM,OATNsB,UASM,GAROhB,MAAA,CAAAC,SAAS,CAACY,QAAQ,CAACC,UAAU,I,cAAxCpB,mBAAA,CAGM,OAHNuB,UAGM,G,0BAFJrB,mBAAA,CAAsC;IAAjCN,KAAK,EAAC;EAAoB,6BAC/BM,mBAAA,CAAwF,OAAxFsB,UAAwF,EAAAnB,gBAAA,CAA1DoB,IAAI,CAACC,IAAI,CAACpB,MAAA,CAAAC,SAAS,CAACY,QAAQ,CAACQ,kBAAkB,KAAI,GAAC,gB,wCAEzErB,MAAA,CAAAC,SAAS,CAACY,QAAQ,CAACE,YAAY,I,cAA1CrB,mBAAA,CAGM,OAHN4B,UAGM,G,0BAFJ1B,mBAAA,CAAuC;IAAlCN,KAAK,EAAC;EAAqB,6BAChCM,mBAAA,CAA0F,OAA1F2B,UAA0F,EAAAxB,gBAAA,CAA5DoB,IAAI,CAACC,IAAI,CAACpB,MAAA,CAAAC,SAAS,CAACY,QAAQ,CAACW,oBAAoB,KAAI,GAAC,gB,+EAIxF5B,mBAAA,CA6BM,OA7BN6B,WA6BM,GA5BJ7B,mBAAA,CAA+E,UAA/E8B,WAA+E,+BAE/E9B,mBAAA,CAyBM,OAzBN+B,WAyBM,GAxBJ/B,mBAAA,CAUM,OAVNgC,WAUM,G,0BATJhC,mBAAA,CAAc,YAAV,OAAK,sBACEI,MAAA,CAAA6B,WAAW,CAACC,MAAM,U,cAA7BpC,mBAAA,CAAsE,OAAtEqC,WAAsE,EAAZ,QAAM,M,cAChErC,mBAAA,CAMK,MANLsC,WAMK,I,kBALHtC,mBAAA,CAIKuC,SAAA,QAAAC,WAAA,CAJyBlC,MAAA,CAAA6B,WAAW,GAA7BM,MAAM,EAAEC,KAAK;yBAAzB1C,mBAAA,CAIK;MAJuC2C,GAAG,EAAED,KAAK;MAAE9C,KAAK,EAAC;QAC5DM,mBAAA,CAAyC,QAAzC0C,WAAyC,EAAAvC,gBAAA,CAAnBqC,KAAK,sBAC3BxC,mBAAA,CAA+C,QAA/C2C,WAA+C,EAAAxC,gBAAA,CAAzBoC,MAAM,CAACK,QAAQ,kBACrC5C,mBAAA,CAAkD,QAAlD6C,WAAkD,EAAA1C,gBAAA,CAA3BoC,MAAM,CAACO,UAAU,iB;uCAK9C9C,mBAAA,CAWM,OAXN+C,WAWM,G,0BAVJ/C,mBAAA,CAAe,YAAX,QAAM,sBACCgD,MAAM,CAACC,IAAI,CAAC7C,MAAA,CAAA8C,WAAW,EAAEhB,MAAM,U,cAA1CpC,mBAAA,CAAiF,OAAjFqD,WAAiF,EAAZ,QAAM,M,cAC3ErD,mBAAA,CAOK,MAPLsD,WAOK,I,kBANHtD,mBAAA,CAKKuC,SAAA,QAAAC,WAAA,CALwBlC,MAAA,CAAA8C,WAAW,GAA5BG,IAAI,EAAEC,MAAM;yBAAxBxD,mBAAA,CAKK;MALsC2C,GAAG,EAAEa,MAAM;MAAE5D,KAAK,EAAC;QAC5DM,mBAAA,CAA6C,QAA7CuD,WAA6C,EAAApD,gBAAA,CAAvBkD,IAAI,CAACT,QAAQ,kBACnC5C,mBAAA,CAA8C,QAA9CwD,WAA8C,EAA1B,KAAG,GAAArD,gBAAA,CAAGkD,IAAI,CAAC9C,KAAK,kBACpCP,mBAAA,CAA6C,QAA7CyD,WAA6C,EAAAtD,gBAAA,CAAtBkD,IAAI,CAAC/C,KAAK,IAAG,IAAE,iBACtCN,mBAAA,CAAiF;MAA3EN,KAAK,EAAAgE,eAAA,EAAC,QAAQ,EAASL,IAAI,CAACM,MAAM;wBAAKvD,MAAA,CAAAwD,aAAa,CAACP,IAAI,CAACM,MAAM,yB;qEAOhF3D,mBAAA,CAGM;IAHDN,KAAK,EAAC;EAAmB,IAC5BM,mBAAA,CAAmC,WAAhC,8BAA4B,GAC/BA,mBAAA,CAA6B,WAA1B,wBAAsB,E,sBAGhBI,MAAA,CAAAyD,QAAQ,I,cAAnB/D,mBAAA,CAcM,OAdNgE,WAcM,GAbJ9D,mBAAA,CAYM,OAZN+D,WAYM,G,0BAXJ/D,mBAAA,CAAa,YAAT,MAAI,sBACRA,mBAAA,CAKM,OALNgE,WAKM,GAJJhE,mBAAA,CAAkC,WAA/B,QAAM,GAAAG,gBAAA,CAAGC,MAAA,CAAAC,SAAS,CAACC,KAAK,kBAC3BN,mBAAA,CAA6B,WAA1B,QAAM,GAAAG,gBAAA,CAAGC,MAAA,CAAA6D,UAAU,kBACtBjE,mBAAA,CAAgC,WAA7B,QAAM,GAAAG,gBAAA,CAAGC,MAAA,CAAA8D,YAAY,IAAG,GAAC,iBAC5BlE,mBAAA,CAAkC,WAA/B,QAAM,GAAAG,gBAAA,CAAGC,MAAA,CAAAC,SAAS,CAACE,KAAK,iB,GAE7BP,mBAAA,CAGM,OAHNmE,WAGM,GAFJnE,mBAAA,CAA8D;IAArDW,OAAK,EAAAC,MAAA,QAAAA,MAAA,UAAAC,IAAA,KAAET,MAAA,CAAAgE,WAAA,IAAAhE,MAAA,CAAAgE,WAAA,IAAAvD,IAAA,CAAW;IAAEnB,KAAK,EAAC;KAAc,MAAI,GACrDM,mBAAA,CAAqE;IAA5DW,OAAK,EAAAC,MAAA,QAAAA,MAAA,UAAAC,IAAA,KAAET,MAAA,CAAAiE,eAAA,IAAAjE,MAAA,CAAAiE,eAAA,IAAAxD,IAAA,CAAe;IAAEnB,KAAK,EAAC;KAAgB,OAAK,E","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/1f025ae82a4c8f1779b12d51cbb9cd127841d0d483f4a55bd0cc730870bff531.json b/goldminer/frontend/node_modules/.cache/babel-loader/1f025ae82a4c8f1779b12d51cbb9cd127841d0d483f4a55bd0cc730870bff531.json new file mode 100644 index 00000000..475b119d --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/1f025ae82a4c8f1779b12d51cbb9cd127841d0d483f4a55bd0cc730870bff531.json @@ -0,0 +1 @@ +{"ast":null,"code":"'use strict';\n\nimport \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']);\n\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} rawHeaders Headers needing to be parsed\r\n *\r\n * @returns {Object} Headers parsed into an object\r\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n return;\n }\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n return parsed;\n};","map":{"version":3,"names":["utils","ignoreDuplicateOf","toObjectSet","rawHeaders","parsed","key","val","i","split","forEach","parser","line","indexOf","substring","trim","toLowerCase","push"],"sources":["E:/学习/网络应用开发/Goldminer/Goldminer_new/goldminer/frontend/node_modules/axios/lib/helpers/parseHeaders.js"],"sourcesContent":["'use strict';\r\n\r\nimport utils from './../utils.js';\r\n\r\n// RawAxiosHeaders whose duplicates are ignored by node\r\n// c.f. https://nodejs.org/api/http.html#http_message_headers\r\nconst ignoreDuplicateOf = utils.toObjectSet([\r\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\r\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\r\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\r\n 'referer', 'retry-after', 'user-agent'\r\n]);\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} rawHeaders Headers needing to be parsed\r\n *\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nexport default rawHeaders => {\r\n const parsed = {};\r\n let key;\r\n let val;\r\n let i;\r\n\r\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\r\n i = line.indexOf(':');\r\n key = line.substring(0, i).trim().toLowerCase();\r\n val = line.substring(i + 1).trim();\r\n\r\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\r\n return;\r\n }\r\n\r\n if (key === 'set-cookie') {\r\n if (parsed[key]) {\r\n parsed[key].push(val);\r\n } else {\r\n parsed[key] = [val];\r\n }\r\n } else {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n"],"mappings":"AAAA,YAAY;;AAAC;AAAA;AAAA;AAEb,OAAOA,KAAK,MAAM,eAAe;;AAEjC;AACA;AACA,MAAMC,iBAAiB,GAAGD,KAAK,CAACE,WAAW,CAAC,CAC1C,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAChE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,qBAAqB,EACrE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAClE,SAAS,EAAE,aAAa,EAAE,YAAY,CACvC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAeC,UAAU,IAAI;EAC3B,MAAMC,MAAM,GAAG,CAAC,CAAC;EACjB,IAAIC,GAAG;EACP,IAAIC,GAAG;EACP,IAAIC,CAAC;EAELJ,UAAU,IAAIA,UAAU,CAACK,KAAK,CAAC,IAAI,CAAC,CAACC,OAAO,CAAC,SAASC,MAAMA,CAACC,IAAI,EAAE;IACjEJ,CAAC,GAAGI,IAAI,CAACC,OAAO,CAAC,GAAG,CAAC;IACrBP,GAAG,GAAGM,IAAI,CAACE,SAAS,CAAC,CAAC,EAAEN,CAAC,CAAC,CAACO,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IAC/CT,GAAG,GAAGK,IAAI,CAACE,SAAS,CAACN,CAAC,GAAG,CAAC,CAAC,CAACO,IAAI,CAAC,CAAC;IAElC,IAAI,CAACT,GAAG,IAAKD,MAAM,CAACC,GAAG,CAAC,IAAIJ,iBAAiB,CAACI,GAAG,CAAE,EAAE;MACnD;IACF;IAEA,IAAIA,GAAG,KAAK,YAAY,EAAE;MACxB,IAAID,MAAM,CAACC,GAAG,CAAC,EAAE;QACfD,MAAM,CAACC,GAAG,CAAC,CAACW,IAAI,CAACV,GAAG,CAAC;MACvB,CAAC,MAAM;QACLF,MAAM,CAACC,GAAG,CAAC,GAAG,CAACC,GAAG,CAAC;MACrB;IACF,CAAC,MAAM;MACLF,MAAM,CAACC,GAAG,CAAC,GAAGD,MAAM,CAACC,GAAG,CAAC,GAAGD,MAAM,CAACC,GAAG,CAAC,GAAG,IAAI,GAAGC,GAAG,GAAGA,GAAG;IAC5D;EACF,CAAC,CAAC;EAEF,OAAOF,MAAM;AACf,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/goldminer/frontend/node_modules/.cache/babel-loader/1f5211af313ffcea215c71cdf31686269d07e4445abd66c435a736b864faa935.json b/goldminer/frontend/node_modules/.cache/babel-loader/1f5211af313ffcea215c71cdf31686269d07e4445abd66c435a736b864faa935.json new file mode 100644 index 00000000..ae9e07aa --- /dev/null +++ b/goldminer/frontend/node_modules/.cache/babel-loader/1f5211af313ffcea215c71cdf31686269d07e4445abd66c435a736b864faa935.json @@ -0,0 +1 @@ +{"ast":null,"code":"import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\n/**\r\n* @vue/runtime-dom v3.5.16\r\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\r\n* @license MIT\r\n**/\nimport { warn, BaseTransitionPropsValidators, h, BaseTransition, assertNumber, getCurrentInstance, onBeforeUpdate, queuePostFlushCb, onMounted, watch, onUnmounted, Fragment, Static, camelize, callWithAsyncErrorHandling, defineComponent, nextTick, unref, createVNode, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, Text, createRenderer, createHydrationRenderer, isRuntimeOnly } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { extend, isObject, toNumber, isArray, NOOP, isString, hyphenate, capitalize, isSpecialBooleanAttr, includeBooleanAttr, isSymbol, isFunction, isOn, isModelListener, camelize as camelize$1, isPlainObject, hasOwn, EMPTY_OBJ, looseToNumber, looseIndexOf, isSet, looseEqual, invokeArrayFns, isHTMLTag, isSVGTag, isMathMLTag } from '@vue/shared';\nlet policy = void 0;\nconst tt = typeof window !== \"undefined\" && window.trustedTypes;\nif (tt) {\n try {\n policy = /* @__PURE__ */tt.createPolicy(\"vue\", {\n createHTML: val => val\n });\n } catch (e) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Error creating trusted types policy: ${e}`);\n }\n}\nconst unsafeToTrustedHTML = policy ? val => policy.createHTML(val) : val => val;\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst mathmlNS = \"http://www.w3.org/1998/Math/MathML\";\nconst doc = typeof document !== \"undefined\" ? document : null;\nconst templateContainer = doc && /* @__PURE__ */doc.createElement(\"template\");\nconst nodeOps = {\n insert: (child, parent, anchor) => {\n parent.insertBefore(child, anchor || null);\n },\n remove: child => {\n const parent = child.parentNode;\n if (parent) {\n parent.removeChild(child);\n }\n },\n createElement: (tag, namespace, is, props) => {\n const el = namespace === \"svg\" ? doc.createElementNS(svgNS, tag) : namespace === \"mathml\" ? doc.createElementNS(mathmlNS, tag) : is ? doc.createElement(tag, {\n is\n }) : doc.createElement(tag);\n if (tag === \"select\" && props && props.multiple != null) {\n el.setAttribute(\"multiple\", props.multiple);\n }\n return el;\n },\n createText: text => doc.createTextNode(text),\n createComment: text => doc.createComment(text),\n setText: (node, text) => {\n node.nodeValue = text;\n },\n setElementText: (el, text) => {\n el.textContent = text;\n },\n parentNode: node => node.parentNode,\n nextSibling: node => node.nextSibling,\n querySelector: selector => doc.querySelector(selector),\n setScopeId(el, id) {\n el.setAttribute(id, \"\");\n },\n // __UNSAFE__\n // Reason: innerHTML.\n // Static content here can only come from compiled templates.\n // As long as the user only uses trusted templates, this is safe.\n insertStaticContent(content, parent, anchor, namespace, start, end) {\n const before = anchor ? anchor.previousSibling : parent.lastChild;\n if (start && (start === end || start.nextSibling)) {\n while (true) {\n parent.insertBefore(start.cloneNode(true), anchor);\n if (start === end || !(start = start.nextSibling)) break;\n }\n } else {\n templateContainer.innerHTML = unsafeToTrustedHTML(namespace === \"svg\" ? `${content}` : namespace === \"mathml\" ? `${content}` : content);\n const template = templateContainer.content;\n if (namespace === \"svg\" || namespace === \"mathml\") {\n const wrapper = template.firstChild;\n while (wrapper.firstChild) {\n template.appendChild(wrapper.firstChild);\n }\n template.removeChild(wrapper);\n }\n parent.insertBefore(template, anchor);\n }\n return [\n // first\n before ? before.nextSibling : parent.firstChild,\n // last\n anchor ? anchor.previousSibling : parent.lastChild];\n }\n};\nconst TRANSITION = \"transition\";\nconst ANIMATION = \"animation\";\nconst vtcKey = Symbol(\"_vtc\");\nconst DOMTransitionPropsValidators = {\n name: String,\n type: String,\n css: {\n type: Boolean,\n default: true\n },\n duration: [String, Number, Object],\n enterFromClass: String,\n enterActiveClass: String,\n enterToClass: String,\n appearFromClass: String,\n appearActiveClass: String,\n appearToClass: String,\n leaveFromClass: String,\n leaveActiveClass: String,\n leaveToClass: String\n};\nconst TransitionPropsValidators = /* @__PURE__ */extend({}, BaseTransitionPropsValidators, DOMTransitionPropsValidators);\nconst decorate$1 = t => {\n t.displayName = \"Transition\";\n t.props = TransitionPropsValidators;\n return t;\n};\nconst Transition = /* @__PURE__ */decorate$1((props, {\n slots\n}) => h(BaseTransition, resolveTransitionProps(props), slots));\nconst callHook = (hook, args = []) => {\n if (isArray(hook)) {\n hook.forEach(h2 => h2(...args));\n } else if (hook) {\n hook(...args);\n }\n};\nconst hasExplicitCallback = hook => {\n return hook ? isArray(hook) ? hook.some(h2 => h2.length > 1) : hook.length > 1 : false;\n};\nfunction resolveTransitionProps(rawProps) {\n const baseProps = {};\n for (const key in rawProps) {\n if (!(key in DOMTransitionPropsValidators)) {\n baseProps[key] = rawProps[key];\n }\n }\n if (rawProps.css === false) {\n return baseProps;\n }\n const {\n name = \"v\",\n type,\n duration,\n enterFromClass = `${name}-enter-from`,\n enterActiveClass = `${name}-enter-active`,\n enterToClass = `${name}-enter-to`,\n appearFromClass = enterFromClass,\n appearActiveClass = enterActiveClass,\n appearToClass = enterToClass,\n leaveFromClass = `${name}-leave-from`,\n leaveActiveClass = `${name}-leave-active`,\n leaveToClass = `${name}-leave-to`\n } = rawProps;\n const durations = normalizeDuration(duration);\n const enterDuration = durations && durations[0];\n const leaveDuration = durations && durations[1];\n const {\n onBeforeEnter,\n onEnter,\n onEnterCancelled,\n onLeave,\n onLeaveCancelled,\n onBeforeAppear = onBeforeEnter,\n onAppear = onEnter,\n onAppearCancelled = onEnterCancelled\n } = baseProps;\n const finishEnter = (el, isAppear, done, isCancelled) => {\n el._enterCancelled = isCancelled;\n removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n done && done();\n };\n const finishLeave = (el, done) => {\n el._isLeaving = false;\n removeTransitionClass(el, leaveFromClass);\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n done && done();\n };\n const makeEnterHook = isAppear => {\n return (el, done) => {\n const hook = isAppear ? onAppear : onEnter;\n const resolve = () => finishEnter(el, isAppear, done);\n callHook(hook, [el, resolve]);\n nextFrame(() => {\n removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n if (!hasExplicitCallback(hook)) {\n whenTransitionEnds(el, type, enterDuration, resolve);\n }\n });\n };\n };\n return extend(baseProps, {\n onBeforeEnter(el) {\n callHook(onBeforeEnter, [el]);\n addTransitionClass(el, enterFromClass);\n addTransitionClass(el, enterActiveClass);\n },\n onBeforeAppear(el) {\n callHook(onBeforeAppear, [el]);\n addTransitionClass(el, appearFromClass);\n addTransitionClass(el, appearActiveClass);\n },\n onEnter: makeEnterHook(false),\n onAppear: makeEnterHook(true),\n onLeave(el, done) {\n el._isLeaving = true;\n const resolve = () => finishLeave(el, done);\n addTransitionClass(el, leaveFromClass);\n if (!el._enterCancelled) {\n forceReflow();\n addTransitionClass(el, leaveActiveClass);\n } else {\n addTransitionClass(el, leaveActiveClass);\n forceReflow();\n }\n nextFrame(() => {\n if (!el._isLeaving) {\n return;\n }\n removeTransitionClass(el, leaveFromClass);\n addTransitionClass(el, leaveToClass);\n if (!hasExplicitCallback(onLeave)) {\n whenTransitionEnds(el, type, leaveDuration, resolve);\n }\n });\n callHook(onLeave, [el, resolve]);\n },\n onEnterCancelled(el) {\n finishEnter(el, false, void 0, true);\n callHook(onEnterCancelled, [el]);\n },\n onAppearCancelled(el) {\n finishEnter(el, true, void 0, true);\n callHook(onAppearCancelled, [el]);\n },\n onLeaveCancelled(el) {\n finishLeave(el);\n callHook(onLeaveCancelled, [el]);\n }\n });\n}\nfunction normalizeDuration(duration) {\n if (duration == null) {\n return null;\n } else if (isObject(duration)) {\n return [NumberOf(duration.enter), NumberOf(duration.leave)];\n } else {\n const n = NumberOf(duration);\n return [n, n];\n }\n}\nfunction NumberOf(val) {\n const res = toNumber(val);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(res, \" explicit duration\");\n }\n return res;\n}\nfunction addTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach(c => c && el.classList.add(c));\n (el[vtcKey] || (el[vtcKey] = /* @__PURE__ */new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach(c => c && el.classList.remove(c));\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.delete(cls);\n if (!_vtc.size) {\n el[vtcKey] = void 0;\n }\n }\n}\nfunction nextFrame(cb) {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n const id = el._endId = ++endId;\n const resolveIfNotStale = () => {\n if (id === el._endId) {\n resolve();\n }\n };\n if (explicitTimeout != null) {\n return setTimeout(resolveIfNotStale, explicitTimeout);\n }\n const {\n type,\n timeout,\n propCount\n } = getTransitionInfo(el, expectedType);\n if (!type) {\n return resolve();\n }\n const endEvent = type + \"end\";\n let ended = 0;\n const end = () => {\n el.removeEventListener(endEvent, onEnd);\n resolveIfNotStale();\n };\n const onEnd = e => {\n if (e.target === el && ++ended >= propCount) {\n end();\n }\n };\n setTimeout(() => {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n const styles = window.getComputedStyle(el);\n const getStyleProperties = key => (styles[key] || \"\").split(\", \");\n const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n const animationTimeout = getTimeout(animationDelays, animationDurations);\n let type = null;\n let timeout = 0;\n let propCount = 0;\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;\n propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;\n }\n const hasTransform = type === TRANSITION && /\\b(transform|all)(,|$)/.test(getStyleProperties(`${TRANSITION}Property`).toString());\n return {\n type,\n timeout,\n propCount,\n hasTransform\n };\n}\nfunction getTimeout(delays, durations) {\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\nfunction toMs(s) {\n if (s === \"auto\") return 0;\n return Number(s.slice(0, -1).replace(\",\", \".\")) * 1e3;\n}\nfunction forceReflow() {\n return document.body.offsetHeight;\n}\nfunction patchClass(el, value, isSVG) {\n const transitionClasses = el[vtcKey];\n if (transitionClasses) {\n value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(\" \");\n }\n if (value == null) {\n el.removeAttribute(\"class\");\n } else if (isSVG) {\n el.setAttribute(\"class\", value);\n } else {\n el.className = value;\n }\n}\nconst vShowOriginalDisplay = Symbol(\"_vod\");\nconst vShowHidden = Symbol(\"_vsh\");\nconst vShow = {\n beforeMount(el, {\n value\n }, {\n transition\n }) {\n el[vShowOriginalDisplay] = el.style.display === \"none\" ? \"\" : el.style.display;\n if (transition && value) {\n transition.beforeEnter(el);\n } else {\n setDisplay(el, value);\n }\n },\n mounted(el, {\n value\n }, {\n transition\n }) {\n if (transition && value) {\n transition.enter(el);\n }\n },\n updated(el, {\n value,\n oldValue\n }, {\n transition\n }) {\n if (!value === !oldValue) return;\n if (transition) {\n if (value) {\n transition.beforeEnter(el);\n setDisplay(el, true);\n transition.enter(el);\n } else {\n transition.leave(el, () => {\n setDisplay(el, false);\n });\n }\n } else {\n setDisplay(el, value);\n }\n },\n beforeUnmount(el, {\n value\n }) {\n setDisplay(el, value);\n }\n};\nif (!!(process.env.NODE_ENV !== \"production\")) {\n vShow.name = \"show\";\n}\nfunction setDisplay(el, value) {\n el.style.display = value ? el[vShowOriginalDisplay] : \"none\";\n el[vShowHidden] = !value;\n}\nfunction initVShowForSSR() {\n vShow.getSSRProps = ({\n value\n }) => {\n if (!value) {\n return {\n style: {\n display: \"none\"\n }\n };\n }\n };\n}\nconst CSS_VAR_TEXT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"CSS_VAR_TEXT\" : \"\");\nfunction useCssVars(getter) {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssVars is called without current active component instance.`);\n return;\n }\n const updateTeleports = instance.ut = (vars = getter(instance.proxy)) => {\n Array.from(document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)).forEach(node => setVarsOnNode(node, vars));\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.getCssVars = () => getter(instance.proxy);\n }\n const setVars = () => {\n const vars = getter(instance.proxy);\n if (instance.ce) {\n setVarsOnNode(instance.ce, vars);\n } else {\n setVarsOnVNode(instance.subTree, vars);\n }\n updateTeleports(vars);\n };\n onBeforeUpdate(() => {\n queuePostFlushCb(setVars);\n });\n onMounted(() => {\n watch(setVars, NOOP, {\n flush: \"post\"\n });\n const ob = new MutationObserver(setVars);\n ob.observe(instance.subTree.el.parentNode, {\n childList: true\n });\n onUnmounted(() => ob.disconnect());\n });\n}\nfunction setVarsOnVNode(vnode, vars) {\n if (vnode.shapeFlag & 128) {\n const suspense = vnode.suspense;\n vnode = suspense.activeBranch;\n if (suspense.pendingBranch && !suspense.isHydrating) {\n suspense.effects.push(() => {\n setVarsOnVNode(suspense.activeBranch, vars);\n });\n }\n }\n while (vnode.component) {\n vnode = vnode.component.subTree;\n }\n if (vnode.shapeFlag & 1 && vnode.el) {\n setVarsOnNode(vnode.el, vars);\n } else if (vnode.type === Fragment) {\n vnode.children.forEach(c => setVarsOnVNode(c, vars));\n } else if (vnode.type === Static) {\n let {\n el,\n anchor\n } = vnode;\n while (el) {\n setVarsOnNode(el, vars);\n if (el === anchor) break;\n el = el.nextSibling;\n }\n }\n}\nfunction setVarsOnNode(el, vars) {\n if (el.nodeType === 1) {\n const style = el.style;\n let cssText = \"\";\n for (const key in vars) {\n style.setProperty(`--${key}`, vars[key]);\n cssText += `--${key}: ${vars[key]};`;\n }\n style[CSS_VAR_TEXT] = cssText;\n }\n}\nconst displayRE = /(^|;)\\s*display\\s*:/;\nfunction patchStyle(el, prev, next) {\n const style = el.style;\n const isCssString = isString(next);\n let hasControlledDisplay = false;\n if (next && !isCssString) {\n if (prev) {\n if (!isString(prev)) {\n for (const key in prev) {\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n } else {\n for (const prevStyle of prev.split(\";\")) {\n const key = prevStyle.slice(0, prevStyle.indexOf(\":\")).trim();\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n }\n }\n for (const key in next) {\n if (key === \"display\") {\n hasControlledDisplay = true;\n }\n setStyle(style, key, next[key]);\n }\n } else {\n if (isCssString) {\n if (prev !== next) {\n const cssVarText = style[CSS_VAR_TEXT];\n if (cssVarText) {\n next += \";\" + cssVarText;\n }\n style.cssText = next;\n hasControlledDisplay = displayRE.test(next);\n }\n } else if (prev) {\n el.removeAttribute(\"style\");\n }\n }\n if (vShowOriginalDisplay in el) {\n el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : \"\";\n if (el[vShowHidden]) {\n style.display = \"none\";\n }\n }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n if (isArray(val)) {\n val.forEach(v => setStyle(style, name, v));\n } else {\n if (val == null) val = \"\";\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (semicolonRE.test(val)) {\n warn(`Unexpected semicolon at the end of '${name}' style value: '${val}'`);\n }\n }\n if (name.startsWith(\"--\")) {\n style.setProperty(name, val);\n } else {\n const prefixed = autoPrefix(style, name);\n if (importantRE.test(val)) {\n style.setProperty(hyphenate(prefixed), val.replace(importantRE, \"\"), \"important\");\n } else {\n style[prefixed] = val;\n }\n }\n }\n}\nconst prefixes = [\"Webkit\", \"Moz\", \"ms\"];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n const cached = prefixCache[rawName];\n if (cached) {\n return cached;\n }\n let name = camelize(rawName);\n if (name !== \"filter\" && name in style) {\n return prefixCache[rawName] = name;\n }\n name = capitalize(name);\n for (let i = 0; i < prefixes.length; i++) {\n const prefixed = prefixes[i] + name;\n if (prefixed in style) {\n return prefixCache[rawName] = prefixed;\n }\n }\n return rawName;\n}\nconst xlinkNS = \"http://www.w3.org/1999/xlink\";\nfunction patchAttr(el, key, value, isSVG, instance, isBoolean = isSpecialBooleanAttr(key)) {\n if (isSVG && key.startsWith(\"xlink:\")) {\n if (value == null) {\n el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n if (value == null || isBoolean && !includeBooleanAttr(value)) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, isBoolean ? \"\" : isSymbol(value) ? String(value) : value);\n }\n }\n}\nfunction patchDOMProp(el, key, value, parentComponent, attrName) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n if (value != null) {\n el[key] = key === \"innerHTML\" ? unsafeToTrustedHTML(value) : value;\n }\n return;\n }\n const tag = el.tagName;\n if (key === \"value\" && tag !== \"PROGRESS\" &&\n // custom elements may use _value internally\n !tag.includes(\"-\")) {\n const oldValue = tag === \"OPTION\" ? el.getAttribute(\"value\") || \"\" : el.value;\n const newValue = value == null ?\n // #11647: value should be set as empty string for null and undefined,\n // but should be set as 'on'.\n el.type === \"checkbox\" ? \"on\" : \"\" : String(value);\n if (oldValue !== newValue || !(\"_value\" in el)) {\n el.value = newValue;\n }\n if (value == null) {\n el.removeAttribute(key);\n }\n el._value = value;\n return;\n }\n let needRemove = false;\n if (value === \"\" || value == null) {\n const type = typeof el[key];\n if (type === \"boolean\") {\n value = includeBooleanAttr(value);\n } else if (value == null && type === \"string\") {\n value = \"\";\n needRemove = true;\n } else if (type === \"number\") {\n value = 0;\n needRemove = true;\n }\n }\n try {\n el[key] = value;\n } catch (e) {\n if (!!(process.env.NODE_ENV !== \"production\") && !needRemove) {\n warn(`Failed setting prop \"${key}\" on <${tag.toLowerCase()}>: value ${value} is invalid.`, e);\n }\n }\n needRemove && el.removeAttribute(attrName || key);\n}\nfunction addEventListener(el, event, handler, options) {\n el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n el.removeEventListener(event, handler, options);\n}\nconst veiKey = Symbol(\"_vei\");\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n const invokers = el[veiKey] || (el[veiKey] = {});\n const existingInvoker = invokers[rawName];\n if (nextValue && existingInvoker) {\n existingInvoker.value = !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue;\n } else {\n const [name, options] = parseName(rawName);\n if (nextValue) {\n const invoker = invokers[rawName] = createInvoker(!!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue, instance);\n addEventListener(el, name, invoker, options);\n } else if (existingInvoker) {\n removeEventListener(el, name, existingInvoker, options);\n invokers[rawName] = void 0;\n }\n }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n let options;\n if (optionsModifierRE.test(name)) {\n options = {};\n let m;\n while (m = name.match(optionsModifierRE)) {\n name = name.slice(0, name.length - m[0].length);\n options[m[0].toLowerCase()] = true;\n }\n }\n const event = name[2] === \":\" ? name.slice(3) : hyphenate(name.slice(2));\n return [event, options];\n}\nlet cachedNow = 0;\nconst p = /* @__PURE__ */Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now());\nfunction createInvoker(initialValue, instance) {\n const invoker = e => {\n if (!e._vts) {\n e._vts = Date.now();\n } else if (e._vts <= invoker.attached) {\n return;\n }\n callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5, [e]);\n };\n invoker.value = initialValue;\n invoker.attached = getNow();\n return invoker;\n}\nfunction sanitizeEventValue(value, propName) {\n if (isFunction(value) || isArray(value)) {\n return value;\n }\n warn(`Wrong type passed as event handler to ${propName} - did you forget @ or : in front of your prop?\nExpected function or array of functions, received type ${typeof value}.`);\n return NOOP;\n}\nfunction patchStopImmediatePropagation(e, value) {\n if (isArray(value)) {\n const originalStop = e.stopImmediatePropagation;\n e.stopImmediatePropagation = () => {\n originalStop.call(e);\n e._stopped = true;\n };\n return value.map(fn => e2 => !e2._stopped && fn && fn(e2));\n } else {\n return value;\n }\n}\nconst isNativeOn = key => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 &&\n// lowercase letter\nkey.charCodeAt(2) > 96 && key.charCodeAt(2) < 123;\nconst patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => {\n const isSVG = namespace === \"svg\";\n if (key === \"class\") {\n patchClass(el, nextValue, isSVG);\n } else if (key === \"style\") {\n patchStyle(el, prevValue, nextValue);\n } else if (isOn(key)) {\n if (!isModelListener(key)) {\n patchEvent(el, key, prevValue, nextValue, parentComponent);\n }\n } else if (key[0] === \".\" ? (key = key.slice(1), true) : key[0] === \"^\" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {\n patchDOMProp(el, key, nextValue);\n if (!el.tagName.includes(\"-\") && (key === \"value\" || key === \"checked\" || key === \"selected\")) {\n patchAttr(el, key, nextValue, isSVG, parentComponent, key !== \"value\");\n }\n } else if (\n // #11081 force set props for possible async custom element\n el._isVueCE && (/[A-Z]/.test(key) || !isString(nextValue))) {\n patchDOMProp(el, camelize$1(key), nextValue, parentComponent, key);\n } else {\n if (key === \"true-value\") {\n el._trueValue = nextValue;\n } else if (key === \"false-value\") {\n el._falseValue = nextValue;\n }\n patchAttr(el, key, nextValue, isSVG);\n }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n if (isSVG) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n return true;\n }\n if (key in el && isNativeOn(key) && isFunction(value)) {\n return true;\n }\n return false;\n }\n if (key === \"spellcheck\" || key === \"draggable\" || key === \"translate\" || key === \"autocorrect\") {\n return false;\n }\n if (key === \"form\") {\n return false;\n }\n if (key === \"list\" && el.tagName === \"INPUT\") {\n return false;\n }\n if (key === \"type\" && el.tagName === \"TEXTAREA\") {\n return false;\n }\n if (key === \"width\" || key === \"height\") {\n const tag = el.tagName;\n if (tag === \"IMG\" || tag === \"VIDEO\" || tag === \"CANVAS\" || tag === \"SOURCE\") {\n return false;\n }\n }\n if (isNativeOn(key) && isString(value)) {\n return false;\n }\n return key in el;\n}\nconst REMOVAL = {};\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineCustomElement(options, extraOptions, _createApp) {\n const Comp = defineComponent(options, extraOptions);\n if (isPlainObject(Comp)) extend(Comp, extraOptions);\n class VueCustomElement extends VueElement {\n constructor(initialProps) {\n super(Comp, initialProps, _createApp);\n }\n }\n VueCustomElement.def = Comp;\n return VueCustomElement;\n}\n/*! #__NO_SIDE_EFFECTS__ */\nconst defineSSRCustomElement = /* @__NO_SIDE_EFFECTS__ */(options, extraOptions) => {\n return /* @__PURE__ */defineCustomElement(options, extraOptions, createSSRApp);\n};\nconst BaseClass = typeof HTMLElement !== \"undefined\" ? HTMLElement : class {};\nclass VueElement extends BaseClass {\n constructor(_def, _props = {}, _createApp = createApp) {\n super();\n this._def = _def;\n this._props = _props;\n this._createApp = _createApp;\n this._isVueCE = true;\n /**\r\n * @internal\r\n */\n this._instance = null;\n /**\r\n * @internal\r\n */\n this._app = null;\n /**\r\n * @internal\r\n */\n this._nonce = this._def.nonce;\n this._connected = false;\n this._resolved = false;\n this._numberProps = null;\n this._styleChildren = /* @__PURE__ */new WeakSet();\n this._ob = null;\n if (this.shadowRoot && _createApp !== createApp) {\n this._root = this.shadowRoot;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && this.shadowRoot) {\n warn(`Custom element has pre-rendered declarative shadow root but is not defined as hydratable. Use \\`defineSSRCustomElement\\`.`);\n }\n if (_def.shadowRoot !== false) {\n this.attachShadow({\n mode: \"open\"\n });\n this._root = this.shadowRoot;\n } else {\n this._root = this;\n }\n }\n }\n connectedCallback() {\n if (!this.isConnected) return;\n if (!this.shadowRoot && !this._resolved) {\n this._parseSlots();\n }\n this._connected = true;\n let parent = this;\n while (parent = parent && (parent.parentNode || parent.host)) {\n if (parent instanceof VueElement) {\n this._parent = parent;\n break;\n }\n }\n if (!this._instance) {\n if (this._resolved) {\n this._mount(this._def);\n } else {\n if (parent && parent._pendingResolve) {\n this._pendingResolve = parent._pendingResolve.then(() => {\n this._pendingResolve = void 0;\n this._resolveDef();\n });\n } else {\n this._resolveDef();\n }\n }\n }\n }\n _setParent(parent = this._parent) {\n if (parent) {\n this._instance.parent = parent._instance;\n this._inheritParentContext(parent);\n }\n }\n _inheritParentContext(parent = this._parent) {\n if (parent && this._app) {\n Object.setPrototypeOf(this._app._context.provides, parent._instance.provides);\n }\n }\n disconnectedCallback() {\n this._connected = false;\n nextTick(() => {\n if (!this._connected) {\n if (this._ob) {\n this._ob.disconnect();\n this._ob = null;\n }\n this._app && this._app.unmount();\n if (this._instance) this._instance.ce = void 0;\n this._app = this._instance = null;\n }\n });\n }\n /**\r\n * resolve inner component definition (handle possible async component)\r\n */\n _resolveDef() {\n if (this._pendingResolve) {\n return;\n }\n for (let i = 0; i < this.attributes.length; i++) {\n this._setAttr(this.attributes[i].name);\n }\n this._ob = new MutationObserver(mutations => {\n for (const m of mutations) {\n this._setAttr(m.attributeName);\n }\n });\n this._ob.observe(this, {\n attributes: true\n });\n const resolve = (def, isAsync = false) => {\n this._resolved = true;\n this._pendingResolve = void 0;\n const {\n props,\n styles\n } = def;\n let numberProps;\n if (props && !isArray(props)) {\n for (const key in props) {\n const opt = props[key];\n if (opt === Number || opt && opt.type === Number) {\n if (key in this._props) {\n this._props[key] = toNumber(this._props[key]);\n }\n (numberProps || (numberProps = /* @__PURE__ */Object.create(null)))[camelize$1(key)] = true;\n }\n }\n }\n this._numberProps = numberProps;\n this._resolveProps(def);\n if (this.shadowRoot) {\n this._applyStyles(styles);\n } else if (!!(process.env.NODE_ENV !== \"production\") && styles) {\n warn(\"Custom element style injection is not supported when using shadowRoot: false\");\n }\n this._mount(def);\n };\n const asyncDef = this._def.__asyncLoader;\n if (asyncDef) {\n this._pendingResolve = asyncDef().then(def => resolve(this._def = def, true));\n } else {\n resolve(this._def);\n }\n }\n _mount(def) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) && !def.name) {\n def.name = \"VueElement\";\n }\n this._app = this._createApp(def);\n this._inheritParentContext();\n if (def.configureApp) {\n def.configureApp(this._app);\n }\n this._app._ceVNode = this._createVNode();\n this._app.mount(this._root);\n const exposed = this._instance && this._instance.exposed;\n if (!exposed) return;\n for (const key in exposed) {\n if (!hasOwn(this, key)) {\n Object.defineProperty(this, key, {\n // unwrap ref to be consistent with public instance behavior\n get: () => unref(exposed[key])\n });\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`Exposed property \"${key}\" already exists on custom element.`);\n }\n }\n }\n _resolveProps(def) {\n const {\n props\n } = def;\n const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n for (const key of Object.keys(this)) {\n if (key[0] !== \"_\" && declaredPropKeys.includes(key)) {\n this._setProp(key, this[key]);\n }\n }\n for (const key of declaredPropKeys.map(camelize$1)) {\n Object.defineProperty(this, key, {\n get() {\n return this._getProp(key);\n },\n set(val) {\n this._setProp(key, val, true, true);\n }\n });\n }\n }\n _setAttr(key) {\n if (key.startsWith(\"data-v-\")) return;\n const has = this.hasAttribute(key);\n let value = has ? this.getAttribute(key) : REMOVAL;\n const camelKey = camelize$1(key);\n if (has && this._numberProps && this._numberProps[camelKey]) {\n value = toNumber(value);\n }\n this._setProp(camelKey, value, false, true);\n }\n /**\r\n * @internal\r\n */\n _getProp(key) {\n return this._props[key];\n }\n /**\r\n * @internal\r\n */\n _setProp(key, val, shouldReflect = true, shouldUpdate = false) {\n if (val !== this._props[key]) {\n if (val === REMOVAL) {\n delete this._props[key];\n } else {\n this._props[key] = val;\n if (key === \"key\" && this._app) {\n this._app._ceVNode.key = val;\n }\n }\n if (shouldUpdate && this._instance) {\n this._update();\n }\n if (shouldReflect) {\n const ob = this._ob;\n ob && ob.disconnect();\n if (val === true) {\n this.setAttribute(hyphenate(key), \"\");\n } else if (typeof val === \"string\" || typeof val === \"number\") {\n this.setAttribute(hyphenate(key), val + \"\");\n } else if (!val) {\n this.removeAttribute(hyphenate(key));\n }\n ob && ob.observe(this, {\n attributes: true\n });\n }\n }\n }\n _update() {\n const vnode = this._createVNode();\n if (this._app) vnode.appContext = this._app._context;\n render(vnode, this._root);\n }\n _createVNode() {\n const baseProps = {};\n if (!this.shadowRoot) {\n baseProps.onVnodeMounted = baseProps.onVnodeUpdated = this._renderSlots.bind(this);\n }\n const vnode = createVNode(this._def, extend(baseProps, this._props));\n if (!this._instance) {\n vnode.ce = instance => {\n this._instance = instance;\n instance.ce = this;\n instance.isCE = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ceReload = newStyles => {\n if (this._styles) {\n this._styles.forEach(s => this._root.removeChild(s));\n this._styles.length = 0;\n }\n this._applyStyles(newStyles);\n this._instance = null;\n this._update();\n };\n }\n const dispatch = (event, args) => {\n this.dispatchEvent(new CustomEvent(event, isPlainObject(args[0]) ? extend({\n detail: args\n }, args[0]) : {\n detail: args\n }));\n };\n instance.emit = (event, ...args) => {\n dispatch(event, args);\n if (hyphenate(event) !== event) {\n dispatch(hyphenate(event), args);\n }\n };\n this._setParent();\n };\n }\n return vnode;\n }\n _applyStyles(styles, owner) {\n if (!styles) return;\n if (owner) {\n if (owner === this._def || this._styleChildren.has(owner)) {\n return;\n }\n this._styleChildren.add(owner);\n }\n const nonce = this._nonce;\n for (let i = styles.length - 1; i >= 0; i--) {\n const s = document.createElement(\"style\");\n if (nonce) s.setAttribute(\"nonce\", nonce);\n s.textContent = styles[i];\n this.shadowRoot.prepend(s);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (owner) {\n if (owner.__hmrId) {\n if (!this._childStyles) this._childStyles = /* @__PURE__ */new Map();\n let entry = this._childStyles.get(owner.__hmrId);\n if (!entry) {\n this._childStyles.set(owner.__hmrId, entry = []);\n }\n entry.push(s);\n }\n } else {\n (this._styles || (this._styles = [])).push(s);\n }\n }\n }\n }\n /**\r\n * Only called when shadowRoot is false\r\n */\n _parseSlots() {\n const slots = this._slots = {};\n let n;\n while (n = this.firstChild) {\n const slotName = n.nodeType === 1 && n.getAttribute(\"slot\") || \"default\";\n (slots[slotName] || (slots[slotName] = [])).push(n);\n this.removeChild(n);\n }\n }\n /**\r\n * Only called when shadowRoot is false\r\n */\n _renderSlots() {\n const outlets = (this._teleportTarget || this).querySelectorAll(\"slot\");\n const scopeId = this._instance.type.__scopeId;\n for (let i = 0; i < outlets.length; i++) {\n const o = outlets[i];\n const slotName = o.getAttribute(\"name\") || \"default\";\n const content = this._slots[slotName];\n const parent = o.parentNode;\n if (content) {\n for (const n of content) {\n if (scopeId && n.nodeType === 1) {\n const id = scopeId + \"-s\";\n const walker = document.createTreeWalker(n, 1);\n n.setAttribute(id, \"\");\n let child;\n while (child = walker.nextNode()) {\n child.setAttribute(id, \"\");\n }\n }\n parent.insertBefore(n, o);\n }\n } else {\n while (o.firstChild) parent.insertBefore(o.firstChild, o);\n }\n parent.removeChild(o);\n }\n }\n /**\r\n * @internal\r\n */\n _injectChildStyle(comp) {\n this._applyStyles(comp.styles, comp);\n }\n /**\r\n * @internal\r\n */\n _removeChildStyle(comp) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this._styleChildren.delete(comp);\n if (this._childStyles && comp.__hmrId) {\n const oldStyles = this._childStyles.get(comp.__hmrId);\n if (oldStyles) {\n oldStyles.forEach(s => this._root.removeChild(s));\n oldStyles.length = 0;\n }\n }\n }\n }\n}\nfunction useHost(caller) {\n const instance = getCurrentInstance();\n const el = instance && instance.ce;\n if (el) {\n return el;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!instance) {\n warn(`${caller || \"useHost\"} called without an active component instance.`);\n } else {\n warn(`${caller || \"useHost\"} can only be used in components defined via defineCustomElement.`);\n }\n }\n return null;\n}\nfunction useShadowRoot() {\n const el = !!(process.env.NODE_ENV !== \"production\") ? useHost(\"useShadowRoot\") : useHost();\n return el && el.shadowRoot;\n}\nfunction useCssModule(name = \"$style\") {\n {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssModule must be called inside setup()`);\n return EMPTY_OBJ;\n }\n const modules = instance.type.__cssModules;\n if (!modules) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS modules injected.`);\n return EMPTY_OBJ;\n }\n const mod = modules[name];\n if (!mod) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS module named \"${name}\".`);\n return EMPTY_OBJ;\n }\n return mod;\n }\n}\nconst positionMap = /* @__PURE__ */new WeakMap();\nconst newPositionMap = /* @__PURE__ */new WeakMap();\nconst moveCbKey = Symbol(\"_moveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\nconst decorate = t => {\n delete t.props.mode;\n return t;\n};\nconst TransitionGroupImpl = /* @__PURE__ */decorate({\n name: \"TransitionGroup\",\n props: /* @__PURE__ */extend({}, TransitionPropsValidators, {\n tag: String,\n moveClass: String\n }),\n setup(props, {\n slots\n }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n let prevChildren;\n let children;\n onUpdated(() => {\n if (!prevChildren.length) {\n return;\n }\n const moveClass = props.moveClass || `${props.name || \"v\"}-move`;\n if (!hasCSSTransform(prevChildren[0].el, instance.vnode.el, moveClass)) {\n prevChildren = [];\n return;\n }\n prevChildren.forEach(callPendingCbs);\n prevChildren.forEach(recordPosition);\n const movedChildren = prevChildren.filter(applyTranslation);\n forceReflow();\n movedChildren.forEach(c => {\n const el = c.el;\n const style = el.style;\n addTransitionClass(el, moveClass);\n style.transform = style.webkitTransform = style.transitionDuration = \"\";\n const cb = el[moveCbKey] = e => {\n if (e && e.target !== el) {\n return;\n }\n if (!e || /transform$/.test(e.propertyName)) {\n el.removeEventListener(\"transitionend\", cb);\n el[moveCbKey] = null;\n removeTransitionClass(el, moveClass);\n }\n };\n el.addEventListener(\"transitionend\", cb);\n });\n prevChildren = [];\n });\n return () => {\n const rawProps = toRaw(props);\n const cssTransitionProps = resolveTransitionProps(rawProps);\n let tag = rawProps.tag || Fragment;\n prevChildren = [];\n if (children) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.el && child.el instanceof Element) {\n prevChildren.push(child);\n setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\n positionMap.set(child, child.el.getBoundingClientRect());\n }\n }\n }\n children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.key != null) {\n setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\n } else if (!!(process.env.NODE_ENV !== \"production\") && child.type !== Text) {\n warn(` children must be keyed.`);\n }\n }\n return createVNode(tag, null, children);\n };\n }\n});\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n const el = c.el;\n if (el[moveCbKey]) {\n el[moveCbKey]();\n }\n if (el[enterCbKey]) {\n el[enterCbKey]();\n }\n}\nfunction recordPosition(c) {\n newPositionMap.set(c, c.el.getBoundingClientRect());\n}\nfunction applyTranslation(c) {\n const oldPos = positionMap.get(c);\n const newPos = newPositionMap.get(c);\n const dx = oldPos.left - newPos.left;\n const dy = oldPos.top - newPos.top;\n if (dx || dy) {\n const s = c.el.style;\n s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n s.transitionDuration = \"0s\";\n return c;\n }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n const clone = el.cloneNode();\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.forEach(cls => {\n cls.split(/\\s+/).forEach(c => c && clone.classList.remove(c));\n });\n }\n moveClass.split(/\\s+/).forEach(c => c && clone.classList.add(c));\n clone.style.display = \"none\";\n const container = root.nodeType === 1 ? root : root.parentNode;\n container.appendChild(clone);\n const {\n hasTransform\n } = getTransitionInfo(clone);\n container.removeChild(clone);\n return hasTransform;\n}\nconst getModelAssigner = vnode => {\n const fn = vnode.props[\"onUpdate:modelValue\"] || false;\n return isArray(fn) ? value => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n const target = e.target;\n if (target.composing) {\n target.composing = false;\n target.dispatchEvent(new Event(\"input\"));\n }\n}\nconst assignKey = Symbol(\"_assign\");\nconst vModelText = {\n created(el, {\n modifiers: {\n lazy,\n trim,\n number\n }\n }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n const castToNumber = number || vnode.props && vnode.props.type === \"number\";\n addEventListener(el, lazy ? \"change\" : \"input\", e => {\n if (e.target.composing) return;\n let domValue = el.value;\n if (trim) {\n domValue = domValue.trim();\n }\n if (castToNumber) {\n domValue = looseToNumber(domValue);\n }\n el[assignKey](domValue);\n });\n if (trim) {\n addEventListener(el, \"change\", () => {\n el.value = el.value.trim();\n });\n }\n if (!lazy) {\n addEventListener(el, \"compositionstart\", onCompositionStart);\n addEventListener(el, \"compositionend\", onCompositionEnd);\n addEventListener(el, \"change\", onCompositionEnd);\n }\n },\n // set value on mounted so it's after min/max for type=\"range\"\n mounted(el, {\n value\n }) {\n el.value = value == null ? \"\" : value;\n },\n beforeUpdate(el, {\n value,\n oldValue,\n modifiers: {\n lazy,\n trim,\n number\n }\n }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (el.composing) return;\n const elValue = (number || el.type === \"number\") && !/^0\\d/.test(el.value) ? looseToNumber(el.value) : el.value;\n const newValue = value == null ? \"\" : value;\n if (elValue === newValue) {\n return;\n }\n if (document.activeElement === el && el.type !== \"range\") {\n if (lazy && value === oldValue) {\n return;\n }\n if (trim && el.value.trim() === newValue) {\n return;\n }\n }\n el.value = newValue;\n }\n};\nconst vModelCheckbox = {\n // #4096 array checkboxes need to be deep traversed\n deep: true,\n created(el, _, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n const modelValue = el._modelValue;\n const elementValue = getValue(el);\n const checked = el.checked;\n const assign = el[assignKey];\n if (isArray(modelValue)) {\n const index = looseIndexOf(modelValue, elementValue);\n const found = index !== -1;\n if (checked && !found) {\n assign(modelValue.concat(elementValue));\n } else if (!checked && found) {\n const filtered = [...modelValue];\n filtered.splice(index, 1);\n assign(filtered);\n }\n } else if (isSet(modelValue)) {\n const cloned = new Set(modelValue);\n if (checked) {\n cloned.add(elementValue);\n } else {\n cloned.delete(elementValue);\n }\n assign(cloned);\n } else {\n assign(getCheckboxValue(el, checked));\n }\n });\n },\n // set initial checked on mount to wait for true-value/false-value\n mounted: setChecked,\n beforeUpdate(el, binding, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n setChecked(el, binding, vnode);\n }\n};\nfunction setChecked(el, {\n value,\n oldValue\n}, vnode) {\n el._modelValue = value;\n let checked;\n if (isArray(value)) {\n checked = looseIndexOf(value, vnode.props.value) > -1;\n } else if (isSet(value)) {\n checked = value.has(vnode.props.value);\n } else {\n if (value === oldValue) return;\n checked = looseEqual(value, getCheckboxValue(el, true));\n }\n if (el.checked !== checked) {\n el.checked = checked;\n }\n}\nconst vModelRadio = {\n created(el, {\n value\n }, vnode) {\n el.checked = looseEqual(value, vnode.props.value);\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n el[assignKey](getValue(el));\n });\n },\n beforeUpdate(el, {\n value,\n oldValue\n }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (value !== oldValue) {\n el.checked = looseEqual(value, vnode.props.value);\n }\n }\n};\nconst vModelSelect = {\n // relies on its children\n //