CodeMaster/node_modules/.cache/vue-loader/44034cd1b5400ade9725cee9db6991ba.json
2025-04-02 21:57:33 +08:00

1 line
31 KiB
JSON

{"remainingRequest":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/src/views/race/Race.vue?vue&type=script&lang=js","dependencies":[{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/src/views/race/Race.vue","mtime":1742646402777},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/cache-loader/dist/cjs.js","mtime":1743264595665},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/babel-loader/lib/index.js","mtime":1743264596348},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/cache-loader/dist/cjs.js","mtime":1743264595665},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/vue-loader/lib/index.js","mtime":1743264596512}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CmltcG9ydCB7IHJhY2VMZXZlbE1hcCwgcmFjZUxldmVscyxjb21wZXRpdGlvblN0YXR1cyB9IGZyb20gJ0AvdXRpbHMvY29uc3QnOwppbXBvcnQgeyBBbGxVc2VyIH0gZnJvbSAnQC9hcGknOwppbXBvcnQgeyBleHBvcnREYXRhIH0gZnJvbSAnQC91dGlscy9leGNlbCc7CmltcG9ydCBFZGl0UmFjZSBmcm9tICdAL2NvbXBvbmVudHMvZWRpdC9FZGl0UmFjZSc7CmltcG9ydCBCYW9taW5nIGZyb20gJ0AvY29tcG9uZW50cy9lZGl0L0Jhb21pbmcnOwppbXBvcnQgQWRkUmVjb3JkIGZyb20gJ0AvY29tcG9uZW50cy9yZWNvcmQvQWRkUmVjb3JkJzsKaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJzsKCmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAnUmFjZScsCiAgbWV0YUluZm86IHsKICAgIHRpdGxlOiAn6LWb5LqL566h55CGJywKICB9LAogIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBzZWxlY3RlZEtleXM6IFtdLAogICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgZXhwb3J0aW5nOiBmYWxzZSwKICAgICAgcmFjZXM6IFtdLAogICAgICB1c2VyczogW10sIC8vIOeUqOS6juWtmOWCqOeUqOaIt+S/oeaBrwogICAgICBjdXJyZW50OiAxLAoJCQlvcmlnaW5hbFJhY2VzOiBbXSwKCQkJcXVlcnk6e30sCiAgICAgIHBhZ2VTaXplOiAxMCwKICAgICAgdG90YWw6IDAsCiAgICAgIHRhYmxlQ29sdW1uczogW10sCiAgICAgIHNlYXJjaE9wdGlvbnM6IHRoaXMuY3JlYXRlU2VhcmNoT3B0aW9ucygpLAogICAgfTsKICB9LAogIGNvbXB1dGVkOiB7CiAgICBwYWdpbmF0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGN1cnJlbnQ6IHRoaXMuY3VycmVudCwKICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwKICAgICAgICB0b3RhbDogdGhpcy50b3RhbCwKICAgICAgfTsKICAgIH0sCiAgICBpc1N0dWRlbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnVzZXJQcml2aWxlZ2VzID09IDI7CiAgICB9LAogIH0sCglhc3luYyBtb3VudGVkKCkgewogICAgYXdhaXQgdGhpcy5nZXRBbGxVc2VycygpOyAvLyDnoa7kv53lnKjooajmoLzliJforr7nva7liY3ojrflj5bnlKjmiLfkv6Hmga8KICAgIHRoaXMuJHdhdGNoKCgpID0+IFt0aGlzLnBhZ2VTaXplLCB0aGlzLmN1cnJlbnRdLCB0aGlzLmdldERhdGEsIHsgaW1tZWRpYXRlOiB0cnVlIH0pOwogIH0sCiAgbWV0aG9kczogewoJCWFzeW5jIGdldEFsbFVzZXJzKCkgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgQWxsVXNlcigpOwogICAgICAgIHRoaXMudXNlcnMgPSByZXNwb25zZS5kYXRhOwogICAgICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy5jcmVhdGVUYWJsZUNvbHVtbnModGhpcy51c2Vycyk7IC8vIOWIqeeUqOiOt+WPlueahOeUqOaIt+S/oeaBr+adpeiuvue9ruihqOagvOWIlwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIHVzZXJzIiwgZXJyb3IpOwogICAgICB9CiAgICB9LGNyZWF0ZVRhYmxlQ29sdW1ucyh1c2VycykgewogICAgY29uc3QgY29tcGV0aXRpb25TdGF0dXNNYXAgPSBbCiAgICAgICAgeyBsYWJlbDogJ+i/m+ihjOS4rScsIHZhbHVlOiAwIH0sCiAgICAgICAgeyBsYWJlbDogJ+W3sue7iOatoicsIHZhbHVlOiAxIH0sCiAgICBdOwoJCWNvbnNvbGUubG9nKHVzZXJzKQogICAgcmV0dXJuIFsKICAgICAgIAogICAgICAgIHsgdGl0bGU6ICfotZvkuovlkI3np7AnLCBkYXRhSW5kZXg6ICdjb21wZXRpdGlvbk5hbWUnLCBhbGlnbjogJ2NlbnRlcicgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRpdGxlOiAn6LSf6LSj5Lq6JywKICAgICAgICAgICAgZGF0YUluZGV4OiAndXNlcklkJywKICAgICAgICAgICAgY3VzdG9tUmVuZGVyOiAodGV4dCkgPT4gewogICAgICAgICAgICAgICAgaWYgKCF0ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfml6AnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IHVzZXJzLmZpbmQodSA9PiB1LnVzZXJJZCA9PT0gdGV4dCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdXNlciA/IHVzZXIudXNlck5hbWUgOiAn5pegJzsKICAgICAgICAgICAgfSwgYWxpZ246ICdjZW50ZXInCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRpdGxlOiAn5byA5aeL5pe26Ze0JywKICAgICAgICAgICAgZGF0YUluZGV4OiAncmVnaXN0cmF0aW9uU3RhcnRUaW1lJywKICAgICAgICAgICAgY3VzdG9tUmVuZGVyOiAodGV4dCwgcmVjb3JkKSA9PiBmb3JtYXREYXRlKHJlY29yZC5yZWdpc3RyYXRpb25TdGFydFRpbWUpCgkJCQkJCSwgYWxpZ246ICdjZW50ZXInCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRpdGxlOiAn57uT5p2f5pe26Ze0JywKICAgICAgICAgICAgZGF0YUluZGV4OiAncmVnaXN0cmF0aW9uRW5kVGltZScsCiAgICAgICAgICAgIGN1c3RvbVJlbmRlcjogKHRleHQsIHJlY29yZCkgPT4gZm9ybWF0RGF0ZShyZWNvcmQucmVnaXN0cmF0aW9uRW5kVGltZSkKCQkJCQkJLCBhbGlnbjogJ2NlbnRlcicKICAgICAgICB9LAogICAgICAgIHsgdGl0bGU6ICflj4LogIPmnZDmlpknLCBkYXRhSW5kZXg6ICdhbm5vdW5jZW1lbnRMaW5rJyAsIGFsaWduOiAnY2VudGVyJ30sCiAgICAgICAgewogICAgICAgICAgICB0aXRsZTogJ+eKtuaAgScsCiAgICAgICAgICAgIGRhdGFJbmRleDogJ2NvbXBldGl0aW9uU3RhdHVzJywKICAgICAgICAgICAgY3VzdG9tUmVuZGVyOiAodGV4dCwgcmVjb3JkKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNPYmplY3QgPSBjb21wZXRpdGlvblN0YXR1c01hcC5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gcmVjb3JkLmNvbXBldGl0aW9uU3RhdHVzKTsKICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXNPYmplY3QgPyBzdGF0dXNPYmplY3QubGFiZWwgOiAn5pyq55+l54q25oCBJzsKICAgICAgICAgICAgfQoJCQkJCQksIGFsaWduOiAnY2VudGVyJwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0aXRsZTogJ+aTjeS9nCcsCiAgICAgICAgICAgIGFsaWduOiAnY2VudGVyJywKICAgICAgICAgICAgc2NvcGVkU2xvdHM6IHsKICAgICAgICAgICAgICAgIGN1c3RvbVJlbmRlcjogJ2FjdGlvbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIF07Cn0sY3JlYXRlU2VhcmNoT3B0aW9ucygpIHsKICByZXR1cm4gWwogICAgewogICAgICBsYWJlbDogJ+i1m+S6i+WQjeensCcsCiAgICAgIGtleTogJ3RpdGxlJywKICAgICAgZGVmYXVsdDogJycsCiAgICAgIGNvbXBvbmVudDogJ2lucHV0JywKICAgIH0sCiAgICB7CiAgICAgIGxhYmVsOiAn6LSf6LSj5Lq6JywKICAgICAga2V5OiAnc3BvbnNvcicsCiAgICAgIGRlZmF1bHQ6ICcnLAogICAgICBjb21wb25lbnQ6ICdpbnB1dCcsCiAgICB9LAoJCXsKICAgICAgbGFiZWw6ICfnirbmgIEnLAogICAgICBrZXk6ICdjb2xsYWdlSWQnLAogICAgICBkZWZhdWx0OiB1bmRlZmluZWQsCiAgICAgIGNvbXBvbmVudDogJ3NlbGVjdCcsCiAgICAgIHByb3BzOiB7CiAgICAgICAgb3B0aW9uczogY29tcGV0aXRpb25TdGF0dXMsCiAgICAgIH0sCiAgICB9LAoKICAgIHsKICAgICAgbGFiZWw6ICfml7bpl7QnLAogICAgICBrZXk6ICdkYXRlJywKICAgICAgZGVmYXVsdDogKCkgPT4gW10sCiAgICAgIG1hcHBlcjogKHsgZGF0ZSB9KSA9PiBkYXRlLmpvaW4oJ34nKSwKICAgICAgY29tcG9uZW50OiAncmFuZ2UtcGlja2VyJywKICAgIH0sCiAgXTsKfSwKICAgIGNoYW5nZVBhZ2UoeyBwYWdlU2l6ZSwgY3VycmVudCB9KSB7CiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgeyBwYWdlU2l6ZSwgY3VycmVudCB9KTsKICAgIH0sCiAgICBzZWFyY2goKSB7CiAgICAgIHRoaXMuY3VycmVudCA9IDE7CiAgICAgIHRoaXMuZ2V0RGF0YSgpOwogICAgfSwKICAgIGdldERhdGEoKSB7CgkJCXRoaXMucXVlcnkgPSB0aGlzLiRyZWZzLnNlYXJjaEZvcm0uZ2V0UmVzdWx0KCk7CgkJCWNvbnNvbGUubG9nKHRoaXMucXVlcnkpCiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7CgkJCQl0aGlzLiRhcGkuQWxsQ29tcGV0aXRpb24oewogICAgICB9KS50aGVuKGRhdGEgPT4gewogICAgICAgIHRoaXMub3JpZ2luYWxSYWNlcyA9IGRhdGEuZGF0YTsKCQkJCXRoaXMuZmlsdGVyUmFjZXMoKTsgLy8g6LCD55So6L+H5ruk5pa55rOVCiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEuZGF0YS5sZW5ndGg7CiAgICAgIH0pLmNhdGNoKGUgPT4gewogICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1zZyB8fCAn6I635Y+W5pWw5o2u5aSx6LSlJyk7CiAgICAgIH0pLmZpbmFsbHkoKCkgPT4gewogICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCgkJLy8g6L+H5ruk5q+U6LWbCgkJZmlsdGVyUmFjZXMoKSB7CiAgCQlsZXQgZmlsdGVyZWRSYWNlcyA9IHRoaXMub3JpZ2luYWxSYWNlcy5zbGljZSgpOyAvLyDlpI3liLbljp/lp4vnlKjmiLfmlbDmja4KCQkJY29uc29sZS5sb2coZmlsdGVyZWRSYWNlcykKCQkJCS8vIOeKtuaAgQogIGlmICh0aGlzLnF1ZXJ5LmNvbGxhZ2VJZCkgewogICAgZmlsdGVyZWRSYWNlcyA9IGZpbHRlcmVkUmFjZXMuZmlsdGVyKHVzZXIgPT4gdXNlci5jb21wZXRpdGlvblN0YXR1cyA9PSB0aGlzLnF1ZXJ5LmNvbGxhZ2VJZCk7CiAgfQovLyDlkI3np7AKICBpZiAodGhpcy5xdWVyeS50aXRsZSkgewogICAgZmlsdGVyZWRSYWNlcyA9IGZpbHRlcmVkUmFjZXMuZmlsdGVyKHVzZXIgPT4gdXNlci5jb21wZXRpdGlvbk5hbWUuaW5jbHVkZXModGhpcy5xdWVyeS50aXRsZSkpOwogIH0KLy8g6LSf6LSj5Lq6CiAgaWYgKHRoaXMucXVlcnkuc3BvbnNvcikgewoJCWZpbHRlcmVkUmFjZXMgPSBmaWx0ZXJlZFJhY2VzLmZpbHRlcih1c2VyID0+IHVzZXIudXNlck5hbWUuaW5jbHVkZXModGhpcy5xdWVyeS5zcG9uc29yKSk7CiAgfQoKCiAgdGhpcy5yYWNlcyA9IGZpbHRlcmVkUmFjZXM7Cn0sCi8vIOaIkeimgeaKpeWQjQogICAgYWRkQmFvKCkgewogICAgICBsZXQgdm5vZGU7CiAgICAgIHRoaXMuJGNvbmZpcm0oewogICAgICAgIHRpdGxlOiAn5oiR6KaB5oql5ZCNJywKICAgICAgICBjb250ZW50OiBoID0+ICh2bm9kZSA9IDxCYW9taW5nIC8+KSwKICAgICAgICBvbk9rOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS52YWxpZGF0ZSgpOwoJCQkJCWNvbnN0IGRhdGEgPSB7CiAgICAJCQkJc3R1ZGVudElkOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnVzZXJJZCwKCQkJCQkJY29tcGV0aXRpb25JZDogdmFsdWVzLmNvbXBldGl0aW9uSWQsCgkJCQkJCXRlYW1MZWFkZXJJZDogdmFsdWVzLnRlYW1MZWFkZXJJZCwKCQkJCQkJY29tcGV0aXRpb25UeXBlOiB2YWx1ZXMuY29tcGV0aXRpb25UeXBlLAoJCQkJCQlyZWdpc3RyYXRpb25UaW1lOiBkYXlqcyhuZXcgRGF0ZSkuZm9ybWF0KCdZWVlZLU0tRCBISDptbTpzcycpLAoJCQkJCQlyZWdpc3RyYXRpb25TdGF0dXM6ICfnrYnlvoXlrabmoKHlrqHmoLgnLAoJCQkJCX07CgkJCQkJY29uc29sZS5sb2coZGF0YSkKICAgICAgICAgIHJldHVybiB0aGlzLiRhcGkuRW5yb2xsKGRhdGEpLnRoZW4oZGF0YSA9PiB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygi5oql5ZCN5oiQ5YqfIik7CiAgICAgICAgICB9KS5jYXRjaChlID0+IHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1zZyB8fCAn5oql5ZCN5aSx6LSlJyk7CiAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICB9KTsKICAgIH0sCgkJLy8g5paw5aKe5q+U6LWbCiAgICBhZGRSYWNlKCkgewogICAgICBsZXQgdm5vZGU7CiAgICAgIHRoaXMuJGNvbmZpcm0oewogICAgICAgIHRpdGxlOiAn5paw5aKe6LWb5LqLJywKICAgICAgICBjb250ZW50OiBoID0+ICh2bm9kZSA9IDxFZGl0UmFjZSAvPiksCiAgICAgICAgb25PazogYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UudmFsaWRhdGUoKTsKCQkJCQljb25zdCBkYXRhID0gewogICAgCQkJCWNvbXBldGl0aW9uTmFtZTogdmFsdWVzLmNvbXBldGl0aW9uTmFtZSwKCQkJCQkJdXNlcklkOiB2YWx1ZXMudXNlcklkLAoJCQkJCQlyZWdpc3RyYXRpb25TdGFydFRpbWU6IHZhbHVlcy5yZWdpc3RyYXRpb25TdGFydFRpbWUsCgkJCQkJCXJlZ2lzdHJhdGlvbkVuZFRpbWU6IHZhbHVlcy5yZWdpc3RyYXRpb25FbmRUaW1lLAoJCQkJCQlhbm5vdW5jZW1lbnRMaW5rOiB2YWx1ZXMuYW5ub3VuY2VtZW50TGluaywKCQkJCQkJY29tcGV0aXRpb25TdGF0dXM6IHZhbHVlcy5jb21wZXRpdGlvblN0YXR1cywKCQkJCQl9OwogICAgICAgICAgcmV0dXJuIHRoaXMuJGFwaS5BZGRDb21wZXRpdGlvbihkYXRhKS50aGVuKGRhdGEgPT4gewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoIua3u+WKoOaIkOWKnyIpOwogICAgICAgICAgICB0aGlzLmdldERhdGEoKTsKICAgICAgICAgIH0pLmNhdGNoKGUgPT4gewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGUubXNnIHx8ICfmt7vliqDlpLHotKUnKTsKICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgIH0pOwogICAgfSwvLyDlrprkuYnmoLzlvI/ljJbml6XmnJ/ml7bpl7Tlh73mlbAKICBmb3JtYXREYXRlVGltZShpc29EYXRlVGltZSkgewogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGlzb0RhdGVUaW1lKTsKICAgIGNvbnN0IGZvcm1hdHRlZERhdGVUaW1lID0gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0ke3RoaXMucGFkWmVybyhkYXRlLmdldE1vbnRoKCkgKyAxKX0tJHt0aGlzLnBhZFplcm8oZGF0ZS5nZXREYXRlKCkpfSAke3RoaXMucGFkWmVybyhkYXRlLmdldEhvdXJzKCkpfToke3RoaXMucGFkWmVybyhkYXRlLmdldE1pbnV0ZXMoKSl9OiR7dGhpcy5wYWRaZXJvKGRhdGUuZ2V0U2Vjb25kcygpKX1gOwogICAgcmV0dXJuIGZvcm1hdHRlZERhdGVUaW1lOwogIH0sCiAgLy8g5a6a5LmJ6KGl6Zu25Ye95pWwCiAgcGFkWmVybyhudW0pIHsKICAgIHJldHVybiBudW0gPCAxMCA/ICcwJyArIG51bSA6IG51bTsKICB9LAoJCS8vIOS/ruaUueavlOi1mwogICAgZWRpdFJhY2UocmFjZSkgewogICAgICBsZXQgdm5vZGU7CiAgICAgIHRoaXMuJGNvbmZpcm0oewogICAgICAgIHRpdGxlOiAn57yW6L6R6LWb5LqLJywKICAgICAgICBjb250ZW50OiBoID0+ICh2bm9kZSA9IDxFZGl0UmFjZSBkYXRhPXtyYWNlfSAvPiksCiAgICAgICAgb25PazogYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UudmFsaWRhdGUoKTsKCQkJCQkvLyDosIPnlKhmb3JtYXREYXRlVGltZeWHveaVsOadpeagvOW8j+WMluaXpeacn+aXtumXtAoJCQkJCXZhbHVlcy5yZWdpc3RyYXRpb25TdGFydFRpbWUgPSB0aGlzLmZvcm1hdERhdGVUaW1lKHZhbHVlcy5yZWdpc3RyYXRpb25TdGFydFRpbWUpOwogICAgICAgIAl2YWx1ZXMucmVnaXN0cmF0aW9uRW5kVGltZSA9IHRoaXMuZm9ybWF0RGF0ZVRpbWUodmFsdWVzLnJlZ2lzdHJhdGlvbkVuZFRpbWUpOwogICAgICAgICAgdmFsdWVzLmNvbXBldGl0aW9uSWQgPSByYWNlLmNvbXBldGl0aW9uSWQ7CgkJCQkJY29uc3QgZGF0YSA9IHsKICAgIAkJCQkJY29tcGV0aXRpb25JZDogdmFsdWVzLmNvbXBldGl0aW9uSWQsCiAgICAJCQkJCWNvbXBldGl0aW9uTmFtZTogdmFsdWVzLmNvbXBldGl0aW9uTmFtZSwKICAgIAkJCQkJdXNlcklkOiB2YWx1ZXMudXNlcklkLAogICAgCQkJCQlyZWdpc3RyYXRpb25TdGFydFRpbWU6IHZhbHVlcy5yZWdpc3RyYXRpb25TdGFydFRpbWUsCiAgICAJCQkJCXJlZ2lzdHJhdGlvbkVuZFRpbWU6IHZhbHVlcy5yZWdpc3RyYXRpb25FbmRUaW1lLAoJCQkJCQkJYW5ub3VuY2VtZW50TGluazogdmFsdWVzLmFubm91bmNlbWVudExpbmssCiAgICAJCQkJCWNvbXBldGl0aW9uU3RhdHVzOiB2YWx1ZXMuY29tcGV0aXRpb25TdGF0dXMsCgkJCQkJCQl9OwoKCQkJCQlyZXR1cm4gdGhpcy4kYXBpLlVwQ29tcGV0aXRpb24oZGF0YSkudGhlbihkYXRhID0+IHsKICAgIAkJCQl0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+S/ruaUueaIkOWKnycpOwogICAgCQkJCXRoaXMuZ2V0RGF0YSgpOwoJCQkJCX0pLmNhdGNoKGUgPT4gewogICAgCQkJCQl0aGlzLiRtZXNzYWdlLmVycm9yKGUubXNnIHx8ICfkv67mlLnlpLHotKUnKTsKICAgIAkJCQkJdGhyb3cgZTsKCQkJCQl9KTsKICAgICAgICB9LAogICAgICB9KTsKICAgIH0sCgkJLy8g5Yig6Zmk56ue6LWbCiAgICBkZWxldGVSYWNlKHJhY2UpIHsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgdGhpcy4kYXBpLkRlbGV0ZUNvbXBldGl0aW9uKFtyYWNlLmNvbXBldGl0aW9uSWRdKS50aGVuKGRhdGEgPT4gewogICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhkYXRhLm1zZyk7CiAgICAgICAgdGhpcy5nZXREYXRhKCk7CiAgICAgIH0pLmNhdGNoKGUgPT4gewogICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1zZyB8fCAn5Yig6Zmk5aSx6LSlJyk7CiAgICAgIH0pLmZpbmFsbHkoKCkgPT4gewogICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgICBiYXRjaERlbGV0ZSgpIHsKICAgICAgdGhpcy4kbW9kYWwuY29uZmlybSh7CiAgICAgICAgdGl0bGU6IGDnoa7orqTliKDpmaTpgInkuK3nmoQke3RoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aH3pobnmlbDmja4/YCwKICAgICAgICBvbk9rOiAoKSA9PiB0aGlzLiRhcGkuZGVsZXRlUmFjZSh0aGlzLnNlbGVjdGVkS2V5cykKICAgICAgICAgIC50aGVuKCgpID0+IHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCfliKDpmaTmiJDlip8hJyk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLnNwbGljZSgwKTsKICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7CiAgICAgICAgICB9KS5jYXRjaChlID0+IHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1zZyB8fCAn5Yig6Zmk5aSx6LSlIScpOwogICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgfSksCiAgICAgIH0pOwogICAgfSwKICAgIGFkZFJlY29yZChyYWNlKSB7CiAgICAgIGxldCB2bm9kZTsKICAgICAgdGhpcy4kY29uZmlybSh7CiAgICAgICAgdGl0bGU6ICfmiJDnu6nlvZXlhaUnLAogICAgICAgIGNvbnRlbnQ6IGggPT4gKHZub2RlID0gPEFkZFJlY29yZCAvPiksCiAgICAgICAgb25PazogYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgZm9ybSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlOwogICAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgZm9ybS52YWxpZGF0ZSgpOwogICAgICAgICAgcmV0dXJuIHRoaXMuJGFwaS5hZGRSZWNvcmQoewogICAgICAgICAgICByYWNlX2lkOiByYWNlLnJhY2VfaWQsCiAgICAgICAgICAgIHNpZDogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5hY2NvdW50LAogICAgICAgICAgICBzY29yZTogdmFsdWVzLnNjb3JlLAogICAgICAgICAgICB0aWQ6IHZhbHVlcy50aWQsCiAgICAgICAgICB9KS50aGVuKGRhdGEgPT4gewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoZGF0YS5tc2cpOwogICAgICAgICAgfSkuY2F0Y2goZSA9PiB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tc2cgfHwgJ+ezu+e7n+mUmeivrycpOwogICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgfSk7CiAgICB9LAogICAgZXhwb3J0QWxsKCkgewogICAgICB0aGlzLmV4cG9ydGluZyA9IHRydWU7CiAgICAgIHRoaXMuJGFwaS5BbGxDb21wZXRpdGlvbih0aGlzLnF1ZXJ5KS50aGVuKGRhdGEgPT4gewogICAgICAgIHJldHVybiBleHBvcnRFeGNlbChkYXRhLmRhdGEpOwogICAgICB9KS5jYXRjaChlID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tc2cgfHwgJ+WvvOWHuuWksei0pScpOwogICAgICB9KS5maW5hbGx5KCgpID0+IHsKICAgICAgICB0aGlzLmV4cG9ydGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgfSwKfTsKCi8vIOagvOW8j+WMluaXpeacn+WHveaVsApmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGVTdHJpbmcpIHsKICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7CiAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgewogICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBkYXRlOiAke2RhdGVTdHJpbmd9YCk7CiAgICByZXR1cm4gJ0ludmFsaWQgRGF0ZSc7CiAgfQogIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTsKICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7CiAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7Cn0KZnVuY3Rpb24gZXhwb3J0RXhjZWwoZGF0YSkgewogIGNvbnN0IGhlYWRlciA9IHRoaXMuY3JlYXRlVGFibGVDb2x1bW5zKCkubWFwKHYgPT4gdi50aXRsZSk7CiAgaGVhZGVyLnBvcCgpOyAvLyDljrvmjonmnIDlkI7kuIDmoI/mk43kvZzmoI8KICByZXR1cm4gZXhwb3J0RGF0YSh7CiAgICBuYW1lOiAn6LWb5LqL5L+h5oGvJywKICAgIGRhdGEsCiAgICBoZWFkZXIsCiAgICBrZXlNYXA6IHsKICAgICAgY29tcGV0aXRpb25OYW1lOiAn6LWb5LqL5ZCN56ewJywKICAgICAgdXNlcklkOiAn5Li75Yqe5pa5JywKICAgICAgYW5ub3VuY2VtZW50TGluazogJ+WPguiAg+i1hOaWmScsCiAgICAgIHJlZ2lzdHJhdGlvblN0YXJ0VGltZTogJ+W8gOWni+aXtumXtCcsCiAgICAgIHJlZ2lzdHJhdGlvbkVuZFRpbWU6ICfnu5PmnZ/ml7bpl7QnLAogICAgfSwKICB9KTsKfQo="},{"version":3,"sources":["Race.vue"],"names":[],"mappings":";AA6EA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"Race.vue","sourceRoot":"src/views/race","sourcesContent":["<template>\n <div>\n <SearchForm\n ref=\"searchForm\"\n :loading=\"loading\"\n :options=\"searchOptions\"\n @search=\"search\"\n @reset=\"search\"\n />\n\n <!--信息列表-->\n <AntTable\n v-model=\"selectedKeys\"\n row-key=\"competitionId\"\n :loading=\"loading\"\n :data-source=\"races\"\n :pagination=\"pagination\"\n :columns=\"tableColumns\"\n @change=\"changePage\"\n >\n <template #header>\n <a-button-group>\n <a-button type=\"primary\" v-if=\"$store.state.user.userPrivileges!=2\" @click=\"addRace\">\n 添加赛事\n </a-button>\n\t\t\t\t\t<a-button type=\"primary\" v-if=\"$store.state.user.userPrivileges==2\" @click=\"addBao\">\n\t\t\t\t\t\t\n 我要报名\n </a-button>\n <a-button\n\t\t\t\t\tv-if=\"$store.state.user.userPrivileges!=2\"\n :disabled=\"!selectedKeys.length\"\n @click=\"batchDelete\"\n >\n 批量删除 ({{ selectedKeys.length }})\n </a-button>\n <a-button\n \n :loading=\"exporting\"\n @click=\"exportAll\"\n >\n 全量导出\n </a-button>\n </a-button-group>\n </template>\n <template #action=\"record\">\n <a-space>\n <!-- 成绩录入 -->\n <a-tooltip v-if=\"isStudent\" title=\"无权限\">\n <a>\n 无权限\n </a>\n </a-tooltip>\n <!--编辑-->\n <a @click=\"editRace(record)\" \tv-if=\"$store.state.user.userPrivileges!=2\">\n\t\t\t\t\t\n <a-icon type=\"edit\" />\n </a>\n <!--删除-->\n <a-popconfirm\n\t\t\t\t\tv-if=\"$store.state.user.userPrivileges!=2\"\n title=\"确认删除?\"\n placement=\"left\"\n @confirm=\"deleteRace(record)\"\n >\n <template #icon>\n <a-icon type=\"question-circle-o\" style=\"color: orange\" />\n </template>\n <a><a-icon type=\"delete\" /></a>\n </a-popconfirm>\n </a-space>\n </template>\n </AntTable>\n </div>\n</template>\n\n<script>\nimport { raceLevelMap, raceLevels,competitionStatus } from '@/utils/const';\nimport { AllUser } from '@/api';\nimport { exportData } from '@/utils/excel';\nimport EditRace from '@/components/edit/EditRace';\nimport Baoming from '@/components/edit/Baoming';\nimport AddRecord from '@/components/record/AddRecord';\nimport dayjs from 'dayjs';\n\nexport default {\n name: 'Race',\n metaInfo: {\n title: '赛事管理',\n },\n data() {\n return {\n selectedKeys: [],\n loading: false,\n exporting: false,\n races: [],\n users: [], // 用于存储用户信息\n current: 1,\n\t\t\toriginalRaces: [],\n\t\t\tquery:{},\n pageSize: 10,\n total: 0,\n tableColumns: [],\n searchOptions: this.createSearchOptions(),\n };\n },\n computed: {\n pagination() {\n return {\n current: this.current,\n pageSize: this.pageSize,\n total: this.total,\n };\n },\n isStudent() {\n return this.$store.state.user.userPrivileges == 2;\n },\n },\n\tasync mounted() {\n await this.getAllUsers(); // 确保在表格列设置前获取用户信息\n this.$watch(() => [this.pageSize, this.current], this.getData, { immediate: true });\n },\n methods: {\n\t\tasync getAllUsers() {\n try {\n const response = await AllUser();\n this.users = response.data;\n this.tableColumns = this.createTableColumns(this.users); // 利用获取的用户信息来设置表格列\n } catch (error) {\n console.error(\"Failed to load users\", error);\n }\n },createTableColumns(users) {\n const competitionStatusMap = [\n { label: '进行中', value: 0 },\n { label: '已终止', value: 1 },\n ];\n\t\tconsole.log(users)\n return [\n \n { title: '赛事名称', dataIndex: 'competitionName', align: 'center' },\n {\n title: '负责人',\n dataIndex: 'userId',\n customRender: (text) => {\n if (!text) {\n return '无';\n }\n const user = users.find(u => u.userId === text);\n return user ? user.userName : '无';\n }, align: 'center'\n },\n {\n title: '开始时间',\n dataIndex: 'registrationStartTime',\n customRender: (text, record) => formatDate(record.registrationStartTime)\n\t\t\t\t\t\t, align: 'center'\n },\n {\n title: '结束时间',\n dataIndex: 'registrationEndTime',\n customRender: (text, record) => formatDate(record.registrationEndTime)\n\t\t\t\t\t\t, align: 'center'\n },\n { title: '参考材料', dataIndex: 'announcementLink' , align: 'center'},\n {\n title: '状态',\n dataIndex: 'competitionStatus',\n customRender: (text, record) => {\n const statusObject = competitionStatusMap.find(item => item.value === record.competitionStatus);\n return statusObject ? statusObject.label : '未知状态';\n }\n\t\t\t\t\t\t, align: 'center'\n },\n {\n title: '操作',\n align: 'center',\n scopedSlots: {\n customRender: 'action',\n },\n },\n ];\n},createSearchOptions() {\n return [\n {\n label: '赛事名称',\n key: 'title',\n default: '',\n component: 'input',\n },\n {\n label: '负责人',\n key: 'sponsor',\n default: '',\n component: 'input',\n },\n\t\t{\n label: '状态',\n key: 'collageId',\n default: undefined,\n component: 'select',\n props: {\n options: competitionStatus,\n },\n },\n\n {\n label: '时间',\n key: 'date',\n default: () => [],\n mapper: ({ date }) => date.join('~'),\n component: 'range-picker',\n },\n ];\n},\n changePage({ pageSize, current }) {\n Object.assign(this, { pageSize, current });\n },\n search() {\n this.current = 1;\n this.getData();\n },\n getData() {\n\t\t\tthis.query = this.$refs.searchForm.getResult();\n\t\t\tconsole.log(this.query)\n this.loading = true;\n\t\t\t\tthis.$api.AllCompetition({\n }).then(data => {\n this.originalRaces = data.data;\n\t\t\t\tthis.filterRaces(); // 调用过滤方法\n this.total = data.data.length;\n }).catch(e => {\n console.error(e);\n this.$message.error(e.msg || '获取数据失败');\n }).finally(() => {\n this.loading = false;\n });\n },\n\t\t// 过滤比赛\n\t\tfilterRaces() {\n \t\tlet filteredRaces = this.originalRaces.slice(); // 复制原始用户数据\n\t\t\tconsole.log(filteredRaces)\n\t\t\t\t// 状态\n if (this.query.collageId) {\n filteredRaces = filteredRaces.filter(user => user.competitionStatus == this.query.collageId);\n }\n// 名称\n if (this.query.title) {\n filteredRaces = filteredRaces.filter(user => user.competitionName.includes(this.query.title));\n }\n// 负责人\n if (this.query.sponsor) {\n\t\tfilteredRaces = filteredRaces.filter(user => user.userName.includes(this.query.sponsor));\n }\n\n\n this.races = filteredRaces;\n},\n// 我要报名\n addBao() {\n let vnode;\n this.$confirm({\n title: '我要报名',\n content: h => (vnode = <Baoming />),\n onOk: async () => {\n const values = await vnode.componentInstance.validate();\n\t\t\t\t\tconst data = {\n \t\t\t\tstudentId: this.$store.state.user.userId,\n\t\t\t\t\t\tcompetitionId: values.competitionId,\n\t\t\t\t\t\tteamLeaderId: values.teamLeaderId,\n\t\t\t\t\t\tcompetitionType: values.competitionType,\n\t\t\t\t\t\tregistrationTime: dayjs(new Date).format('YYYY-M-D HH:mm:ss'),\n\t\t\t\t\t\tregistrationStatus: '等待学校审核',\n\t\t\t\t\t};\n\t\t\t\t\tconsole.log(data)\n return this.$api.Enroll(data).then(data => {\n this.$message.success(\"报名成功\");\n }).catch(e => {\n this.$message.error(e.msg || '报名失败');\n throw e;\n });\n },\n });\n },\n\t\t// 新增比赛\n addRace() {\n let vnode;\n this.$confirm({\n title: '新增赛事',\n content: h => (vnode = <EditRace />),\n onOk: async () => {\n const values = await vnode.componentInstance.validate();\n\t\t\t\t\tconst data = {\n \t\t\t\tcompetitionName: values.competitionName,\n\t\t\t\t\t\tuserId: values.userId,\n\t\t\t\t\t\tregistrationStartTime: values.registrationStartTime,\n\t\t\t\t\t\tregistrationEndTime: values.registrationEndTime,\n\t\t\t\t\t\tannouncementLink: values.announcementLink,\n\t\t\t\t\t\tcompetitionStatus: values.competitionStatus,\n\t\t\t\t\t};\n return this.$api.AddCompetition(data).then(data => {\n this.$message.success(\"添加成功\");\n this.getData();\n }).catch(e => {\n this.$message.error(e.msg || '添加失败');\n throw e;\n });\n },\n });\n },// 定义格式化日期时间函数\n formatDateTime(isoDateTime) {\n const date = new Date(isoDateTime);\n const formattedDateTime = `${date.getFullYear()}-${this.padZero(date.getMonth() + 1)}-${this.padZero(date.getDate())} ${this.padZero(date.getHours())}:${this.padZero(date.getMinutes())}:${this.padZero(date.getSeconds())}`;\n return formattedDateTime;\n },\n // 定义补零函数\n padZero(num) {\n return num < 10 ? '0' + num : num;\n },\n\t\t// 修改比赛\n editRace(race) {\n let vnode;\n this.$confirm({\n title: '编辑赛事',\n content: h => (vnode = <EditRace data={race} />),\n onOk: async () => {\n const values = await vnode.componentInstance.validate();\n\t\t\t\t\t// 调用formatDateTime函数来格式化日期时间\n\t\t\t\t\tvalues.registrationStartTime = this.formatDateTime(values.registrationStartTime);\n \tvalues.registrationEndTime = this.formatDateTime(values.registrationEndTime);\n values.competitionId = race.competitionId;\n\t\t\t\t\tconst data = {\n \t\t\t\t\tcompetitionId: values.competitionId,\n \t\t\t\t\tcompetitionName: values.competitionName,\n \t\t\t\t\tuserId: values.userId,\n \t\t\t\t\tregistrationStartTime: values.registrationStartTime,\n \t\t\t\t\tregistrationEndTime: values.registrationEndTime,\n\t\t\t\t\t\t\tannouncementLink: values.announcementLink,\n \t\t\t\t\tcompetitionStatus: values.competitionStatus,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\treturn this.$api.UpCompetition(data).then(data => {\n \t\t\t\tthis.$message.success('修改成功');\n \t\t\t\tthis.getData();\n\t\t\t\t\t}).catch(e => {\n \t\t\t\t\tthis.$message.error(e.msg || '修改失败');\n \t\t\t\t\tthrow e;\n\t\t\t\t\t});\n },\n });\n },\n\t\t// 删除竞赛\n deleteRace(race) {\n this.loading = true;\n this.$api.DeleteCompetition([race.competitionId]).then(data => {\n this.$message.success(data.msg);\n this.getData();\n }).catch(e => {\n console.error(e);\n this.$message.error(e.msg || '删除失败');\n }).finally(() => {\n this.loading = false;\n });\n },\n batchDelete() {\n this.$modal.confirm({\n title: `确认删除选中的${this.selectedKeys.length}项数据?`,\n onOk: () => this.$api.deleteRace(this.selectedKeys)\n .then(() => {\n this.$message.success('删除成功!');\n this.selectedKeys.splice(0);\n this.getData();\n }).catch(e => {\n this.$message.error(e.msg || '删除失败!');\n throw e;\n }),\n });\n },\n addRecord(race) {\n let vnode;\n this.$confirm({\n title: '成绩录入',\n content: h => (vnode = <AddRecord />),\n onOk: async () => {\n const form = vnode.componentInstance;\n const values = await form.validate();\n return this.$api.addRecord({\n race_id: race.race_id,\n sid: this.$store.state.user.account,\n score: values.score,\n tid: values.tid,\n }).then(data => {\n this.$message.success(data.msg);\n }).catch(e => {\n this.$message.error(e.msg || '系统错误');\n throw e;\n });\n },\n });\n },\n exportAll() {\n this.exporting = true;\n this.$api.AllCompetition(this.query).then(data => {\n return exportExcel(data.data);\n }).catch(e => {\n console.error(e);\n this.$message.error(e.msg || '导出失败');\n }).finally(() => {\n this.exporting = false;\n });\n },\n },\n};\n\n// 格式化日期函数\nfunction formatDate(dateString) {\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n console.error(`Invalid date: ${dateString}`);\n return 'Invalid Date';\n }\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\nfunction exportExcel(data) {\n const header = this.createTableColumns().map(v => v.title);\n header.pop(); // 去掉最后一栏操作栏\n return exportData({\n name: '赛事信息',\n data,\n header,\n keyMap: {\n competitionName: '赛事名称',\n userId: '主办方',\n announcementLink: '参考资料',\n registrationStartTime: '开始时间',\n registrationEndTime: '结束时间',\n },\n });\n}\n</script>\n"]}]}