fix(dependencies): Remove peer flags from package-lock.json and update Vite dependencies
- Removed unnecessary "peer" flags from various dependencies in package-lock.json to streamline package management. - Updated Vite dependencies and their corresponding metadata for improved performance and compatibility. - Adjusted import paths in CSS files to reflect the correct directory structure. - Deleted unused CSS files related to the "col" component to clean up the project.
This commit is contained in:
parent
d07ebb735a
commit
8f9eb38666
1065
admin/node_modules/.package-lock.json
generated
vendored
1065
admin/node_modules/.package-lock.json
generated
vendored
File diff suppressed because it is too large
Load Diff
4
admin/node_modules/.vite/deps/@element-plus_icons-vue.js
generated
vendored
4
admin/node_modules/.vite/deps/@element-plus_icons-vue.js
generated
vendored
@ -292,8 +292,8 @@ import {
|
||||
wind_power_default,
|
||||
zoom_in_default,
|
||||
zoom_out_default
|
||||
} from "./chunk-L7WLSQ4R.js";
|
||||
import "./chunk-ELEEJBJQ.js";
|
||||
} from "./chunk-OP4ZUAFM.js";
|
||||
import "./chunk-H2732BJL.js";
|
||||
import "./chunk-G3PMV62Z.js";
|
||||
export {
|
||||
add_location_default as AddLocation,
|
||||
|
||||
599
admin/node_modules/.vite/deps/_metadata.json
generated
vendored
599
admin/node_modules/.vite/deps/_metadata.json
generated
vendored
@ -1,365 +1,314 @@
|
||||
{
|
||||
"hash": "8a568c02",
|
||||
"configHash": "47a28a65",
|
||||
"lockfileHash": "05df1c47",
|
||||
"browserHash": "dda6d657",
|
||||
"hash": "481070f0",
|
||||
"configHash": "0bd4dba1",
|
||||
"lockfileHash": "aa252f00",
|
||||
"browserHash": "dd67beda",
|
||||
"optimized": {
|
||||
"@element-plus/icons-vue": {
|
||||
"src": "../../@element-plus/icons-vue/dist/index.js",
|
||||
"file": "@element-plus_icons-vue.js",
|
||||
"fileHash": "ec7aa758",
|
||||
"needsInterop": false
|
||||
},
|
||||
"axios": {
|
||||
"src": "../../axios/index.js",
|
||||
"file": "axios.js",
|
||||
"fileHash": "50abb3a0",
|
||||
"needsInterop": false
|
||||
},
|
||||
"dayjs": {
|
||||
"src": "../../dayjs/dayjs.min.js",
|
||||
"file": "dayjs.js",
|
||||
"fileHash": "7122c9bb",
|
||||
"needsInterop": true
|
||||
},
|
||||
"element-plus": {
|
||||
"src": "../../element-plus/es/index.mjs",
|
||||
"file": "element-plus.js",
|
||||
"fileHash": "de0a4e4c",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/dist/locale/zh-cn.mjs": {
|
||||
"src": "../../element-plus/dist/locale/zh-cn.mjs",
|
||||
"file": "element-plus_dist_locale_zh-cn__mjs.js",
|
||||
"fileHash": "7ff2f81b",
|
||||
"needsInterop": false
|
||||
},
|
||||
"pinia": {
|
||||
"src": "../../pinia/dist/pinia.mjs",
|
||||
"file": "pinia.js",
|
||||
"fileHash": "9025ba71",
|
||||
"needsInterop": false
|
||||
},
|
||||
"qrcode": {
|
||||
"src": "../../qrcode/lib/browser.js",
|
||||
"file": "qrcode.js",
|
||||
"fileHash": "85e1c633",
|
||||
"needsInterop": true
|
||||
},
|
||||
"vue": {
|
||||
"src": "../../vue/dist/vue.runtime.esm-bundler.js",
|
||||
"file": "vue.js",
|
||||
"fileHash": "d67acca6",
|
||||
"needsInterop": false
|
||||
},
|
||||
"vue-router": {
|
||||
"src": "../../vue-router/dist/vue-router.mjs",
|
||||
"file": "vue-router.js",
|
||||
"fileHash": "f248d375",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es": {
|
||||
"src": "../../element-plus/es/index.mjs",
|
||||
"file": "element-plus_es.js",
|
||||
"fileHash": "48f929fb",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/base/style/css": {
|
||||
"src": "../../element-plus/es/components/base/style/css.mjs",
|
||||
"file": "element-plus_es_components_base_style_css.js",
|
||||
"fileHash": "0bfce4cf",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/form/style/css": {
|
||||
"src": "../../element-plus/es/components/form/style/css.mjs",
|
||||
"file": "element-plus_es_components_form_style_css.js",
|
||||
"fileHash": "d4788822",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/button/style/css": {
|
||||
"src": "../../element-plus/es/components/button/style/css.mjs",
|
||||
"file": "element-plus_es_components_button_style_css.js",
|
||||
"fileHash": "3041eea7",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/form-item/style/css": {
|
||||
"src": "../../element-plus/es/components/form-item/style/css.mjs",
|
||||
"file": "element-plus_es_components_form-item_style_css.js",
|
||||
"fileHash": "c56d69b7",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/input/style/css": {
|
||||
"src": "../../element-plus/es/components/input/style/css.mjs",
|
||||
"file": "element-plus_es_components_input_style_css.js",
|
||||
"fileHash": "416bddc0",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/dialog/style/css": {
|
||||
"src": "../../element-plus/es/components/dialog/style/css.mjs",
|
||||
"file": "element-plus_es_components_dialog_style_css.js",
|
||||
"fileHash": "e061560e",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/container/style/css": {
|
||||
"src": "../../element-plus/es/components/container/style/css.mjs",
|
||||
"file": "element-plus_es_components_container_style_css.js",
|
||||
"fileHash": "a3114877",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/main/style/css": {
|
||||
"src": "../../element-plus/es/components/main/style/css.mjs",
|
||||
"file": "element-plus_es_components_main_style_css.js",
|
||||
"fileHash": "51b2c8ae",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/header/style/css": {
|
||||
"src": "../../element-plus/es/components/header/style/css.mjs",
|
||||
"file": "element-plus_es_components_header_style_css.js",
|
||||
"fileHash": "29396d87",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/dropdown/style/css": {
|
||||
"src": "../../element-plus/es/components/dropdown/style/css.mjs",
|
||||
"file": "element-plus_es_components_dropdown_style_css.js",
|
||||
"fileHash": "de9c8b64",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/dropdown-menu/style/css": {
|
||||
"src": "../../element-plus/es/components/dropdown-menu/style/css.mjs",
|
||||
"file": "element-plus_es_components_dropdown-menu_style_css.js",
|
||||
"fileHash": "876b962c",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/dropdown-item/style/css": {
|
||||
"src": "../../element-plus/es/components/dropdown-item/style/css.mjs",
|
||||
"file": "element-plus_es_components_dropdown-item_style_css.js",
|
||||
"fileHash": "02fc7e6a",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/avatar/style/css": {
|
||||
"src": "../../element-plus/es/components/avatar/style/css.mjs",
|
||||
"file": "element-plus_es_components_avatar_style_css.js",
|
||||
"fileHash": "8dd20109",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/breadcrumb/style/css": {
|
||||
"src": "../../element-plus/es/components/breadcrumb/style/css.mjs",
|
||||
"file": "element-plus_es_components_breadcrumb_style_css.js",
|
||||
"fileHash": "57e8092c",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/breadcrumb-item/style/css": {
|
||||
"src": "../../element-plus/es/components/breadcrumb-item/style/css.mjs",
|
||||
"file": "element-plus_es_components_breadcrumb-item_style_css.js",
|
||||
"fileHash": "481a3941",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/aside/style/css": {
|
||||
"src": "../../element-plus/es/components/aside/style/css.mjs",
|
||||
"file": "element-plus_es_components_aside_style_css.js",
|
||||
"fileHash": "59d11e8a",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/menu/style/css": {
|
||||
"src": "../../element-plus/es/components/menu/style/css.mjs",
|
||||
"file": "element-plus_es_components_menu_style_css.js",
|
||||
"fileHash": "2698e97e",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/menu-item/style/css": {
|
||||
"src": "../../element-plus/es/components/menu-item/style/css.mjs",
|
||||
"file": "element-plus_es_components_menu-item_style_css.js",
|
||||
"fileHash": "52307744",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/icon/style/css": {
|
||||
"src": "../../element-plus/es/components/icon/style/css.mjs",
|
||||
"file": "element-plus_es_components_icon_style_css.js",
|
||||
"fileHash": "1ca3c820",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/input-number/style/css": {
|
||||
"src": "../../element-plus/es/components/input-number/style/css.mjs",
|
||||
"file": "element-plus_es_components_input-number_style_css.js",
|
||||
"fileHash": "47263c6c",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/autocomplete/style/css": {
|
||||
"src": "../../element-plus/es/components/autocomplete/style/css.mjs",
|
||||
"file": "element-plus_es_components_autocomplete_style_css.js",
|
||||
"fileHash": "1f9138ee",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/tag/style/css": {
|
||||
"src": "../../element-plus/es/components/tag/style/css.mjs",
|
||||
"file": "element-plus_es_components_tag_style_css.js",
|
||||
"fileHash": "64584bf9",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/row/style/css": {
|
||||
"src": "../../element-plus/es/components/row/style/css.mjs",
|
||||
"file": "element-plus_es_components_row_style_css.js",
|
||||
"fileHash": "a66bee2e",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/col/style/css": {
|
||||
"src": "../../element-plus/es/components/col/style/css.mjs",
|
||||
"file": "element-plus_es_components_col_style_css.js",
|
||||
"fileHash": "0f603d50",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/loading/style/css": {
|
||||
"src": "../../element-plus/es/components/loading/style/css.mjs",
|
||||
"file": "element-plus_es_components_loading_style_css.js",
|
||||
"fileHash": "3e156d5d",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/pagination/style/css": {
|
||||
"src": "../../element-plus/es/components/pagination/style/css.mjs",
|
||||
"file": "element-plus_es_components_pagination_style_css.js",
|
||||
"fileHash": "7bbf7c89",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/table/style/css": {
|
||||
"src": "../../element-plus/es/components/table/style/css.mjs",
|
||||
"file": "element-plus_es_components_table_style_css.js",
|
||||
"fileHash": "d5e7610e",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/table-column/style/css": {
|
||||
"src": "../../element-plus/es/components/table-column/style/css.mjs",
|
||||
"file": "element-plus_es_components_table-column_style_css.js",
|
||||
"fileHash": "bd8ce5e0",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/select/style/css": {
|
||||
"src": "../../element-plus/es/components/select/style/css.mjs",
|
||||
"file": "element-plus_es_components_select_style_css.js",
|
||||
"fileHash": "abd102ea",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/option/style/css": {
|
||||
"src": "../../element-plus/es/components/option/style/css.mjs",
|
||||
"file": "element-plus_es_components_option_style_css.js",
|
||||
"fileHash": "57ef18f7",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/collapse/style/css": {
|
||||
"src": "../../element-plus/es/components/collapse/style/css.mjs",
|
||||
"file": "element-plus_es_components_collapse_style_css.js",
|
||||
"fileHash": "bf75176c",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/collapse-item/style/css": {
|
||||
"src": "../../element-plus/es/components/collapse-item/style/css.mjs",
|
||||
"file": "element-plus_es_components_collapse-item_style_css.js",
|
||||
"fileHash": "afc23457",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/descriptions/style/css": {
|
||||
"src": "../../element-plus/es/components/descriptions/style/css.mjs",
|
||||
"file": "element-plus_es_components_descriptions_style_css.js",
|
||||
"fileHash": "751f9003",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/descriptions-item/style/css": {
|
||||
"src": "../../element-plus/es/components/descriptions-item/style/css.mjs",
|
||||
"file": "element-plus_es_components_descriptions-item_style_css.js",
|
||||
"fileHash": "364abd80",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/radio-group/style/css": {
|
||||
"src": "../../element-plus/es/components/radio-group/style/css.mjs",
|
||||
"file": "element-plus_es_components_radio-group_style_css.js",
|
||||
"fileHash": "5d023797",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/radio/style/css": {
|
||||
"src": "../../element-plus/es/components/radio/style/css.mjs",
|
||||
"file": "element-plus_es_components_radio_style_css.js",
|
||||
"fileHash": "7013a88b",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/switch/style/css": {
|
||||
"src": "../../element-plus/es/components/switch/style/css.mjs",
|
||||
"file": "element-plus_es_components_switch_style_css.js",
|
||||
"fileHash": "9c2d7cdf",
|
||||
"fileHash": "5292dd97",
|
||||
"needsInterop": false
|
||||
},
|
||||
"@wangeditor/editor-for-vue": {
|
||||
"src": "../../@wangeditor/editor-for-vue/dist/index.esm.js",
|
||||
"file": "@wangeditor_editor-for-vue.js",
|
||||
"fileHash": "d16802eb",
|
||||
"fileHash": "d8081aa7",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/upload/style/css": {
|
||||
"src": "../../element-plus/es/components/upload/style/css.mjs",
|
||||
"file": "element-plus_es_components_upload_style_css.js",
|
||||
"fileHash": "7a2dd68a",
|
||||
"axios": {
|
||||
"src": "../../axios/index.js",
|
||||
"file": "axios.js",
|
||||
"fileHash": "ff0088a2",
|
||||
"needsInterop": false
|
||||
},
|
||||
"dayjs": {
|
||||
"src": "../../dayjs/dayjs.min.js",
|
||||
"file": "dayjs.js",
|
||||
"fileHash": "fe73817b",
|
||||
"needsInterop": true
|
||||
},
|
||||
"element-plus": {
|
||||
"src": "../../element-plus/es/index.mjs",
|
||||
"file": "element-plus.js",
|
||||
"fileHash": "c9b9d6e7",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/dist/locale/zh-cn.mjs": {
|
||||
"src": "../../element-plus/dist/locale/zh-cn.mjs",
|
||||
"file": "element-plus_dist_locale_zh-cn__mjs.js",
|
||||
"fileHash": "9a604096",
|
||||
"needsInterop": false
|
||||
},
|
||||
"pinia": {
|
||||
"src": "../../pinia/dist/pinia.mjs",
|
||||
"file": "pinia.js",
|
||||
"fileHash": "612fb9ff",
|
||||
"needsInterop": false
|
||||
},
|
||||
"qrcode": {
|
||||
"src": "../../qrcode/lib/browser.js",
|
||||
"file": "qrcode.js",
|
||||
"fileHash": "67be2201",
|
||||
"needsInterop": true
|
||||
},
|
||||
"vue": {
|
||||
"src": "../../vue/dist/vue.runtime.esm-bundler.js",
|
||||
"file": "vue.js",
|
||||
"fileHash": "62b4d691",
|
||||
"needsInterop": false
|
||||
},
|
||||
"vue-router": {
|
||||
"src": "../../vue-router/dist/vue-router.mjs",
|
||||
"file": "vue-router.js",
|
||||
"fileHash": "37148a15",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es": {
|
||||
"src": "../../element-plus/es/index.mjs",
|
||||
"file": "element-plus_es.js",
|
||||
"fileHash": "dc3c171f",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/base/style/css": {
|
||||
"src": "../../element-plus/es/components/base/style/css.mjs",
|
||||
"file": "element-plus_es_components_base_style_css.js",
|
||||
"fileHash": "6a2920d4",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/dialog/style/css": {
|
||||
"src": "../../element-plus/es/components/dialog/style/css.mjs",
|
||||
"file": "element-plus_es_components_dialog_style_css.js",
|
||||
"fileHash": "b3ffeb08",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/button/style/css": {
|
||||
"src": "../../element-plus/es/components/button/style/css.mjs",
|
||||
"file": "element-plus_es_components_button_style_css.js",
|
||||
"fileHash": "7756bfd6",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/form/style/css": {
|
||||
"src": "../../element-plus/es/components/form/style/css.mjs",
|
||||
"file": "element-plus_es_components_form_style_css.js",
|
||||
"fileHash": "8b2d30b6",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/form-item/style/css": {
|
||||
"src": "../../element-plus/es/components/form-item/style/css.mjs",
|
||||
"file": "element-plus_es_components_form-item_style_css.js",
|
||||
"fileHash": "2ded8e3a",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/input/style/css": {
|
||||
"src": "../../element-plus/es/components/input/style/css.mjs",
|
||||
"file": "element-plus_es_components_input_style_css.js",
|
||||
"fileHash": "385c4e72",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/container/style/css": {
|
||||
"src": "../../element-plus/es/components/container/style/css.mjs",
|
||||
"file": "element-plus_es_components_container_style_css.js",
|
||||
"fileHash": "d987fdea",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/main/style/css": {
|
||||
"src": "../../element-plus/es/components/main/style/css.mjs",
|
||||
"file": "element-plus_es_components_main_style_css.js",
|
||||
"fileHash": "b31ab08e",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/header/style/css": {
|
||||
"src": "../../element-plus/es/components/header/style/css.mjs",
|
||||
"file": "element-plus_es_components_header_style_css.js",
|
||||
"fileHash": "0e2e73b6",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/dropdown/style/css": {
|
||||
"src": "../../element-plus/es/components/dropdown/style/css.mjs",
|
||||
"file": "element-plus_es_components_dropdown_style_css.js",
|
||||
"fileHash": "3853d306",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/dropdown-menu/style/css": {
|
||||
"src": "../../element-plus/es/components/dropdown-menu/style/css.mjs",
|
||||
"file": "element-plus_es_components_dropdown-menu_style_css.js",
|
||||
"fileHash": "86ab11a2",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/dropdown-item/style/css": {
|
||||
"src": "../../element-plus/es/components/dropdown-item/style/css.mjs",
|
||||
"file": "element-plus_es_components_dropdown-item_style_css.js",
|
||||
"fileHash": "d1075a48",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/avatar/style/css": {
|
||||
"src": "../../element-plus/es/components/avatar/style/css.mjs",
|
||||
"file": "element-plus_es_components_avatar_style_css.js",
|
||||
"fileHash": "49d61668",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/breadcrumb/style/css": {
|
||||
"src": "../../element-plus/es/components/breadcrumb/style/css.mjs",
|
||||
"file": "element-plus_es_components_breadcrumb_style_css.js",
|
||||
"fileHash": "1d1f93bb",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/breadcrumb-item/style/css": {
|
||||
"src": "../../element-plus/es/components/breadcrumb-item/style/css.mjs",
|
||||
"file": "element-plus_es_components_breadcrumb-item_style_css.js",
|
||||
"fileHash": "33951ee4",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/aside/style/css": {
|
||||
"src": "../../element-plus/es/components/aside/style/css.mjs",
|
||||
"file": "element-plus_es_components_aside_style_css.js",
|
||||
"fileHash": "1057ac58",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/menu/style/css": {
|
||||
"src": "../../element-plus/es/components/menu/style/css.mjs",
|
||||
"file": "element-plus_es_components_menu_style_css.js",
|
||||
"fileHash": "70e08bb2",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/menu-item/style/css": {
|
||||
"src": "../../element-plus/es/components/menu-item/style/css.mjs",
|
||||
"file": "element-plus_es_components_menu-item_style_css.js",
|
||||
"fileHash": "73f00f7a",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/icon/style/css": {
|
||||
"src": "../../element-plus/es/components/icon/style/css.mjs",
|
||||
"file": "element-plus_es_components_icon_style_css.js",
|
||||
"fileHash": "6bd46079",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/loading/style/css": {
|
||||
"src": "../../element-plus/es/components/loading/style/css.mjs",
|
||||
"file": "element-plus_es_components_loading_style_css.js",
|
||||
"fileHash": "1762c012",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/pagination/style/css": {
|
||||
"src": "../../element-plus/es/components/pagination/style/css.mjs",
|
||||
"file": "element-plus_es_components_pagination_style_css.js",
|
||||
"fileHash": "bb5564bc",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/table/style/css": {
|
||||
"src": "../../element-plus/es/components/table/style/css.mjs",
|
||||
"file": "element-plus_es_components_table_style_css.js",
|
||||
"fileHash": "0656de56",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/tag/style/css": {
|
||||
"src": "../../element-plus/es/components/tag/style/css.mjs",
|
||||
"file": "element-plus_es_components_tag_style_css.js",
|
||||
"fileHash": "e60ef3fa",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/image/style/css": {
|
||||
"src": "../../element-plus/es/components/image/style/css.mjs",
|
||||
"file": "element-plus_es_components_image_style_css.js",
|
||||
"fileHash": "b70cc47f",
|
||||
"fileHash": "a341642a",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/table-column/style/css": {
|
||||
"src": "../../element-plus/es/components/table-column/style/css.mjs",
|
||||
"file": "element-plus_es_components_table-column_style_css.js",
|
||||
"fileHash": "3b618674",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/select/style/css": {
|
||||
"src": "../../element-plus/es/components/select/style/css.mjs",
|
||||
"file": "element-plus_es_components_select_style_css.js",
|
||||
"fileHash": "6523e91f",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/option/style/css": {
|
||||
"src": "../../element-plus/es/components/option/style/css.mjs",
|
||||
"file": "element-plus_es_components_option_style_css.js",
|
||||
"fileHash": "2c8efb6b",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/radio-group/style/css": {
|
||||
"src": "../../element-plus/es/components/radio-group/style/css.mjs",
|
||||
"file": "element-plus_es_components_radio-group_style_css.js",
|
||||
"fileHash": "cbcad65d",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/radio/style/css": {
|
||||
"src": "../../element-plus/es/components/radio/style/css.mjs",
|
||||
"file": "element-plus_es_components_radio_style_css.js",
|
||||
"fileHash": "adb1644d",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/switch/style/css": {
|
||||
"src": "../../element-plus/es/components/switch/style/css.mjs",
|
||||
"file": "element-plus_es_components_switch_style_css.js",
|
||||
"fileHash": "b5032cbe",
|
||||
"needsInterop": false
|
||||
},
|
||||
"element-plus/es/components/input-number/style/css": {
|
||||
"src": "../../element-plus/es/components/input-number/style/css.mjs",
|
||||
"file": "element-plus_es_components_input-number_style_css.js",
|
||||
"fileHash": "8895c611",
|
||||
"needsInterop": false
|
||||
}
|
||||
},
|
||||
"chunks": {
|
||||
"chunk-UONBUPA2": {
|
||||
"file": "chunk-UONBUPA2.js"
|
||||
"chunk-75C4BP7B": {
|
||||
"file": "chunk-75C4BP7B.js"
|
||||
},
|
||||
"chunk-VPJRTVUV": {
|
||||
"file": "chunk-VPJRTVUV.js"
|
||||
"chunk-UBLR4G7Q": {
|
||||
"file": "chunk-UBLR4G7Q.js"
|
||||
},
|
||||
"chunk-FU6BXPW4": {
|
||||
"file": "chunk-FU6BXPW4.js"
|
||||
"chunk-5KK3TTMN": {
|
||||
"file": "chunk-5KK3TTMN.js"
|
||||
},
|
||||
"chunk-CGXI5ONL": {
|
||||
"file": "chunk-CGXI5ONL.js"
|
||||
"chunk-B2YDYSZR": {
|
||||
"file": "chunk-B2YDYSZR.js"
|
||||
},
|
||||
"chunk-3UWZ6IZW": {
|
||||
"file": "chunk-3UWZ6IZW.js"
|
||||
"chunk-REWOA3VH": {
|
||||
"file": "chunk-REWOA3VH.js"
|
||||
},
|
||||
"chunk-DVSPEOSC": {
|
||||
"file": "chunk-DVSPEOSC.js"
|
||||
"chunk-R5DNQ3QC": {
|
||||
"file": "chunk-R5DNQ3QC.js"
|
||||
},
|
||||
"chunk-PHTWDJV4": {
|
||||
"file": "chunk-PHTWDJV4.js"
|
||||
"chunk-TX5YLZ4O": {
|
||||
"file": "chunk-TX5YLZ4O.js"
|
||||
},
|
||||
"chunk-EFJ4VOFN": {
|
||||
"file": "chunk-EFJ4VOFN.js"
|
||||
"chunk-SMFPDFTD": {
|
||||
"file": "chunk-SMFPDFTD.js"
|
||||
},
|
||||
"chunk-4AQGC7O6": {
|
||||
"file": "chunk-4AQGC7O6.js"
|
||||
"chunk-YFT6OQ5R": {
|
||||
"file": "chunk-YFT6OQ5R.js"
|
||||
},
|
||||
"chunk-VID4RN2V": {
|
||||
"file": "chunk-VID4RN2V.js"
|
||||
"chunk-4PW274X2": {
|
||||
"file": "chunk-4PW274X2.js"
|
||||
},
|
||||
"chunk-I2FMO3TN": {
|
||||
"file": "chunk-I2FMO3TN.js"
|
||||
"chunk-NKQWFVTF": {
|
||||
"file": "chunk-NKQWFVTF.js"
|
||||
},
|
||||
"chunk-PKGVV2AH": {
|
||||
"file": "chunk-PKGVV2AH.js"
|
||||
"chunk-IV6PSERC": {
|
||||
"file": "chunk-IV6PSERC.js"
|
||||
},
|
||||
"chunk-QPJ3ZUOF": {
|
||||
"file": "chunk-QPJ3ZUOF.js"
|
||||
},
|
||||
"chunk-47WSI2HY": {
|
||||
"file": "chunk-47WSI2HY.js"
|
||||
},
|
||||
"chunk-YAGW2SQC": {
|
||||
"file": "chunk-YAGW2SQC.js"
|
||||
},
|
||||
"chunk-L7WLSQ4R": {
|
||||
"file": "chunk-L7WLSQ4R.js"
|
||||
},
|
||||
"chunk-ELEEJBJQ": {
|
||||
"file": "chunk-ELEEJBJQ.js"
|
||||
"chunk-AFCJBIYK": {
|
||||
"file": "chunk-AFCJBIYK.js"
|
||||
},
|
||||
"chunk-QZC7O2C6": {
|
||||
"file": "chunk-QZC7O2C6.js"
|
||||
},
|
||||
"chunk-HYZ2CRGS": {
|
||||
"file": "chunk-HYZ2CRGS.js"
|
||||
},
|
||||
"chunk-OP4ZUAFM": {
|
||||
"file": "chunk-OP4ZUAFM.js"
|
||||
},
|
||||
"chunk-H2732BJL": {
|
||||
"file": "chunk-H2732BJL.js"
|
||||
},
|
||||
"chunk-G3PMV62Z": {
|
||||
"file": "chunk-G3PMV62Z.js"
|
||||
}
|
||||
|
||||
2
admin/node_modules/.vite/deps/axios.js.map
generated
vendored
2
admin/node_modules/.vite/deps/axios.js.map
generated
vendored
File diff suppressed because one or more lines are too long
8
admin/node_modules/.vite/deps/element-plus.js
generated
vendored
8
admin/node_modules/.vite/deps/element-plus.js
generated
vendored
@ -514,11 +514,11 @@ import {
|
||||
virtualizedScrollbarProps,
|
||||
watermarkProps,
|
||||
zIndexContextKey
|
||||
} from "./chunk-47WSI2HY.js";
|
||||
import "./chunk-YAGW2SQC.js";
|
||||
import "./chunk-L7WLSQ4R.js";
|
||||
import "./chunk-ELEEJBJQ.js";
|
||||
} from "./chunk-AFCJBIYK.js";
|
||||
import "./chunk-QZC7O2C6.js";
|
||||
import "./chunk-HYZ2CRGS.js";
|
||||
import "./chunk-OP4ZUAFM.js";
|
||||
import "./chunk-H2732BJL.js";
|
||||
import "./chunk-G3PMV62Z.js";
|
||||
var export_dayjs = import_dayjs.default;
|
||||
export {
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_dist_locale_zh-cn__mjs.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_dist_locale_zh-cn__mjs.js.map
generated
vendored
File diff suppressed because one or more lines are too long
8
admin/node_modules/.vite/deps/element-plus_es.js
generated
vendored
8
admin/node_modules/.vite/deps/element-plus_es.js
generated
vendored
@ -514,11 +514,11 @@ import {
|
||||
virtualizedScrollbarProps,
|
||||
watermarkProps,
|
||||
zIndexContextKey
|
||||
} from "./chunk-47WSI2HY.js";
|
||||
import "./chunk-YAGW2SQC.js";
|
||||
import "./chunk-L7WLSQ4R.js";
|
||||
import "./chunk-ELEEJBJQ.js";
|
||||
} from "./chunk-AFCJBIYK.js";
|
||||
import "./chunk-QZC7O2C6.js";
|
||||
import "./chunk-HYZ2CRGS.js";
|
||||
import "./chunk-OP4ZUAFM.js";
|
||||
import "./chunk-H2732BJL.js";
|
||||
import "./chunk-G3PMV62Z.js";
|
||||
var export_dayjs = import_dayjs.default;
|
||||
export {
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/aside/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-aside.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-aside.css";
|
||||
//# sourceMappingURL=element-plus_es_components_aside_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/aside/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-aside.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-aside.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/avatar/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-avatar.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-avatar.css";
|
||||
//# sourceMappingURL=element-plus_es_components_avatar_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/avatar/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-avatar.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-avatar.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_base_style_css.js
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_base_style_css.js
generated
vendored
@ -1,2 +1,2 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
//# sourceMappingURL=element-plus_es_components_base_style_css.js.map
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/breadcrumb-item/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-breadcrumb-item.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-breadcrumb-item.css";
|
||||
//# sourceMappingURL=element-plus_es_components_breadcrumb-item_style_css.js.map
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/breadcrumb-item/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-breadcrumb-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-breadcrumb-item.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/breadcrumb/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-breadcrumb.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-breadcrumb.css";
|
||||
//# sourceMappingURL=element-plus_es_components_breadcrumb_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/breadcrumb/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-breadcrumb.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-breadcrumb.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_button_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_button_style_css.js
generated
vendored
@ -1,3 +1,3 @@
|
||||
import "./chunk-I2FMO3TN.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-SMFPDFTD.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
//# sourceMappingURL=element-plus_es_components_button_style_css.js.map
|
||||
|
||||
5
admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js
generated
vendored
5
admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js
generated
vendored
@ -1,5 +0,0 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
|
||||
// node_modules/element-plus/es/components/col/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-col.css";
|
||||
//# sourceMappingURL=element-plus_es_components_col_style_css.js.map
|
||||
7
admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js.map
generated
vendored
7
admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js.map
generated
vendored
@ -1,7 +0,0 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/col/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-col.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
12
admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js
generated
vendored
12
admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js
generated
vendored
@ -1,9 +1,9 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/container/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-container.css";
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-aside.css";
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-footer.css";
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-header.css";
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-main.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-container.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-aside.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-footer.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-header.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-main.css";
|
||||
//# sourceMappingURL=element-plus_es_components_container_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/container/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-container.css';\r\nimport 'element-plus/theme-chalk/el-aside.css';\r\nimport 'element-plus/theme-chalk/el-footer.css';\r\nimport 'element-plus/theme-chalk/el-header.css';\r\nimport 'element-plus/theme-chalk/el-main.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-container.css';\nimport 'element-plus/theme-chalk/el-aside.css';\nimport 'element-plus/theme-chalk/el-footer.css';\nimport 'element-plus/theme-chalk/el-header.css';\nimport 'element-plus/theme-chalk/el-main.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
6
admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js
generated
vendored
6
admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js
generated
vendored
@ -1,8 +1,8 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/dialog/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dialog.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-dialog.css";
|
||||
|
||||
// node_modules/element-plus/es/components/overlay/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-overlay.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-overlay.css";
|
||||
//# sourceMappingURL=element-plus_es_components_dialog_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/dialog/style/css.mjs", "../../element-plus/es/components/overlay/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-dialog.css';\r\nimport '../../overlay/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n", "import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-overlay.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-dialog.css';\nimport '../../overlay/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n", "import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-overlay.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;;;ACAP,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_dropdown-item_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_dropdown-item_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/dropdown-item/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dropdown-item.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-dropdown-item.css";
|
||||
//# sourceMappingURL=element-plus_es_components_dropdown-item_style_css.js.map
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/dropdown-item/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-dropdown-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-dropdown-item.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_dropdown-menu_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_dropdown-menu_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/dropdown-menu/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dropdown-menu.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-dropdown-menu.css";
|
||||
//# sourceMappingURL=element-plus_es_components_dropdown-menu_style_css.js.map
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/dropdown-menu/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-dropdown-menu.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-dropdown-menu.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
12
admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js
generated
vendored
12
admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js
generated
vendored
@ -1,11 +1,11 @@
|
||||
import "./chunk-EFJ4VOFN.js";
|
||||
import "./chunk-4AQGC7O6.js";
|
||||
import "./chunk-I2FMO3TN.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-REWOA3VH.js";
|
||||
import "./chunk-TX5YLZ4O.js";
|
||||
import "./chunk-SMFPDFTD.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/button-group/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-button-group.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-button-group.css";
|
||||
|
||||
// node_modules/element-plus/es/components/dropdown/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dropdown.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-dropdown.css";
|
||||
//# sourceMappingURL=element-plus_es_components_dropdown_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/button-group/style/css.mjs", "../../element-plus/es/components/dropdown/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-button-group.css';\r\n//# sourceMappingURL=css.mjs.map\r\n", "import '../../base/style/css.mjs';\r\nimport '../../button/style/css.mjs';\r\nimport '../../button-group/style/css.mjs';\r\nimport '../../popper/style/css.mjs';\r\nimport '../../scrollbar/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-dropdown.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-button-group.css';\n//# sourceMappingURL=css.mjs.map\n", "import '../../base/style/css.mjs';\nimport '../../button/style/css.mjs';\nimport '../../button-group/style/css.mjs';\nimport '../../popper/style/css.mjs';\nimport '../../scrollbar/style/css.mjs';\nimport 'element-plus/theme-chalk/el-dropdown.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;;;;AACA,OAAO;;;ACIP,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/form-item/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-form-item.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-form-item.css";
|
||||
//# sourceMappingURL=element-plus_es_components_form-item_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/form-item/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-form-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-form-item.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/form/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-form.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-form.css";
|
||||
//# sourceMappingURL=element-plus_es_components_form_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/form/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-form.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-form.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/header/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-header.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-header.css";
|
||||
//# sourceMappingURL=element-plus_es_components_header_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/header/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-header.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-header.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_icon_style_css.js
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_icon_style_css.js
generated
vendored
@ -1,2 +1,2 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
//# sourceMappingURL=element-plus_es_components_icon_style_css.js.map
|
||||
|
||||
6
admin/node_modules/.vite/deps/element-plus_es_components_input-number_style_css.js
generated
vendored
6
admin/node_modules/.vite/deps/element-plus_es_components_input-number_style_css.js
generated
vendored
@ -1,6 +1,6 @@
|
||||
import "./chunk-PKGVV2AH.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-NKQWFVTF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/input-number/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-input-number.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-input-number.css";
|
||||
//# sourceMappingURL=element-plus_es_components_input-number_style_css.js.map
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/input-number/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport '../../input/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-input-number.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport '../../input/style/css.mjs';\nimport 'element-plus/theme-chalk/el-input-number.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;;AAEA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_input_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_input_style_css.js
generated
vendored
@ -1,3 +1,3 @@
|
||||
import "./chunk-PKGVV2AH.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-NKQWFVTF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
//# sourceMappingURL=element-plus_es_components_input_style_css.js.map
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/loading/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-loading.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-loading.css";
|
||||
//# sourceMappingURL=element-plus_es_components_loading_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/loading/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-loading.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-loading.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/main/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-main.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-main.css";
|
||||
//# sourceMappingURL=element-plus_es_components_main_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/main/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-main.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-main.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js
generated
vendored
@ -1,5 +1,5 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/menu-item/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-menu-item.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-menu-item.css";
|
||||
//# sourceMappingURL=element-plus_es_components_menu-item_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/menu-item/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-menu-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-menu-item.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
8
admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js
generated
vendored
8
admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js
generated
vendored
@ -1,7 +1,7 @@
|
||||
import "./chunk-PHTWDJV4.js";
|
||||
import "./chunk-4AQGC7O6.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-R5DNQ3QC.js";
|
||||
import "./chunk-TX5YLZ4O.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/menu/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-menu.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-menu.css";
|
||||
//# sourceMappingURL=element-plus_es_components_menu_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/menu/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-menu.css';\r\nimport '../../tooltip/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-menu.css';\nimport '../../tooltip/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_option_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_option_style_css.js
generated
vendored
@ -1,3 +1,3 @@
|
||||
import "./chunk-CGXI5ONL.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-UBLR4G7Q.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
//# sourceMappingURL=element-plus_es_components_option_style_css.js.map
|
||||
|
||||
16
admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js
generated
vendored
16
admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js
generated
vendored
@ -1,11 +1,11 @@
|
||||
import "./chunk-FU6BXPW4.js";
|
||||
import "./chunk-CGXI5ONL.js";
|
||||
import "./chunk-DVSPEOSC.js";
|
||||
import "./chunk-EFJ4VOFN.js";
|
||||
import "./chunk-4AQGC7O6.js";
|
||||
import "./chunk-PKGVV2AH.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-75C4BP7B.js";
|
||||
import "./chunk-UBLR4G7Q.js";
|
||||
import "./chunk-5KK3TTMN.js";
|
||||
import "./chunk-REWOA3VH.js";
|
||||
import "./chunk-TX5YLZ4O.js";
|
||||
import "./chunk-NKQWFVTF.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/pagination/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-pagination.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-pagination.css";
|
||||
//# sourceMappingURL=element-plus_es_components_pagination_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/pagination/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-pagination.css';\r\nimport '../../select/style/css.mjs';\r\nimport '../../input/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-pagination.css';\nimport '../../select/style/css.mjs';\nimport '../../input/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;;;;;;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
6
admin/node_modules/.vite/deps/element-plus_es_components_radio-group_style_css.js
generated
vendored
6
admin/node_modules/.vite/deps/element-plus_es_components_radio-group_style_css.js
generated
vendored
@ -1,6 +1,6 @@
|
||||
import "./chunk-VPJRTVUV.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-4PW274X2.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/radio-group/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-radio-group.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-radio-group.css";
|
||||
//# sourceMappingURL=element-plus_es_components_radio-group_style_css.js.map
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/radio-group/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport '../../radio/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-radio-group.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport '../../radio/style/css.mjs';\nimport 'element-plus/theme-chalk/el-radio-group.css';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;;AAEA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_radio_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_radio_style_css.js
generated
vendored
@ -1,3 +1,3 @@
|
||||
import "./chunk-VPJRTVUV.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-4PW274X2.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
//# sourceMappingURL=element-plus_es_components_radio_style_css.js.map
|
||||
|
||||
5
admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js
generated
vendored
5
admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js
generated
vendored
@ -1,5 +0,0 @@
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
|
||||
// node_modules/element-plus/es/components/row/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-row.css";
|
||||
//# sourceMappingURL=element-plus_es_components_row_style_css.js.map
|
||||
7
admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js.map
generated
vendored
7
admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js.map
generated
vendored
@ -1,7 +0,0 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/row/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-row.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"mappings": ";;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
12
admin/node_modules/.vite/deps/element-plus_es_components_select_style_css.js
generated
vendored
12
admin/node_modules/.vite/deps/element-plus_es_components_select_style_css.js
generated
vendored
@ -1,7 +1,7 @@
|
||||
import "./chunk-FU6BXPW4.js";
|
||||
import "./chunk-CGXI5ONL.js";
|
||||
import "./chunk-DVSPEOSC.js";
|
||||
import "./chunk-EFJ4VOFN.js";
|
||||
import "./chunk-4AQGC7O6.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-75C4BP7B.js";
|
||||
import "./chunk-UBLR4G7Q.js";
|
||||
import "./chunk-5KK3TTMN.js";
|
||||
import "./chunk-REWOA3VH.js";
|
||||
import "./chunk-TX5YLZ4O.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
//# sourceMappingURL=element-plus_es_components_select_style_css.js.map
|
||||
|
||||
8
admin/node_modules/.vite/deps/element-plus_es_components_table-column_style_css.js
generated
vendored
8
admin/node_modules/.vite/deps/element-plus_es_components_table-column_style_css.js
generated
vendored
@ -1,7 +1,7 @@
|
||||
import "./chunk-3UWZ6IZW.js";
|
||||
import "./chunk-DVSPEOSC.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-5KK3TTMN.js";
|
||||
import "./chunk-B2YDYSZR.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/table-column/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-table-column.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-table-column.css";
|
||||
//# sourceMappingURL=element-plus_es_components_table-column_style_css.js.map
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/table-column/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-table-column.css';\r\nimport '../../checkbox/style/css.mjs';\r\nimport '../../tag/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-table-column.css';\nimport '../../checkbox/style/css.mjs';\nimport '../../tag/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
12
admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js
generated
vendored
12
admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js
generated
vendored
@ -1,9 +1,9 @@
|
||||
import "./chunk-3UWZ6IZW.js";
|
||||
import "./chunk-PHTWDJV4.js";
|
||||
import "./chunk-EFJ4VOFN.js";
|
||||
import "./chunk-4AQGC7O6.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-B2YDYSZR.js";
|
||||
import "./chunk-REWOA3VH.js";
|
||||
import "./chunk-R5DNQ3QC.js";
|
||||
import "./chunk-TX5YLZ4O.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
|
||||
// node_modules/element-plus/es/components/table/style/css.mjs
|
||||
import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-table.css";
|
||||
import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-table.css";
|
||||
//# sourceMappingURL=element-plus_es_components_table_style_css.js.map
|
||||
|
||||
2
admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js.map
generated
vendored
2
admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js.map
generated
vendored
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../element-plus/es/components/table/style/css.mjs"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-table.css';\r\nimport '../../checkbox/style/css.mjs';\r\nimport '../../tooltip/style/css.mjs';\r\nimport '../../scrollbar/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n"],
|
||||
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-table.css';\nimport '../../checkbox/style/css.mjs';\nimport '../../tooltip/style/css.mjs';\nimport '../../scrollbar/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n"],
|
||||
"mappings": ";;;;;;;AACA,OAAO;",
|
||||
"names": []
|
||||
}
|
||||
|
||||
4
admin/node_modules/.vite/deps/element-plus_es_components_tag_style_css.js
generated
vendored
4
admin/node_modules/.vite/deps/element-plus_es_components_tag_style_css.js
generated
vendored
@ -1,3 +1,3 @@
|
||||
import "./chunk-DVSPEOSC.js";
|
||||
import "./chunk-QPJ3ZUOF.js";
|
||||
import "./chunk-5KK3TTMN.js";
|
||||
import "./chunk-IV6PSERC.js";
|
||||
//# sourceMappingURL=element-plus_es_components_tag_style_css.js.map
|
||||
|
||||
6
admin/node_modules/.vite/deps/pinia.js
generated
vendored
6
admin/node_modules/.vite/deps/pinia.js
generated
vendored
@ -1,11 +1,11 @@
|
||||
import {
|
||||
setupDevtoolsPlugin
|
||||
} from "./chunk-VID4RN2V.js";
|
||||
} from "./chunk-YFT6OQ5R.js";
|
||||
import {
|
||||
del,
|
||||
isVue2,
|
||||
set
|
||||
} from "./chunk-YAGW2SQC.js";
|
||||
} from "./chunk-HYZ2CRGS.js";
|
||||
import {
|
||||
computed,
|
||||
effectScope,
|
||||
@ -25,7 +25,7 @@ import {
|
||||
toRefs,
|
||||
unref,
|
||||
watch
|
||||
} from "./chunk-ELEEJBJQ.js";
|
||||
} from "./chunk-H2732BJL.js";
|
||||
import "./chunk-G3PMV62Z.js";
|
||||
|
||||
// node_modules/pinia/dist/pinia.mjs
|
||||
|
||||
2
admin/node_modules/.vite/deps/pinia.js.map
generated
vendored
2
admin/node_modules/.vite/deps/pinia.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2
admin/node_modules/.vite/deps/qrcode.js.map
generated
vendored
2
admin/node_modules/.vite/deps/qrcode.js.map
generated
vendored
File diff suppressed because one or more lines are too long
4
admin/node_modules/.vite/deps/vue-router.js
generated
vendored
4
admin/node_modules/.vite/deps/vue-router.js
generated
vendored
@ -1,6 +1,6 @@
|
||||
import {
|
||||
setupDevtoolsPlugin
|
||||
} from "./chunk-VID4RN2V.js";
|
||||
} from "./chunk-YFT6OQ5R.js";
|
||||
import {
|
||||
computed,
|
||||
defineComponent,
|
||||
@ -19,7 +19,7 @@ import {
|
||||
unref,
|
||||
watch,
|
||||
watchEffect
|
||||
} from "./chunk-ELEEJBJQ.js";
|
||||
} from "./chunk-H2732BJL.js";
|
||||
import "./chunk-G3PMV62Z.js";
|
||||
|
||||
// node_modules/vue-router/dist/devtools-EWN81iOl.mjs
|
||||
|
||||
2
admin/node_modules/.vite/deps/vue-router.js.map
generated
vendored
2
admin/node_modules/.vite/deps/vue-router.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2
admin/node_modules/.vite/deps/vue.js
generated
vendored
2
admin/node_modules/.vite/deps/vue.js
generated
vendored
@ -170,7 +170,7 @@ import {
|
||||
withMemo,
|
||||
withModifiers,
|
||||
withScopeId
|
||||
} from "./chunk-ELEEJBJQ.js";
|
||||
} from "./chunk-H2732BJL.js";
|
||||
import "./chunk-G3PMV62Z.js";
|
||||
export {
|
||||
BaseTransition,
|
||||
|
||||
44
admin/package-lock.json
generated
44
admin/package-lock.json
generated
@ -1295,7 +1295,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
|
||||
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/lodash": "*"
|
||||
}
|
||||
@ -1321,7 +1320,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz",
|
||||
"integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@transloadit/prettier-bytes": "0.0.7",
|
||||
"@uppy/store-default": "^2.1.1",
|
||||
@ -1353,7 +1351,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz",
|
||||
"integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@uppy/companion-client": "^2.2.2",
|
||||
"@uppy/utils": "^4.1.2",
|
||||
@ -1524,7 +1521,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz",
|
||||
"integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"is-url": "^1.2.4"
|
||||
},
|
||||
@ -1557,7 +1553,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz",
|
||||
"integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/event-emitter": "^0.3.3",
|
||||
"event-emitter": "^0.3.5",
|
||||
@ -1588,7 +1583,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz",
|
||||
"integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@uppy/core": "^2.1.1",
|
||||
"@uppy/xhr-upload": "^2.0.3",
|
||||
@ -1986,7 +1980,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz",
|
||||
"integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"ssr-window": "^3.0.0-alpha.1"
|
||||
}
|
||||
@ -2566,8 +2559,7 @@
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz",
|
||||
"integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/is-number": {
|
||||
"version": "7.0.0",
|
||||
@ -2634,15 +2626,13 @@
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash-es": {
|
||||
"version": "4.17.22",
|
||||
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz",
|
||||
"integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash-unified": {
|
||||
"version": "1.0.3",
|
||||
@ -2659,51 +2649,44 @@
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
|
||||
"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.clonedeep": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
|
||||
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.debounce": {
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
|
||||
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.foreach": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
|
||||
"integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.isequal": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
|
||||
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
|
||||
"deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.throttle": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
|
||||
"integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.toarray": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
|
||||
"integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/magic-string": {
|
||||
"version": "0.30.21",
|
||||
@ -2849,7 +2832,6 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"nanoid": "bin/nanoid.cjs"
|
||||
},
|
||||
@ -3183,7 +3165,6 @@
|
||||
"integrity": "sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/estree": "1.0.8"
|
||||
},
|
||||
@ -3253,7 +3234,6 @@
|
||||
"integrity": "sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"chokidar": "^4.0.0",
|
||||
"immutable": "^5.0.2",
|
||||
@ -3296,7 +3276,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz",
|
||||
"integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"immer": "^9.0.6",
|
||||
"is-plain-object": "^5.0.0",
|
||||
@ -3320,7 +3299,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.6.3.tgz",
|
||||
"integrity": "sha512-W2lHLLw2qR2Vv0DcMmcxXqcfdBaIcoN+y/86SmHv8fn4DazEQSH6KN3TjZcWvwujW56OHiiirsbHWZb4vx/0fg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12.17.0"
|
||||
}
|
||||
@ -3657,7 +3635,6 @@
|
||||
"integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.21.3",
|
||||
"postcss": "^8.4.43",
|
||||
@ -3717,7 +3694,6 @@
|
||||
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz",
|
||||
"integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-dom": "3.5.27",
|
||||
"@vue/compiler-sfc": "3.5.27",
|
||||
|
||||
@ -37,10 +37,10 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table :data="match.players" size="small">
|
||||
<el-table-column type="index" label="排名" width="60">
|
||||
<template #default="{ $index }">
|
||||
<span :class="['rank-badge', getRankClass($index + 1)]">{{ $index + 1 }}</span>
|
||||
<el-table :data="sortedPlayers" size="small">
|
||||
<el-table-column label="排名" width="60">
|
||||
<template #default="{ row }">
|
||||
<span :class="['rank-badge', getRankClass(row.rank || 0)]">{{ row.rank || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="realName" label="姓名" />
|
||||
@ -176,6 +176,7 @@
|
||||
<el-form :model="eliminationForm" label-width="100px">
|
||||
<el-form-item label="淘汰赛人数">
|
||||
<el-select v-model="eliminationForm.elimination_size">
|
||||
<el-option label="2强(决赛)" :value="2" />
|
||||
<el-option label="4强" :value="4" />
|
||||
<el-option label="8强" :value="8" />
|
||||
<el-option label="16强" :value="16" />
|
||||
@ -310,6 +311,33 @@ const playerMap = computed(() => {
|
||||
|
||||
const getPlayerName = (id) => playerMap.value[id] || `选手${id}`
|
||||
|
||||
// 排序后的选手列表(按 rank 排序,如果 rank 相同则按胜场、总得分、初始战力排序)
|
||||
const sortedPlayers = computed(() => {
|
||||
if (!match.value.players || match.value.players.length === 0) return []
|
||||
|
||||
// 如果比赛已结束,按 rank 排序
|
||||
if (match.value.status === 2 && match.value.players.some(p => p.rank)) {
|
||||
return [...match.value.players].sort((a, b) => {
|
||||
// 优先按 rank 排序
|
||||
if (a.rank && b.rank) {
|
||||
return a.rank - b.rank
|
||||
}
|
||||
if (a.rank) return -1
|
||||
if (b.rank) return 1
|
||||
// 如果没有 rank,按胜场、总得分、初始战力排序
|
||||
if (b.winCount !== a.winCount) return b.winCount - a.winCount
|
||||
// 这里可以添加总得分排序,但需要从对局记录中计算
|
||||
return b.initialPower - a.initialPower
|
||||
})
|
||||
}
|
||||
|
||||
// 比赛进行中:按胜场、总得分、初始战力排序
|
||||
return [...match.value.players].sort((a, b) => {
|
||||
if (b.winCount !== a.winCount) return b.winCount - a.winCount
|
||||
return b.initialPower - a.initialPower
|
||||
})
|
||||
})
|
||||
|
||||
const fetchData = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
|
||||
@ -407,21 +407,63 @@ App({
|
||||
break;
|
||||
case "match_paired":
|
||||
// 排位赛匹配通知
|
||||
try {
|
||||
const payload = data.data || {};
|
||||
const opponent = payload.opponent || {};
|
||||
const matchCode = payload.matchCode;
|
||||
|
||||
wx.showModal({
|
||||
title: "匹配成功",
|
||||
content: `你的对手是: ${data.data.opponent.realName}`,
|
||||
content: `你的对手是: ${opponent.realName || "对手"}`,
|
||||
showCancel: false,
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
// 检查当前页面
|
||||
const pagesMatch = getCurrentPages();
|
||||
const currentMatchPage = pagesMatch[pagesMatch.length - 1];
|
||||
|
||||
if (currentMatchPage && currentMatchPage.route === "pages/match/ranking/index") {
|
||||
// 如果已在比赛详情页,检查是否是同一场比赛
|
||||
const targetCode = matchCode;
|
||||
if (
|
||||
!targetCode ||
|
||||
!currentMatchPage.data ||
|
||||
currentMatchPage.data.matchCode === targetCode
|
||||
) {
|
||||
// 刷新详情页的所有接口信息
|
||||
if (typeof currentMatchPage.fetchMatchDetail === "function") {
|
||||
currentMatchPage.fetchMatchDetail();
|
||||
} else if (typeof currentMatchPage.fetchCurrentGame === "function") {
|
||||
currentMatchPage.fetchCurrentGame();
|
||||
}
|
||||
} else {
|
||||
// 不同比赛,跳转到新的比赛详情页
|
||||
wx.redirectTo({
|
||||
url: `/pages/match/ranking/index?code=${targetCode}`
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// 如果不在比赛详情页,自动跳转到比赛详情页
|
||||
if (matchCode) {
|
||||
wx.navigateTo({
|
||||
url: `/pages/match/ranking/index?code=${matchCode}`
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
console.error("处理 match_paired 消息失败:", e);
|
||||
}
|
||||
break;
|
||||
case "ranking_game_updated":
|
||||
// 排位赛比分/匹配更新:刷新当前排位赛详情页
|
||||
try {
|
||||
const pages3 = getCurrentPages();
|
||||
const currentPage3 = pages3[pages3.length - 1];
|
||||
if (
|
||||
currentPage3 &&
|
||||
currentPage3.route === "pages/match/ranking/index"
|
||||
) {
|
||||
if (currentPage3) {
|
||||
if (currentPage3.route === "pages/match/ranking/index") {
|
||||
const targetCode = data.data && data.data.matchCode;
|
||||
if (
|
||||
!targetCode ||
|
||||
@ -432,11 +474,51 @@ App({
|
||||
currentPage3.fetchMatchDetail();
|
||||
}
|
||||
}
|
||||
} else if (currentPage3.route === "pages/match/challenge/index") {
|
||||
// 比赛首页:比分确认后也刷新“当前比赛”卡片
|
||||
if (typeof currentPage3.fetchOngoingMatches === "function") {
|
||||
currentPage3.fetchOngoingMatches();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("处理 ranking_game_updated 消息失败:", e);
|
||||
}
|
||||
break;
|
||||
case "points_order_verified":
|
||||
// 后台核销积分订单后,通知小程序刷新订单列表/详情
|
||||
try {
|
||||
wx.showToast({ title: "积分订单已核销", icon: "success" });
|
||||
|
||||
const pages = getCurrentPages();
|
||||
const currentPage = pages[pages.length - 1];
|
||||
const payload = data.data || {};
|
||||
|
||||
if (
|
||||
currentPage &&
|
||||
currentPage.route === "pages/points/order/index"
|
||||
) {
|
||||
// 如果页面实现了下拉刷新逻辑,优先复用
|
||||
if (typeof currentPage.onPullDownRefresh === "function") {
|
||||
currentPage.onPullDownRefresh();
|
||||
} else if (typeof currentPage.fetchOrders === "function") {
|
||||
// 兜底:重置分页并主动刷新
|
||||
currentPage.setData({ page: 1, hasMore: true });
|
||||
currentPage.fetchOrders();
|
||||
}
|
||||
|
||||
// 精确刷新当前弹窗和列表中的该笔订单
|
||||
if (
|
||||
payload.orderId &&
|
||||
typeof currentPage.refreshOrderById === "function"
|
||||
) {
|
||||
currentPage.refreshOrderById(payload.orderId);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("处理 points_order_verified 消息失败:", e);
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@ -15,6 +15,14 @@
|
||||
"pages/points/order/index",
|
||||
"pages/store/index"
|
||||
],
|
||||
"requiredPrivateInfos": [
|
||||
"getLocation"
|
||||
],
|
||||
"permission": {
|
||||
"scope.userLocation": {
|
||||
"desc": "你的位置信息将用于小程序位置接口的效果展示"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"backgroundTextStyle": "dark",
|
||||
"navigationBarBackgroundColor": "#FF6B35",
|
||||
|
||||
@ -9,7 +9,13 @@ Page({
|
||||
myPlayer: null,
|
||||
currentGame: null,
|
||||
myScoreInput: '',
|
||||
opponentScoreInput: ''
|
||||
opponentScoreInput: '',
|
||||
isReferee: false,
|
||||
editingGame: null,
|
||||
editScoreForm: {
|
||||
player1Score: '',
|
||||
player2Score: ''
|
||||
}
|
||||
},
|
||||
|
||||
onLoad(options) {
|
||||
@ -120,22 +126,128 @@ Page({
|
||||
|
||||
async fetchMatchDetail() {
|
||||
try {
|
||||
const res = await app.request(`/api/match/ranking/${this.data.matchCode}`)
|
||||
this.setData({ match: res.data })
|
||||
// 同时获取比赛详情和当前对局,确保数据完整刷新
|
||||
const [detailRes, gameRes] = await Promise.all([
|
||||
app.request(`/api/match/ranking/${this.data.matchCode}`),
|
||||
app.request(`/api/match/ranking/${this.data.matchCode}/my-game`).catch(() => ({ data: { currentGame: null } }))
|
||||
])
|
||||
|
||||
// 调试:打印完整的接口返回数据
|
||||
console.log('[fetchMatchDetail] 接口返回数据:', {
|
||||
matchCode: detailRes.data.matchCode,
|
||||
rounds: detailRes.data.rounds,
|
||||
roundsLength: detailRes.data.rounds?.length || 0,
|
||||
isReferee: detailRes.data.isReferee,
|
||||
playersCount: detailRes.data.players?.length || 0
|
||||
})
|
||||
|
||||
// 详细打印对局数据(接口已直接返回选手名称)
|
||||
if (detailRes.data.rounds && detailRes.data.rounds.length > 0) {
|
||||
detailRes.data.rounds.forEach((round, roundIndex) => {
|
||||
console.log(`[fetchMatchDetail] 轮次 ${roundIndex + 1}:`, {
|
||||
roundName: round.roundName,
|
||||
roundId: round.id,
|
||||
gamesCount: round.games?.length || 0,
|
||||
games: round.games?.map(g => ({
|
||||
id: g.id,
|
||||
player1Id: g.player1Id,
|
||||
player2Id: g.player2Id,
|
||||
player1Name: g.player1Name,
|
||||
player2Name: g.player2Name,
|
||||
player1Score: g.player1Score,
|
||||
player2Score: g.player2Score
|
||||
})) || []
|
||||
})
|
||||
|
||||
// 检查每个对局的选手名称
|
||||
if (round.games && round.games.length > 0) {
|
||||
round.games.forEach((game, gameIndex) => {
|
||||
console.log(`[fetchMatchDetail] 对局 ${gameIndex + 1}:`, {
|
||||
id: game.id,
|
||||
player1Id: game.player1Id,
|
||||
player2Id: game.player2Id,
|
||||
player1Name: game.player1Name,
|
||||
player2Name: game.player2Name,
|
||||
hasPlayer1Name: !!game.player1Name,
|
||||
hasPlayer2Name: !!game.player2Name
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
} else {
|
||||
console.warn('[fetchMatchDetail] 警告: rounds 为空或不存在', detailRes.data)
|
||||
}
|
||||
|
||||
// 确保数据正确设置,深拷贝避免引用问题
|
||||
const matchData = JSON.parse(JSON.stringify({
|
||||
...detailRes.data,
|
||||
rounds: (detailRes.data.rounds || []).map(round => ({
|
||||
...round,
|
||||
games: (round.games || []).map(game => ({
|
||||
...game,
|
||||
// 确保选手名称字段存在
|
||||
player1Name: game.player1Name || `选手${game.player1Id}`,
|
||||
player2Name: game.player2Name || `选手${game.player2Id}`
|
||||
}))
|
||||
}))
|
||||
}))
|
||||
|
||||
console.log('[fetchMatchDetail] 设置到页面的数据:', {
|
||||
matchCode: matchData.matchCode,
|
||||
roundsLength: matchData.rounds.length,
|
||||
firstRoundGames: matchData.rounds[0]?.games?.length || 0,
|
||||
firstGame: matchData.rounds[0]?.games?.[0] || null,
|
||||
firstGamePlayerNames: matchData.rounds[0]?.games?.[0] ? {
|
||||
player1Name: matchData.rounds[0].games[0].player1Name,
|
||||
player2Name: matchData.rounds[0].games[0].player2Name
|
||||
} : null
|
||||
})
|
||||
|
||||
this.setData({
|
||||
match: matchData,
|
||||
isReferee: detailRes.data.isReferee || false
|
||||
}, () => {
|
||||
// setData 完成后的回调
|
||||
console.log('[fetchMatchDetail] setData 完成,页面数据:', {
|
||||
matchRoundsLength: this.data.match?.rounds?.length || 0,
|
||||
firstRoundGamesLength: this.data.match?.rounds?.[0]?.games?.length || 0,
|
||||
firstGamePlayerNames: this.data.match?.rounds?.[0]?.games?.[0] ? {
|
||||
player1Name: this.data.match.rounds[0].games[0].player1Name,
|
||||
player2Name: this.data.match.rounds[0].games[0].player2Name,
|
||||
player1Id: this.data.match.rounds[0].games[0].player1Id,
|
||||
player2Id: this.data.match.rounds[0].games[0].player2Id
|
||||
} : null
|
||||
})
|
||||
})
|
||||
|
||||
// 如果是裁判,不需要获取当前对局
|
||||
if (detailRes.data.isReferee) {
|
||||
console.log('[fetchMatchDetail] 裁判身份,跳过获取当前对局')
|
||||
return
|
||||
}
|
||||
|
||||
// 找到我的参赛信息
|
||||
const ladderUser = app.globalData.ladderUser
|
||||
if (ladderUser) {
|
||||
// 使用 == 比较,避免类型不一致问题
|
||||
const myPlayer = res.data.players.find(p => p.ladderUserId == ladderUser.id)
|
||||
const myPlayer = detailRes.data.players.find(p => p.ladderUserId == ladderUser.id)
|
||||
this.setData({ myPlayer })
|
||||
|
||||
// 不再根据本地 myPlayer.status 决定是否拉取当前对局
|
||||
// 后端 /my-game 接口内部会负责:
|
||||
// - 如果当前有对局:返回对手信息
|
||||
// - 如果没有对局但我在 waiting:尝试自动匹配并返回新对局
|
||||
// - 否则返回 currentGame: null
|
||||
this.fetchCurrentGame()
|
||||
// 更新当前对局信息
|
||||
const newGame = gameRes.data.currentGame || null
|
||||
const prevGameId = this.data.currentGame && this.data.currentGame.id
|
||||
const newGameId = newGame && newGame.id
|
||||
const gameChanged = prevGameId !== newGameId
|
||||
|
||||
if (gameChanged) {
|
||||
this.setData({
|
||||
currentGame: newGame,
|
||||
myScoreInput: '',
|
||||
opponentScoreInput: ''
|
||||
})
|
||||
} else {
|
||||
this.setData({ currentGame: newGame })
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('获取排位赛详情失败:', e)
|
||||
@ -164,5 +276,163 @@ Page({
|
||||
} catch (e) {
|
||||
console.error('获取当前对局失败:', e)
|
||||
}
|
||||
},
|
||||
|
||||
// 裁判功能:编辑比分
|
||||
handleRefereeEditScore(e) {
|
||||
const game = e.currentTarget.dataset.game
|
||||
if (!game) return
|
||||
|
||||
// 确保 game 对象包含必要的字段,包括选手名称
|
||||
const gameData = {
|
||||
id: game.id,
|
||||
player1Id: game.player1Id,
|
||||
player2Id: game.player2Id,
|
||||
player1Name: game.player1Name || `选手${game.player1Id}`,
|
||||
player2Name: game.player2Name || `选手${game.player2Id}`,
|
||||
player1Score: game.player1Score,
|
||||
player2Score: game.player2Score,
|
||||
confirmStatus: game.confirmStatus
|
||||
}
|
||||
|
||||
this.setData({
|
||||
editingGame: gameData,
|
||||
editScoreForm: {
|
||||
player1Score: game.player1Score !== null && game.player1Score !== undefined ? String(game.player1Score) : '',
|
||||
player2Score: game.player2Score !== null && game.player2Score !== undefined ? String(game.player2Score) : ''
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
bindPlayer1ScoreInput(e) {
|
||||
this.setData({
|
||||
'editScoreForm.player1Score': e.detail.value
|
||||
})
|
||||
},
|
||||
|
||||
bindPlayer2ScoreInput(e) {
|
||||
this.setData({
|
||||
'editScoreForm.player2Score': e.detail.value
|
||||
})
|
||||
},
|
||||
|
||||
async handleRefereeSaveScore() {
|
||||
const { editingGame, editScoreForm } = this.data
|
||||
if (!editingGame || !editScoreForm.player1Score || !editScoreForm.player2Score) {
|
||||
wx.showToast({ title: '请输入完整比分', icon: 'none' })
|
||||
return
|
||||
}
|
||||
|
||||
wx.showLoading({ title: '保存中...' })
|
||||
try {
|
||||
await app.request(`/api/match/referee/update-score`, {
|
||||
match_id: this.data.match.id,
|
||||
game_id: editingGame.id,
|
||||
player1_score: parseInt(editScoreForm.player1Score),
|
||||
player2_score: parseInt(editScoreForm.player2Score)
|
||||
}, 'POST')
|
||||
|
||||
wx.showToast({ title: '保存成功', icon: 'success' })
|
||||
this.setData({ editingGame: null })
|
||||
this.fetchMatchDetail()
|
||||
} catch (e) {
|
||||
console.error('保存比分失败:', e)
|
||||
wx.showToast({ title: e.message || '保存失败', icon: 'none' })
|
||||
} finally {
|
||||
wx.hideLoading()
|
||||
}
|
||||
},
|
||||
|
||||
// 裁判功能:确认比分
|
||||
async handleRefereeConfirmScore(e) {
|
||||
const game = e.currentTarget.dataset.game
|
||||
wx.showModal({
|
||||
title: '确认比分',
|
||||
content: `确认该对局结果?确认后将计算战力值变动`,
|
||||
success: async (res) => {
|
||||
if (res.confirm) {
|
||||
wx.showLoading({ title: '确认中...' })
|
||||
try {
|
||||
// 使用后台API确认比分(需要管理员权限,但裁判应该可以通过小程序API确认)
|
||||
// 或者使用小程序端的确认接口,但需要检查权限
|
||||
await app.request(`/api/match/ranking/confirm-score`, {
|
||||
game_id: game.id,
|
||||
confirm: true
|
||||
}, 'POST')
|
||||
wx.showToast({ title: '确认成功', icon: 'success' })
|
||||
this.fetchMatchDetail()
|
||||
} catch (e) {
|
||||
console.error('确认比分失败:', e)
|
||||
wx.showToast({ title: e.message || '确认失败', icon: 'none' })
|
||||
} finally {
|
||||
wx.hideLoading()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 关闭编辑弹窗
|
||||
handleCloseEditModal() {
|
||||
this.setData({ editingGame: null })
|
||||
},
|
||||
|
||||
// 阻止事件冒泡(用于弹窗内容区域)
|
||||
stopPropagation() {
|
||||
// 空函数,仅用于阻止事件冒泡
|
||||
},
|
||||
|
||||
// 获取选手名称(用于裁判界面)
|
||||
getPlayerName(ladderUserId) {
|
||||
if (!ladderUserId) {
|
||||
return '未知选手'
|
||||
}
|
||||
if (!this.data.match || !this.data.match.players || !Array.isArray(this.data.match.players)) {
|
||||
return `选手${ladderUserId}`
|
||||
}
|
||||
// 使用 == 比较,避免类型不一致问题(支持数字和字符串比较)
|
||||
const player = this.data.match.players.find(p => {
|
||||
const pId = p.ladderUserId
|
||||
const targetId = ladderUserId
|
||||
return String(pId) === String(targetId) || Number(pId) === Number(targetId)
|
||||
})
|
||||
if (player && player.realName) {
|
||||
return player.realName
|
||||
}
|
||||
// 如果找不到,返回默认名称
|
||||
return `选手${ladderUserId}`
|
||||
},
|
||||
|
||||
// 裁判功能:开始淘汰赛
|
||||
handleRefereeStartElimination() {
|
||||
wx.showModal({
|
||||
title: '开始淘汰赛',
|
||||
content: '确定要开始淘汰赛吗?',
|
||||
success: async (res) => {
|
||||
if (res.confirm) {
|
||||
wx.showActionSheet({
|
||||
itemList: ['2强(决赛)', '4强', '8强'],
|
||||
success: async (actionRes) => {
|
||||
const sizes = [2, 4, 8]
|
||||
const size = sizes[actionRes.tapIndex]
|
||||
wx.showLoading({ title: '开始中...' })
|
||||
try {
|
||||
await app.request(`/api/match/referee/start-elimination`, {
|
||||
match_id: this.data.match.id,
|
||||
elimination_size: size
|
||||
}, 'POST')
|
||||
wx.showToast({ title: '淘汰赛已开始', icon: 'success' })
|
||||
this.fetchMatchDetail()
|
||||
} catch (e) {
|
||||
console.error('开始淘汰赛失败:', e)
|
||||
wx.showToast({ title: e.message || '开始失败', icon: 'none' })
|
||||
} finally {
|
||||
wx.hideLoading()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
@ -84,7 +84,8 @@
|
||||
|
||||
<!-- 比分操作区域 -->
|
||||
<view class="game-actions">
|
||||
<view class="score-inputs" wx:if="{{match.status === 1 && currentGame.gameStatus === 1}}">
|
||||
<!-- 状态0(已生成但未开始)或状态1(进行中):显示提交比分输入框 -->
|
||||
<view class="score-inputs" wx:if="{{match.status === 1 && (currentGame.gameStatus === 0 || currentGame.gameStatus === 1) && !currentGame.submitBy}}">
|
||||
<view class="score-field">
|
||||
<text class="score-label">我方得分</text>
|
||||
<input class="score-input" type="number" value="{{myScoreInput}}" bindinput="bindMyScoreInput" placeholder="0" />
|
||||
@ -95,7 +96,7 @@
|
||||
<input class="score-input" type="number" value="{{opponentScoreInput}}" bindinput="bindOpponentScoreInput" placeholder="0" />
|
||||
</view>
|
||||
</view>
|
||||
<button class="action-btn submit-btn" wx:if="{{match.status === 1 && currentGame.gameStatus === 1}}" bindtap="handleSubmitScore">提交比分</button>
|
||||
<button class="action-btn submit-btn" wx:if="{{match.status === 1 && (currentGame.gameStatus === 0 || currentGame.gameStatus === 1) && !currentGame.submitBy}}" bindtap="handleSubmitScore">提交比分</button>
|
||||
|
||||
<view class="action-status" wx:if="{{match.status !== 1}}">
|
||||
<text>比赛未开始,无法填写比分</text>
|
||||
@ -130,11 +131,13 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 参赛选手 -->
|
||||
<!-- 参赛选手 / 最终排名 -->
|
||||
<view class="players-card animate-fadeInUp" style="animation-delay: 0.15s">
|
||||
<view class="card-header">
|
||||
<image class="card-icon" src="/images/icon-users.svg" mode="aspectFit"></image>
|
||||
<text class="card-title">参赛选手</text>
|
||||
<view class="card-title">
|
||||
{{match.status === 2 ? '最终排名' : '参赛选手'}}
|
||||
</view>
|
||||
<text class="player-count">{{match.players.length || 0}}人</text>
|
||||
</view>
|
||||
|
||||
|
||||
@ -188,7 +188,8 @@
|
||||
}
|
||||
|
||||
/* 我的状态卡片 */
|
||||
.my-status-card {
|
||||
.my-status-card,
|
||||
.referee-card {
|
||||
background: #fff;
|
||||
border-radius: 28rpx;
|
||||
margin-bottom: 20rpx;
|
||||
@ -521,11 +522,13 @@
|
||||
}
|
||||
|
||||
/* 参赛选手卡片 */
|
||||
.players-card {
|
||||
.players-card,
|
||||
.games-card {
|
||||
background: #fff;
|
||||
border-radius: 28rpx;
|
||||
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.06);
|
||||
overflow: hidden;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.players-list {
|
||||
@ -671,6 +674,264 @@
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
/* 裁判操作区域 */
|
||||
.referee-actions {
|
||||
padding: 24rpx;
|
||||
}
|
||||
|
||||
.referee-actions .action-btn {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.primary-btn {
|
||||
background: linear-gradient(135deg, #ff9800, #f57c00);
|
||||
color: #fff;
|
||||
box-shadow: 0 4rpx 12rpx rgba(255, 152, 0, 0.3);
|
||||
}
|
||||
|
||||
/* 对局记录列表 */
|
||||
.games-list {
|
||||
padding: 16rpx;
|
||||
}
|
||||
|
||||
.round-section {
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
|
||||
.round-section:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.round-title {
|
||||
font-size: 28rpx;
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: 16rpx;
|
||||
padding-bottom: 12rpx;
|
||||
border-bottom: 2rpx solid rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
.game-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16rpx;
|
||||
padding: 20rpx;
|
||||
background: linear-gradient(135deg, #fafafa, #f5f5f5);
|
||||
border-radius: 16rpx;
|
||||
margin-bottom: 12rpx;
|
||||
}
|
||||
|
||||
.game-item:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.game-players {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 16rpx;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
|
||||
.player-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
min-width: 0;
|
||||
flex: 1;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.game-players .player-name {
|
||||
font-size: 30rpx;
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 200rpx;
|
||||
}
|
||||
|
||||
.vs-text {
|
||||
font-size: 24rpx;
|
||||
color: var(--text-muted);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.game-score {
|
||||
text-align: center;
|
||||
font-size: 32rpx;
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.score-placeholder {
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.game-status {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.status-confirmed {
|
||||
display: inline-block;
|
||||
padding: 6rpx 16rpx;
|
||||
background: linear-gradient(135deg, #e8f5e9, #c8e6c9);
|
||||
color: #2e7d32;
|
||||
border-radius: 8rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.status-pending {
|
||||
display: inline-block;
|
||||
padding: 6rpx 16rpx;
|
||||
background: linear-gradient(135deg, #fff3e0, #ffe0b2);
|
||||
color: #e65100;
|
||||
border-radius: 8rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.status-disputed {
|
||||
display: inline-block;
|
||||
padding: 6rpx 16rpx;
|
||||
background: linear-gradient(135deg, #ffebee, #ffcdd2);
|
||||
color: #c62828;
|
||||
border-radius: 8rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.game-actions {
|
||||
display: flex;
|
||||
gap: 16rpx;
|
||||
justify-content: center;
|
||||
margin-top: 8rpx;
|
||||
}
|
||||
|
||||
.game-actions .action-btn {
|
||||
flex: 1;
|
||||
height: 72rpx;
|
||||
border-radius: 12rpx;
|
||||
font-size: 26rpx;
|
||||
font-weight: 600;
|
||||
border: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.edit-score-btn {
|
||||
background: linear-gradient(135deg, #1976d2, #1565c0);
|
||||
color: #fff;
|
||||
box-shadow: 0 4rpx 12rpx rgba(25, 118, 210, 0.3);
|
||||
}
|
||||
|
||||
.edit-score-btn:active {
|
||||
transform: scale(0.98);
|
||||
box-shadow: 0 2rpx 8rpx rgba(25, 118, 210, 0.4);
|
||||
}
|
||||
|
||||
.confirm-score-btn {
|
||||
background: linear-gradient(135deg, #43a047, #2e7d32);
|
||||
color: #fff;
|
||||
box-shadow: 0 4rpx 12rpx rgba(46, 125, 50, 0.3);
|
||||
}
|
||||
|
||||
.confirm-score-btn:active {
|
||||
transform: scale(0.98);
|
||||
box-shadow: 0 2rpx 8rpx rgba(46, 125, 50, 0.4);
|
||||
}
|
||||
|
||||
.empty-games {
|
||||
padding: 60rpx 20rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.empty-text {
|
||||
font-size: 28rpx;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
/* 裁判编辑比分弹窗 */
|
||||
.referee-edit-modal {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
width: 90%;
|
||||
max-width: 600rpx;
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
padding: 32rpx;
|
||||
border-bottom: 1rpx solid rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
.modal-title {
|
||||
font-size: 32rpx;
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
padding: 32rpx;
|
||||
}
|
||||
|
||||
.edit-game-info {
|
||||
text-align: center;
|
||||
font-size: 28rpx;
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: 32rpx;
|
||||
}
|
||||
|
||||
.edit-score-inputs {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 24rpx;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
display: flex;
|
||||
gap: 16rpx;
|
||||
padding: 24rpx 32rpx;
|
||||
border-top: 1rpx solid rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
.modal-btn {
|
||||
flex: 1;
|
||||
border-radius: 12rpx;
|
||||
font-size: 30rpx;
|
||||
font-weight: 600;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.cancel-btn {
|
||||
background: #f5f5f5;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.confirm-btn {
|
||||
background: linear-gradient(135deg, #1976d2, #1565c0);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* 动画 */
|
||||
@keyframes fadeInUp {
|
||||
from {
|
||||
|
||||
@ -124,6 +124,38 @@ Page({
|
||||
})
|
||||
},
|
||||
|
||||
// 根据订单 ID 刷新当前列表与弹窗(供 WebSocket 回调调用)
|
||||
async refreshOrderById(orderId) {
|
||||
if (!orderId) return
|
||||
|
||||
try {
|
||||
const res = await app.request(`/api/points/orders/${orderId}`)
|
||||
const detail = res.data
|
||||
|
||||
// 更新列表中的状态
|
||||
const orders = (this.data.orders || []).map(item =>
|
||||
item.id === orderId
|
||||
? Object.assign({}, item, { status: detail.status })
|
||||
: item
|
||||
)
|
||||
|
||||
// 如果弹窗正在展示当前这笔订单,同步更新弹窗里的状态等信息
|
||||
let currentOrder = this.data.currentOrder
|
||||
if (currentOrder && currentOrder.id === orderId) {
|
||||
currentOrder = Object.assign({}, currentOrder, {
|
||||
status: detail.status
|
||||
})
|
||||
}
|
||||
|
||||
this.setData({
|
||||
orders,
|
||||
currentOrder
|
||||
})
|
||||
} catch (e) {
|
||||
console.error('通过 ID 刷新订单失败:', e)
|
||||
}
|
||||
},
|
||||
|
||||
goToMall() {
|
||||
wx.switchTab({ url: '/pages/points/mall/index' })
|
||||
}
|
||||
|
||||
@ -40,10 +40,10 @@
|
||||
data-order="{{item}}"
|
||||
>
|
||||
<view class="order-header">
|
||||
<text class="order-no">订单号: {{item.orderNo}}</text>
|
||||
<text class="order-status {{item.status === 0 ? 'pending' : item.status === 1 ? 'completed' : 'cancelled'}}">
|
||||
<view class="order-no">订单号: {{item.orderNo}}</view>
|
||||
<view class="order-status {{item.status === 0 ? 'pending' : item.status === 1 ? 'completed' : 'cancelled'}}">
|
||||
{{item.status === 0 ? '待核销' : item.status === 1 ? '已完成' : '已取消'}}
|
||||
</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="order-content">
|
||||
<image class="product-image" src="{{item.productImage || '/images/product-default.svg'}}" mode="aspectFill"></image>
|
||||
|
||||
@ -2,7 +2,7 @@ const { Match, MatchGame, MatchPlayer, MatchRound, LadderUser, User, Store, sequ
|
||||
const { MATCH_TYPES, MATCH_STATUS, RANKING_STAGE, CONFIRM_STATUS } = require('../config/constants');
|
||||
const { generateMatchCode, success, error, getPagination, pageResult } = require('../utils/helper');
|
||||
const PowerCalculator = require('../services/powerCalculator');
|
||||
const { broadcastToUsers } = require('../websocket');
|
||||
const { broadcastToUsers, sendMatchNotification } = require('../websocket');
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
class MatchAdminController {
|
||||
@ -199,6 +199,38 @@ class MatchAdminController {
|
||||
return res.status(404).json(error('比赛不存在', 404));
|
||||
}
|
||||
|
||||
// 对选手进行排序:如果比赛已结束且有 rank,按 rank 排序;否则按胜场、总得分、初始战力排序
|
||||
const sortedPlayers = [...match.players];
|
||||
if (match.status === MATCH_STATUS.FINISHED && sortedPlayers.some(p => p.rank)) {
|
||||
// 比赛已结束:按 rank 排序
|
||||
sortedPlayers.sort((a, b) => {
|
||||
if (a.rank && b.rank) return a.rank - b.rank;
|
||||
if (a.rank) return -1;
|
||||
if (b.rank) return 1;
|
||||
return 0;
|
||||
});
|
||||
} else {
|
||||
// 比赛进行中:按胜场、总得分、初始战力排序
|
||||
// 需要计算总得分
|
||||
const allGames = match.games || [];
|
||||
const scoreMap = new Map();
|
||||
allGames.forEach(g => {
|
||||
if (g.confirm_status === CONFIRM_STATUS.CONFIRMED) {
|
||||
const key1 = String(g.player1_id);
|
||||
const key2 = String(g.player2_id);
|
||||
scoreMap.set(key1, (scoreMap.get(key1) || 0) + (g.player1_score || 0));
|
||||
scoreMap.set(key2, (scoreMap.get(key2) || 0) + (g.player2_score || 0));
|
||||
}
|
||||
});
|
||||
sortedPlayers.sort((a, b) => {
|
||||
if (b.win_count !== a.win_count) return b.win_count - a.win_count;
|
||||
const scoreA = scoreMap.get(String(a.ladder_user_id)) || 0;
|
||||
const scoreB = scoreMap.get(String(b.ladder_user_id)) || 0;
|
||||
if (scoreB !== scoreA) return scoreB - scoreA;
|
||||
return b.initial_power - a.initial_power;
|
||||
});
|
||||
}
|
||||
|
||||
res.json(success({
|
||||
id: match.id,
|
||||
matchCode: match.match_code,
|
||||
@ -214,7 +246,7 @@ class MatchAdminController {
|
||||
refereeName: match.referee?.nickname,
|
||||
startTime: match.start_time,
|
||||
endTime: match.end_time,
|
||||
players: match.players.map(p => ({
|
||||
players: sortedPlayers.map(p => ({
|
||||
id: p.id,
|
||||
ladderUserId: p.ladder_user_id,
|
||||
realName: p.ladderUser?.real_name,
|
||||
@ -380,7 +412,7 @@ class MatchAdminController {
|
||||
const t = await sequelize.transaction();
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const { elimination_size } = req.body; // 4, 8, 16
|
||||
const { elimination_size, selected_player_ids } = req.body; // elimination_size: 2/4/8..., selected_player_ids: 可选,自定义选手ID列表(ladder_user_id)
|
||||
|
||||
const match = await Match.findByPk(id, {
|
||||
include: [{ model: MatchPlayer, as: 'players' }]
|
||||
@ -409,14 +441,64 @@ class MatchAdminController {
|
||||
return res.status(400).json(error('循环赛尚未结束', 400));
|
||||
}
|
||||
|
||||
// 根据胜场排名
|
||||
// 根据胜场和总得分排名(循环赛阶段只统计循环赛已确认对局)
|
||||
const confirmedGames = await MatchGame.findAll({
|
||||
where: {
|
||||
match_id: id,
|
||||
confirm_status: CONFIRM_STATUS.CONFIRMED
|
||||
},
|
||||
include: [{
|
||||
model: MatchRound,
|
||||
as: 'round',
|
||||
where: { round_type: 'round_robin' }
|
||||
}]
|
||||
});
|
||||
|
||||
const scoreMap = new Map(); // ladder_user_id -> 总得分(自己得分之和)
|
||||
const addScore = (playerId, score) => {
|
||||
const key = String(playerId);
|
||||
const prev = scoreMap.get(key) || 0;
|
||||
scoreMap.set(key, prev + (Number(score) || 0));
|
||||
};
|
||||
confirmedGames.forEach(g => {
|
||||
addScore(g.player1_id, g.player1_score);
|
||||
addScore(g.player2_id, g.player2_score);
|
||||
});
|
||||
|
||||
const rankedPlayers = match.players.sort((a, b) => {
|
||||
if (b.win_count !== a.win_count) return b.win_count - a.win_count;
|
||||
const scoreA = scoreMap.get(String(a.ladder_user_id)) || 0;
|
||||
const scoreB = scoreMap.get(String(b.ladder_user_id)) || 0;
|
||||
if (scoreB !== scoreA) return scoreB - scoreA;
|
||||
// 再次平局时保持初始战力作为第三排序因子
|
||||
return b.initial_power - a.initial_power;
|
||||
});
|
||||
|
||||
const size = Math.min(elimination_size, rankedPlayers.length);
|
||||
const qualifiedPlayers = rankedPlayers.slice(0, size);
|
||||
// 支持手动选择淘汰赛选手:
|
||||
// - 如果传入 selected_player_ids(ladder_user_id 列表),则优先使用该列表
|
||||
// - 否则按排名取前 elimination_size 名
|
||||
let size;
|
||||
let qualifiedPlayers;
|
||||
if (Array.isArray(selected_player_ids) && selected_player_ids.length >= 2) {
|
||||
const idSet = new Set(selected_player_ids.map((v) => String(v)));
|
||||
const picked = match.players.filter((p) =>
|
||||
idSet.has(String(p.ladder_user_id)),
|
||||
);
|
||||
if (picked.length < 2) {
|
||||
await t.rollback();
|
||||
return res.status(400).json(error('所选选手数量不足 2 人', 400));
|
||||
}
|
||||
size = picked.length;
|
||||
qualifiedPlayers = picked;
|
||||
} else {
|
||||
const safeSize = Math.min(elimination_size || 2, rankedPlayers.length);
|
||||
if (safeSize < 2) {
|
||||
await t.rollback();
|
||||
return res.status(400).json(error('参赛人数不足以开启淘汰赛', 400));
|
||||
}
|
||||
size = safeSize;
|
||||
qualifiedPlayers = rankedPlayers.slice(0, size);
|
||||
}
|
||||
|
||||
// 更新比赛状态
|
||||
await match.update({
|
||||
@ -424,8 +506,12 @@ class MatchAdminController {
|
||||
elimination_size: size
|
||||
}, { transaction: t });
|
||||
|
||||
// 创建淘汰赛首轮(1 vs 最后, 2 vs 倒数第二...)
|
||||
const roundName = size === 4 ? '半决赛' : size === 8 ? '四分之一决赛' : '淘汰赛首轮';
|
||||
// 根据人数确定轮次名称
|
||||
// 2人:直接决赛
|
||||
// 4人:半决赛
|
||||
// 8人:四分之一决赛
|
||||
// 其他:淘汰赛首轮
|
||||
const roundName = size === 2 ? '决赛' : size === 4 ? '半决赛' : size === 8 ? '四分之一决赛' : '淘汰赛首轮';
|
||||
const round = await MatchRound.create({
|
||||
match_id: match.id,
|
||||
round_number: 100, // 淘汰赛轮次从100开始
|
||||
@ -435,14 +521,20 @@ class MatchAdminController {
|
||||
}, { transaction: t });
|
||||
|
||||
// 配对:1 vs size, 2 vs size-1, ...
|
||||
const createdGames = [];
|
||||
for (let i = 0; i < size / 2; i++) {
|
||||
await MatchGame.create({
|
||||
const game = await MatchGame.create({
|
||||
match_id: match.id,
|
||||
round_id: round.id,
|
||||
player1_id: qualifiedPlayers[i].ladder_user_id,
|
||||
player2_id: qualifiedPlayers[size - 1 - i].ladder_user_id,
|
||||
status: 0
|
||||
}, { transaction: t });
|
||||
createdGames.push({
|
||||
game,
|
||||
player1: qualifiedPlayers[i],
|
||||
player2: qualifiedPlayers[size - 1 - i]
|
||||
});
|
||||
}
|
||||
|
||||
// 将晋级淘汰赛的选手状态标记为进行中(playing),方便前端展示
|
||||
@ -458,6 +550,57 @@ class MatchAdminController {
|
||||
);
|
||||
|
||||
await t.commit();
|
||||
|
||||
// 发送WebSocket通知给所有匹配的选手
|
||||
try {
|
||||
for (const { game, player1, player2 } of createdGames) {
|
||||
// 获取选手的天梯用户信息(包含user_id)
|
||||
const [ladder1, ladder2] = await Promise.all([
|
||||
LadderUser.findByPk(player1.ladder_user_id, {
|
||||
include: [{ model: User, as: 'user', attributes: ['id', 'nickname', 'avatar'] }]
|
||||
}),
|
||||
LadderUser.findByPk(player2.ladder_user_id, {
|
||||
include: [{ model: User, as: 'user', attributes: ['id', 'nickname', 'avatar'] }]
|
||||
})
|
||||
]);
|
||||
|
||||
// 通知选手1
|
||||
if (ladder1 && ladder1.user_id) {
|
||||
sendMatchNotification(ladder1.user_id, {
|
||||
matchId: match.id,
|
||||
matchCode: match.match_code,
|
||||
opponent: {
|
||||
id: ladder2?.id,
|
||||
realName: ladder2?.real_name,
|
||||
level: ladder2?.level,
|
||||
powerScore: ladder2?.power_score,
|
||||
nickname: ladder2?.user?.nickname,
|
||||
avatar: ladder2?.user?.avatar
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 通知选手2
|
||||
if (ladder2 && ladder2.user_id) {
|
||||
sendMatchNotification(ladder2.user_id, {
|
||||
matchId: match.id,
|
||||
matchCode: match.match_code,
|
||||
opponent: {
|
||||
id: ladder1?.id,
|
||||
realName: ladder1?.real_name,
|
||||
level: ladder1?.level,
|
||||
powerScore: ladder1?.power_score,
|
||||
nickname: ladder1?.user?.nickname,
|
||||
avatar: ladder1?.user?.avatar
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch (notifyErr) {
|
||||
console.error('发送淘汰赛匹配通知失败:', notifyErr);
|
||||
// 通知失败不影响主流程,只记录错误
|
||||
}
|
||||
|
||||
res.json(success(null, '淘汰赛已开始'));
|
||||
} catch (err) {
|
||||
await t.rollback();
|
||||
@ -466,56 +609,18 @@ class MatchAdminController {
|
||||
}
|
||||
}
|
||||
|
||||
// 结束比赛
|
||||
async endMatch(req, res) {
|
||||
// 结束比赛(手动触发,一般由后台按钮调用)
|
||||
endMatch = async (req, res) => {
|
||||
const t = await sequelize.transaction();
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const match = await Match.findByPk(id, {
|
||||
include: [{ model: MatchPlayer, as: 'players' }]
|
||||
});
|
||||
|
||||
if (!match) {
|
||||
const finished = await this._autoFinishRankingMatch(id, t, true);
|
||||
if (!finished) {
|
||||
await t.rollback();
|
||||
return res.status(404).json(error('比赛不存在', 404));
|
||||
return res.status(404).json(error('比赛不存在或尚未结束所有对局', 404));
|
||||
}
|
||||
|
||||
// 计算最终排名和战力值
|
||||
const players = match.players.sort((a, b) => {
|
||||
if (b.win_count !== a.win_count) return b.win_count - a.win_count;
|
||||
return b.initial_power - a.initial_power;
|
||||
});
|
||||
|
||||
for (let i = 0; i < players.length; i++) {
|
||||
const player = players[i];
|
||||
const ladderUser = await LadderUser.findByPk(player.ladder_user_id);
|
||||
|
||||
await player.update({
|
||||
rank: i + 1,
|
||||
final_power: ladderUser.power_score,
|
||||
player_status: 'finished'
|
||||
}, { transaction: t });
|
||||
|
||||
// 处理升降级(排位赛规则)
|
||||
if (match.type === MATCH_TYPES.RANKING) {
|
||||
const promotion = PowerCalculator.determinePromotion(i + 1, players.length);
|
||||
if (promotion === 'promote' && ladderUser.level < 5) {
|
||||
// 冠军:段位 +1
|
||||
await ladderUser.update({ level: ladderUser.level + 1 }, { transaction: t });
|
||||
} else if (promotion === 'demote' && (ladderUser.level === 4 || ladderUser.level === 5)) {
|
||||
// 末位:只有 4、5 段才降一级
|
||||
await ladderUser.update({ level: ladderUser.level - 1 }, { transaction: t });
|
||||
} // 其他情况不变
|
||||
}
|
||||
}
|
||||
|
||||
await match.update({
|
||||
status: MATCH_STATUS.FINISHED,
|
||||
stage: RANKING_STAGE.FINISHED,
|
||||
end_time: new Date()
|
||||
}, { transaction: t });
|
||||
|
||||
await t.commit();
|
||||
res.json(success(null, '比赛已结束'));
|
||||
} catch (err) {
|
||||
@ -662,9 +767,12 @@ class MatchAdminController {
|
||||
|
||||
await this._autoMatchPlayers(game.match.id, t);
|
||||
} else if (game.match.stage === RANKING_STAGE.ELIMINATION) {
|
||||
// 淘汰赛:检查是否需要自动生成下一轮(例如 4 强打完自动生成决赛)
|
||||
// 淘汰赛:先检查是否需要自动生成下一轮(半决赛 -> 决赛)
|
||||
await this._maybeStartNextEliminationRound(game.match.id, t);
|
||||
}
|
||||
|
||||
// 排位赛:若所有对局均已确认,自动结算比赛并生成最终排名
|
||||
await this._autoFinishRankingMatch(game.match.id, t);
|
||||
}
|
||||
|
||||
await t.commit();
|
||||
@ -791,16 +899,67 @@ class MatchAdminController {
|
||||
|
||||
// 获取等待中的选手
|
||||
const waitingPlayers = match.players.filter(p => p.player_status === 'waiting');
|
||||
if (waitingPlayers.length < 2) return;
|
||||
console.log(`[自动匹配] 比赛 ${matchId}: 等待中的选手数量=${waitingPlayers.length}`, waitingPlayers.map(p => ({ id: p.ladder_user_id, status: p.player_status })));
|
||||
if (waitingPlayers.length < 2) {
|
||||
console.log(`[自动匹配] 等待中的选手不足2人,无法匹配`);
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取未完成的对局
|
||||
const pendingGames = await MatchGame.findAll({
|
||||
// 获取未完成的对局(排除已确认的对局)
|
||||
// 注意:status=0 表示待比赛,status=1 表示比赛中,status=2 表示已结束
|
||||
// 只有 status=0 且未确认的对局才能被匹配
|
||||
let pendingGames = await MatchGame.findAll({
|
||||
where: {
|
||||
match_id: matchId,
|
||||
status: 0
|
||||
status: 0,
|
||||
confirm_status: { [Op.ne]: CONFIRM_STATUS.CONFIRMED }
|
||||
},
|
||||
transaction
|
||||
});
|
||||
console.log(`[自动匹配] 比赛 ${matchId}: 待匹配的对局数量=${pendingGames.length}`, pendingGames.map(g => ({ id: g.id, p1: g.player1_id, p2: g.player2_id, status: g.status, confirm_status: g.confirm_status })));
|
||||
|
||||
// 如果待匹配的对局数量为0,检查是否有状态异常的对局(status=1但未确认,可能是之前匹配过但确认失败)
|
||||
// 如果两个选手都是 waiting 状态,说明对局应该被重置,允许重新匹配
|
||||
if (pendingGames.length === 0) {
|
||||
const abnormalGames = await MatchGame.findAll({
|
||||
where: {
|
||||
match_id: matchId,
|
||||
status: 1, // 只检查 status=1 的对局(status=2 且未确认的可能是其他情况)
|
||||
confirm_status: { [Op.ne]: CONFIRM_STATUS.CONFIRMED }
|
||||
},
|
||||
transaction
|
||||
});
|
||||
if (abnormalGames.length > 0) {
|
||||
console.log(`[自动匹配] 发现 ${abnormalGames.length} 个状态异常的对局(已开始但未确认)`, abnormalGames.map(g => ({
|
||||
id: g.id,
|
||||
p1: g.player1_id,
|
||||
p2: g.player2_id,
|
||||
status: g.status,
|
||||
confirm_status: g.confirm_status
|
||||
})));
|
||||
|
||||
// 检查这些异常对局的两个选手是否都是 waiting 状态
|
||||
for (const game of abnormalGames) {
|
||||
const p1 = waitingPlayers.find(p => String(p.ladder_user_id) === String(game.player1_id));
|
||||
const p2 = waitingPlayers.find(p => String(p.ladder_user_id) === String(game.player2_id));
|
||||
|
||||
if (p1 && p2) {
|
||||
// 两个选手都是 waiting,说明对局应该被重置
|
||||
console.log(`[自动匹配] 重置异常对局 ${game.id}: 选手 ${game.player1_id} 和 ${game.player2_id} 都是 waiting 状态`);
|
||||
await game.update({
|
||||
status: 0, // 重置为待比赛状态
|
||||
player1_score: null,
|
||||
player2_score: null,
|
||||
winner_id: null,
|
||||
loser_id: null,
|
||||
submit_by: null
|
||||
}, { transaction });
|
||||
// 将这个对局添加到待匹配列表
|
||||
pendingGames.push(game);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 找到可以匹配的选手对
|
||||
for (const game of pendingGames) {
|
||||
@ -811,6 +970,7 @@ class MatchAdminController {
|
||||
const player2 = waitingPlayers.find(p => String(p.ladder_user_id) === String(game.player2_id));
|
||||
|
||||
if (player1 && player2) {
|
||||
console.log(`[自动匹配] 匹配成功: 对局 ${game.id}, 选手1=${player1.ladder_user_id}, 选手2=${player2.ladder_user_id}`);
|
||||
// 更新选手状态
|
||||
await MatchPlayer.update(
|
||||
{ player_status: 'playing', current_opponent_id: game.player2_id },
|
||||
@ -824,6 +984,52 @@ class MatchAdminController {
|
||||
// 更新对局状态
|
||||
await game.update({ status: 1 }, { transaction });
|
||||
|
||||
// 发送匹配成功 WebSocket 通知给双方
|
||||
try {
|
||||
const [ladder1, ladder2] = await Promise.all([
|
||||
LadderUser.findByPk(game.player1_id, {
|
||||
include: [{ model: User, as: 'user', attributes: ['id', 'nickname', 'avatar'] }],
|
||||
transaction
|
||||
}),
|
||||
LadderUser.findByPk(game.player2_id, {
|
||||
include: [{ model: User, as: 'user', attributes: ['id', 'nickname', 'avatar'] }],
|
||||
transaction
|
||||
})
|
||||
]);
|
||||
|
||||
if (ladder1 && ladder1.user_id) {
|
||||
sendMatchNotification(ladder1.user_id, {
|
||||
matchId: match.id,
|
||||
matchCode: match.match_code,
|
||||
opponent: {
|
||||
id: ladder2?.id,
|
||||
realName: ladder2?.real_name,
|
||||
level: ladder2?.level,
|
||||
powerScore: ladder2?.power_score,
|
||||
nickname: ladder2?.user?.nickname,
|
||||
avatar: ladder2?.user?.avatar
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (ladder2 && ladder2.user_id) {
|
||||
sendMatchNotification(ladder2.user_id, {
|
||||
matchId: match.id,
|
||||
matchCode: match.match_code,
|
||||
opponent: {
|
||||
id: ladder1?.id,
|
||||
realName: ladder1?.real_name,
|
||||
level: ladder1?.level,
|
||||
powerScore: ladder1?.power_score,
|
||||
nickname: ladder1?.user?.nickname,
|
||||
avatar: ladder1?.user?.avatar
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (notifyErr) {
|
||||
console.error('发送排位赛匹配通知失败:', notifyErr);
|
||||
}
|
||||
|
||||
// 从等待列表移除
|
||||
const idx1 = waitingPlayers.indexOf(player1);
|
||||
const idx2 = waitingPlayers.indexOf(player2);
|
||||
@ -831,8 +1037,42 @@ class MatchAdminController {
|
||||
waitingPlayers.splice(Math.min(idx1, idx2), 1);
|
||||
|
||||
if (waitingPlayers.length < 2) break;
|
||||
} else {
|
||||
console.log(`[自动匹配] 对局 ${game.id} 无法匹配: player1=${player1 ? player1.ladder_user_id : 'null'}, player2=${player2 ? player2.ladder_user_id : 'null'}`);
|
||||
}
|
||||
}
|
||||
console.log(`[自动匹配] 比赛 ${matchId}: 匹配完成,剩余等待选手=${waitingPlayers.length}`);
|
||||
}
|
||||
|
||||
// 手动触发匹配(用于调试)
|
||||
async triggerMatch(req, res) {
|
||||
const t = await sequelize.transaction();
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const match = await Match.findByPk(id, {
|
||||
include: [{ model: MatchPlayer, as: 'players' }],
|
||||
transaction: t
|
||||
});
|
||||
|
||||
if (!match || match.type !== MATCH_TYPES.RANKING) {
|
||||
await t.rollback();
|
||||
return res.status(400).json(error('比赛不存在或类型错误', 400));
|
||||
}
|
||||
|
||||
if (match.stage !== RANKING_STAGE.ROUND_ROBIN) {
|
||||
await t.rollback();
|
||||
return res.status(400).json(error('只有循环赛阶段才能手动触发匹配', 400));
|
||||
}
|
||||
|
||||
await this._autoMatchPlayers(match.id, t);
|
||||
await t.commit();
|
||||
|
||||
res.json(success(null, '匹配已触发'));
|
||||
} catch (err) {
|
||||
await t.rollback();
|
||||
console.error('手动触发匹配失败:', err);
|
||||
res.status(500).json(error('操作失败'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -898,6 +1138,148 @@ class MatchAdminController {
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 在所有对局都确认后,自动结算排位赛,生成最终排名。
|
||||
* 如果 force=true,则只检查比赛是否存在,不再检查“是否还有未确认对局”(用于手动结束按钮)。
|
||||
*/
|
||||
async _autoFinishRankingMatch(matchId, transaction, force = false) {
|
||||
const match = await Match.findByPk(matchId, {
|
||||
include: [
|
||||
{ model: MatchPlayer, as: 'players' },
|
||||
{
|
||||
model: MatchRound,
|
||||
as: 'rounds',
|
||||
include: [{ model: MatchGame, as: 'games' }]
|
||||
}
|
||||
],
|
||||
transaction
|
||||
});
|
||||
|
||||
if (!match) return false;
|
||||
|
||||
// 如果不是排位赛,暂不处理
|
||||
if (match.type !== MATCH_TYPES.RANKING) return false;
|
||||
|
||||
// 如果还在循环赛阶段,不自动结束(需要手动开始淘汰赛)
|
||||
if (match.stage === RANKING_STAGE.ROUND_ROBIN) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 如果不在淘汰赛阶段,也不自动结束(可能是其他状态)
|
||||
if (match.stage !== RANKING_STAGE.ELIMINATION) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!force) {
|
||||
// 检查是否还有未确认的对局,有的话暂不结束
|
||||
const remainingGames = await MatchGame.count({
|
||||
where: {
|
||||
match_id: matchId,
|
||||
confirm_status: { [Op.ne]: CONFIRM_STATUS.CONFIRMED }
|
||||
},
|
||||
transaction
|
||||
});
|
||||
if (remainingGames > 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查是否有决赛,并且决赛是否已确认
|
||||
const finalRound = match.rounds.find(r => r.round_type === 'elimination' && r.round_name === '决赛');
|
||||
if (!finalRound || !finalRound.games || finalRound.games.length === 0) {
|
||||
// 没有决赛,不自动结束
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查决赛是否已确认
|
||||
const finalGame = finalRound.games[0];
|
||||
if (finalGame.confirm_status !== CONFIRM_STATUS.CONFIRMED) {
|
||||
// 决赛未确认,不自动结束
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 计算最终排名:先按胜场,再按总得分(自己得分总和),最后按初始战力
|
||||
const confirmedGamesAll = await MatchGame.findAll({
|
||||
where: {
|
||||
match_id: matchId,
|
||||
confirm_status: CONFIRM_STATUS.CONFIRMED
|
||||
},
|
||||
transaction
|
||||
});
|
||||
|
||||
const scoreMap = new Map(); // ladder_user_id -> 总得分
|
||||
const addScore = (playerId, score) => {
|
||||
const key = String(playerId);
|
||||
const prev = scoreMap.get(key) || 0;
|
||||
scoreMap.set(key, prev + (Number(score) || 0));
|
||||
};
|
||||
confirmedGamesAll.forEach(g => {
|
||||
addScore(g.player1_id, g.player1_score);
|
||||
addScore(g.player2_id, g.player2_score);
|
||||
});
|
||||
|
||||
// 先创建一个副本进行排序,避免修改原数组
|
||||
const players = [...match.players].sort((a, b) => {
|
||||
// 第一优先级:胜场数(降序)
|
||||
if (b.win_count !== a.win_count) {
|
||||
return b.win_count - a.win_count;
|
||||
}
|
||||
// 第二优先级:总得分(降序)
|
||||
const scoreA = scoreMap.get(String(a.ladder_user_id)) || 0;
|
||||
const scoreB = scoreMap.get(String(b.ladder_user_id)) || 0;
|
||||
if (scoreB !== scoreA) {
|
||||
return scoreB - scoreA;
|
||||
}
|
||||
// 第三优先级:初始战力(降序)
|
||||
return b.initial_power - a.initial_power;
|
||||
});
|
||||
|
||||
// 调试日志:打印排序结果
|
||||
console.log(`[最终排名] 比赛 ${matchId} 排序结果:`, players.map((p, idx) => ({
|
||||
rank: idx + 1,
|
||||
name: p.ladderUser?.real_name || p.ladder_user_id,
|
||||
win_count: p.win_count,
|
||||
total_score: scoreMap.get(String(p.ladder_user_id)) || 0,
|
||||
initial_power: p.initial_power
|
||||
})));
|
||||
|
||||
for (let i = 0; i < players.length; i++) {
|
||||
const player = players[i];
|
||||
const ladderUser = await LadderUser.findByPk(player.ladder_user_id, { transaction });
|
||||
if (!ladderUser) continue;
|
||||
|
||||
await player.update(
|
||||
{
|
||||
rank: i + 1,
|
||||
final_power: ladderUser.power_score,
|
||||
player_status: 'finished',
|
||||
},
|
||||
{ transaction }
|
||||
);
|
||||
|
||||
// 处理升降级(排位赛规则)
|
||||
const promotion = PowerCalculator.determinePromotion(i + 1, players.length);
|
||||
if (promotion === 'promote' && ladderUser.level < 5) {
|
||||
// 冠军:段位 +1
|
||||
await ladderUser.update({ level: ladderUser.level + 1 }, { transaction });
|
||||
} else if (promotion === 'demote' && (ladderUser.level === 4 || ladderUser.level === 5)) {
|
||||
// 末位:只有 4、5 段才降一级
|
||||
await ladderUser.update({ level: ladderUser.level - 1 }, { transaction });
|
||||
} // 其他情况不变
|
||||
}
|
||||
|
||||
await match.update(
|
||||
{
|
||||
status: MATCH_STATUS.FINISHED,
|
||||
stage: RANKING_STAGE.FINISHED,
|
||||
end_time: new Date(),
|
||||
},
|
||||
{ transaction }
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new MatchAdminController();
|
||||
|
||||
@ -248,7 +248,7 @@ class MatchController {
|
||||
async refereeStartElimination(req, res) {
|
||||
const t = await sequelize.transaction();
|
||||
try {
|
||||
const { match_id, elimination_size } = req.body;
|
||||
const { match_id, elimination_size, selected_player_ids } = req.body;
|
||||
const user = req.user;
|
||||
|
||||
const match = await Match.findByPk(match_id, {
|
||||
@ -289,14 +289,63 @@ class MatchController {
|
||||
return res.status(400).json(error('循环赛尚未结束', 400));
|
||||
}
|
||||
|
||||
// 根据胜场排名
|
||||
// 根据胜场和总得分排名(循环赛阶段只统计循环赛已确认对局)
|
||||
const confirmedGames = await MatchGame.findAll({
|
||||
where: {
|
||||
match_id,
|
||||
confirm_status: CONFIRM_STATUS.CONFIRMED
|
||||
},
|
||||
include: [{
|
||||
model: MatchRound,
|
||||
as: 'round',
|
||||
where: { round_type: 'round_robin' }
|
||||
}]
|
||||
});
|
||||
|
||||
const scoreMap = new Map(); // ladder_user_id -> 总得分(自己得分之和)
|
||||
const addScore = (playerId, score) => {
|
||||
const key = String(playerId);
|
||||
const prev = scoreMap.get(key) || 0;
|
||||
scoreMap.set(key, prev + (Number(score) || 0));
|
||||
};
|
||||
confirmedGames.forEach(g => {
|
||||
addScore(g.player1_id, g.player1_score);
|
||||
addScore(g.player2_id, g.player2_score);
|
||||
});
|
||||
|
||||
const rankedPlayers = match.players.sort((a, b) => {
|
||||
if (b.win_count !== a.win_count) return b.win_count - a.win_count;
|
||||
const scoreA = scoreMap.get(String(a.ladder_user_id)) || 0;
|
||||
const scoreB = scoreMap.get(String(b.ladder_user_id)) || 0;
|
||||
if (scoreB !== scoreA) return scoreB - scoreA;
|
||||
return b.initial_power - a.initial_power;
|
||||
});
|
||||
|
||||
const size = Math.min(elimination_size, rankedPlayers.length);
|
||||
const qualifiedPlayers = rankedPlayers.slice(0, size);
|
||||
// 支持手动选择淘汰赛选手:
|
||||
// - 如果传入 selected_player_ids(ladder_user_id 列表),则优先使用该列表
|
||||
// - 否则按排名取前 elimination_size 名
|
||||
let size;
|
||||
let qualifiedPlayers;
|
||||
if (Array.isArray(selected_player_ids) && selected_player_ids.length >= 2) {
|
||||
const idSet = new Set(selected_player_ids.map((v) => String(v)));
|
||||
const picked = match.players.filter((p) =>
|
||||
idSet.has(String(p.ladder_user_id)),
|
||||
);
|
||||
if (picked.length < 2) {
|
||||
await t.rollback();
|
||||
return res.status(400).json(error('所选选手数量不足 2 人', 400));
|
||||
}
|
||||
size = picked.length;
|
||||
qualifiedPlayers = picked;
|
||||
} else {
|
||||
const safeSize = Math.min(elimination_size || 2, rankedPlayers.length);
|
||||
if (safeSize < 2) {
|
||||
await t.rollback();
|
||||
return res.status(400).json(error('参赛人数不足以开启淘汰赛', 400));
|
||||
}
|
||||
size = safeSize;
|
||||
qualifiedPlayers = rankedPlayers.slice(0, size);
|
||||
}
|
||||
|
||||
// 更新比赛状态
|
||||
await match.update({
|
||||
@ -304,8 +353,12 @@ class MatchController {
|
||||
elimination_size: size
|
||||
}, { transaction: t });
|
||||
|
||||
// 创建淘汰赛首轮(1 vs 最后, 2 vs 倒数第二...)
|
||||
const roundName = size === 4 ? '半决赛' : size === 8 ? '四分之一决赛' : '淘汰赛首轮';
|
||||
// 根据人数确定轮次名称
|
||||
// 2人:直接决赛
|
||||
// 4人:半决赛
|
||||
// 8人:四分之一决赛
|
||||
// 其他:淘汰赛首轮
|
||||
const roundName = size === 2 ? '决赛' : size === 4 ? '半决赛' : size === 8 ? '四分之一决赛' : '淘汰赛首轮';
|
||||
const round = await MatchRound.create({
|
||||
match_id: match.id,
|
||||
round_number: 100, // 淘汰赛轮次从100开始
|
||||
@ -315,17 +368,86 @@ class MatchController {
|
||||
}, { transaction: t });
|
||||
|
||||
// 配对:1 vs size, 2 vs size-1, ...
|
||||
const createdGames = [];
|
||||
for (let i = 0; i < size / 2; i++) {
|
||||
await MatchGame.create({
|
||||
const game = await MatchGame.create({
|
||||
match_id: match.id,
|
||||
round_id: round.id,
|
||||
player1_id: qualifiedPlayers[i].ladder_user_id,
|
||||
player2_id: qualifiedPlayers[size - 1 - i].ladder_user_id,
|
||||
status: 0
|
||||
}, { transaction: t });
|
||||
createdGames.push({
|
||||
game,
|
||||
player1: qualifiedPlayers[i],
|
||||
player2: qualifiedPlayers[size - 1 - i]
|
||||
});
|
||||
}
|
||||
|
||||
// 更新选手状态为进行中
|
||||
await MatchPlayer.update(
|
||||
{ player_status: 'playing' },
|
||||
{
|
||||
where: {
|
||||
match_id: match.id,
|
||||
ladder_user_id: qualifiedPlayers.map(p => p.ladder_user_id)
|
||||
},
|
||||
transaction: t
|
||||
}
|
||||
);
|
||||
|
||||
await t.commit();
|
||||
|
||||
// 发送WebSocket通知给所有匹配的选手
|
||||
try {
|
||||
for (const { game, player1, player2 } of createdGames) {
|
||||
// 获取选手的天梯用户信息(包含user_id)
|
||||
const [ladder1, ladder2] = await Promise.all([
|
||||
LadderUser.findByPk(player1.ladder_user_id, {
|
||||
include: [{ model: User, as: 'user', attributes: ['id', 'nickname', 'avatar'] }]
|
||||
}),
|
||||
LadderUser.findByPk(player2.ladder_user_id, {
|
||||
include: [{ model: User, as: 'user', attributes: ['id', 'nickname', 'avatar'] }]
|
||||
})
|
||||
]);
|
||||
|
||||
// 通知选手1
|
||||
if (ladder1 && ladder1.user_id) {
|
||||
sendMatchNotification(ladder1.user_id, {
|
||||
matchId: match.id,
|
||||
matchCode: match.match_code,
|
||||
opponent: {
|
||||
id: ladder2?.id,
|
||||
realName: ladder2?.real_name,
|
||||
level: ladder2?.level,
|
||||
powerScore: ladder2?.power_score,
|
||||
nickname: ladder2?.user?.nickname,
|
||||
avatar: ladder2?.user?.avatar
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 通知选手2
|
||||
if (ladder2 && ladder2.user_id) {
|
||||
sendMatchNotification(ladder2.user_id, {
|
||||
matchId: match.id,
|
||||
matchCode: match.match_code,
|
||||
opponent: {
|
||||
id: ladder1?.id,
|
||||
realName: ladder1?.real_name,
|
||||
level: ladder1?.level,
|
||||
powerScore: ladder1?.power_score,
|
||||
nickname: ladder1?.user?.nickname,
|
||||
avatar: ladder1?.user?.avatar
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch (notifyErr) {
|
||||
console.error('发送淘汰赛匹配通知失败:', notifyErr);
|
||||
// 通知失败不影响主流程,只记录错误
|
||||
}
|
||||
|
||||
res.json(success(null, '淘汰赛已开始'));
|
||||
} catch (err) {
|
||||
await t.rollback();
|
||||
@ -460,12 +582,6 @@ class MatchController {
|
||||
loserId = game.player1_id;
|
||||
}
|
||||
|
||||
// 只有胜者可以提交比分
|
||||
if (myLadderUser.id !== winnerId) {
|
||||
await t.rollback();
|
||||
return res.status(400).json(error('败方不能提交比分,请等待胜方提交', 400));
|
||||
}
|
||||
|
||||
await game.update({
|
||||
player1_score: player1Score,
|
||||
player2_score: player2Score,
|
||||
@ -478,19 +594,26 @@ class MatchController {
|
||||
|
||||
await t.commit();
|
||||
|
||||
// 通知败方确认
|
||||
const loserLadderUser = await LadderUser.findByPk(loserId);
|
||||
const loserUser = await User.findByPk(loserLadderUser.user_id);
|
||||
// 通知另一方确认(与胜负无关)
|
||||
const opponentLadderUserId =
|
||||
String(myLadderUser.id) === String(game.player1_id)
|
||||
? game.player2_id
|
||||
: game.player1_id;
|
||||
const opponentLadderUser = await LadderUser.findByPk(opponentLadderUserId);
|
||||
const opponentUser =
|
||||
opponentLadderUser && (await User.findByPk(opponentLadderUser.user_id));
|
||||
|
||||
sendScoreConfirmNotification(loserUser.id, {
|
||||
if (opponentUser) {
|
||||
sendScoreConfirmNotification(opponentUser.id, {
|
||||
matchId: match.id,
|
||||
gameId: game.id,
|
||||
player1Score,
|
||||
player2Score,
|
||||
submitter: {
|
||||
realName: myLadderUser.real_name
|
||||
}
|
||||
realName: myLadderUser.real_name,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
res.json(success(null, '比分已提交,等待对方确认'));
|
||||
} catch (err) {
|
||||
@ -516,8 +639,13 @@ class MatchController {
|
||||
return res.status(400).json(error('比赛不存在或状态无效', 400));
|
||||
}
|
||||
|
||||
// 获取确认者的天梯用户
|
||||
const myLadderUser = await LadderUser.findOne({
|
||||
// 检查是否为裁判
|
||||
const isReferee = game.match.referee_id === user.id;
|
||||
|
||||
let myLadderUser = null;
|
||||
if (!isReferee) {
|
||||
// 非裁判:必须是参赛者
|
||||
myLadderUser = await LadderUser.findOne({
|
||||
where: { user_id: user.id, store_id: game.match.store_id, status: 1 }
|
||||
});
|
||||
if (!myLadderUser) {
|
||||
@ -530,20 +658,44 @@ class MatchController {
|
||||
return res.status(400).json(error('请等待对方提交比分', 400));
|
||||
}
|
||||
|
||||
if (game.match.type === MATCH_TYPES.RANKING) {
|
||||
// 任意一方提交,另一方确认(挑战赛和排位赛统一逻辑)
|
||||
if (String(myLadderUser.id) === String(game.submit_by)) {
|
||||
await t.rollback();
|
||||
return res.status(403).json(error('提交者不能确认比分', 403));
|
||||
}
|
||||
if (String(myLadderUser.id) !== String(game.player1_id) && String(myLadderUser.id) !== String(game.player2_id)) {
|
||||
if (
|
||||
String(myLadderUser.id) !== String(game.player1_id) &&
|
||||
String(myLadderUser.id) !== String(game.player2_id)
|
||||
) {
|
||||
await t.rollback();
|
||||
return res.status(403).json(error('您不是参赛者', 403));
|
||||
}
|
||||
} else {
|
||||
// 败方确认(挑战赛保持原逻辑)
|
||||
if (String(myLadderUser.id) !== String(game.loser_id)) {
|
||||
// 裁判:可以直接确认,但需要确保有比分
|
||||
if (!game.player1_score && game.player1_score !== 0 || !game.player2_score && game.player2_score !== 0) {
|
||||
await t.rollback();
|
||||
return res.status(403).json(error('只有败方可以确认比分', 403));
|
||||
return res.status(400).json(error('请先填写比分', 400));
|
||||
}
|
||||
// 如果没有提交者,裁判确认时自动设置提交者为裁判
|
||||
if (!game.submit_by) {
|
||||
const refereeLadderUser = await LadderUser.findOne({
|
||||
where: { user_id: user.id, store_id: game.match.store_id, status: 1 },
|
||||
transaction: t
|
||||
});
|
||||
if (refereeLadderUser) {
|
||||
await game.update({
|
||||
submit_by: refereeLadderUser.id,
|
||||
status: 2
|
||||
}, { transaction: t });
|
||||
// 计算胜者和败者
|
||||
const winnerId = game.player1_score > game.player2_score ? game.player1_id : game.player2_id;
|
||||
const loserId = game.player1_score > game.player2_score ? game.player2_id : game.player1_id;
|
||||
await game.update({
|
||||
winner_id: winnerId,
|
||||
loser_id: loserId
|
||||
}, { transaction: t });
|
||||
await game.reload({ transaction: t });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -574,12 +726,18 @@ class MatchController {
|
||||
);
|
||||
|
||||
// 更新游戏记录
|
||||
const confirmedById = isReferee ? (await LadderUser.findOne({
|
||||
where: { user_id: user.id, store_id: game.match.store_id, status: 1 },
|
||||
transaction: t
|
||||
}))?.id : myLadderUser.id;
|
||||
|
||||
await game.update({
|
||||
confirm_status: CONFIRM_STATUS.CONFIRMED,
|
||||
confirmed_by: myLadderUser.id,
|
||||
confirmed_by: confirmedById,
|
||||
confirmed_at: new Date(),
|
||||
winner_power_change: winnerChange,
|
||||
loser_power_change: loserChange
|
||||
loser_power_change: loserChange,
|
||||
status: 2 // 已结束
|
||||
}, { transaction: t });
|
||||
|
||||
// 更新胜者战力值和统计
|
||||
@ -604,6 +762,27 @@ class MatchController {
|
||||
last_match_time: new Date()
|
||||
}, { transaction: t });
|
||||
|
||||
// 更新 MatchPlayer 的胜负记录(排位赛)
|
||||
if (game.match.type === MATCH_TYPES.RANKING) {
|
||||
// 更新胜者的 MatchPlayer 记录
|
||||
await MatchPlayer.increment('win_count', {
|
||||
where: {
|
||||
match_id: game.match.id,
|
||||
ladder_user_id: game.winner_id
|
||||
},
|
||||
transaction: t
|
||||
});
|
||||
|
||||
// 更新败者的 MatchPlayer 记录
|
||||
await MatchPlayer.increment('lose_count', {
|
||||
where: {
|
||||
match_id: game.match.id,
|
||||
ladder_user_id: game.loser_id
|
||||
},
|
||||
transaction: t
|
||||
});
|
||||
}
|
||||
|
||||
// 更新比赛状态
|
||||
if (game.match.type === MATCH_TYPES.CHALLENGE) {
|
||||
await game.match.update({
|
||||
@ -730,10 +909,24 @@ class MatchController {
|
||||
{
|
||||
model: MatchPlayer,
|
||||
as: 'players',
|
||||
include: [{ model: LadderUser, as: 'ladderUser', include: [{ model: User, as: 'user' }] }]
|
||||
required: false,
|
||||
include: [{ model: LadderUser, as: 'ladderUser', required: false, include: [{ model: User, as: 'user', required: false }] }]
|
||||
},
|
||||
{ model: MatchRound, as: 'rounds', include: [{ model: MatchGame, as: 'games' }] },
|
||||
{ model: Store, as: 'store' }
|
||||
{
|
||||
model: MatchRound,
|
||||
as: 'rounds',
|
||||
required: false,
|
||||
include: [{
|
||||
model: MatchGame,
|
||||
as: 'games',
|
||||
required: false
|
||||
}]
|
||||
},
|
||||
{ model: Store, as: 'store', required: false }
|
||||
],
|
||||
order: [
|
||||
[{ model: MatchRound, as: 'rounds' }, 'round_number', 'ASC'],
|
||||
[{ model: MatchRound, as: 'rounds' }, { model: MatchGame, as: 'games' }, 'id', 'ASC']
|
||||
]
|
||||
});
|
||||
|
||||
@ -744,6 +937,56 @@ class MatchController {
|
||||
const stageNames = ['报名中', '循环赛', '淘汰赛', '已结束'];
|
||||
const statusNames = ['待开始', '进行中', '已结束', '已取消'];
|
||||
|
||||
const user = req.user;
|
||||
const isReferee = match.referee_id === user.id;
|
||||
|
||||
// 构建选手映射表,便于快速查找
|
||||
const playersMap = new Map();
|
||||
(match.players || []).forEach(p => {
|
||||
if (p.ladder_user_id) {
|
||||
playersMap.set(p.ladder_user_id, {
|
||||
id: p.id,
|
||||
ladderUserId: p.ladder_user_id,
|
||||
realName: p.ladderUser?.real_name || `选手${p.ladder_user_id}`,
|
||||
nickname: p.ladderUser?.user?.nickname,
|
||||
avatar: p.ladderUser?.user?.avatar,
|
||||
level: p.ladderUser?.level
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 确保 rounds 和 games 数组存在,并为每个 game 添加选手名称
|
||||
const rounds = (match.rounds || []).map(r => ({
|
||||
id: r.id,
|
||||
roundNumber: r.round_number,
|
||||
roundType: r.round_type,
|
||||
roundName: r.round_name,
|
||||
status: r.status,
|
||||
games: (r.games || []).map(g => {
|
||||
const player1 = playersMap.get(g.player1_id);
|
||||
const player2 = playersMap.get(g.player2_id);
|
||||
|
||||
return {
|
||||
id: g.id,
|
||||
player1Id: g.player1_id,
|
||||
player2Id: g.player2_id,
|
||||
player1Name: player1?.realName || `选手${g.player1_id}`,
|
||||
player2Name: player2?.realName || `选手${g.player2_id}`,
|
||||
player1Score: g.player1_score,
|
||||
player2Score: g.player2_score,
|
||||
winnerId: g.winner_id,
|
||||
confirmStatus: g.confirm_status,
|
||||
status: g.status
|
||||
};
|
||||
})
|
||||
}));
|
||||
|
||||
// 调试日志
|
||||
console.log(`[getRankingDetail] 比赛 ${matchCode}: rounds数量=${rounds.length}, 总对局数=${rounds.reduce((sum, r) => sum + (r.games?.length || 0), 0)}`);
|
||||
if (rounds.length > 0 && rounds[0].games.length > 0) {
|
||||
console.log(`[getRankingDetail] 示例对局:`, rounds[0].games[0]);
|
||||
}
|
||||
|
||||
res.json(success({
|
||||
id: match.id,
|
||||
matchCode: match.match_code,
|
||||
@ -755,7 +998,9 @@ class MatchController {
|
||||
weight: match.weight,
|
||||
storeName: match.store?.name,
|
||||
startTime: match.start_time,
|
||||
players: match.players.map(p => ({
|
||||
refereeId: match.referee_id,
|
||||
isReferee: isReferee,
|
||||
players: (match.players || []).map(p => ({
|
||||
id: p.id,
|
||||
ladderUserId: p.ladder_user_id,
|
||||
realName: p.ladderUser?.real_name,
|
||||
@ -768,23 +1013,7 @@ class MatchController {
|
||||
rank: p.rank,
|
||||
status: p.player_status
|
||||
})),
|
||||
rounds: match.rounds.map(r => ({
|
||||
id: r.id,
|
||||
roundNumber: r.round_number,
|
||||
roundType: r.round_type,
|
||||
roundName: r.round_name,
|
||||
status: r.status,
|
||||
games: r.games.map(g => ({
|
||||
id: g.id,
|
||||
player1Id: g.player1_id,
|
||||
player2Id: g.player2_id,
|
||||
player1Score: g.player1_score,
|
||||
player2Score: g.player2_score,
|
||||
winnerId: g.winner_id,
|
||||
confirmStatus: g.confirm_status,
|
||||
status: g.status
|
||||
}))
|
||||
}))
|
||||
rounds: rounds
|
||||
}));
|
||||
} catch (err) {
|
||||
console.error('获取排位赛详情失败:', err);
|
||||
@ -809,7 +1038,15 @@ class MatchController {
|
||||
return res.status(404).json(error('比赛不存在', 404));
|
||||
}
|
||||
|
||||
const ladderUser = await LadderUser.findOne({
|
||||
// 检查是否为裁判
|
||||
const isReferee = match.referee_id === user.id;
|
||||
|
||||
let ladderUser = null;
|
||||
let player = null;
|
||||
|
||||
if (!isReferee) {
|
||||
// 非裁判:必须是参赛者
|
||||
ladderUser = await LadderUser.findOne({
|
||||
where: { user_id: user.id, store_id: match.store_id, status: 1 },
|
||||
transaction: t
|
||||
});
|
||||
@ -819,7 +1056,7 @@ class MatchController {
|
||||
return res.status(400).json(error('您不是参赛者', 400));
|
||||
}
|
||||
|
||||
const player = await MatchPlayer.findOne({
|
||||
player = await MatchPlayer.findOne({
|
||||
where: { match_id: match.id, ladder_user_id: ladderUser.id },
|
||||
transaction: t
|
||||
});
|
||||
@ -828,6 +1065,15 @@ class MatchController {
|
||||
await t.rollback();
|
||||
return res.status(400).json(error('您不是参赛者', 400));
|
||||
}
|
||||
} else {
|
||||
// 裁判:返回所有未确认的对局,不限制为当前对局
|
||||
await t.commit();
|
||||
return res.json(success({
|
||||
status: 'referee',
|
||||
currentGame: null,
|
||||
isReferee: true
|
||||
}));
|
||||
}
|
||||
|
||||
const findCurrentGame = async () => MatchGame.findOne({
|
||||
where: {
|
||||
@ -836,7 +1082,8 @@ class MatchController {
|
||||
{ player1_id: ladderUser.id },
|
||||
{ player2_id: ladderUser.id }
|
||||
],
|
||||
status: { [Op.in]: [1, 2] },
|
||||
// 循环赛和淘汰赛都需要看到“已生成但尚未开始”的对局,因此包含 status=0/1/2
|
||||
status: { [Op.in]: [0, 1, 2] },
|
||||
// 已确认的对局不应再作为“当前对局”返回,否则前端会一直显示“待确认”
|
||||
confirm_status: { [Op.ne]: CONFIRM_STATUS.CONFIRMED }
|
||||
},
|
||||
@ -845,13 +1092,25 @@ class MatchController {
|
||||
transaction: t
|
||||
});
|
||||
|
||||
let currentGame = await findCurrentGame();
|
||||
|
||||
// 如果当前没有对局且我处于等待状态,尝试触发一次自动匹配
|
||||
if (!currentGame && player.player_status === 'waiting') {
|
||||
// 如果用户状态是 'waiting',说明还没有匹配到对手,不应该返回任何对局信息
|
||||
if (player.player_status === 'waiting') {
|
||||
// 尝试触发一次自动匹配
|
||||
await matchAdminController._autoMatchPlayers(match.id, t);
|
||||
currentGame = await findCurrentGame();
|
||||
// 重新查询玩家状态(匹配后可能变为 'playing')
|
||||
await player.reload({ transaction: t });
|
||||
|
||||
// 如果匹配后状态仍然是 'waiting',说明没有匹配成功,返回 null
|
||||
if (player.player_status === 'waiting') {
|
||||
await t.commit();
|
||||
return res.json(success({
|
||||
status: player.player_status,
|
||||
currentGame: null
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
// 只有状态是 'playing' 时才查询当前对局
|
||||
let currentGame = await findCurrentGame();
|
||||
|
||||
if (!currentGame) {
|
||||
await t.commit();
|
||||
@ -931,7 +1190,9 @@ class MatchController {
|
||||
const game = await MatchGame.findOne({
|
||||
where: {
|
||||
match_id: match.id,
|
||||
status: 1,
|
||||
// 循环赛与淘汰赛都可能存在“已生成但未开始”的对局(status=0),
|
||||
// 这里允许在 status=0 或 1 时提交比分
|
||||
status: { [Op.in]: [0, 1] },
|
||||
[Op.or]: [
|
||||
{ player1_id: myLadderUser.id },
|
||||
{ player2_id: myLadderUser.id }
|
||||
@ -993,11 +1254,16 @@ class MatchController {
|
||||
|
||||
await t.commit();
|
||||
|
||||
const loserLadderUser = await LadderUser.findByPk(loserId);
|
||||
if (loserLadderUser) {
|
||||
const loserUser = await User.findByPk(loserLadderUser.user_id);
|
||||
if (loserUser) {
|
||||
sendScoreConfirmNotification(loserUser.id, {
|
||||
// 通知另一方确认(与胜负无关)
|
||||
const opponentLadderUserId =
|
||||
String(myLadderUser.id) === String(game.player1_id)
|
||||
? game.player2_id
|
||||
: game.player1_id;
|
||||
const opponentLadderUser = await LadderUser.findByPk(opponentLadderUserId);
|
||||
if (opponentLadderUser) {
|
||||
const opponentUser = await User.findByPk(opponentLadderUser.user_id);
|
||||
if (opponentUser) {
|
||||
sendScoreConfirmNotification(opponentUser.id, {
|
||||
matchId: match.id,
|
||||
gameId: game.id,
|
||||
player1Score,
|
||||
@ -1277,7 +1543,7 @@ class MatchController {
|
||||
if (player) {
|
||||
myStatus = player.player_status;
|
||||
|
||||
// 获取当前对局
|
||||
// 获取当前对局(循环赛 + 淘汰赛)
|
||||
const game = await MatchGame.findOne({
|
||||
where: {
|
||||
match_id: match.id,
|
||||
@ -1285,7 +1551,10 @@ class MatchController {
|
||||
{ player1_id: ladderUser.id },
|
||||
{ player2_id: ladderUser.id }
|
||||
],
|
||||
status: { [Op.in]: [1, 2] }
|
||||
// 包含 status=0(已生成但未开始),方便淘汰赛在还没开打时也能看到对手
|
||||
status: { [Op.in]: [0, 1, 2] },
|
||||
// 已确认的对局不应再作为“当前对局”显示,否则会出现对手信息不同步的问题
|
||||
confirm_status: { [Op.ne]: CONFIRM_STATUS.CONFIRMED }
|
||||
},
|
||||
order: [['status', 'DESC'], ['updated_at', 'DESC'], ['id', 'DESC']]
|
||||
});
|
||||
@ -1314,6 +1583,9 @@ class MatchController {
|
||||
confirmStatus: game.confirm_status,
|
||||
gameStatus: game.status
|
||||
};
|
||||
} else {
|
||||
// 如果没有当前对局(例如上一局已确认且新一局尚未开始),保持 opponent 为 null
|
||||
currentGame = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1432,11 +1704,15 @@ class MatchController {
|
||||
return res.json(success([]));
|
||||
}
|
||||
|
||||
// 查找需要我确认的比赛(我是败方)
|
||||
// 查找需要我确认的比赛(对方已提交,我尚未确认)
|
||||
const pendingGames = await MatchGame.findAll({
|
||||
where: {
|
||||
loser_id: ladderUser.id,
|
||||
confirm_status: CONFIRM_STATUS.PENDING
|
||||
confirm_status: CONFIRM_STATUS.PENDING,
|
||||
submit_by: { [Op.ne]: ladderUser.id },
|
||||
[Op.or]: [
|
||||
{ player1_id: ladderUser.id },
|
||||
{ player2_id: ladderUser.id }
|
||||
]
|
||||
},
|
||||
include: [
|
||||
{ model: Match, as: 'match' }
|
||||
@ -1445,13 +1721,15 @@ class MatchController {
|
||||
});
|
||||
|
||||
const list = await Promise.all(pendingGames.map(async game => {
|
||||
const winner = await LadderUser.findByPk(game.winner_id);
|
||||
// 对手是“不是我”的那一方
|
||||
const opponentId = game.player1_id === ladderUser.id ? game.player2_id : game.player1_id;
|
||||
const opponent = await LadderUser.findByPk(opponentId);
|
||||
return {
|
||||
id: game.id,
|
||||
matchId: game.match_id,
|
||||
matchName: game.match?.name,
|
||||
matchType: game.match?.type,
|
||||
opponentName: winner?.real_name,
|
||||
opponentName: opponent?.real_name,
|
||||
myScore: game.player1_id === ladderUser.id ? game.player1_score : game.player2_score,
|
||||
opponentScore: game.player1_id === ladderUser.id ? game.player2_score : game.player1_score,
|
||||
createdAt: game.created_at
|
||||
|
||||
@ -16,6 +16,7 @@ const {
|
||||
const PowerCalculator = require("../services/powerCalculator");
|
||||
const { Op } = require("sequelize");
|
||||
const sequelize = require("../config/database");
|
||||
const { sendToUser } = require("../websocket");
|
||||
|
||||
class PointsAdminController {
|
||||
// === 积分行为管理 ===
|
||||
@ -492,6 +493,19 @@ class PointsAdminController {
|
||||
verified_by: admin.id,
|
||||
});
|
||||
|
||||
// 通过 WebSocket 通知用户订单已核销
|
||||
if (order.user_id) {
|
||||
sendToUser(order.user_id, {
|
||||
type: "points_order_verified",
|
||||
data: {
|
||||
orderId: order.id,
|
||||
orderNo: order.order_no,
|
||||
status: order.status,
|
||||
verifiedAt: order.verified_at,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
res.json(success(null, "核销成功"));
|
||||
} catch (err) {
|
||||
console.error("核销订单失败:", err);
|
||||
@ -534,6 +548,19 @@ class PointsAdminController {
|
||||
verified_by: admin.id,
|
||||
});
|
||||
|
||||
// 通过 WebSocket 通知用户订单已核销
|
||||
if (order.user_id) {
|
||||
sendToUser(order.user_id, {
|
||||
type: "points_order_verified",
|
||||
data: {
|
||||
orderId: order.id,
|
||||
orderNo: order.order_no,
|
||||
status: order.status,
|
||||
verifiedAt: order.verified_at,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
res.json(
|
||||
success(
|
||||
{
|
||||
|
||||
@ -46,6 +46,7 @@ router.put('/matches/:id', authAdmin, matchAdminController.update);
|
||||
router.post('/matches/:id/start', authAdmin, matchAdminController.startMatch);
|
||||
router.post('/matches/:id/start-elimination', authAdmin, matchAdminController.startElimination);
|
||||
router.post('/matches/:id/end', authAdmin, matchAdminController.endMatch);
|
||||
router.post('/matches/:id/trigger-match', authAdmin, matchAdminController.triggerMatch);
|
||||
router.post('/matches/:id/players', authAdmin, matchAdminController.addPlayer);
|
||||
router.delete('/matches/:id/players/:playerId', authAdmin, matchAdminController.removePlayer);
|
||||
router.put('/matches/:matchId/games/:gameId', authAdmin, matchAdminController.updateGameResult);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user