This commit is contained in:
yuhawu 2025-08-16 10:08:12 +08:00
parent 9c7ea6ff0b
commit b9043a562e
92 changed files with 8386 additions and 730 deletions

View File

@ -1 +0,0 @@
const e={};e.render=function(e,n){return" 编辑/新增 "};export{e as default};

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
const e={};e.render=function(e,n){return" 用户列表 "};export{e as default};

6
dist/index.html vendored
View File

@ -5,10 +5,10 @@
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title> <title>Vite App</title>
<script type="module" crossorigin src="/assets/index.09599c30.js"></script> <script type="module" crossorigin src="/assets/index.b524af77.js"></script>
<link rel="modulepreload" href="/assets/vendor.51cc00ea.js"> <link rel="modulepreload" href="/assets/vendor.7d62357a.js">
<link rel="stylesheet" href="/assets/vendor.f9422048.css"> <link rel="stylesheet" href="/assets/vendor.f9422048.css">
<link rel="stylesheet" href="/assets/index.b7a6658c.css"> <link rel="stylesheet" href="/assets/index.9ec6da49.css">
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

167
node_modules/.package-lock.json generated vendored
View File

@ -99,6 +99,72 @@
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@parcel/watcher": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
"integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
"dependencies": {
"detect-libc": "^1.0.3",
"is-glob": "^4.0.3",
"micromatch": "^4.0.5",
"node-addon-api": "^7.0.0"
},
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
"@parcel/watcher-android-arm64": "2.5.1",
"@parcel/watcher-darwin-arm64": "2.5.1",
"@parcel/watcher-darwin-x64": "2.5.1",
"@parcel/watcher-freebsd-x64": "2.5.1",
"@parcel/watcher-linux-arm-glibc": "2.5.1",
"@parcel/watcher-linux-arm-musl": "2.5.1",
"@parcel/watcher-linux-arm64-glibc": "2.5.1",
"@parcel/watcher-linux-arm64-musl": "2.5.1",
"@parcel/watcher-linux-x64-glibc": "2.5.1",
"@parcel/watcher-linux-x64-musl": "2.5.1",
"@parcel/watcher-win32-arm64": "2.5.1",
"@parcel/watcher-win32-ia32": "2.5.1",
"@parcel/watcher-win32-x64": "2.5.1"
}
},
"node_modules/@parcel/watcher-win32-x64": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
"integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher/node_modules/node-addon-api": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
"integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
"dev": true,
"license": "MIT",
"optional": true
},
"node_modules/@popperjs/core": { "node_modules/@popperjs/core": {
"name": "@sxzz/popperjs-es", "name": "@sxzz/popperjs-es",
"version": "2.11.7", "version": "2.11.7",
@ -624,6 +690,20 @@
"node": ">=0.4.0" "node": ">=0.4.0"
} }
}, },
"node_modules/detect-libc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
"integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
"dev": true,
"license": "Apache-2.0",
"optional": true,
"bin": {
"detect-libc": "bin/detect-libc.js"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/dunder-proto": { "node_modules/dunder-proto": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@ -1112,6 +1192,13 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/immutable": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz",
"integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==",
"dev": true,
"license": "MIT"
},
"node_modules/iota-array": { "node_modules/iota-array": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz", "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
@ -1311,6 +1398,35 @@
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
"node": ">=8.6"
}
},
"node_modules/micromatch/node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"license": "MIT",
"optional": true,
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/mime-db": { "node_modules/mime-db": {
"version": "1.52.0", "version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
@ -1761,6 +1877,57 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/sass": {
"version": "1.90.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz",
"integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"chokidar": "^4.0.0",
"immutable": "^5.0.2",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
"sass": "sass.js"
},
"engines": {
"node": ">=14.0.0"
},
"optionalDependencies": {
"@parcel/watcher": "^2.4.1"
}
},
"node_modules/sass/node_modules/chokidar": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
"dev": true,
"license": "MIT",
"dependencies": {
"readdirp": "^4.0.1"
},
"engines": {
"node": ">= 14.16.0"
},
"funding": {
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/sass/node_modules/readdirp": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 14.18.0"
},
"funding": {
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/scule": { "node_modules/scule": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz",

346
node_modules/.vite/_metadata.json generated vendored
View File

@ -1,225 +1,305 @@
{ {
"hash": "a6b4dd21", "hash": "ffb1b781",
"browserHash": "706d718b", "browserHash": "cf11b848",
"optimized": { "optimized": {
"element-plus/es/components/loading/style/css": { "element-plus/es/components/descriptions/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_loading_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_descriptions_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/loading/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/descriptions/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/date-picker/style/css": { "element-plus/es/components/descriptions-item/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_date-picker_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_descriptions-item_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/date-picker/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/descriptions-item/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/locale/lang/zh-cn": { "element-plus/es/components/message/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_locale_lang_zh-cn.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_message_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/locale/lang/zh-cn.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/message/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/dialog/style/css": { "element-plus/es/components/empty/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_dialog_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_empty_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/dialog/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/empty/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/switch/style/css": { "element-plus/es/components/tree/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_switch_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_tree_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/switch/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/tree/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/input-number/style/css": { "element-plus/es/components/popconfirm/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_input-number_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_popconfirm_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/input-number/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/popconfirm/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/select/style/css": { "element-plus/es/components/checkbox-group/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_select_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_checkbox-group_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/select/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/checkbox-group/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/option/style/css": { "element-plus/es/components/cascader/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_option_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_cascader_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/option/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/cascader/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/pagination/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_pagination_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/pagination/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/table/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_table_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/table/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/button-group/style/css": { "element-plus/es/components/button-group/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_button-group_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_button-group_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/button-group/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/button-group/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/message-box/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_message-box_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/message-box/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/link/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_link_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/link/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/checkbox/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_checkbox_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/checkbox/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/upload/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_upload_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/upload/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/popover/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_popover_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/popover/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/image/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_image_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/image/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/date-picker/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_date-picker_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/date-picker/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/pagination/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_pagination_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/pagination/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/switch/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_switch_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/switch/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/tag/style/css": { "element-plus/es/components/tag/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_tag_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_tag_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/tag/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/tag/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/table-column/style/css": { "element-plus/es/components/select/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_table-column_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_select_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/table-column/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/select/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/card/style/css": { "element-plus/es/components/option/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_card_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_option_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/card/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/option/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/col/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_col_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/col/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/tabs/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_tabs_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/tabs/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/tab-pane/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_tab-pane_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/tab-pane/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/form/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_form_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/form/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/button/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_button_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/button/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/form-item/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_form-item_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/form-item/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/input/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_input_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/input/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/divider/style/css": { "element-plus/es/components/divider/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_divider_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_divider_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/divider/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/divider/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/tabs/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_tabs_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/tabs/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/tab-pane/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_tab-pane_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/tab-pane/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/loading/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_loading_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/loading/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/dialog/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_dialog_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/dialog/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/input-number/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_input-number_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/input-number/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/radio-group/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_radio-group_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/radio-group/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/radio/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_radio_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/radio/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/table/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_table_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/table/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/table-column/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_table-column_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/table-column/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/row/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_row_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/row/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/col/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_col_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/col/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/card/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_card_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/card/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/form/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_form_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/form/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/button/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_button_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/button/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/form-item/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_form-item_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/form-item/style/css.mjs",
"needsInterop": false
},
"element-plus/es/components/input/style/css": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_input_style_css.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/input/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/dropdown/style/css": { "element-plus/es/components/dropdown/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_dropdown_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_dropdown_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/dropdown/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/dropdown/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/dropdown-menu/style/css": { "element-plus/es/components/dropdown-menu/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_dropdown-menu_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_dropdown-menu_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/dropdown-menu/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/dropdown-menu/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/dropdown-item/style/css": { "element-plus/es/components/dropdown-item/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_dropdown-item_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_dropdown-item_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/dropdown-item/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/dropdown-item/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/avatar/style/css": { "element-plus/es/components/avatar/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_avatar_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_avatar_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/avatar/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/avatar/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/badge/style/css": { "element-plus/es/components/badge/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_badge_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_badge_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/badge/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/badge/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/tooltip/style/css": { "element-plus/es/components/tooltip/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_tooltip_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_tooltip_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/tooltip/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/tooltip/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/icon/style/css": { "element-plus/es/components/icon/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_icon_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_icon_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/icon/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/icon/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/menu/style/css": { "element-plus/es/components/menu/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_menu_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_menu_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/menu/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/menu/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/sub-menu/style/css": { "element-plus/es/components/sub-menu/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_sub-menu_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_sub-menu_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/sub-menu/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/sub-menu/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/menu-item/style/css": { "element-plus/es/components/menu-item/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_menu-item_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_menu-item_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/menu-item/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/menu-item/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es": { "element-plus/es": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/index.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/index.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/base/style/css": { "element-plus/es/components/base/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_base_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_base_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/base/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/base/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/container/style/css": { "element-plus/es/components/container/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_container_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_container_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/container/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/container/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/main/style/css": { "element-plus/es/components/main/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_main_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_main_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/main/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/main/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/aside/style/css": { "element-plus/es/components/aside/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_aside_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_aside_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/aside/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/aside/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"element-plus/es/components/header/style/css": { "element-plus/es/components/header/style/css": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus_es_components_header_style_css.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus_es_components_header_style_css.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/components/header/style/css.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/components/header/style/css.mjs",
"needsInterop": false "needsInterop": false
}, },
"vue": { "vue": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/vue.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/vue.js",
"src": "C:/Users/www/newAdmin/node_modules/vue/dist/vue.runtime.esm-bundler.js", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/vue/dist/vue.runtime.esm-bundler.js",
"needsInterop": false "needsInterop": false
}, },
"element-plus": { "element-plus": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/element-plus.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/element-plus.js",
"src": "C:/Users/www/newAdmin/node_modules/element-plus/es/index.mjs", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/es/index.mjs",
"needsInterop": false
},
"vue-router": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/vue-router.js",
"src": "C:/Users/www/newAdmin/node_modules/vue-router/dist/vue-router.mjs",
"needsInterop": false
},
"axios": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/axios.js",
"src": "C:/Users/www/newAdmin/node_modules/axios/index.js",
"needsInterop": false "needsInterop": false
}, },
"vuex": { "vuex": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/vuex.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/vuex.js",
"src": "C:/Users/www/newAdmin/node_modules/vuex/dist/vuex.esm-bundler.js", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/vuex/dist/vuex.esm-bundler.js",
"needsInterop": false
},
"vue-router": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/vue-router.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/vue-router/dist/vue-router.mjs",
"needsInterop": false
},
"axios": {
"file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/axios.js",
"src": "C:/Users/www/xinhoutai/newAdmin/node_modules/axios/index.js",
"needsInterop": false "needsInterop": false
}, },
"@element-plus/icons-vue": { "@element-plus/icons-vue": {
"file": "C:/Users/www/newAdmin/node_modules/.vite/@element-plus_icons-vue.js", "file": "C:/Users/www/xinhoutai/newAdmin/node_modules/.vite/@element-plus_icons-vue.js",
"src": "C:/Users/www/newAdmin/node_modules/@element-plus/icons-vue/dist/index.js", "src": "C:/Users/www/xinhoutai/newAdmin/node_modules/@element-plus/icons-vue/dist/index.js",
"needsInterop": false "needsInterop": false
} }
} }

View File

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/checkbox/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-checkbox.css";
//# sourceMappingURL=chunk-3F4F2EFL.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/checkbox/style/css.mjs"],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-checkbox.css';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AACA;",
"names": []
}

View File

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/button-group/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-button-group.css";
//# sourceMappingURL=chunk-4YMETJHM.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/button-group/style/css.mjs"],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-button-group.css';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AACA;",
"names": []
}

View File

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/input/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-input.css";
//# sourceMappingURL=chunk-AGG62FMZ.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/input/style/css.mjs"],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-input.css';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AACA;",
"names": []
}

View File

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/scrollbar/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-scrollbar.css";
//# sourceMappingURL=chunk-ASTAK5F3.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/scrollbar/style/css.mjs"],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-scrollbar.css';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AACA;",
"names": []
}

View File

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/base/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/base.css";
//# sourceMappingURL=chunk-J2HUJDEQ.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/base/style/css.mjs"],
"sourcesContent": ["import 'element-plus/theme-chalk/base.css';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AAAA;",
"names": []
}

View File

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/option/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-option.css";
//# sourceMappingURL=chunk-JW55Z2EJ.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/option/style/css.mjs"],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-option.css';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AACA;",
"names": []
}

View File

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/button/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-button.css";
//# sourceMappingURL=chunk-MGF34FHY.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/button/style/css.mjs"],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-button.css';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AACA;",
"names": []
}

View File

@ -1,6 +0,0 @@
// node_modules/element-plus/es/components/option-group/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-option-group.css";
// node_modules/element-plus/es/components/select/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-select.css";
//# sourceMappingURL=chunk-RELBUDK6.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/option-group/style/css.mjs", "../element-plus/es/components/select/style/css.mjs"],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-option-group.css';\n//# sourceMappingURL=css.mjs.map\n", "import '../../base/style/css.mjs';\nimport '../../tag/style/css.mjs';\nimport '../../option/style/css.mjs';\nimport '../../option-group/style/css.mjs';\nimport '../../scrollbar/style/css.mjs';\nimport '../../popper/style/css.mjs';\nimport 'element-plus/theme-chalk/el-select.css';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AACA;;;ACKA;",
"names": []
}

View File

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/tooltip/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-tooltip.css";
//# sourceMappingURL=chunk-T6CWIVMK.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/tooltip/style/css.mjs"],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-tooltip.css';\nimport '../../popper/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AACA;",
"names": []
}

View File

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/popper/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-popper.css";
//# sourceMappingURL=chunk-VJIH6NRZ.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/popper/style/css.mjs"],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-popper.css';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AACA;",
"names": []
}

View File

@ -1,3 +0,0 @@
// node_modules/element-plus/es/components/tag/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-tag.css";
//# sourceMappingURL=chunk-Y55BWCCL.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": ["../element-plus/es/components/tag/style/css.mjs"],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-tag.css';\n//# sourceMappingURL=css.mjs.map\n"],
"mappings": ";AACA;",
"names": []
}

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/aside/style/css.mjs // node_modules/element-plus/es/components/aside/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-aside.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-aside.css";
//# sourceMappingURL=element-plus_es_components_aside_style_css.js.map //# sourceMappingURL=element-plus_es_components_aside_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/avatar/style/css.mjs // node_modules/element-plus/es/components/avatar/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-avatar.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-avatar.css";
//# sourceMappingURL=element-plus_es_components_avatar_style_css.js.map //# sourceMappingURL=element-plus_es_components_avatar_style_css.js.map

View File

@ -1,6 +1,4 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-BA3BYPN6.js";
import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/badge/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-badge.css";
//# sourceMappingURL=element-plus_es_components_badge_style_css.js.map //# sourceMappingURL=element-plus_es_components_badge_style_css.js.map

View File

@ -1,7 +1,7 @@
{ {
"version": 3, "version": 3,
"sources": ["../element-plus/es/components/badge/style/css.mjs"], "sources": [],
"sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-badge.css';\n//# sourceMappingURL=css.mjs.map\n"], "sourcesContent": [],
"mappings": ";;;;AACA;", "mappings": "",
"names": [] "names": []
} }

View File

@ -1,3 +1,3 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
//# sourceMappingURL=element-plus_es_components_base_style_css.js.map //# sourceMappingURL=element-plus_es_components_base_style_css.js.map

View File

@ -1,4 +1,4 @@
import "./chunk-4YMETJHM.js"; import "./chunk-37WSAZQV.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
//# sourceMappingURL=element-plus_es_components_button-group_style_css.js.map //# sourceMappingURL=element-plus_es_components_button-group_style_css.js.map

View File

@ -1,4 +1,4 @@
import "./chunk-MGF34FHY.js"; import "./chunk-EI5ZVOL3.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
//# sourceMappingURL=element-plus_es_components_button_style_css.js.map //# sourceMappingURL=element-plus_es_components_button_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/card/style/css.mjs // node_modules/element-plus/es/components/card/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-card.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-card.css";
//# sourceMappingURL=element-plus_es_components_card_style_css.js.map //# sourceMappingURL=element-plus_es_components_card_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/col/style/css.mjs // node_modules/element-plus/es/components/col/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-col.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-col.css";
//# sourceMappingURL=element-plus_es_components_col_style_css.js.map //# sourceMappingURL=element-plus_es_components_col_style_css.js.map

View File

@ -1,10 +1,10 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/container/style/css.mjs // node_modules/element-plus/es/components/container/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-container.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-container.css";
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-aside.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-aside.css";
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-footer.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-footer.css";
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-header.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-header.css";
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-main.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-main.css";
//# sourceMappingURL=element-plus_es_components_container_style_css.js.map //# sourceMappingURL=element-plus_es_components_container_style_css.js.map

View File

@ -1,9 +1,7 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-XJMOBMS7.js";
import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/dialog/style/css.mjs // node_modules/element-plus/es/components/dialog/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-dialog.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-dialog.css";
// node_modules/element-plus/es/components/overlay/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-overlay.css";
//# sourceMappingURL=element-plus_es_components_dialog_style_css.js.map //# sourceMappingURL=element-plus_es_components_dialog_style_css.js.map

View File

@ -1,7 +1,7 @@
{ {
"version": 3, "version": 3,
"sources": ["../element-plus/es/components/dialog/style/css.mjs", "../element-plus/es/components/overlay/style/css.mjs"], "sources": ["../element-plus/es/components/dialog/style/css.mjs"],
"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"], "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"],
"mappings": ";;;;AACA;;;ACAA;", "mappings": ";;;;;AACA;",
"names": [] "names": []
} }

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/divider/style/css.mjs // node_modules/element-plus/es/components/divider/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-divider.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-divider.css";
//# sourceMappingURL=element-plus_es_components_divider_style_css.js.map //# sourceMappingURL=element-plus_es_components_divider_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/dropdown-item/style/css.mjs // node_modules/element-plus/es/components/dropdown-item/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-dropdown-item.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-dropdown-item.css";
//# sourceMappingURL=element-plus_es_components_dropdown-item_style_css.js.map //# sourceMappingURL=element-plus_es_components_dropdown-item_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/dropdown-menu/style/css.mjs // node_modules/element-plus/es/components/dropdown-menu/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-dropdown-menu.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-dropdown-menu.css";
//# sourceMappingURL=element-plus_es_components_dropdown-menu_style_css.js.map //# sourceMappingURL=element-plus_es_components_dropdown-menu_style_css.js.map

View File

@ -1,10 +1,10 @@
import "./chunk-4YMETJHM.js"; import "./chunk-37WSAZQV.js";
import "./chunk-MGF34FHY.js"; import "./chunk-EI5ZVOL3.js";
import "./chunk-ASTAK5F3.js"; import "./chunk-44D3S5LE.js";
import "./chunk-VJIH6NRZ.js"; import "./chunk-MKLDHWXD.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/dropdown/style/css.mjs // node_modules/element-plus/es/components/dropdown/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-dropdown.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-dropdown.css";
//# sourceMappingURL=element-plus_es_components_dropdown_style_css.js.map //# sourceMappingURL=element-plus_es_components_dropdown_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/form-item/style/css.mjs // node_modules/element-plus/es/components/form-item/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-form-item.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-form-item.css";
//# sourceMappingURL=element-plus_es_components_form-item_style_css.js.map //# sourceMappingURL=element-plus_es_components_form-item_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/form/style/css.mjs // node_modules/element-plus/es/components/form/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-form.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-form.css";
//# sourceMappingURL=element-plus_es_components_form_style_css.js.map //# sourceMappingURL=element-plus_es_components_form_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/header/style/css.mjs // node_modules/element-plus/es/components/header/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-header.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-header.css";
//# sourceMappingURL=element-plus_es_components_header_style_css.js.map //# sourceMappingURL=element-plus_es_components_header_style_css.js.map

View File

@ -1,3 +1,3 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
//# sourceMappingURL=element-plus_es_components_icon_style_css.js.map //# sourceMappingURL=element-plus_es_components_icon_style_css.js.map

View File

@ -1,7 +1,7 @@
import "./chunk-AGG62FMZ.js"; import "./chunk-U2ESZ2IA.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/input-number/style/css.mjs // node_modules/element-plus/es/components/input-number/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-input-number.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-input-number.css";
//# sourceMappingURL=element-plus_es_components_input-number_style_css.js.map //# sourceMappingURL=element-plus_es_components_input-number_style_css.js.map

View File

@ -1,4 +1,4 @@
import "./chunk-AGG62FMZ.js"; import "./chunk-U2ESZ2IA.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
//# sourceMappingURL=element-plus_es_components_input_style_css.js.map //# sourceMappingURL=element-plus_es_components_input_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/main/style/css.mjs // node_modules/element-plus/es/components/main/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-main.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-main.css";
//# sourceMappingURL=element-plus_es_components_main_style_css.js.map //# sourceMappingURL=element-plus_es_components_main_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/menu-item/style/css.mjs // node_modules/element-plus/es/components/menu-item/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-menu-item.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-menu-item.css";
//# sourceMappingURL=element-plus_es_components_menu-item_style_css.js.map //# sourceMappingURL=element-plus_es_components_menu-item_style_css.js.map

View File

@ -1,8 +1,8 @@
import "./chunk-T6CWIVMK.js"; import "./chunk-S5PDDXWB.js";
import "./chunk-VJIH6NRZ.js"; import "./chunk-MKLDHWXD.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/menu/style/css.mjs // node_modules/element-plus/es/components/menu/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-menu.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-menu.css";
//# sourceMappingURL=element-plus_es_components_menu_style_css.js.map //# sourceMappingURL=element-plus_es_components_menu_style_css.js.map

View File

@ -1,4 +1,4 @@
import "./chunk-JW55Z2EJ.js"; import "./chunk-52DCIPYL.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
//# sourceMappingURL=element-plus_es_components_option_style_css.js.map //# sourceMappingURL=element-plus_es_components_option_style_css.js.map

View File

@ -1,12 +1,12 @@
import "./chunk-AGG62FMZ.js"; import "./chunk-VGA4XJB2.js";
import "./chunk-RELBUDK6.js"; import "./chunk-52DCIPYL.js";
import "./chunk-Y55BWCCL.js"; import "./chunk-Y7BF4SFR.js";
import "./chunk-ASTAK5F3.js"; import "./chunk-44D3S5LE.js";
import "./chunk-VJIH6NRZ.js"; import "./chunk-U2ESZ2IA.js";
import "./chunk-JW55Z2EJ.js"; import "./chunk-MKLDHWXD.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/pagination/style/css.mjs // node_modules/element-plus/es/components/pagination/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-pagination.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-pagination.css";
//# sourceMappingURL=element-plus_es_components_pagination_style_css.js.map //# sourceMappingURL=element-plus_es_components_pagination_style_css.js.map

View File

@ -1,8 +1,8 @@
import "./chunk-RELBUDK6.js"; import "./chunk-VGA4XJB2.js";
import "./chunk-Y55BWCCL.js"; import "./chunk-52DCIPYL.js";
import "./chunk-ASTAK5F3.js"; import "./chunk-Y7BF4SFR.js";
import "./chunk-VJIH6NRZ.js"; import "./chunk-44D3S5LE.js";
import "./chunk-JW55Z2EJ.js"; import "./chunk-MKLDHWXD.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
//# sourceMappingURL=element-plus_es_components_select_style_css.js.map //# sourceMappingURL=element-plus_es_components_select_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/sub-menu/style/css.mjs // node_modules/element-plus/es/components/sub-menu/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-sub-menu.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-sub-menu.css";
//# sourceMappingURL=element-plus_es_components_sub-menu_style_css.js.map //# sourceMappingURL=element-plus_es_components_sub-menu_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/switch/style/css.mjs // node_modules/element-plus/es/components/switch/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-switch.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-switch.css";
//# sourceMappingURL=element-plus_es_components_switch_style_css.js.map //# sourceMappingURL=element-plus_es_components_switch_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/tab-pane/style/css.mjs // node_modules/element-plus/es/components/tab-pane/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-tab-pane.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-tab-pane.css";
//# sourceMappingURL=element-plus_es_components_tab-pane_style_css.js.map //# sourceMappingURL=element-plus_es_components_tab-pane_style_css.js.map

View File

@ -1,8 +1,8 @@
import "./chunk-3F4F2EFL.js"; import "./chunk-Y7BF4SFR.js";
import "./chunk-Y55BWCCL.js"; import "./chunk-RHDSKODH.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/table-column/style/css.mjs // node_modules/element-plus/es/components/table-column/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-table-column.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-table-column.css";
//# sourceMappingURL=element-plus_es_components_table-column_style_css.js.map //# sourceMappingURL=element-plus_es_components_table-column_style_css.js.map

View File

@ -1,10 +1,10 @@
import "./chunk-T6CWIVMK.js"; import "./chunk-S5PDDXWB.js";
import "./chunk-3F4F2EFL.js"; import "./chunk-44D3S5LE.js";
import "./chunk-ASTAK5F3.js"; import "./chunk-RHDSKODH.js";
import "./chunk-VJIH6NRZ.js"; import "./chunk-MKLDHWXD.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/table/style/css.mjs // node_modules/element-plus/es/components/table/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-table.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-table.css";
//# sourceMappingURL=element-plus_es_components_table_style_css.js.map //# sourceMappingURL=element-plus_es_components_table_style_css.js.map

View File

@ -1,6 +1,6 @@
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/components/tabs/style/css.mjs // node_modules/element-plus/es/components/tabs/style/css.mjs
import "C:/Users/www/newAdmin/node_modules/element-plus/theme-chalk/el-tabs.css"; import "C:/Users/www/xinhoutai/newAdmin/node_modules/element-plus/theme-chalk/el-tabs.css";
//# sourceMappingURL=element-plus_es_components_tabs_style_css.js.map //# sourceMappingURL=element-plus_es_components_tabs_style_css.js.map

View File

@ -1,4 +1,4 @@
import "./chunk-Y55BWCCL.js"; import "./chunk-Y7BF4SFR.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
//# sourceMappingURL=element-plus_es_components_tag_style_css.js.map //# sourceMappingURL=element-plus_es_components_tag_style_css.js.map

View File

@ -1,5 +1,5 @@
import "./chunk-T6CWIVMK.js"; import "./chunk-S5PDDXWB.js";
import "./chunk-VJIH6NRZ.js"; import "./chunk-MKLDHWXD.js";
import "./chunk-J2HUJDEQ.js"; import "./chunk-VQBUYH27.js";
import "./chunk-4YJPEX7N.js"; import "./chunk-4YJPEX7N.js";
//# sourceMappingURL=element-plus_es_components_tooltip_style_css.js.map //# sourceMappingURL=element-plus_es_components_tooltip_style_css.js.map

View File

@ -1,188 +0,0 @@
import "./chunk-4YJPEX7N.js";
// node_modules/element-plus/es/locale/lang/zh-cn.mjs
var zhCn = {
name: "zh-cn",
el: {
breadcrumb: {
label: "\u9762\u5305\u5C51"
},
colorpicker: {
confirm: "\u786E\u5B9A",
clear: "\u6E05\u7A7A",
defaultLabel: "\u989C\u8272\u9009\u62E9\u5668",
description: "\u5F53\u524D\u989C\u8272 {color}\uFF0C\u6309 Enter \u952E\u9009\u62E9\u65B0\u989C\u8272",
alphaLabel: "\u9009\u62E9\u900F\u660E\u5EA6\u7684\u503C"
},
datepicker: {
now: "\u6B64\u523B",
today: "\u4ECA\u5929",
cancel: "\u53D6\u6D88",
clear: "\u6E05\u7A7A",
confirm: "\u786E\u5B9A",
dateTablePrompt: "\u4F7F\u7528\u65B9\u5411\u952E\u4E0E Enter \u952E\u53EF\u9009\u62E9\u65E5\u671F",
monthTablePrompt: "\u4F7F\u7528\u65B9\u5411\u952E\u4E0E Enter \u952E\u53EF\u9009\u62E9\u6708\u4EFD",
yearTablePrompt: "\u4F7F\u7528\u65B9\u5411\u952E\u4E0E Enter \u952E\u53EF\u9009\u62E9\u5E74\u4EFD",
selectedDate: "\u5DF2\u9009\u65E5\u671F",
selectDate: "\u9009\u62E9\u65E5\u671F",
selectTime: "\u9009\u62E9\u65F6\u95F4",
startDate: "\u5F00\u59CB\u65E5\u671F",
startTime: "\u5F00\u59CB\u65F6\u95F4",
endDate: "\u7ED3\u675F\u65E5\u671F",
endTime: "\u7ED3\u675F\u65F6\u95F4",
prevYear: "\u524D\u4E00\u5E74",
nextYear: "\u540E\u4E00\u5E74",
prevMonth: "\u4E0A\u4E2A\u6708",
nextMonth: "\u4E0B\u4E2A\u6708",
year: "\u5E74",
month1: "1 \u6708",
month2: "2 \u6708",
month3: "3 \u6708",
month4: "4 \u6708",
month5: "5 \u6708",
month6: "6 \u6708",
month7: "7 \u6708",
month8: "8 \u6708",
month9: "9 \u6708",
month10: "10 \u6708",
month11: "11 \u6708",
month12: "12 \u6708",
weeks: {
sun: "\u65E5",
mon: "\u4E00",
tue: "\u4E8C",
wed: "\u4E09",
thu: "\u56DB",
fri: "\u4E94",
sat: "\u516D"
},
weeksFull: {
sun: "\u661F\u671F\u65E5",
mon: "\u661F\u671F\u4E00",
tue: "\u661F\u671F\u4E8C",
wed: "\u661F\u671F\u4E09",
thu: "\u661F\u671F\u56DB",
fri: "\u661F\u671F\u4E94",
sat: "\u661F\u671F\u516D"
},
months: {
jan: "\u4E00\u6708",
feb: "\u4E8C\u6708",
mar: "\u4E09\u6708",
apr: "\u56DB\u6708",
may: "\u4E94\u6708",
jun: "\u516D\u6708",
jul: "\u4E03\u6708",
aug: "\u516B\u6708",
sep: "\u4E5D\u6708",
oct: "\u5341\u6708",
nov: "\u5341\u4E00\u6708",
dec: "\u5341\u4E8C\u6708"
}
},
inputNumber: {
decrease: "\u51CF\u5C11\u6570\u503C",
increase: "\u589E\u52A0\u6570\u503C"
},
select: {
loading: "\u52A0\u8F7D\u4E2D",
noMatch: "\u65E0\u5339\u914D\u6570\u636E",
noData: "\u65E0\u6570\u636E",
placeholder: "\u8BF7\u9009\u62E9"
},
dropdown: {
toggleDropdown: "\u5207\u6362\u4E0B\u62C9\u9009\u9879"
},
mention: {
loading: "\u52A0\u8F7D\u4E2D"
},
cascader: {
noMatch: "\u65E0\u5339\u914D\u6570\u636E",
loading: "\u52A0\u8F7D\u4E2D",
placeholder: "\u8BF7\u9009\u62E9",
noData: "\u6682\u65E0\u6570\u636E"
},
pagination: {
goto: "\u524D\u5F80",
pagesize: "\u6761/\u9875",
total: "\u5171 {total} \u6761",
pageClassifier: "\u9875",
page: "\u9875",
prev: "\u4E0A\u4E00\u9875",
next: "\u4E0B\u4E00\u9875",
currentPage: "\u7B2C {pager} \u9875",
prevPages: "\u5411\u524D {pager} \u9875",
nextPages: "\u5411\u540E {pager} \u9875",
deprecationWarning: "\u4F60\u4F7F\u7528\u4E86\u4E00\u4E9B\u5DF2\u88AB\u5E9F\u5F03\u7684\u7528\u6CD5\uFF0C\u8BF7\u53C2\u8003 el-pagination \u7684\u5B98\u65B9\u6587\u6863"
},
dialog: {
close: "\u5173\u95ED\u6B64\u5BF9\u8BDD\u6846"
},
drawer: {
close: "\u5173\u95ED\u6B64\u5BF9\u8BDD\u6846"
},
messagebox: {
title: "\u63D0\u793A",
confirm: "\u786E\u5B9A",
cancel: "\u53D6\u6D88",
error: "\u8F93\u5165\u7684\u6570\u636E\u4E0D\u5408\u6CD5!",
close: "\u5173\u95ED\u6B64\u5BF9\u8BDD\u6846"
},
upload: {
deleteTip: "\u6309 Delete \u952E\u53EF\u5220\u9664",
delete: "\u5220\u9664",
preview: "\u67E5\u770B\u56FE\u7247",
continue: "\u7EE7\u7EED\u4E0A\u4F20"
},
slider: {
defaultLabel: "\u6ED1\u5757\u4ECB\u4E8E {min} \u81F3 {max}",
defaultRangeStartLabel: "\u9009\u62E9\u8D77\u59CB\u503C",
defaultRangeEndLabel: "\u9009\u62E9\u7ED3\u675F\u503C"
},
table: {
emptyText: "\u6682\u65E0\u6570\u636E",
confirmFilter: "\u7B5B\u9009",
resetFilter: "\u91CD\u7F6E",
clearFilter: "\u5168\u90E8",
sumText: "\u5408\u8BA1"
},
tour: {
next: "\u4E0B\u4E00\u6B65",
previous: "\u4E0A\u4E00\u6B65",
finish: "\u7ED3\u675F\u5BFC\u89C8"
},
tree: {
emptyText: "\u6682\u65E0\u6570\u636E"
},
transfer: {
noMatch: "\u65E0\u5339\u914D\u6570\u636E",
noData: "\u65E0\u6570\u636E",
titles: ["\u5217\u8868 1", "\u5217\u8868 2"],
filterPlaceholder: "\u8BF7\u8F93\u5165\u641C\u7D22\u5185\u5BB9",
noCheckedFormat: "\u5171 {total} \u9879",
hasCheckedFormat: "\u5DF2\u9009 {checked}/{total} \u9879"
},
image: {
error: "\u52A0\u8F7D\u5931\u8D25"
},
pageHeader: {
title: "\u8FD4\u56DE"
},
popconfirm: {
confirmButtonText: "\u786E\u5B9A",
cancelButtonText: "\u53D6\u6D88"
},
carousel: {
leftArrow: "\u4E0A\u4E00\u5F20\u5E7B\u706F\u7247",
rightArrow: "\u4E0B\u4E00\u5F20\u5E7B\u706F\u7247",
indicator: "\u5E7B\u706F\u7247\u5207\u6362\u81F3\u7D22\u5F15 {index}"
}
}
};
// dep:element-plus_es_locale_lang_zh-cn
var element_plus_es_locale_lang_zh_cn_default = zhCn;
export {
element_plus_es_locale_lang_zh_cn_default as default
};
//# sourceMappingURL=element-plus_es_locale_lang_zh-cn.js.map

File diff suppressed because one or more lines are too long

View File

@ -2,7 +2,6 @@
export {}; export {};
; declare global { ; declare global {
const __VLS_intrinsicElements: __VLS_IntrinsicElements;
const __VLS_directiveBindingRestFields: { instance: null, oldValue: null, modifiers: any, dir: any }; const __VLS_directiveBindingRestFields: { instance: null, oldValue: null, modifiers: any, dir: any };
const __VLS_unref: typeof import('vue').unref; const __VLS_unref: typeof import('vue').unref;
const __VLS_placeholder: any; const __VLS_placeholder: any;
@ -24,10 +23,23 @@ export {};
N2 extends keyof __VLS_GlobalComponents ? N2 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N2] } : N2 extends keyof __VLS_GlobalComponents ? N2 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N2] } :
N3 extends keyof __VLS_GlobalComponents ? N3 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N3] } : N3 extends keyof __VLS_GlobalComponents ? N3 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N3] } :
{ [K in N0]: unknown }; { [K in N0]: unknown };
type __VLS_FunctionalComponentProps<T, K> = type __VLS_FunctionalComponentCtx<T, K> = __VLS_PickNotAny<'__ctx' extends keyof __VLS_PickNotAny<K, {}>
'__ctx' extends keyof __VLS_PickNotAny<K, {}> ? K extends { __ctx?: { props?: infer P } } ? NonNullable<P> : never ? K extends { __ctx?: infer Ctx } ? NonNullable<Ctx> : never : any
: T extends (props: infer P, ...args: any) => any ? P : , T extends (props: any, ctx: infer Ctx) => any ? Ctx : any
{}; >;
type __VLS_FunctionalComponentProps<T, K> = '__ctx' extends keyof __VLS_PickNotAny<K, {}>
? K extends { __ctx?: { props?: infer P } } ? NonNullable<P> : never
: T extends (props: infer P, ...args: any) => any ? P
: {};
type __VLS_FunctionalComponent<T> = (props: (T extends { $props: infer Props } ? Props : {}) & Record<string, unknown>, ctx?: any) => __VLS_Element & {
__ctx?: {
attrs?: any,
slots?: T extends { $slots: infer Slots } ? Slots : Record<string, any>,
emit?: T extends { $emit: infer Emit } ? Emit : {},
props?: (T extends { $props: infer Props } ? Props : {}) & Record<string, unknown>,
expose?: (exposed: T) => void,
}
};
type __VLS_IsFunction<T, K> = K extends keyof T type __VLS_IsFunction<T, K> = K extends keyof T
? __VLS_IsAny<T[K]> extends false ? __VLS_IsAny<T[K]> extends false
? unknown extends T[K] ? unknown extends T[K]
@ -35,13 +47,13 @@ export {};
: true : true
: false : false
: false; : false;
type __VLS_NormalizeComponentEvent<Props, Events, onEvent extends keyof Props, Event extends keyof Events, CamelizedEvent extends keyof Events> = ( type __VLS_NormalizeComponentEvent<Props, Emits, onEvent extends keyof Props, Event extends keyof Emits, CamelizedEvent extends keyof Emits> = (
__VLS_IsFunction<Props, onEvent> extends true __VLS_IsFunction<Props, onEvent> extends true
? Props ? Props
: __VLS_IsFunction<Events, Event> extends true : __VLS_IsFunction<Emits, Event> extends true
? { [K in onEvent]?: Events[Event] } ? { [K in onEvent]?: Emits[Event] }
: __VLS_IsFunction<Events, CamelizedEvent> extends true : __VLS_IsFunction<Emits, CamelizedEvent> extends true
? { [K in onEvent]?: Events[CamelizedEvent] } ? { [K in onEvent]?: Emits[CamelizedEvent] }
: Props : Props
) & Record<string, unknown>; ) & Record<string, unknown>;
// fix https://github.com/vuejs/language-tools/issues/926 // fix https://github.com/vuejs/language-tools/issues/926
@ -67,11 +79,16 @@ export {};
} }
> >
>; >;
type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {}; type __VLS_ResolveEmits<
type __VLS_PickFunctionalComponentCtx<T, K> = NonNullable<__VLS_PickNotAny< Comp,
'__ctx' extends keyof __VLS_PickNotAny<K, {}> ? K extends { __ctx?: infer Ctx } ? Ctx : never : any Emits,
, T extends (props: any, ctx: infer Ctx) => any ? Ctx : any TypeEmits = Comp extends { __typeEmits?: infer T } ? unknown extends T ? {} : import('vue').ShortEmitsToObject<T> : {},
>>; NormalizedEmits = __VLS_NormalizeEmits<Emits> extends infer E ? string extends keyof E ? {} : E : never,
> = __VLS_SpreadMerge<NormalizedEmits, TypeEmits>;
type __VLS_ResolveDirectives<T> = {
[K in Exclude<keyof T, keyof __VLS_GlobalDirectives> & string as `v${Capitalize<K>}`]: T[K];
};
type __VLS_PrettifyGlobal<T> = { [K in keyof T as K]: T[K]; } & {};
type __VLS_UseTemplateRef<T> = Readonly<import('vue').ShallowRef<T | null>>; type __VLS_UseTemplateRef<T> = Readonly<import('vue').ShallowRef<T | null>>;
function __VLS_getVForSourceType<T extends number | string | any[] | Iterable<any>>(source: T): [ function __VLS_getVForSourceType<T extends number | string | any[] | Iterable<any>>(source: T): [
@ -87,10 +104,8 @@ export {};
key: keyof T, key: keyof T,
index: number, index: number,
][]; ][];
// @ts-ignore function __VLS_getSlotParameters<S, D extends S>(slot: S, decl?: D):
function __VLS_getSlotParams<T>(slot: T): Parameters<__VLS_PickNotAny<NonNullable<T>, (...args: any[]) => any>>; D extends (...args: infer P) => any ? P : any[];
// @ts-ignore
function __VLS_getSlotParam<T>(slot: T): Parameters<__VLS_PickNotAny<NonNullable<T>, (...args: any[]) => any>>[0];
function __VLS_asFunctionalDirective<T>(dir: T): T extends import('vue').ObjectDirective function __VLS_asFunctionalDirective<T>(dir: T): T extends import('vue').ObjectDirective
? NonNullable<T['created' | 'beforeMount' | 'mounted' | 'beforeUpdate' | 'updated' | 'beforeUnmount' | 'unmounted']> ? NonNullable<T['created' | 'beforeMount' | 'mounted' | 'beforeUpdate' | 'updated' | 'beforeUnmount' | 'unmounted']>
: T extends (...args: any) => any : T extends (...args: any) => any
@ -98,19 +113,10 @@ export {};
: (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown) => void; : (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown) => void;
function __VLS_makeOptional<T>(t: T): { [K in keyof T]?: T[K] }; function __VLS_makeOptional<T>(t: T): { [K in keyof T]?: T[K] };
function __VLS_asFunctionalComponent<T, K = T extends new (...args: any) => any ? InstanceType<T> : unknown>(t: T, instance?: K): function __VLS_asFunctionalComponent<T, K = T extends new (...args: any) => any ? InstanceType<T> : unknown>(t: T, instance?: K):
T extends new (...args: any) => any T extends new (...args: any) => any ? __VLS_FunctionalComponent<K>
? (props: (K extends { $props: infer Props } ? Props : any) & Record<string, unknown>, ctx?: any) => __VLS_Element & {
__ctx?: {
attrs?: any;
slots?: K extends { $slots: infer Slots } ? Slots : any;
emit?: K extends { $emit: infer Emit } ? Emit : any;
expose?(exposed: K): void;
props?: (K extends { $props: infer Props } ? Props : any) & Record<string, unknown>;
}
}
: T extends () => any ? (props: {}, ctx?: any) => ReturnType<T> : T extends () => any ? (props: {}, ctx?: any) => ReturnType<T>
: T extends (...args: any) => any ? T : T extends (...args: any) => any ? T
: (_: {} & Record<string, unknown>, ctx?: any) => { __ctx?: { attrs?: any, expose?: any, slots?: any, emit?: any, props?: {} & Record<string, unknown> } }; : __VLS_FunctionalComponent<{}>;
function __VLS_functionalComponentArgsRest<T extends (...args: any) => any>(t: T): 2 extends Parameters<T>['length'] ? [any] : []; function __VLS_functionalComponentArgsRest<T extends (...args: any) => any>(t: T): 2 extends Parameters<T>['length'] ? [any] : [];
function __VLS_asFunctionalElement<T>(tag: T, endTag?: T): (attrs: T & Record<string, unknown>) => void; function __VLS_asFunctionalElement<T>(tag: T, endTag?: T): (attrs: T & Record<string, unknown>) => void;
function __VLS_asFunctionalSlot<S>(slot: S): S extends () => infer R ? (props: {}) => R : NonNullable<S>; function __VLS_asFunctionalSlot<S>(slot: S): S extends () => infer R ? (props: {}) => R : NonNullable<S>;

BIN
public/flow-chart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

View File

@ -12,4 +12,6 @@ export { invitationApi } from './modules/invitation'
export { depotApi } from './modules/depot' export { depotApi } from './modules/depot'
export { userApi } from './modules/user' export { userApi } from './modules/user'
export { userLoginApi } from './modules/userLogin' export { userLoginApi } from './modules/userLogin'
export { priceTemplateApi } from './modules/priceTemplate' export { priceTemplateApi } from './modules/priceTemplate'
export { filterSetApi } from './modules/filterSet'
export { shopGoodsPublishedApi } from './modules/shopGoodsPublished'

25
src/api/modules/Image.js Normal file
View File

@ -0,0 +1,25 @@
import instance from '../../utils/axios.js'
const ImageApi = {
/**
* 获取商品标准类目接口
*/
getImage: (data) => instance.get('/zhishu/image/getImage', data),
/**
* 用户上传图片接口
*/
imagelicenseUpload: (file) => {
const formData = new FormData();
formData.append('file', file);
return instance.post('/zhishu/image/userUpload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
});
},
}
// 导出 pdd API 对象
export { ImageApi };

View File

@ -9,15 +9,9 @@ export const getProvinces = () => {
return instance.get('/district/provinces'); return instance.get('/district/provinces');
}; };
// 获取运费信息
export const getFreInfo = (templateId) => {
return instance.get(`/district/freInfo/${templateId}`);
};
// 为了向后兼容,也导出整个对象 // 为了向后兼容,也导出整个对象
export const districtApi = { export const districtApi = {
getProvinces, getProvinces,
getFreInfo
}; };
export default districtApi; export default districtApi;

View File

@ -0,0 +1,46 @@
import instance from '../../utils/axios.js'
// 过滤设置相关API
const filterSetApi = {
// 获取过滤设置列表(分页查询)
getFilterSetList: (params) => instance.get('/zhishu/filterSet/list', { params }),
// 获取过滤设置详细信息
getFilterSetById: (id) => instance.get(`/zhishu/filterSet/${id}`),
// 新增过滤设置
addFilterSet: (data) => instance.post('/zhishu/filterSet', data),
// 修改过滤设置
updateFilterSet: (data) => instance.put('/zhishu/filterSet/update', data),
// 删除过滤设置(支持批量删除)
deleteFilterSet: (ids) => {
const idStr = Array.isArray(ids) ? ids.join(',') : ids;
return instance.delete(`/zhishu/filterSet/${idStr}`);
},
// 导出过滤设置列表
exportFilterSet: (data) => instance.post('/zhishu/filterSet/export', data, {
responseType: 'blob'
}),
// 获取导入模板
getImportTemplate: () => instance.post('/zhishu/filterSet/importTemplate', {}, {
responseType: 'blob'
}),
// 上传文件导入
uploadFilterSet: (file) => {
const formData = new FormData();
formData.append('file', file);
return instance.post('/zhishu/filterSet/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
});
}
};
// 导出模块
export { filterSetApi };

View File

@ -0,0 +1,30 @@
import instance from '../../utils/axios.js'
const newUseApi = {
/**
* 新增用户接口
*/
addNewUser: (data) => instance.post('/system/newUser', data),
/**
* 身份证OCR识别接口
*/
cardRedirect: (file) => {
const formData = new FormData();
formData.append('file', file);
return instance.post('/system/newUser/cardRedirect', formData);
},
/**
* 营业执照OCR识别接口
*/
licenseRedirect: (file) => {
const formData = new FormData();
formData.append('file', file);
return instance.post('/system/newUser/licenseRedirect', formData);
}
}
// 导出 pdd API 对象
export { newUseApi };

12
src/api/modules/pdd.js Normal file
View File

@ -0,0 +1,12 @@
import instance from '../../utils/axios.js'
const pddApi = {
/**
* 获取商品标准类目接口
*/
getCats: () => instance.get('/huidiao/pdd/getCats'),
}
// 导出 pdd API 对象
export { pddApi };

View File

@ -0,0 +1,81 @@
import instance from '../../utils/axios.js'
// 价格模板相关API
export const priceTemplateApi = {
/**
* 获取价格模板列表
* @param {Object} params 查询参数
* @returns {Promise}
*/
getList: (params) => instance.get('/priceTemplate/list', { params }),
/**
* 获取价格模板详情
* @param {number|string} id 价格模板ID
* @returns {Promise}
*/
getDetail: (id) => instance.get(`/priceTemplate/${id}`),
/**
* 根据店铺ID获取价格模板
* @param {number|string} shopId 店铺ID
* @returns {Promise}
*/
getByShopId: (shopId) => instance.get(`/priceTemplate/getByShopId/${shopId}`),
/**
* 新增价格模板
* @param {Object} data 价格模板数据
* @returns {Promise}
*/
create: (data) => instance.post('/priceTemplate', data),
/**
* 修改价格模板
* @param {Object} data 价格模板数据
* @returns {Promise}
*/
update: (data) => instance.put('/priceTemplate', data),
/**
* 删除价格模板
* @param {number|string|Array} ids 价格模板ID或ID数组
* @returns {Promise}
*/
delete: (ids) => instance.delete(`/priceTemplate/${ids}`),
/**
* 导出价格模板
* @param {Object} params 查询参数
* @returns {Promise}
*/
export: (params) => instance.get('//priceTemplate/export', { params }),
/**
* 根据模板计算价格
* @param {Object} data 计算参数
* @returns {Promise}
*/
calculatePrice: (data) => instance.post('/priceTemplate/calculatePrice', data)
}
// 兼容旧的导入方式
export function listPriceTemplate(query) {
return priceTemplateApi.getList(query)
}
export function getPriceTemplate(id) {
return priceTemplateApi.getDetail(id)
}
export function delPriceTemplate(ids) {
return priceTemplateApi.delete(ids)
}
export function addPriceTemplate(data) {
return priceTemplateApi.create(data)
}
export function updatePriceTemplate(data) {
return priceTemplateApi.update(data)
}

View File

@ -0,0 +1,49 @@
// 价格模板相关类型定义
// 价格调整项
export interface PriceAdjustment {
minPrice?: number;
maxPrice?: number;
adjustPercent?: number;
adjustAmount?: number;
}
// 价格模板数据对象
export interface PriceTemplateVO {
id: number | string;
templateName: string;
priceType: string;
proportion?: number;
addAmount?: number;
status?: string;
lowPrice?: number;
highPrice?: number;
rangePrice?: string;
priceAdjustments?: PriceAdjustment[];
}
// 价格模板查询参数
export interface PriceTemplateQuery {
pageNum: number;
pageSize: number;
templateName?: string;
priceType?: string;
proportion?: string | number;
addAmount?: string | number;
status?: string;
params?: Record<string, any>;
}
// 价格模板表单数据
export interface PriceTemplateForm {
id?: number | string;
templateName?: string;
priceType: string;
proportion: number;
addAmount: number;
status?: string;
lowPrice: number;
highPrice: number;
priceAdjustments: PriceAdjustment[];
rangePrice?: string | PriceAdjustment[];
}

View File

@ -62,3 +62,34 @@ export function delShelves(id) {
method: 'delete' method: 'delete'
}) })
} }
/**
* 查询仓库信息列表
*/
export function getDepotNameList(phoneNumber) {
return request({
url: '/shelves/namelist',
method: 'get',
params: { phoneNumber }
})
}
/**
* 查询货架名称列表
*/
export function getShelvesNameList(depotId) {
return request({
url: `/shelves/sheNamelist/${depotId}`,
method: 'get'
})
}
/**
* 查询货位名称列表
*/
export function getFreightNameList(sheId) {
return request({
url: `/shelves/freNamelist/${sheId}`,
method: 'get'
})
}

View File

@ -0,0 +1,274 @@
import instance from '../../utils/axios.js'
/**
* 商品管理相关接口
*/
// 获取商品列表
export const getShopGoodsList = async (params = {}) => {
// 构造查询参数
const queryParams = new URLSearchParams();
// 添加分页参数
if (params.pageNum) queryParams.append('pageNum', params.pageNum);
if (params.pageSize) queryParams.append('pageSize', params.pageSize);
// 添加搜索参数
if (params.itemNumber) queryParams.append('itemNumber', params.itemNumber);
if (params.goodsName) queryParams.append('goodsName', params.goodsName);
if (params.artNo) queryParams.append('artNo', params.artNo);
if (params.originalArtNo) queryParams.append('originalArtNo', params.originalArtNo);
if (params.isbn) queryParams.append('isbn', params.isbn);
if (params.conditionCode) queryParams.append('conditionCode', params.conditionCode);
if (params.IsBookPicNull) queryParams.append('IsBookPicNull', params.IsBookPicNull);
if (params.minprice) queryParams.append('minprice', params.minprice);
if (params.maxprice) queryParams.append('maxprice', params.maxprice);
if (params.mininventory) queryParams.append('mininventory', params.mininventory);
if (params.maxinventory) queryParams.append('maxinventory', params.maxinventory);
if (params.deliveryAddress) queryParams.append('deliveryAddress', params.deliveryAddress);
if (params.cargoAreaIds) queryParams.append('cargoAreaIds', params.cargoAreaIds);
if (params.isExistIsbn) queryParams.append('isExistIsbn', params.isExistIsbn);
if (params.isQueryAllGoods) queryParams.append('isQueryAllGoods', params.isQueryAllGoods);
if (params.isJoinDistribution) queryParams.append('isJoinDistribution', params.isJoinDistribution);
const url = `/zhishu/shopGoods/list?${queryParams.toString()}`;
return instance.get(url);
};
// 获取商品详情
export const getShopGoodsDetail = (id) => {
return instance.get(`/zhishu/shopGoods/detailShopGoods/${id}`);
};
// 新增商品
export const addShopGoods = (data) => {
return instance.post('/zhishu/shopGoods/add', data);
};
// 修改商品
export const updateShopGoods = (data) => {
return instance.post('/zhishu/shopGoods/update', data);
};
// 删除商品
export const deleteShopGoods = (ids, isProSynch = true) => {
const idsStr = Array.isArray(ids) ? ids.join(',') : ids;
return instance.delete(`/zhishu/shopGoods/${idsStr}?isProSynch=${isProSynch}`);
};
// 导出商品列表
export const exportShopGoods = (params) => {
return instance.post('/zhishu/shopGoods/export', params, {
responseType: 'blob'
});
};
// 导入商品Excel
export const importShopGoodsExcel = (file, depotId) => {
const formData = new FormData();
formData.append('file', file);
formData.append('depotId', depotId);
return instance.post('/zhishu/shopGoods/importExcel', formData);
};
// 上传商品图片
export const uploadShopGoodsImage = (file) => {
const formData = new FormData();
formData.append('file', file);
return instance.post('/zhishu/shopGoods/uploadImages', formData);
};
// 发布商品到店铺
export const publishGoodsToShop = (data) => {
return instance.post('/zhishu/shopGoods/goodsAdd', data);
};
// 获取库存变更日志
export const getStockChangeLog = (id) => {
return instance.get(`/zhishu/shopGoods/stockLog/${id}`);
};
// 批量修改货区
export const batchUpdateCargoArea = (data) => {
return instance.put('/zhishu/shopGoods/batchUpdateAre', data);
};
// 根据商品条码查询商品信息
export const getProductByBarcode = (barcode) => {
return instance.get(`/zhishu/shopGoods/info?barcode=${barcode}`);
};
// 提交商品信息
export const submitProduct = (data) => {
return instance.post('/zhishu/shopGoods/submit', data);
};
// 版权页上传
export const submitFromCopyrightPage = (data) => {
return instance.post('/zhishu/shopGoods/submitFromCopyrightPage', data);
};
// 重复书籍检查
export const checkRepeatBook = (data) => {
return instance.post('/zhishu/shopGoods/repeatBook', data);
};
// 孔夫子比价搜索
export const searchKongfzBooks = (params) => {
const queryParams = new URLSearchParams();
if (params.keyword) queryParams.append('keyword', params.keyword);
if (params.searchType) queryParams.append('searchType', params.searchType);
if (params.sortType) queryParams.append('sortType', params.sortType);
if (params.conditionValue) queryParams.append('conditionValue', params.conditionValue);
if (params.cookies) queryParams.append('cookies', params.cookies);
if (params.publisher) queryParams.append('publisher', params.publisher);
if (params.author) queryParams.append('author', params.author);
return instance.get(`/zhishu/shopGoods/kongfz/search?${queryParams.toString()}`);
};
// 根据书名获取作者和出版社信息
export const getAuthorAndPublisher = (keyword, cookies) => {
return instance.get(`/zhishu/shopGoods/getAuthorAndPublisher?keyword=${keyword}&cookies=${cookies}`);
};
// 小程序上书记录
export const getXcxShopGoods = (phoneNumber, pageNum = 1, pageSize = 10, date) => {
let url = `/zhishu/shopGoods/xcx/${phoneNumber}?pageNum=${pageNum}&pageSize=${pageSize}`;
if (date) url += `&date=${date}`;
return instance.get(url);
};
// 查询获取对应商品数据
export const getGoodsData = (code, userId, pageNum = 1, pageSize = 10, date) => {
let url = `/zhishu/shopGoods/getGoodsData?code=${code}&userId=${userId}&pageNum=${pageNum}&pageSize=${pageSize}`;
if (date) url += `&date=${date}`;
return instance.get(url);
};
// 批量移动商品位置
export const batchMoveItems = (itemIds, newLocationCode, userId) => {
const params = new URLSearchParams();
itemIds.forEach(id => params.append('itemIds', id));
params.append('newLocationCode', newLocationCode);
params.append('userId', userId);
return instance.post('/zhishu/shopGoods/batchMoveItems', params);
};
// 初始化库存到Redis
export const batchInitInventoryToRedis = () => {
return instance.get('/zhishu/shopGoods/batchInitInventoryToRedis');
};
// 查询库存
export const queryInventory = (shopGoodsId) => {
return instance.get(`/zhishu/shopGoods/queryInventory?shopGoodsId=${shopGoodsId}`);
};
// 操作库存
export const operatingInventory = (data) => {
return instance.post('/zhishu/shopGoods/operatingInventory', data);
};
// 拉取孔夫子/万里牛商品
export const synchronizationGoods = (shopId, shopType) => {
let url = `/zhishu/shopGoods/synchronizationGoods?shopId=${shopId}`;
if (shopType) url += `&shopType=${shopType}`;
return instance.get(url);
};
// 比对存入表格
export const goodsComparison = (data) => {
return instance.post('/zhishu/shopGoods/goodsComparison', data);
};
// 分批比对商品
export const batchGoodsComparison = (data) => {
return instance.post('/zhishu/shopGoods/batchGoodsComparison', data);
};
// 根据用户选择货号规则将商品存入数据库
export const saveShopGoodsInDb = (data) => {
return instance.post('/zhishu/shopGoods/saveShopGoodsInDb', data);
};
// 随机修改孔夫子货号(仅测试使用)
export const randomUpdateArtNo = (userId, shopId) => {
return instance.get(`/zhishu/shopGoods/randomUpdateArtNo?userId=${userId}&shopId=${shopId}`);
};
// 通过货号查询仓库信息
export const getDepotIds = (artNo, userId) => {
return instance.get(`/zhishu/shopGoods/getDepotIds?artNo=${artNo}&userId=${userId}`);
};
// 修改商品价格
export const editShopGoodsPrice = (data) => {
return instance.post('/zhishu/shopGoods/editShopGoodsPrice', data);
};
// 通过平台订单Id查询库存操作日志
export const queryStockChangeLogByOrderSn = (orderSn, type) => {
return instance.get(`/zhishu/shopGoods/queryStockChangeLogByOrderSn?orderSn=${orderSn}&type=${type}`);
};
// 操作下架商品
export const operatingSoldOut = (data) => {
return instance.post('/zhishu/shopGoods/operatingSoldOut', data);
};
// 通过userId查询对应用户商品表数据条数
export const queryGoodsCountByUserId = (userId) => {
return instance.get(`/zhishu/shopGoods/queryGoodsCountByUserId?userId=${userId}`);
};
// 通过userId查询对应用户
export const queryUserByUserId = (userId) => {
return instance.get(`/zhishu/shopGoods/queryUserIdByUserId?userId=${userId}`);
};
// 批量修改店铺商品下架/改价
export const updateShopGoodsPrice = (data) => {
return instance.post('/zhishu/shopGoods/updateShopGoodsPrice', data);
};
// 为了向后兼容,也导出整个对象
export const shopGoodsApi = {
getShopGoodsList,
getShopGoodsDetail,
addShopGoods,
updateShopGoods,
deleteShopGoods,
exportShopGoods,
importShopGoodsExcel,
uploadShopGoodsImage,
publishGoodsToShop,
getStockChangeLog,
batchUpdateCargoArea,
getProductByBarcode,
submitProduct,
submitFromCopyrightPage,
checkRepeatBook,
searchKongfzBooks,
getAuthorAndPublisher,
getXcxShopGoods,
getGoodsData,
batchMoveItems,
batchInitInventoryToRedis,
queryInventory,
operatingInventory,
synchronizationGoods,
goodsComparison,
batchGoodsComparison,
saveShopGoodsInDb,
randomUpdateArtNo,
getDepotIds,
editShopGoodsPrice,
queryStockChangeLogByOrderSn,
operatingSoldOut,
queryGoodsCountByUserId,
queryUserByUserId,
updateShopGoodsPrice
};
export default shopGoodsApi;

View File

@ -0,0 +1,100 @@
import instance from '../../utils/axios.js'
/**
* 已发布商品管理相关接口
*/
// 获取已发布商品列表
export const getShopGoodsPublishedList = async (params = {}) => {
// 构造查询参数
const queryParams = new URLSearchParams();
// 添加分页参数
if (params.pageNum) queryParams.append('pageNum', params.pageNum);
if (params.pageSize) queryParams.append('pageSize', params.pageSize);
// 添加搜索参数
if (params.shopId) queryParams.append('shopId', params.shopId);
if (params.isbn) queryParams.append('isbn', params.isbn);
if (params.conditionCode) queryParams.append('conditionCode', params.conditionCode);
if (params.goodsName) queryParams.append('goodsName', params.goodsName);
if (params.shopName) queryParams.append('shopName', params.shopName);
if (params.platformId) queryParams.append('platformId', params.platformId);
if (params.status) queryParams.append('status', params.status);
if (params.itemNumber) queryParams.append('itemNumber', params.itemNumber);
if (params.price) queryParams.append('price', params.price);
if (params.createdBy) queryParams.append('createdBy', params.createdBy);
const url = `/zhishu/shopGoodsPublished/list?${queryParams.toString()}`;
return instance.get(url);
};
// 获取已发布商品详情
export const getShopGoodsPublishedDetail = (id) => {
return instance.get(`/zhishu/shopGoodsPublished/${id}`);
};
// 新增已发布商品记录
export const addShopGoodsPublished = (data) => {
return instance.post('/zhishu/shopGoodsPublished', data);
};
// 修改已发布商品记录
export const updateShopGoodsPublished = (data) => {
return instance.put('/zhishu/shopGoodsPublished', data);
};
// 删除已发布商品记录
export const deleteShopGoodsPublished = (ids) => {
const idsStr = Array.isArray(ids) ? ids.join(',') : ids;
return instance.delete(`/zhishu/shopGoodsPublished/${idsStr}`);
};
// 导出已发布商品列表
export const exportShopGoodsPublished = (params) => {
return instance.post('/zhishu/shopGoodsPublished/export', params, {
responseType: 'blob'
});
};
// 拼多多添加商品记录(无需权限验证)
export const pddAddGoods = (platformId, goodsId, shopId, userId) => {
return instance.get(`/zhishu/shopGoodsPublished/pddAdd/${platformId}/${goodsId}/${shopId}/${userId}`);
};
// 根据店铺ID查询商品列表
export const getGoodsListByShopId = (shopId, platformIds) => {
return instance.post('/zhishu/shopGoodsPublished/getListByShopId', platformIds, {
params: { shopId }
});
};
// 商品发布驳回-类目修改cat_id
export const updateCatId = (shopType, mallId, platformId) => {
return instance.get('/zhishu/shopGoodsPublished/uodateCatId', {
params: { shopType, mallId, platformId }
});
};
// 根据店铺Id和商品Id删除失败的商品
export const deleteFailedGoods = (shopType, mallId, platformId) => {
return instance.get('/zhishu/shopGoodsPublished/delShopGoodsPublished', {
params: { shopType, mallId, platformId }
});
};
// 为了向后兼容,也导出整个对象
export const shopGoodsPublishedApi = {
getShopGoodsPublishedList,
getShopGoodsPublishedDetail,
addShopGoodsPublished,
updateShopGoodsPublished,
deleteShopGoodsPublished,
exportShopGoodsPublished,
pddAddGoods,
getGoodsListByShopId,
updateCatId,
deleteFailedGoods
};
export default shopGoodsPublishedApi;

View File

@ -0,0 +1,52 @@
import instance from '../../utils/axios.js'
const userRechargeApi = {
/**
* 查询用户充值列表分页
*/
getUserRechargeList: (params) => instance.get('/zhishu/userRecharge/list', { params }),
/**
* 导出用户充值列表
*/
exportUserRecharge: (data) => instance.post('/zhishu/userRecharge/export', data, {
responseType: 'blob'
}),
/**
* 获取用户充值详细信息
*/
getUserRechargeById: (id) => instance.get(`/zhishu/userRecharge/${id}`),
/**
* 新增用户充值
*/
addUserRecharge: (data) => instance.post('/zhishu/userRecharge', data),
/**
* 用户充值生成支付二维码
*/
userRecharge: (data) => instance.post('/zhishu/userRecharge/userRecharge', data),
/**
* 检查充值任务状态
*/
checkTask: (id) => instance.get(`/zhishu/userRecharge/checkTask/${id}`),
/**
* 将充值状态修改为错误
*/
editRechargeToError: (id) => instance.get(`/zhishu/userRecharge/editRechargeToError/${id}`),
/**
* 修改用户充值
*/
updateUserRecharge: (data) => instance.put('/zhishu/userRecharge', data),
/**
* 删除用户充值
*/
deleteUserRecharge: (ids) => instance.delete(`/zhishu/userRecharge/${ids.join(',')}`)
};
export { userRechargeApi };

View File

@ -96,6 +96,21 @@ const menuData = shallowRef([
title: '自营书品', title: '自营书品',
path: '/book/shopGoods', path: '/book/shopGoods',
// permission: 'book:shopGoods:view' // permission: 'book:shopGoods:view'
},
{
title: '书品中心',
path: '/book/shopGoodsAll',
// permission: 'book:shopGoodsAll:view'
},
{
title: '过滤设置',
path: '/book/filterSet',
// permission: 'book:filterSet:view'
},
{
title: '已发布书品管理',
path: '/book/shopGoodsPublished'
// permission: 'book:shopGoodsPublished:view'
} }
] ]
}, },
@ -165,6 +180,28 @@ const menuData = shallowRef([
} }
] ]
}, },
{
title: '钱包',
path: '/purse',
icon: TrendCharts,
children: [
{
title: '用户充值',
path: '/purse/userRecharge',
// permission: 'purse:userRecharge:view'
}
]
},
{
title: '升级完整版',
path: '/NewUser',
children: [
{
title: '升级完整版',
path: '/NewUser'
}
]
},
{ {
title: '监控中心', title: '监控中心',
path: '/monitor', path: '/monitor',

View File

@ -2,157 +2,185 @@ import { createRouter, createWebHistory } from 'vue-router'
import { getUserPermissions } from '@/utils/permission' import { getUserPermissions } from '@/utils/permission'
const routes = [{ const routes = [{
path: '/', path: '/',
component: () => import('@/layout/Index.vue'), component: () => import('@/layout/Index.vue'),
children: [{ children: [{
path: '', path: '',
component: () => import('@/components/TabsView.vue'), component: () => import('@/components/TabsView.vue'),
meta: {noLayout: true}, meta: { noLayout: true },
children: [ children: [
{ {
path: '/welcome', path: '/welcome',
component: () => import('@/views/Welcome/Index.vue'), component: () => import('@/views/Welcome/Index.vue'),
meta: { title: '欢迎' } meta: { title: '欢迎' }
}, },
// 入驻配置 // 入驻配置
{ {
path: '/SettledConfig/list', path: '/SettledConfig/list',
component: () => import('@/views/SettledConfig/List.vue'), component: () => import('@/views/SettledConfig/List.vue'),
meta: { title: '配置列表', permission: 'settled:config:list' } meta: { title: '配置列表', permission: 'settled:config:list' }
}, },
{ {
path: '/SettledConfig/memberRecord', path: '/SettledConfig/memberRecord',
component: () => import('@/views/SettledConfig/MemberRecord.vue'), component: () => import('@/views/SettledConfig/MemberRecord.vue'),
meta: { title: '会员开通记录', permission: 'settled:member:record' } meta: { title: '会员开通记录', permission: 'settled:member:record' }
}, },
// 用户管理 // 用户管理
{ {
path: '/user/list', path: '/user/list',
component: () => import('@/views/User/List.vue'), component: () => import('@/views/User/List.vue'),
meta: { title: '用户列表', permission: 'user:list:view' } meta: { title: '用户列表', permission: 'user:list:view' }
}, },
{ {
path: '/user/role', path: '/user/role',
component: () => import('@/views/User/Role.vue'), component: () => import('@/views/User/Role.vue'),
meta: { title: '角色管理', permission: 'user:role:manage' } meta: { title: '角色管理', permission: 'user:role:manage' }
}, },
{ {
path: '/user/permission', path: '/user/permission',
component: () => import('@/views/User/Permission.vue'), component: () => import('@/views/User/Permission.vue'),
meta: { title: '权限管理', permission: 'user:permission:manage' } meta: { title: '权限管理', permission: 'user:permission:manage' }
}, },
// 邀请管理 // 邀请管理
{ {
path: '/invitation/list', path: '/invitation/list',
component: () => import('@/views/Invitation/List/index.vue'), component: () => import('@/views/Invitation/List/index.vue'),
meta: { title: '邀请列表', permission: 'invitation:list:view' } meta: { title: '邀请列表', permission: 'invitation:list:view' }
}, },
// 店铺管理 // 店铺管理
{ {
path: '/shop/list', path: '/shop/list',
component: () => import('@/views/Shop/index.vue'), component: () => import('@/views/Shop/index.vue'),
meta: { title: '店铺列表', permission: 'shop:list:view' } meta: { title: '店铺列表', permission: 'shop:list:view' }
}, },
// 选品管理 // 选品管理
{ {
path: '/book/selection/center', path: '/book/selection/center',
component: () => import('@/views/baseInfo/index.vue'), component: () => import('@/views/baseInfo/index.vue'),
meta: { title: '选品中心', permission: 'book:selection:view' } meta: { title: '选品中心', permission: 'book:selection:view' }
}, },
// 仓库管理 // 仓库管理
{ {
path: '/warehouse/depot/list', path: '/warehouse/depot/list',
component: () => import('@/views/Warehouse/Depot/List.vue'), component: () => import('@/views/Warehouse/Depot/List.vue'),
meta: { title: '货区管理', permission: 'warehouse:depot:view' } meta: { title: '货区管理', permission: 'warehouse:depot:view' }
}, },
// 工具管理 // 工具管理
{ {
path: '/tools/cards/list', path: '/tools/cards/list',
component: () => import('@/views/Tools/Cards/List.vue'), component: () => import('@/views/Tools/Cards/List.vue'),
meta: { title: '卡密列表', permission: 'cards:list:view' } meta: { title: '卡密列表', permission: 'cards:list:view' }
}, },
{ {
path: '/tools/cards/activeCardsList', path: '/tools/cards/activeCardsList',
component: () => import('@/views/Tools/Cards/ActiveCardsList.vue'), component: () => import('@/views/Tools/Cards/ActiveCardsList.vue'),
meta: { title: '活跃卡密列表', permission: 'cards:active:view' } meta: { title: '活跃卡密列表', permission: 'cards:active:view' }
}, },
// 审核管理 // 审核管理
{ {
path: '/examine/violation/list', path: '/examine/violation/list',
component: () => import('@/views/Examine/Violation/List.vue'), component: () => import('@/views/Examine/Violation/List.vue'),
meta: { title: '违规列表' } meta: { title: '违规列表' }
}, },
// 日志管理 // 日志管理
{ {
path: '/log/runningLog/list', path: '/log/runningLog/list',
component: () => import('@/views/Log/RunningLog/List.vue'), component: () => import('@/views/Log/RunningLog/List.vue'),
meta: { title: '运行日志', permission: 'log:running:view' } meta: { title: '运行日志', permission: 'log:running:view' }
}, },
// 任务管理 // 任务管理
{ {
path: '/task/list', path: '/task/list',
component: () => import('@/views/Task/List.vue'), component: () => import('@/views/Task/List.vue'),
meta: { title: '任务列表', permission: 'task:list:view' } meta: { title: '任务列表', permission: 'task:list:view' }
}, },
// 功能模块 // 功能模块
{ {
path: '/useModule/vas/list', path: '/useModule/vas/list',
component: () => import('@/views/UseModule/Vas/List.vue'), component: () => import('@/views/UseModule/Vas/List.vue'),
meta: { title: '服务列表', permission: 'vas:list:view' } meta: { title: '服务列表', permission: 'vas:list:view' }
}, },
// 监控中心 // 监控中心
{ {
path: '/monitor/dashboard', path: '/monitor/dashboard',
component: () => import('@/views/Monitor/Dashboard.vue'), component: () => import('@/views/Monitor/Dashboard.vue'),
meta: { title: '监控大屏', permission: 'monitor:dashboard:view' } meta: { title: '监控大屏', permission: 'monitor:dashboard:view' }
}, },
// 物流模板 // 物流模板
{ {
path: '/warehouse/logistics', path: '/warehouse/logistics',
component: () => import('@/views/logistics/index.vue'), component: () => import('@/views/logistics/index.vue'),
// meta: { title: '物流模板', permission: 'logistics:view' } // meta: { title: '物流模板', permission: 'logistics:view' }
meta: { title: '物流模板' } meta: { title: '物流模板' }
}, },
{ {
path: '/shop/priceTemplate', path: '/shop/priceTemplate',
component: () => import('@/views/PriceTemplate/index.vue'), component: () => import('@/views/PriceTemplate/index.vue'),
// meta: { title: '价格模板', permission: 'priceTemplate:list:view' } // meta: { title: '价格模板', permission: 'priceTemplate:list:view' }
meta: { title: '价格模板' } meta: { title: '价格模板' }
}, },
{ {
path: '/book/shopGoods', path: '/book/shopGoods',
component: () => import('@/views/shopGoods/index.vue'), component: () => import('@/views/shopGoods/index.vue'),
// meta: { title: '自营书品', permission: 'book:shopGoods:view' } // meta: { title: '自营书品', permission: 'book:shopGoods:view' }
meta: { title: '自营书品'} meta: { title: '自营书品' }
} },
{
path: '/book/shopGoodsAll',
component: () => import('@/views/shopGoodsAll/index.vue'),
// meta: { title: '自营书品', permission: 'book:shopGoods:view' }
meta: { title: '书品中心' }
},
{
path: '/book/filterSet',
component: () => import('@/views/filterSet/index.vue'),
// meta: { title: '过滤设置', permission: 'book:filterSet:view' }
meta: { title: '过滤设置' }
},
{
path: '/book/shopGoodsPublished',
component: () => import('@/views/shopGoodsPublished/index.vue'),
// meta: { title: '已发布书品管理', permission: 'book:shopGoodsPublished:view' }
meta: { title: '已发布书品管理' }
},
{
path: '/NewUser',
component: () => import('@/views/NewUser/index.vue'),
meta: { title: '升级完整版' }
},
{
path: '/purse/userRecharge',
component: () => import('@/views/UserRecharge/index.vue'),
meta: { title: '用户充值' }
}
] ]
}] }]
}, },
{ {
path: '/login', path: '/login',
component: () => import('@/views/Login/Index.vue'), component: () => import('@/views/Login/Index.vue'),
meta: { noLayout: true,public: true } meta: { noLayout: true, public: true }
}, },
{ {
path: '/redirectUrl', path: '/redirectUrl',
component: () => import('@/views/redirectUrl/index.vue'), component: () => import('@/views/redirectUrl/index.vue'),
meta: { noLayout: true, title: '用户注册', public: true } meta: { noLayout: true, title: '用户注册', public: true }
}, },
] ]
// 定义 路由 // 定义 路由
const router = createRouter({history: createWebHistory(),routes}) const router = createRouter({ history: createWebHistory(), routes })
// 路由权限守卫 // 路由权限守卫
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
// 检查路由是否需要权限 // 检查路由是否需要权限
if (to.meta && to.meta.permission) { if (to.meta && to.meta.permission) {
const userPermissions = getUserPermissions() const userPermissions = getUserPermissions()
const requiredPermission = to.meta.permission const requiredPermission = to.meta.permission
if (userPermissions.includes(requiredPermission)) { if (userPermissions.includes(requiredPermission)) {
next() next()
} else { } else {

483
src/views/NewUser/index.vue Normal file
View File

@ -0,0 +1,483 @@
<template>
<div class="settle-in-container">
<!-- 主页面内容 -->
<div class="main-content">
<h1 class="welcome-title">升级完整版</h1>
<p class="welcome-desc">成为我们的合作伙伴共创美好未来</p>
<el-button type="primary" size="large" @click="dialogVisible = true" class="apply-btn">点击升级</el-button>
</div>
<!-- 申请入驻对话框 -->
<el-dialog title="完善信息" v-model="dialogVisible" width="50%" :before-close="handleClose">
<el-form ref="settleForm" :model="form" :rules="rules" label-width="120px">
<el-form-item label="身份证正反面" prop="cardIdentity" :error="cartInfo">
<el-upload style="margin-right: 40px" class="avatar-uploader" :auto-upload="false" :show-file-list="false"
:on-change="handleCartFrontChange" :before-upload="beforeAvatarUpload">
<img v-if="cardFronUrl" :src="cardFronUrl" class="avatar" />
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
<template #tip>
<div class="upload-tip">请上传身份证正面</div>
</template>
</el-upload>
<el-upload class="avatar-uploader" :auto-upload="false" :show-file-list="false"
:on-change="handleCartSideChange" :before-upload="beforeAvatarUpload">
<img v-if="cartSideUrl" :src="cartSideUrl" class="avatar" />
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
<template #tip>
<div class="upload-tip">请上传身份证反面</div>
</template>
</el-upload>
</el-form-item>
<el-form-item label="联系人" prop="contactPerson">
<el-input v-model="form.contactPerson" disabled="true" placeholder="联系人姓名"></el-input>
</el-form-item>
<el-form-item label="联系电话" prop="contactPhone">
<el-input v-model="form.contactPhone" placeholder="请输入联系电话"></el-input>
</el-form-item>
<el-form-item label="电子邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入电子邮箱"></el-input>
</el-form-item>
<el-form-item label="营业执照" prop="license" :error="licenseInfo">
<el-upload class="avatar-uploader" :auto-upload="false" :show-file-list="false"
:on-change="handleLicenseChange" :before-upload="beforeAvatarUpload">
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
<template #tip>
<div class="upload-tip">请上传营业执照</div>
</template>
</el-upload>
</el-form-item>
<el-form-item style="display: none" label="营业执照名称:" prop="licenseName">
<el-input v-model="form.licenseName" placeholder="请输入营业执照名称"></el-input>
</el-form-item>
<el-form-item label="注册号:" prop="licenseNumber">
<el-input v-model="form.licenseNumber" disabled="true" placeholder="营业执照注册号"></el-input>
</el-form-item>
<el-form-item label="企业名称" prop="companyName">
<el-input v-model="form.companyName" disabled="true" placeholder="企业全称"></el-input>
</el-form-item>
<el-form-item label="店铺地址" prop="adress">
<el-input v-model="form.adress" disabled="true" placeholder="店铺地址"></el-input>
</el-form-item>
<el-form-item label="企业类型" prop="companyType">
<el-select v-model="form.companyType" placeholder="请选择企业类型">
<el-option label="有限责任公司" value="1"></el-option>
<el-option label="股份有限公司" value="2"></el-option>
<el-option label="个人独资企业" value="3"></el-option>
<el-option label="合伙企业" value="4"></el-option>
</el-select>
</el-form-item>
<el-form-item label="营业执照过期时间" prop="licenseTime" label-width="150">
<el-date-picker v-model="form.licenseTime" date-format="YYYY/MM/DD" value-format="YYYY/MM/DD" type="date"
placeholder="date" />
</el-form-item>
<el-form-item label="经营许可证" prop="businessLicense">
<el-upload class="avatar-uploader" :auto-upload="false" :show-file-list="false"
:on-change="handleBusinessLicenseChange" :before-upload="beforeAvatarUpload">
<img v-if="licenseImage" :src="licenseImage" class="avatar" />
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
<template #tip>
<div class="upload-tip">请上传经营许可证</div>
</template>
</el-upload>
</el-form-item>
<el-form-item label="经营许可证过期时间" prop="businessLicenseTime" label-width="150">
<el-date-picker v-model="form.businessLicenseTime" date-format="YYYY/MM/DD" value-format="YYYY/MM/DD"
type="date" placeholder="date" />
</el-form-item>
<el-form-item label="出版物许可证证照核实方式" prop="remark">
<el-input type="textarea" :rows="3" v-model="form.remark" placeholder="请输入其他需要说明的信息"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { Plus } from '@element-plus/icons-vue'
import { newUseApi } from '@/api/modules/newUser.js'
import { ImageApi } from '@/api/modules/Image.js'
//
const settleForm = ref()
// headersaxios
//
const cardFronUrl = ref('')
//
const cartSideUrl = ref('')
//
const imageUrlOld = ref('')
const imageUrl = ref('')
const licenseImageOld = ref('')
const licenseImage = ref('')
const cartUrl = ref([])
const cartInfo = ref('')
const licenseInfo = ref('')
//
const handleCartFrontSuccess = async (res, file) => {
try {
cartInfo.value = res.data?.message || '';
form.value.contactPerson = res.data?.name || '';
if (res.data?.url) {
const oldUrl = res.data.url;
const response = await imageApi.getImage(oldUrl);
cardFronUrl.value = response.data;
cartUrl.value[0] = oldUrl;
}
} catch (error) {
ElMessage.error('身份证正面处理失败');
console.error('身份证正面处理错误:', error);
}
}
//
const handleCartSideSuccess = async (res, file) => {
try {
cartInfo.value = res.data?.message || '';
if (res.data?.url) {
const oldUrl = res.data.url;
const response = await imageApi.getImage(oldUrl);
cartSideUrl.value = response.data;
cartUrl.value = [cartUrl.value[0] || '', oldUrl];
}
} catch (error) {
ElMessage.error('身份证反面处理失败');
console.error('身份证反面处理错误:', error);
}
}
//
const handleAvatarSuccess = async (res, file) => {
try {
imageUrlOld.value = res.data?.url || '';
if (imageUrlOld.value) {
const response = await imageApi.getImage(imageUrlOld.value);
imageUrl.value = response.data;
}
form.value.companyName = res.data?.name || '';
form.value.licenseNumber = res.data?.regNum || '';
form.value.adress = res.data?.address || '';
if (res.data?.period) {
form.value.licenseTime = res.data.period;
}
licenseInfo.value = res.data?.message || '';
} catch (error) {
ElMessage.error('营业执照处理失败');
console.error('营业执照处理错误:', error);
}
}
//
const handleLicenseSuccess = async (res, file) => {
try {
licenseImageOld.value = res.data?.url || '';
licenseImage.value = res.data?.url || '';
} catch (error) {
ElMessage.error('经营许可证处理失败');
console.error('经营许可证处理错误:', error);
}
}
//
const handleCartFrontChange = async (file) => {
try {
const response = await newUseApi.cardRedirect(file.raw);
await handleCartFrontSuccess(response, file);
} catch (error) {
ElMessage.error('身份证正面上传失败');
console.error('身份证正面上传错误:', error);
}
}
//
const handleCartSideChange = async (file) => {
try {
const response = await newUseApi.cardRedirect(file.raw);
await handleCartSideSuccess(response, file);
} catch (error) {
ElMessage.error('身份证反面上传失败');
console.error('身份证反面上传错误:', error);
}
}
//
const handleLicenseChange = async (file) => {
try {
const response = await newUseApi.licenseRedirect(file.raw);
await handleAvatarSuccess(response, file);
} catch (error) {
ElMessage.error('营业执照上传失败');
console.error('营业执照上传错误:', error);
}
}
//
const handleBusinessLicenseChange = async (file) => {
try {
const response = await ImageApi.userUpload(file.raw);
await handleLicenseSuccess(response, file);
} catch (error) {
ElMessage.error('经营许可证上传失败');
console.error('经营许可证上传错误:', error);
}
}
//
const beforeAvatarUpload = (rawFile) => {
if (rawFile.type !== 'image/jpeg' && rawFile.type !== 'image/png') {
ElMessage.error('上传图片只能是 JPG/PNG 格式!')
return false
} else if (rawFile.size / 1024 / 1024 > 2) {
ElMessage.error('上传图片大小不能超过 2MB!')
return false
}
return true
}
//
const dialogVisible = ref(false);
const form = ref({
companyName: '',
contactPerson: '',
contactPhone: '',
email: '',
companyType: '',
cardIdentity: '',
licenseName: '',
licenseNumber: '',
license: '',
remark: '',
adress: '',
businessLicense: '',
licenseTime: '',
businessLicenseTime: '',
});
//
const rules = {
companyName: [
{ required: true, message: '请输入企业名称', trigger: 'blur' }
],
adress: [
{ required: true, message: '请输入店铺地址', trigger: 'blur' }
],
contactPerson: [
{ required: true, message: '请输入联系人姓名' },
{ max: 8, message: '最长8位字符', trigger: 'blur' }
],
contactPhone: [
{ required: true, message: '请输入联系电话', trigger: 'blur' },
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' }
],
email: [
{ required: true, message: '请输入邮箱地址', trigger: 'blur' },
{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
],
companyType: [
{ required: true, message: '请选择企业类型', trigger: 'change' }
],
// licenseName:[
// { required: true, message: '', trigger: 'change' }
// ],
licenseNumber: [
{ required: true, message: '请输入营业执照注册号', trigger: 'change' }
],
license: [
{ required: true, message: '请上传营业执照', trigger: 'change' }
],
businessLicense: [
{ required: true, message: '请上传经营许可证', trigger: 'change' }
],
cardIdentity: [
{ required: true },
{
validator: (rule, value, callback) => {
if (cartUrl.value[0] == null && cartUrl.value[1] == null) {
callback(new Error('请上传身份证正反面照片'));
} else if (cartUrl.value[0] == null) {
callback(new Error('请上传身份证正面照片'));
} else if (cartUrl.value[1] == null) {
callback(new Error('请上传身份证反面照片'));
} else {
callback();
}
},
trigger: 'change'
}
]
};
//
const handleClose = (done) => {
ElMessageBox.confirm('确认关闭?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
resetForm();
done();
}).catch(() => { });
};
//
const submitForm = () => {
if (!settleForm.value) return;
form.value.license = imageUrlOld.value;
form.value.cardIdentity = JSON.stringify(cartUrl.value);
form.value.businessLicense = licenseImageOld.value;
settleForm.value.validate(async (valid) => {
if (valid) {
try {
await newUseApi.addNewUser(form.value);
ElMessage.success('提交成功!');
dialogVisible.value = false;
resetForm();
} catch (error) {
ElMessage.error('提交失败,请重试');
console.error('提交表单错误:', error);
}
} else {
ElMessage.warning('请填写完整信息');
return false;
}
});
};
//
const resetForm = () => {
if (settleForm.value) {
settleForm.value.resetFields();
}
};
</script>
<style scoped>
.settle-in-container {
display: flex;
justify-content: center;
align-items: center;
background-color: #f5f7fa;
min-height: calc(100vh - 120px);
padding: 20px;
}
.main-content {
text-align: center;
padding: 40px;
background: white;
border-radius: 8px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
width: 80%;
max-width: 600px;
margin: 20px;
}
.welcome-title {
font-size: 28px;
color: #303133;
margin-bottom: 16px;
}
.welcome-desc {
font-size: 16px;
color: #909399;
margin-bottom: 40px;
}
.apply-btn {
padding: 12px 36px;
font-size: 16px;
}
/* 响应式调整 */
@media (max-width: 768px) {
.el-dialog {
width: 90% !important;
}
.main-content {
width: 90%;
padding: 20px;
}
.welcome-title {
font-size: 24px;
}
.welcome-desc {
font-size: 14px;
}
}
.avatar-uploader {
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader:hover {
border-color: var(--el-color-primary);
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 140px;
height: 120px;
text-align: center;
}
.upload-tip {
margin-top: 8px;
width: 100%;
/* 与上传区域同宽 */
text-align: center;
/* 文字居中 */
}
</style>
<style scoped>
.avatar-uploader .avatar {
width: 178px;
height: 178px;
display: block;
}
</style>

View File

@ -0,0 +1,982 @@
<template>
<div class="list-container">
<div class="search-area">
<el-form :model="queryParams" inline>
<el-form-item label="模板名称">
<el-input v-model="searchKeyword" placeholder="请输入价格模板名称" clearable @clear="loadPriceTemplateList"
@keyup.enter="handleSearch" />
</el-form-item>
<el-form-item label="价格类型">
<el-select v-model="queryParams.priceType" placeholder="请选择价格类型" clearable>
<el-option v-for="dict in t_price_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
<el-option label="正常" value="0" />
<el-option label="禁用" value="1" />
</el-select>
</el-form-item>
<el-form-item label="增加比例">
<el-input v-model="queryParams.proportion" placeholder="请输入增加比例" clearable @clear="loadPriceTemplateList"
@keyup.enter="handleSearch">
<template #append>%</template>
</el-input>
</el-form-item>
<el-form-item label="增加金额">
<el-input v-model="queryParams.addAmount" placeholder="请输入增加金额" clearable @clear="loadPriceTemplateList"
@keyup.enter="handleSearch">
<template #append></template>
</el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleSearch">搜索</el-button>
<el-button icon="Refresh" @click="handleReset">重置</el-button>
</el-form-item>
</el-form>
</div>
<div class="action-bar">
<div class="action-left">
<el-button type="primary" @click="openPriceTemplateDialog()">新增</el-button>
<el-button type="primary" @click="handleEdit">编辑</el-button>
<el-button type="danger" @click="handleBatchDelete">删除</el-button>
</div>
<div class="action-right">
<RefreshButton @refresh="loadPriceTemplateList" />
</div>
</div>
<el-table v-loading="loading" :data="priceTemplateList" border style="width: 100%" row-key="id"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column prop="id" label="ID" width="80" />
<el-table-column prop="templateName" label="价格模板名称" />
<el-table-column prop="priceType" label="价格类型" width="150">
<template #default="{ row }">
<el-tag :type="row.priceType === '0' ? 'primary' : 'success'">
{{ getPriceTypeText(row.priceType) }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" width="80">
<template #default="{ row }">
<el-tag :type="row.status === '0' ? 'success' : 'danger'">
{{ row.status === '0' ? '正常' : '禁用' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button type="primary" link @click="handleUpdate(row)">
编辑
</el-button>
<el-button type="danger" link @click="handleDelete(row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination-container">
<el-pagination v-model:current-page="queryParams.pageNum" v-model:page-size="queryParams.pageSize"
:page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
</div>
<!-- 添加或修改价格模板对话框 -->
<el-dialog v-if="dialog.visible" :title="dialog.title" v-model="dialog.visible" @close="resetFormData"
width="1000px" append-to-body destroy-on-close class="price-template-dialog">
<el-form ref="priceTemplateFormRef" :model="form" :rules="rules" label-width="80px" class="price-form">
<!-- 模板名称 -->
<el-form-item label="模板名称" prop="templateName" class="form-item-with-tip">
<el-input v-model="form.templateName" placeholder="请输入模板名称" class="template-name-input" />
<div class="form-tip">填写模板名称之后将会在店铺设置中选择此处的价格模板</div>
</el-form-item>
<!-- 价格类型 -->
<el-form-item label="价格类型" prop="priceType" class="form-item-with-tip">
<el-radio-group v-model="form.priceType" class="price-type-radio">
<el-radio v-for="dict in t_price_type" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
<div class="form-tip">
<div>书价就是库存里的商品价格</div>
<div>总价就是书价+仓库运费模板设置的运费</div>
</div>
</el-form-item>
<!-- 价格区间 -->
<el-form-item label="价格区间" class="form-item-with-tip">
<div class="price-range-container">
<el-input-number v-model="form.lowPrice" :min="0.01" :max="99999" :precision="2" controls-position="right"
class="price-input" />
<span class="range-separator"></span>
<el-input-number v-model="form.highPrice" :min="0.01" :max="99999" :precision="2" controls-position="right"
class="price-input" />
</div>
<div class="form-tip">比如填写5和10那么低于5和高于10直接过滤掉</div>
</el-form-item>
<!-- 价格调整规则表格 -->
<div class="price-adjustment-section">
<div class="adjustment-header">
<span class="header-item">价格区间下限()</span>
<span class="header-item">价格区间上限()</span>
<span class="header-item">加点(%)</span>
<span class="header-item">加价()</span>
<span class="header-item">操作</span>
</div>
<div v-for="(item, index) in form.priceAdjustments" :key="index" class="adjustment-row">
<el-input v-model="item.minPrice" placeholder="请输入百分比" class="adjustment-input" type="number">
<template #append></template>
</el-input>
<el-input v-model="item.maxPrice" placeholder="请输入固定金额" class="adjustment-input" type="number">
<template #append></template>
</el-input>
<el-input v-model="item.adjustPercent" placeholder="请输入百分比" class="adjustment-input" type="number">
<template #append>%</template>
</el-input>
<el-input v-model="item.adjustAmount" placeholder="请输入固定金额" class="adjustment-input" type="number">
<template #append></template>
</el-input>
<div class="adjustment-actions">
<el-button v-if="index === form.priceAdjustments.length - 1 && form.priceAdjustments.length < 10"
type="primary" link size="small" @click="addAdjustment" class="action-text-btn">
增加条数
</el-button>
<el-button v-if="form.priceAdjustments.length > 1" type="danger" link size="small"
@click="removeAdjustment(index)" class="action-text-btn">
删除
</el-button>
</div>
</div>
</div>
<!-- 提示信息 -->
<div class="notice-section">
<p class="notice-red">注意只填一行则全部根据该区间走</p>
<p class="notice-orange">示例成本*加点(%)+成本+加价()</p>
<p class="notice-orange">例如5*10%+5+20=25.5()</p>
</div>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, reactive, onMounted, nextTick } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { Search, Plus } from '@element-plus/icons-vue'
import { priceTemplateApi } from '@/api/modules/priceTemplate'
import RefreshButton from '@/components/RefreshButton.vue'
//
const t_price_type = ref([
{ label: '书价', value: '0' },
{ label: '总价(书价+运费)', value: '1' }
])
//
const priceTemplateList = ref([])
const buttonLoading = ref(false)
const loading = ref(false)
const showSearch = ref(true)
const ids = ref([])
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const searchKeyword = ref('')
//
const queryFormRef = ref(null)
const priceTemplateFormRef = ref(null)
//
const dialog = reactive({
visible: false,
title: ''
})
//
const initFormData = {
id: undefined,
templateName: '',
priceType: '0',
proportion: 0,
addAmount: 0,
status: '0',
highPrice: 99999,
lowPrice: 0.01,
priceAdjustments: [
{
minPrice: 0.01,
maxPrice: 1,
adjustPercent: '',
adjustAmount: ''
}
],
rangePrice: undefined
}
//
const queryParams = ref({
pageNum: 1,
pageSize: 10,
templateName: '',
priceType: '',
proportion: '',
addAmount: '',
status: ''
})
//
const form = ref({ ...initFormData })
//
const validateLowPrice = (rule, value, callback) => {
if (value === null || value === undefined) {
callback(new Error('最小值不能为空'))
} else if (form.value.highPrice !== null && form.value.highPrice !== undefined && value >= form.value.highPrice) {
callback(new Error('最小值必须小于最大值'))
} else {
callback()
}
}
//
const validateHighPrice = (rule, value, callback) => {
if (value === null || value === undefined) {
callback(new Error('最大值不能为空'))
} else if (form.value.lowPrice !== null && form.value.lowPrice !== undefined && value <= form.value.lowPrice) {
ElMessage.warning("价格区间最大值必须大于最小值")
} else {
callback()
}
}
//
const rules = ref({
templateName: [{ required: true, message: '模板名称不能为空', trigger: 'blur' }],
lowPrice: [
{ required: true, message: '最小值不能为空', trigger: 'blur' },
{ validator: validateLowPrice, trigger: 'blur' }
],
highPrice: [
{ required: true, message: '最大值不能为空', trigger: 'blur' },
{ validator: validateHighPrice, trigger: 'blur' }
]
})
//
const addAdjustment = () => {
const lastItem = form.value.priceAdjustments[form.value.priceAdjustments.length - 1]
form.value.priceAdjustments.push({
minPrice: lastItem.maxPrice ? Number(lastItem.maxPrice) + 0.01 : 0.01,
maxPrice: '',
adjustPercent: '',
adjustAmount: ''
})
}
//
const removeAdjustment = (index) => {
form.value.priceAdjustments.splice(index, 1)
}
//
const validateMinPrice = (index) => {
return (rule, value, callback) => {
if (!value || value === '') {
callback(new Error('请输入最小价格'))
return
}
const numValue = Number(value)
if (isNaN(numValue) || numValue < 0.01) {
callback(new Error('价格区间下限不能小于0.01元'))
return
}
if (index > 0 && form.value.priceAdjustments[index - 1] && numValue <= Number(form.value.priceAdjustments[index - 1].maxPrice)) {
callback(new Error('区间不能重复'))
return
}
callback()
}
}
//
const validateMaxPrice = (index) => {
return (rule, value, callback) => {
if (!value || value === '') {
callback(new Error('请输入最大价格'))
return
}
const maxPrice = Number(value)
if (isNaN(maxPrice)) {
callback(new Error('请输入有效的数字'))
return
}
const currentRow = form.value.priceAdjustments[index]
if (!currentRow) {
callback()
return
}
const minPrice = Number(currentRow.minPrice)
if (!isNaN(minPrice) && maxPrice <= minPrice) {
callback(new Error('价格区间上限要大于价格下限'))
return
}
callback()
}
}
//
const validateAdjustPercent = (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback(new Error('请输入加点百分比'))
} else if (isNaN(value) || Number(value) < 0) {
callback(new Error('请输入有效的正数百分比'))
} else {
callback()
}
}
//
const validateAdjustAmount = (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback(new Error('请输入加价金额'))
} else if (isNaN(value) || Number(value) < 0) {
callback(new Error('请输入有效的正数金额'))
} else {
callback()
}
}
// const resetFormData = async () => {
// form.value.priceAdjustments.length = 1;
// this.form = {
// templateName: '',
// priceType: '',
// lowPrice: 0,
// highPrice: 0,
// priceAdjustments: [
// {
// minPrice: 0,
// maxPrice: 1,
// adjustPercent: undefined,
// adjustAmount: undefined
// }
// ]
// };
// };
//
const resetFormData = () => {
form.value = { ...initFormData }
form.value.priceAdjustments = [
{
minPrice: 0.01,
maxPrice: 1,
adjustPercent: '',
adjustAmount: ''
}
]
//
nextTick(() => {
priceTemplateFormRef.value?.clearValidate()
})
}
//
const loadPriceTemplateList = async () => {
loading.value = true
try {
//
const params = {
pageNum: queryParams.value.pageNum,
pageSize: queryParams.value.pageSize
}
//
if (searchKeyword.value && searchKeyword.value.trim()) {
params.templateName = searchKeyword.value.trim()
}
if (queryParams.value.priceType && queryParams.value.priceType.trim()) {
params.priceType = queryParams.value.priceType.trim()
}
if (queryParams.value.status && queryParams.value.status.trim()) {
params.status = queryParams.value.status.trim()
}
if (queryParams.value.proportion && queryParams.value.proportion.trim()) {
params.proportion = queryParams.value.proportion.trim()
}
if (queryParams.value.addAmount && queryParams.value.addAmount.trim()) {
params.addAmount = queryParams.value.addAmount.trim()
}
const res = await priceTemplateApi.getList(params)
console.log('API返回数据:', res)
//
if (res && res.data) {
//
let dataList = []
let totalCount = 0
if (Array.isArray(res.data)) {
// res.data
dataList = res.data
totalCount = res.total || res.data.length
} else if (res.data.rows && Array.isArray(res.data.rows)) {
// res.data.rows
dataList = res.data.rows
totalCount = res.data.total || res.data.rows.length
} else if (res.data.list && Array.isArray(res.data.list)) {
// res.data.list
dataList = res.data.list
totalCount = res.data.total || res.data.list.length
} else {
//
dataList = []
totalCount = 0
}
priceTemplateList.value = dataList
total.value = totalCount
} else {
priceTemplateList.value = []
total.value = 0
}
} catch (error) {
console.error('获取价格模板列表失败:', error)
priceTemplateList.value = []
total.value = 0
ElMessage.error('获取价格模板列表失败')
} finally {
loading.value = false
}
}
//
const getList = loadPriceTemplateList
//
const handleSearch = () => {
queryParams.value.pageNum = 1
loadPriceTemplateList()
}
//
const handleReset = () => {
searchKeyword.value = ''
queryParams.value.priceType = ''
queryParams.value.status = ''
queryParams.value.proportion = ''
queryParams.value.addAmount = ''
queryParams.value.pageNum = 1
loadPriceTemplateList()
}
//
const handleEdit = (row) => {
if (row) {
//
handleUpdate(row)
} else {
//
if (ids.value.length !== 1) {
ElMessage.warning('请选择一条记录进行修改')
return
}
handleUpdate({ id: ids.value[0] })
}
}
//
const handleBatchDelete = () => {
if (ids.value.length === 0) {
ElMessage.warning('请至少选择一条记录')
return
}
ElMessageBox.confirm(`确认删除选中的${ids.value.length}条价格模板记录吗?`, '警告', {
type: 'warning'
}).then(async () => {
try {
await priceTemplateApi.batchDelete(ids.value)
ElMessage.success('批量删除成功')
await getList()
} catch (error) {
console.error('批量删除失败:', error)
ElMessage.error('批量删除失败')
}
}).catch(() => { })
}
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
priceTemplateFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
//
const openPriceTemplateDialog = (row = null) => {
reset()
if (row) {
handleUpdate(row)
} else {
dialog.visible = true
dialog.title = '新增价格模板'
}
}
//
const handleSelectionChange = (selection) => {
ids.value = selection.map((item) => item.id)
single.value = selection.length !== 1
multiple.value = !selection.length
}
//
const handleAdd = () => {
reset()
dialog.visible = true
dialog.title = '添加价格模板'
}
//
const handleUpdate = async (row) => {
reset()
const _id = row?.id || ids.value[0]
try {
const res = await priceTemplateApi.getDetail(_id)
console.log('获取价格模板详情:', res)
if (res.data && res.data.lowPrice != null && res.data.highPrice != null && res.data.rangePrice != null) {
res.data.lowPrice /= 100
res.data.highPrice /= 100
// JSON
const rangePriceData = JSON.parse(res.data.rangePrice).map(item => ({
...item,
minPrice: item.minPrice / 100, //
maxPrice: item.maxPrice / 100, //
adjustAmount: item.adjustAmount / 100, //
adjustPercent: item.adjustPercent ? Number(item.adjustPercent) : 0
}))
//
const priceAdjustments = Object.values(rangePriceData)
res.data.priceAdjustments = priceAdjustments
res.data.rangePrice = priceAdjustments
}
Object.assign(form.value, res.data)
console.log('表单数据:', form.value)
dialog.visible = true
dialog.title = '修改价格模板'
} catch (error) {
console.error('获取价格模板详情失败:', error)
ElMessage.error('获取价格模板详情失败')
}
}
//
const submitForm = () => {
priceTemplateFormRef.value?.validate(async (valid) => {
if (valid) {
try {
//
const formData = { ...form.value }
formData.lowPrice *= 100
formData.highPrice *= 100
// priceAdjustments
formData.priceAdjustments = formData.priceAdjustments.map(item => ({
...item,
minPrice: item.minPrice * 100,
maxPrice: item.maxPrice * 100,
adjustAmount: item.adjustAmount * 100
}))
formData.rangePrice = JSON.stringify(formData.priceAdjustments)
buttonLoading.value = true
if (formData.id) {
await priceTemplateApi.update(formData)
} else {
await priceTemplateApi.create(formData)
}
ElMessage.success('操作成功')
dialog.visible = false
await getList()
} catch (error) {
console.error('提交失败:', error)
ElMessage.error('操作失败')
} finally {
buttonLoading.value = false
}
}
})
}
//
const handleDelete = async (row) => {
const _ids = row?.id || ids.value
try {
await ElMessageBox.confirm(
`是否确认删除价格模板编号为"${_ids}"的数据项?`,
'警告',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
)
await priceTemplateApi.delete(_ids)
ElMessage.success('删除成功')
await getList()
} catch (error) {
if (error !== 'cancel') {
console.error('删除失败:', error)
ElMessage.error('删除失败')
}
}
}
//
const handleExport = async () => {
try {
await priceTemplateApi.export(queryParams.value)
ElMessage.success('导出成功')
} catch (error) {
console.error('导出失败:', error)
ElMessage.error('导出失败')
}
}
//
const getPriceTypeText = (priceType) => {
const typeMap = {
'0': '书价',
'1': '总价(书价+运费)'
}
return typeMap[priceType] || '未知'
}
//
const handleSizeChange = (size) => {
queryParams.value.pageSize = size
queryParams.value.pageNum = 1
loadPriceTemplateList()
}
//
const handleCurrentChange = (page) => {
queryParams.value.pageNum = page
loadPriceTemplateList()
}
onMounted(() => {
//
nextTick(() => {
getList()
})
})
</script>
<style scoped>
.list-container {
padding: 20px;
}
.search-area {
margin-bottom: 20px;
padding: 18px;
background-color: #fff;
border-radius: 4px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
text-align: left;
}
.search-area :deep(.el-form-item) {
margin-right: 18px;
margin-bottom: 10px;
}
.action-bar {
margin-bottom: 20px;
display: flex;
justify-content: space-between;
}
.action-left {
display: flex;
gap: 10px;
}
.action-right {
display: flex;
align-items: center;
}
.pagination-container {
margin-top: 20px;
display: flex;
justify-content: flex-end;
}
.dialog-footer {
display: flex;
justify-content: flex-end;
gap: 10px;
}
.el-input-number .el-input__inner {
text-align: left !important;
}
/* 表单内嵌表格样式调整 */
.el-form .el-table {
margin: 20px 0;
}
.el-form .el-table .el-form-item {
margin-bottom: 0;
}
/* 提示文字样式 */
.el-form h3 {
margin: 10px 0;
font-size: 14px;
font-weight: normal;
}
/* 价格模板对话框样式 */
.price-template-dialog .el-dialog__header {
padding: 20px 24px 16px;
border-bottom: 1px solid #f0f0f0;
}
.price-template-dialog .el-dialog__body {
padding: 24px;
}
/* 表单样式 */
.price-form {
max-width: 100%;
}
.form-item-with-tip {
margin-bottom: 8px;
}
.form-item-with-tip .el-form-item__content {
flex-direction: column;
align-items: flex-start;
}
.template-name-input {
width: 400px;
}
.form-tip {
margin-top: 8px;
font-size: 12px;
color: #999;
line-height: 1.4;
}
.form-tip div {
margin-bottom: 2px;
}
/* 价格类型单选框样式 */
.price-type-radio {
margin-bottom: 8px;
}
.price-type-radio .el-radio {
margin-right: 24px;
}
/* 价格区间样式 */
.price-range-container {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 8px;
}
.price-input {
width: 150px;
}
.range-separator {
color: #666;
font-size: 14px;
}
/* 价格调整规则表格样式 */
.price-adjustment-section {
margin: 24px 0;
border: 1px solid #e4e7ed;
border-radius: 4px;
overflow: hidden;
}
.adjustment-header {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 80px;
background-color: #f5f7fa;
border-bottom: 1px solid #e4e7ed;
padding: 12px 16px;
font-weight: 500;
color: #606266;
font-size: 14px;
}
.header-item {
text-align: center;
}
.adjustment-row {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 80px;
align-items: center;
padding: 12px 16px;
border-bottom: 1px solid #f0f0f0;
gap: 12px;
}
.adjustment-row:last-child {
border-bottom: none;
}
.adjustment-input {
width: 100%;
}
.adjustment-input .el-input__inner {
text-align: center;
}
.adjustment-actions {
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
flex-direction: column;
}
.action-text-btn {
font-size: 12px;
padding: 4px 8px;
height: auto;
min-height: 24px;
}
.action-text-btn:hover {
text-decoration: underline;
}
/* 提示信息样式 */
.notice-section {
margin-top: 24px;
padding: 16px;
background-color: #fafafa;
border-radius: 4px;
font-size: 12px;
line-height: 1.5;
}
.notice-red {
color: #f56c6c;
margin: 0 0 8px 0;
font-weight: 500;
}
.notice-orange {
color: #e6a23c;
margin: 4px 0;
}
/* 对话框底部样式 */
.dialog-footer {
text-align: right;
padding-top: 16px;
border-top: 1px solid #f0f0f0;
}
.dialog-footer .el-button {
min-width: 80px;
}
/* 响应式调整 */
@media (max-width: 768px) {
.template-name-input {
width: 100%;
}
.price-range-container {
flex-direction: column;
gap: 8px;
}
.price-input {
width: 100%;
}
.adjustment-header,
.adjustment-row {
grid-template-columns: 1fr;
gap: 8px;
text-align: left;
}
.adjustment-input .el-input__inner {
text-align: left;
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,363 @@
<template>
<div class="p-2">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="店铺" prop="shopId">
<el-select v-model="queryParams.shopId" placeholder="请选择店铺" clearable>
<el-option v-for="item in shopList" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="商品条码" prop="isbn">
<el-input v-model="queryParams.isbn" placeholder="请输入条码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="品相" prop="conditionCode">
<el-select v-model="queryParams.conditionCode" placeholder="请选择品相" clearable :loading="loading">
<el-option v-for="item in conditionCodeTypes" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" icon="Search" @click="() => showSearch = !showSearch">
{{ showSearch ? '隐藏搜索' : '显示搜索' }}
</el-button>
</el-col>
</el-row>
</template>
<el-table v-loading="loading" :data="shopGoodsPublishedList" @selection-change="handleSelectionChange" style="font-size: 17px">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键" align="center" prop="id" v-if="false" />
<el-table-column label="商品对应关系" align="center">
<el-tag type="primary" size="large" style="font-size: 20px">相同货号对应</el-tag>
</el-table-column>
<el-table-column label="店铺" align="center" prop="shopName" />
<el-table-column label="供应商" align="center" prop="supplier" />
<el-table-column label="商品信息" header-align="center" >
<el-table-column label="图示" align="center" prop="bookPic" width="70" :show-overflow-tooltip="true" >
<template #default="{ row }">
<el-image
style="width: 40px;height: 40px"
:src="row.bookPic"
fit="scale-down"
:preview-src-list="[row.bookPic]"
preview-teleported
>
<template #error>
<div class="image-slot">
暂无
</div>
</template>
</el-image>
</template>
</el-table-column>
<el-table-column label="商品/规格编码" align="left" prop="itemNumber" />
<el-table-column label="商品/规格名称" align="left" prop="goodsName" width="270" :show-overflow-tooltip="true" >
<template #default="{ row }">
<div class="truncate-cell"> <!-- 文本截断容器 -->
{{ row.goodsName || '暂无数据' }}
</div>
</template>
</el-table-column>
<el-table-column label="品相" align="left" prop="conditionCode" width="80">
<template #default="{ row }">
<span v-if="row.conditionCode==='A'">一品</span>
<span v-else-if="row.conditionCode==='B'">二品</span>
<span v-else-if="row.conditionCode==='C'">三品</span>
<span v-else-if="row.conditionCode==='D'">四品</span>
<span v-else-if="row.conditionCode==='E'">五品</span>
<span v-else-if="row.conditionCode==='F'">六品</span>
<span v-else-if="row.conditionCode==='G'">六五品</span>
<span v-else-if="row.conditionCode==='H'">七品</span>
<span v-else-if="row.conditionCode==='I'">七五品</span>
<span v-else-if="row.conditionCode==='J'">八品</span>
<span v-else-if="row.conditionCode==='K'">八五品</span>
<span v-else-if="row.conditionCode==='L'">九品</span>
<span v-else-if="row.conditionCode==='M'">九五品</span>
<span v-else-if="row.conditionCode==='N'">全新</span>
</template>
</el-table-column>
<el-table-column label="售价" align="left" prop="price" :show-overflow-tooltip="true" width="100">
<template #default="{ row }">
{{ ((row.price/100).toFixed(2))}}
</template>
</el-table-column>
<el-table-column label="商品条码" align="left" prop="isbn" width="150">
<template #default="{ row }">
<span v-if="!row.isbn || row.isbn.startsWith('678')"></span>
<span v-else>{{ row.isbn }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="线上商品数量" align="center" prop="inventory" />
<el-table-column label="线上商品" align="left" prop="onlineProducts" :show-overflow-tooltip="true">
<template #default="{ row }">
<div class="truncate-cell"> <!-- 文本截断容器 -->
<el-link
v-if="row.shopType === 1"
type="primary"
:href="`https://mobile.yangkeduo.com/goods.html?goods_id=${row.onlineId}`"
target="_blank"
:underline="false"
>
<span v-if="row.onlineId!=null">
https://mobile.yangkeduo.com/goods.html?goods_id={{row.onlineId}}
</span>
</el-link>
<el-link
v-else-if="row.shopType === 2"
type="primary"
:href="`https://book.kongfz.com/${row.mallId}/${row.onlineId}`"
target="_blank"
:underline="false"
>
<span v-if="row.mallId!=null&&row.onlineId!=null">
https://book.kongfz.com/{{row.mallId}}/{{row.onlineId}}
</span>
</el-link>
</div>
</template>
</el-table-column>
<el-table-column label="最后设置人" align="center" prop="createdBy">
<template #default="{ row }">
<span>{{ formatUserId(row.createdBy) }}</span>
</template>
</el-table-column>
<el-table-column label="最后设置时间" align="center" prop="updatedTime">
<template #default="{ row }">
<span>{{ formatDateTime(row.updatedTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="发布时间" align="left" prop="updateTime" width="230"/>-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<el-pagination
v-show="total > 0"
:current-page="queryParams.pageNum"
:page-size="queryParams.pageSize"
:page-sizes="[10, 20, 50, 100]"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</el-card>
</div>
</template>
<script setup name="ShopGoodsPublished">
import { getShopGoodsPublishedList, deleteShopGoodsPublished } from '@/api/modules/shopGoodsPublished'
import { getListShop } from '@/api/modules/shop'
import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
//
const shopGoodsPublishedList = ref([])
const loading = ref(true)
const showSearch = ref(true)
const ids = ref([])
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const shopList = ref([])
//
const queryFormRef = ref()
//
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
shopId: undefined,
isbn: undefined,
conditionCode: undefined,
goodsName: undefined,
shopName: undefined,
platformId: undefined,
status: undefined,
itemNumber: undefined,
price: undefined
})
//
const conditionCodeTypes = [
{ value: 'A', label: '一品' },
{ value: 'B', label: '二品' },
{ value: 'C', label: '三品' },
{ value: 'D', label: '四品' },
{ value: 'E', label: '五品' },
{ value: 'F', label: '六品' },
{ value: 'G', label: '六五品' },
{ value: 'H', label: '七品' },
{ value: 'I', label: '七五品' },
{ value: 'J', label: '八品' },
{ value: 'K', label: '八五品' },
{ value: 'L', label: '九品' },
{ value: 'M', label: '九五品' },
{ value: 'N', label: '全新' }
]
//
const getList = async () => {
loading.value = true
try {
const res = await getShopGoodsPublishedList(queryParams)
shopGoodsPublishedList.value = res.data.list || []
total.value = res.data.total || 0
} catch (error) {
console.error('获取列表失败:', error)
ElMessage.error('获取列表失败')
} finally {
loading.value = false
}
}
//
const handleQuery = () => {
queryParams.pageNum = 1
getList()
}
//
const resetQuery = () => {
queryFormRef.value?.resetFields()
handleQuery()
}
//
const handleSelectionChange = (selection) => {
ids.value = selection.map(item => item.id)
single.value = selection.length !== 1
multiple.value = !selection.length
}
//
const handleDelete = async (row) => {
const _ids = row?.id || ids.value
try {
await ElMessageBox.confirm(
`是否确认删除记录发布数据编号为"${_ids}"的数据项?`,
'警告',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
)
await deleteShopGoodsPublished(_ids)
ElMessage.success('删除成功')
await getList()
} catch (error) {
if (error !== 'cancel') {
console.error('删除失败:', error)
ElMessage.error('删除失败')
}
}
}
//
const getShopList = async () => {
try {
const res = await getListShop()
shopList.value = res.map(item => ({
value: item.id,
label: item.shopName
}))
} catch (error) {
console.error('获取店铺列表失败:', error)
}
}
//
const handleSizeChange = (val) => {
queryParams.pageSize = val
queryParams.pageNum = 1
getList()
}
//
const handleCurrentChange = (val) => {
queryParams.pageNum = val
getList()
}
// ID
const formatUserId = (userId) => {
if (!userId) return '-'
return userId.toString()
}
//
const formatDateTime = (dateTime) => {
if (!dateTime) return '-'
//
const dateStr = dateTime.toString()
if (dateStr.length !== 14) return dateTime
const year = dateStr.substring(0, 4)
const month = dateStr.substring(4, 6)
const day = dateStr.substring(6, 8)
const hour = dateStr.substring(8, 10)
const minute = dateStr.substring(10, 12)
const second = dateStr.substring(12, 14)
return `${year}-${month}-${day} ${hour}:${minute}:${second}`
}
//
onMounted(() => {
getList()
getShopList()
})
</script>
<style scoped>
/* 调整表头字体大小 */
:deep(.el-table__header) th .cell {
font-size: 18px; /* 设置你需要的字体大小 */
font-weight: bold; /* 可选:加粗字体 */
}
/* 调整表格内容字体大小 */
.el-table {
font-size: 17px !important; /* 与你的行内样式一致 */
}
/* 隐藏所有单元格边框 */
:deep(.el-table td){
border: none;
}
</style>

View File

@ -0,0 +1,543 @@
<template>
<div class="p-2">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="支付方式 " prop="rechargType">
<el-select v-model="queryParams.rechargType" placeholder="请选择支付方式" clearable>
<el-option v-for="dict in t_recharge_way" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="充值金额" prop="rechargPrice">
<el-input v-model="queryParams.rechargPrice" placeholder="请输入充值金额" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="创建时间" style="width: 308px">
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD HH:mm:ss" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期"
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<span style="font-size:20px">余额 : {{ Number(balance) / 100 }} </span>
<el-button style="margin-left:10px" type="primary" plain icon="Upload" @click="handleAdd">充值</el-button>
</el-col>
<el-col :span="1.5">
<el-button style="margin-left:10px" type="warning" plain icon="Download">提现</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="Refresh" @click="getList">刷新</el-button>
</el-col>
</el-row>
</template>
<el-table v-loading="loading" :data="userRechargeList" @selection-change="handleSelectionChange">
<el-table-column type="expand">
<template #default="props">
<div m="4">
<p m="t-0 b-2">支付号:{{ props.row.allDataStr != undefined ? JSON.parse(props.row.allDataStr).out_trade_no :
'' }} </p>
</div>
<div m="4">
<p m="t-0 b-2">流水号:{{ props.row.allDataStr != undefined ? JSON.parse(props.row.allDataStr).transaction_id
: '' }} </p>
</div>
<div m="4">
<p m="t-0 b-2">商户号:{{ props.row.allDataStr != undefined ? JSON.parse(props.row.allDataStr).mchid : '' }}
</p>
</div>
<div m="4">
<p m="t-0 b-2">支付状态:{{ props.row.allDataStr != undefined ?
JSON.parse(props.row.allDataStr).trade_state_desc : '' }} </p>
</div>
<div m="4">
<p m="t-0 b-2">银行类型:{{ props.row.allDataStr != undefined ? JSON.parse(props.row.allDataStr).bank_type :
'' }} </p>
</div>
<div m="4">
<p m="t-0 b-2">支付时间:{{ props.row.allDataStr != undefined ?
parseTime(JSON.parse(props.row.allDataStr).success_time, '{y}-{m}-{d} {h}:{i}:{s}') : '' }} </p>
</div>
<div m="4">
<p m="t-0 b-2">支付人:{{ props.row.allDataStr != undefined ? JSON.parse(props.row.allDataStr).payer.openid :
'' }} </p>
</div>
<div m="4">
<p m="t-0 b-2">应支付金额:{{ props.row.allDataStr != undefined ?
(Number(JSON.parse(props.row.allDataStr).amount.total) / 100) + ' ' +
JSON.parse(props.row.allDataStr).amount.currency : '' }} </p>
</div>
<div m="4">
<p m="t-0 b-2">实际支付金额:{{ props.row.allDataStr != undefined ?
(Number(JSON.parse(props.row.allDataStr).amount.payer_total) / 100) + ' ' +
JSON.parse(props.row.allDataStr).amount.payer_currency : '' }} </p>
</div>
</template>
</el-table-column>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="平台流水号" align="center" prop="id" v-if="true" />
<el-table-column label="支付流水号" align="center" prop="wxId" v-if="true" />
<el-table-column label="充值方式" align="center" prop="rechargType" width="150px">
<template #default="scope">
<template v-for="dict in t_recharge_way" :key="dict.value">
<el-tag v-if="dict.value === scope.row.rechargType">
{{ dict.label }}
</el-tag>
</template>
</template>
</el-table-column>
<el-table-column label="充值金额" align="center" width="150px">
<template #default="scope">
{{ scope.row.rechargPrice / 100 }}
</template>
</el-table-column>
<el-table-column label="手续费" align="center" width="150px">
<template #default="scope">
{{ scope.row.commission / 100 }}
</template>
</el-table-column>
<el-table-column label="支付状态" align="center" prop="status" width="150px">
<template #default="scope">
<template v-for="dict in t_recharge_status" :key="dict.value">
<el-tag v-if="dict.value === scope.row.status">
{{ dict.label }}
</el-tag>
</template>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="支付时间" align="center" prop="successTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.successTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
</el-table>
<el-pagination v-show="total > 0" :current-page="queryParams.pageNum" :page-size="queryParams.pageSize"
:total="total" :page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
</el-card>
<!-- 添加或修改充值对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="userRechargeFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="支付方式" prop="rechargType">
<el-select v-model="form.rechargType" placeholder="请选择支付方式">
<el-option v-for="dict in t_recharge_way" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item :class="{ isHide: form.rechargType == undefined }" label="充值金额" prop="rechargPrice">
<el-input v-model="form.rechargPrice" type="number" :min="minRecharge" @input="handleInput"
placeholder="请输入充值金额" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
<el-dialog :title="dialog.titlePrcode" v-model="dialog.visiblePrcode" width="360px" append-to-body>
<div>
<img :src="qrCodeText" alt="Base64 图片" />
</div>
</el-dialog>
</div>
</template>
<script setup name="UserRecharge">
import { ref, reactive, onMounted, getCurrentInstance, toRefs } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { userRechargeApi } from '@/api/modules/userRecharge.js'
const dateRange = ref(['', ''])
//
const t_recharge_way = ref([
{ label: '微信支付', value: '1' },
{ label: '支付宝支付', value: '2' }
])
const t_recharge_status = ref([
{ label: '待支付', value: '0' },
{ label: '支付完成', value: '1' },
{ label: '支付过期', value: '2' }
])
const userRechargeList = ref([])
const buttonLoading = ref(false)
const loading = ref(true)
const showSearch = ref(true)
const ids = ref([])
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const minRecharge = ref()
const queryFormRef = ref()
const userRechargeFormRef = ref()
const dialog = reactive({
visible: false,
visiblePrcode: false,
title: '',
titlePrcode: ''
})
const initFormData = {
id: undefined,
wxId: undefined,
userId: undefined,
rechargType: undefined,
rechargPrice: undefined,
successTime: undefined,
createTime: undefined,
allDataStr: undefined,
status: undefined,
commission: undefined
}
const data = reactive({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
userId: undefined,
rechargType: undefined,
rechargPrice: undefined,
successTime: undefined,
allDataStr: undefined,
status: undefined,
commission: undefined,
params: {}
},
rules: {
id: [
{ required: true, message: "主键不能为空", trigger: "blur" }
]
}
})
const { queryParams, form, rules } = toRefs(data)
const qrCodeText = ref('')
const balance = ref('')
const freeze = ref('')
//
const parseTime = (time, pattern = '{y}-{m}-{d} {h}:{i}:{s}') => {
if (!time) return ''
let date
// 20250721105352
if (typeof time === 'number' || (typeof time === 'string' && /^\d{14}$/.test(time))) {
const timeStr = time.toString()
const year = parseInt(timeStr.substring(0, 4))
const month = parseInt(timeStr.substring(4, 6)) - 1 // 0
const day = parseInt(timeStr.substring(6, 8))
const hour = parseInt(timeStr.substring(8, 10))
const minute = parseInt(timeStr.substring(10, 12))
const second = parseInt(timeStr.substring(12, 14))
date = new Date(year, month, day, hour, minute, second)
} else {
//
date = new Date(time)
}
//
if (isNaN(date.getTime())) {
return ''
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds()
}
return pattern.replace(/{([ymdhis])+}/g, (result, key) => {
const value = formatObj[key]
return value.toString().padStart(2, '0')
})
}
//
const addDateRange = (params, dateRange) => {
if (dateRange && dateRange[0] && dateRange[1]) {
params.params = params.params || {}
params.params.beginTime = dateRange[0]
params.params.endTime = dateRange[1]
}
return params
}
/** 查询充值列表 */
const getList = async () => {
try {
loading.value = true
const params = addDateRange({ ...queryParams.value }, dateRange.value)
const res = await userRechargeApi.getUserRechargeList(params)
console.log("res", res)
// API
if (res.code === 200 && res.data) {
userRechargeList.value = res.data.list || []
total.value = res.data.total || 0
//
for (let i = 0; i < userRechargeList.value.length; i++) {
if (userRechargeList.value[i].allDataStr) {
try {
const jsonObject = JSON.parse(userRechargeList.value[i].allDataStr)
if (jsonObject && jsonObject.transaction_id) {
userRechargeList.value[i].wxId = jsonObject.transaction_id
}
} catch (e) {
console.error('解析allDataStr失败:', e)
}
}
}
} else {
userRechargeList.value = []
total.value = 0
ElMessage.error(res.message || '获取充值列表失败')
}
} catch (error) {
ElMessage.error('获取充值列表失败')
console.error('获取充值列表失败:', error)
userRechargeList.value = []
total.value = 0
} finally {
loading.value = false
}
}
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
}
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
userRechargeFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
const resetQuery = () => {
dateRange.value = ['', ''];
queryFormRef.value?.resetFields();
handleQuery();
}
/** 多选框选中数据 */
const handleSelectionChange = (selection) => {
ids.value = selection.map(item => item.id)
single.value = selection.length != 1
multiple.value = !selection.length
}
/** 新增按钮操作 */
const handleAdd = () => {
reset()
dialog.visible = true
dialog.title = "充值"
buttonLoading.value = false
}
/** 提交按钮 */
const submitForm = () => {
if (form.value.rechargPrice == undefined) {
ElMessage.error("请填写充值金额")
return
}
userRechargeFormRef.value?.validate(async (valid) => {
if (valid) {
try {
buttonLoading.value = true
const res = await userRechargeApi.userRecharge(form.value)
if (res.code == 200) {
qrCodeText.value = "data:image/png;base64," + res.data.img
dialog.visiblePrcode = true
dialog.titlePrcode = "支付"
// 2
let count = 0
const maxCount = 40 // 40
let intervalId = setInterval(async () => {
if (count < maxCount) {
try {
const statusRes = await userRechargeApi.checkTask(res.data.id)
if (statusRes == '1') {
count = 80 //
}
count++
} catch (error) {
console.error('检查支付状态失败:', error)
count++
}
} else {
if (count == 40) {
//
try {
await userRechargeApi.editRechargeToError(res.data.id)
} catch (error) {
console.error('修改充值状态失败:', error)
}
}
dialog.visible = false
dialog.visiblePrcode = false
qrCodeText.value = undefined
buttonLoading.value = false
getList()
getUser()
clearInterval(intervalId) //
}
}, 3000)
}
} catch (error) {
ElMessage.error('充值失败,请重试')
console.error('充值失败:', error)
buttonLoading.value = false
}
}
})
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
const res = await userRechargeApi.exportUserRecharge(queryParams.value)
//
const url = window.URL.createObjectURL(new Blob([res]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', `userRecharge_${new Date().getTime()}.xlsx`)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
window.URL.revokeObjectURL(url)
} catch (error) {
ElMessage.error('导出失败')
console.error('导出失败:', error)
}
}
//
const handleInput = () => {
let value = form.value.rechargPrice
//
if (value < Number(minRecharge.value)) {
value = minRecharge.value
}
//
const regex = /^\d*\.?\d{0,2}$/
if (!regex.test(value)) {
//
const parts = value.split('.')
if (parts.length > 1) {
value = `${parts[0]}.${parts[1].slice(0, 2)}`
}
}
//
form.value.rechargPrice = value
}
//
const getMin = async () => {
try {
//
// const res = await configApi.getConfigByKey('recharge.min')
// minRecharge.value = res.data
minRecharge.value = 1 // 1
} catch (error) {
console.error('获取最小充值金额失败:', error)
minRecharge.value = 1 //
}
}
//
const getUser = async () => {
try {
//
// const res = await userApi.getUserInfo()
// balance.value = res.data.balance
// freeze.value = res.data.freeze
balance.value = '0' //
freeze.value = '0' //
} catch (error) {
console.error('获取用户信息失败:', error)
balance.value = '0'
freeze.value = '0'
}
}
//
const handleSizeChange = (val) => {
queryParams.value.pageSize = val
queryParams.value.pageNum = 1
getList()
}
//
const handleCurrentChange = (val) => {
queryParams.value.pageNum = val
getList()
}
onMounted(() => {
getList();
getMin();
getUser();
});
</script>
<style scoped>
.isHide {
display: none;
}
</style>

View File

@ -0,0 +1,670 @@
<template>
<div class="filter-set-container">
<!-- 搜索区域 -->
<div v-show="showSearch" class="search-section">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="过滤类型" prop="filterType">
<el-select v-model="queryParams.filterType" placeholder="请选择过滤类型" clearable
style="width: 180px">
<el-option v-for="dict in filterTypeOptions" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="限制类型" prop="limitationType">
<el-select v-model="queryParams.limitationType" placeholder="请选择限制类型" clearable
style="width: 180px">
<el-option v-for="dict in limitationTypeOptions" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="添加方式" prop="addWay">
<el-select v-model="queryParams.addWay" placeholder="请选择添加方式" clearable style="width: 180px">
<el-option v-for="dict in addWayOptions" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="内容文件" prop="addTxt">
<el-input v-model="queryParams.addTxt" placeholder="请输入内容文件" clearable
@keyup.enter="handleQuery" style="width: 200px" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">
<el-icon>
<Search />
</el-icon>
</el-button>
<el-button @click="resetQuery">
<el-icon>
<Refresh />
</el-icon>
</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
<!-- 操作按钮区域 -->
<div class="header-actions">
<div class="action-buttons">
<el-button type="primary" @click="handleAdd">
<el-icon>
<Plus />
</el-icon>
</el-button>
<el-button type="success" :disabled="single" @click="handleUpdate()">
<el-icon>
<Edit />
</el-icon>
</el-button>
<el-button type="danger" :disabled="multiple" @click="handleDelete()">
<el-icon>
<Delete />
</el-icon>
</el-button>
<el-button type="warning" @click="handleExport">
<el-icon>
<Download />
</el-icon>
</el-button>
</div>
<div class="toolbar-actions">
<el-button @click="showSearch = !showSearch" circle>
<el-icon>
<Search />
</el-icon>
</el-button>
<el-button @click="getList" circle>
<el-icon>
<Refresh />
</el-icon>
</el-button>
</div>
</div>
<!-- 表格区域 -->
<el-card shadow="never">
<el-table v-loading="loading" :data="filterSetList" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键" align="center" prop="id" width="80" />
<el-table-column label="过滤类型" align="center" prop="filterType">
<template #default="{ row }">
<el-tag>{{ getFilterTypeText(row.filterType) }}</el-tag>
</template>
</el-table-column>
<el-table-column label="限制类型" align="center" prop="limitationType">
<template #default="{ row }">
<el-tag type="success">{{ getLimitationTypeText(row.limitationType) }}</el-tag>
</template>
</el-table-column>
<el-table-column label="添加方式" align="center" prop="addWay">
<template #default="{ row }">
<el-tag type="warning">{{ getAddWayText(row.addWay) }}</el-tag>
</template>
</el-table-column>
<el-table-column label="内容文件" align="center" prop="addTxt" show-overflow-tooltip />
<el-table-column label="操作" align="center" width="150" fixed="right">
<template #default="{ row }">
<el-button type="primary" link @click="handleUpdate(row)">
<el-icon>
<Edit />
</el-icon>
</el-button>
<el-button type="danger" link @click="handleDelete(row)">
<el-icon>
<Delete />
</el-icon>
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="pagination-container">
<el-pagination v-show="total > 0" v-model:current-page="queryParams.pageNum"
v-model:page-size="queryParams.pageSize" :page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange"
@current-change="handleCurrentChange" />
</div>
</el-card>
<!-- 添加或修改过滤设置对话框 -->
<el-dialog v-model="dialogVisible" :title="isEdit ? '编辑过滤设置' : '新增过滤设置'" width="500px" @closed="resetForm">
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="过滤类型" prop="filterType">
<el-select v-model="form.filterType" placeholder="请选择过滤类型" style="width: 100%">
<el-option v-for="dict in filterTypeOptions" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="限制类型" prop="limitationType">
<el-select v-model="form.limitationType" placeholder="请选择限制类型" style="width: 100%">
<el-option v-for="dict in limitationTypeOptions" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="添加方式" prop="addWay">
<el-radio-group v-model="form.addWay" @change="changeAddWay">
<el-radio v-for="dict in addWayOptions" :key="dict.value" :value="dict.value">{{ dict.label
}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-show="form.addWay === '1'" label="文件选择" prop="fileUrl">
<el-row :gutter="10">
<el-col :span="16">
<el-upload ref="uploadRef" v-model:file-list="fileList" :action="uploadUrl" :limit="1"
:headers="uploadHeaders" :on-success="handleUploadSuccess" :before-upload="beforeUpload"
accept=".xlsx" :auto-upload="false">
<template #trigger>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-col>
<el-col :span="8">
<el-button @click="downloadTemplate">下载模板</el-button>
</el-col>
</el-row>
</el-form-item>
<el-form-item v-show="form.addWay === '0'" label="内容文件" prop="addTxt">
<el-input v-model="form.addTxt" type="textarea" :rows="6" placeholder="请输入限制内容,数据之间回车分割,每行一个数据" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" :loading="submitLoading" @click="submitForm">确定</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { Search, Plus, Edit, Delete, Download, Refresh } from '@element-plus/icons-vue'
import { filterSetApi } from '@/api/modules/filterSet'
//
const filterSetList = ref([])
const loading = ref(false)
const showSearch = ref(true)
//
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
filterType: '',
limitationType: '',
addWay: '',
addTxt: ''
})
const total = ref(0)
//
const selectedIds = ref([])
const single = ref(true)
const multiple = ref(true)
//
const dialogVisible = ref(false)
const isEdit = ref(false)
const submitLoading = ref(false)
//
const form = reactive({
id: null,
filterType: '',
limitationType: '',
addWay: '0',
addTxt: ''
})
//
const fileList = ref([])
const uploadRef = ref(null)
const uploadUrl = '/zhishu/filterSet/upload'
const uploadHeaders = ref({
'Authorization': localStorage.getItem('token') || ''
})
//
const rules = reactive({
filterType: [
{ required: true, message: '请选择过滤类型', trigger: 'change' }
],
limitationType: [
{ required: true, message: '请选择限制类型', trigger: 'change' }
],
addWay: [
{ required: true, message: '请选择添加方式', trigger: 'change' }
],
addTxt: [
{ required: true, message: '请输入内容文件', trigger: 'blur' }
]
})
//
const formRef = ref(null)
const queryFormRef = ref(null)
//
const filterTypeOptions = ref([
{ value: '0', label: '黑名单' },
{ value: '1', label: '白名单' }
])
const limitationTypeOptions = ref([
{ value: '0', label: '店铺限制' },
{ value: '1', label: '商品限制' }
])
const addWayOptions = ref([
{ value: '0', label: '手动输入' },
{ value: '1', label: '文件上传' }
])
//
const getFilterTypeText = (value) => {
const option = filterTypeOptions.value.find(item => item.value === value)
return option ? option.label : value
}
const getLimitationTypeText = (value) => {
const option = limitationTypeOptions.value.find(item => item.value === value)
return option ? option.label : value
}
const getAddWayText = (value) => {
const option = addWayOptions.value.find(item => item.value === value)
return option ? option.label : value
}
//
const filterEmptyParams = (params) => {
const filteredParams = {}
Object.keys(params).forEach(key => {
const value = params[key]
// pageNum pageSize
if (key === 'pageNum' || key === 'pageSize') {
filteredParams[key] = value
} else if (value !== '' && value !== null && value !== undefined) {
filteredParams[key] = value
}
})
return filteredParams
}
//
const getList = async () => {
try {
loading.value = true
const filteredParams = filterEmptyParams(queryParams)
const res = await filterSetApi.getFilterSetList(filteredParams)
if (res.code === 200) {
filterSetList.value = res.data?.list || []
total.value = res.data?.total || 0
} else {
ElMessage.error(res.message || '获取过滤设置列表失败')
}
} catch (error) {
console.error('获取过滤设置列表出错:', error)
ElMessage.error(error.message || '获取过滤设置列表失败')
} finally {
loading.value = false
}
}
//
const handleQuery = () => {
queryParams.pageNum = 1
getList()
}
//
const resetQuery = () => {
if (queryFormRef.value) {
queryFormRef.value.resetFields()
}
Object.keys(queryParams).forEach(key => {
if (key === 'pageNum') {
queryParams[key] = 1
} else if (key === 'pageSize') {
queryParams[key] = 10
} else {
queryParams[key] = ''
}
})
getList()
}
//
const handleSelectionChange = (selection) => {
selectedIds.value = selection.map(item => item.id)
single.value = selection.length !== 1
multiple.value = !selection.length
}
//
const handleAdd = () => {
resetForm()
isEdit.value = false
dialogVisible.value = true
}
//
const handleUpdate = async (row) => {
resetForm()
if (row) {
//
isEdit.value = true
await getFilterSetDetail(row.id)
} else {
//
if (selectedIds.value.length > 0) {
isEdit.value = true
await getFilterSetDetail(selectedIds.value[0])
}
}
dialogVisible.value = true
}
//
const getFilterSetDetail = async (id) => {
try {
submitLoading.value = true
const res = await filterSetApi.getFilterSetById(id)
if (res.code === 200 && res.data) {
Object.keys(form).forEach(key => {
if (res.data[key] !== undefined) {
form[key] = res.data[key]
}
})
} else {
ElMessage.error(res.message || '获取过滤设置信息失败')
dialogVisible.value = false
}
} catch (error) {
console.error('获取过滤设置信息出错:', error)
ElMessage.error(error.message || '获取过滤设置信息失败')
dialogVisible.value = false
} finally {
submitLoading.value = false
}
}
//
const submitForm = async () => {
if (!formRef.value) return
await formRef.value.validate(async (valid) => {
if (valid) {
if (form.addWay === '1') {
//
submitUpload()
} else {
//
submitFormData()
}
}
})
}
//
const submitUpload = () => {
if (fileList.value.length === 0) {
ElMessage.error('请上传文件')
return
}
// addTxt
form.addTxt = '1'
formRef.value?.validate(async (valid) => {
if (valid) {
form.addTxt = '' //
uploadRef.value?.submit()
}
})
}
//
const submitFormData = async () => {
try {
submitLoading.value = true
let res
if (isEdit.value) {
res = await filterSetApi.updateFilterSet(form)
} else {
res = await filterSetApi.addFilterSet(form)
}
if (res.code === 200) {
ElMessage.success(`${isEdit.value ? '更新' : '添加'}成功`)
dialogVisible.value = false
getList()
} else {
ElMessage.error(res.message || `${isEdit.value ? '更新' : '添加'}失败`)
}
} catch (error) {
console.error(`${isEdit.value ? '更新' : '添加'}过滤设置出错:`, error)
ElMessage.error(error.message || `${isEdit.value ? '更新' : '添加'}失败`)
} finally {
submitLoading.value = false
}
}
//
const handleDelete = (row) => {
const ids = row ? [row.id] : selectedIds.value
const names = row ? [row.id] : selectedIds.value
ElMessageBox.confirm(
`确定要删除过滤设置编号为"${names.join(',')}"的数据项吗?`,
'删除确认',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
).then(async () => {
try {
const res = await filterSetApi.deleteFilterSet(ids)
if (res.code === 200) {
ElMessage.success('删除成功')
getList()
} else {
ElMessage.error(res.message || '删除失败')
}
} catch (error) {
console.error('删除过滤设置出错:', error)
ElMessage.error(error.message || '删除失败')
}
}).catch(() => {
//
})
}
//
const handleExport = async () => {
try {
const res = await filterSetApi.exportFilterSet(queryParams)
//
const blob = new Blob([res], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
})
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = `filterSet_${new Date().getTime()}.xlsx`
link.click()
window.URL.revokeObjectURL(url)
ElMessage.success('导出成功')
} catch (error) {
console.error('导出过滤设置出错:', error)
ElMessage.error(error.message || '导出失败')
}
}
//
const downloadTemplate = async () => {
try {
const res = await filterSetApi.getImportTemplate()
//
const blob = new Blob([res], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
})
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = `filter_template_${new Date().getTime()}.xlsx`
link.click()
window.URL.revokeObjectURL(url)
ElMessage.success('模板下载成功')
} catch (error) {
console.error('下载模板出错:', error)
ElMessage.error(error.message || '下载模板失败')
}
}
//
const changeAddWay = () => {
if (uploadRef.value) {
uploadRef.value.clearFiles()
}
fileList.value = []
form.addTxt = ''
}
//
const beforeUpload = (file) => {
const isExcel = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
if (!isExcel) {
ElMessage.error('只能上传 Excel 文件!')
return false
}
const isLt10M = file.size / 1024 / 1024 < 10
if (!isLt10M) {
ElMessage.error('文件大小不能超过 10MB!')
return false
}
return true
}
//
const handleUploadSuccess = async (response) => {
if (response.code === 200) {
const data = response.data
let addTxt = ''
for (let i = 0; i < data.length; i++) {
if (addTxt === '') {
addTxt = data[i].addTxt
} else {
addTxt = addTxt + '\n' + data[i].addTxt
}
}
form.addTxt = addTxt
submitFormData()
} else {
ElMessage.error(response.message || '文件上传失败')
}
}
//
const resetForm = () => {
if (formRef.value) {
formRef.value.resetFields()
}
Object.keys(form).forEach(key => {
if (key === 'id') {
form[key] = null
} else if (key === 'addWay') {
form[key] = '0'
} else {
form[key] = ''
}
})
fileList.value = []
if (uploadRef.value) {
uploadRef.value.clearFiles()
}
}
//
const handleSizeChange = (val) => {
queryParams.pageSize = val
getList()
}
//
const handleCurrentChange = (val) => {
queryParams.pageNum = val
getList()
}
//
onMounted(() => {
getList()
})
</script>
<style scoped>
.filter-set-container {
padding: 20px;
}
.search-section {
margin-bottom: 20px;
}
.header-actions {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.action-buttons {
display: flex;
gap: 10px;
}
.toolbar-actions {
display: flex;
gap: 10px;
}
.pagination-container {
margin-top: 20px;
display: flex;
justify-content: flex-end;
}
:deep(.el-dialog__body) {
padding-top: 10px;
padding-bottom: 10px;
}
:deep(.el-form-item) {
margin-bottom: 18px;
}
:deep(.el-card__body) {
padding: 20px;
}
</style>

View File

@ -250,11 +250,11 @@ import {
updateLogistics, updateLogistics,
} from '@/api/modules/logistics' } from '@/api/modules/logistics'
import { import {
getCitiesByProvinceId, // getCitiesByProvinceId,
getDistrictsByCityId, // getDistrictsByCityId,
getFreInfo, getFreInfo,
getProvinces, getProvinces,
UpdateTemplate // UpdateTemplate
} from '@/api/modules/district' } from '@/api/modules/district'
// import { depotNameList } from '@/api/modules/shelves' // import { depotNameList } from '@/api/modules/shelves'

View File

@ -0,0 +1,316 @@
<template>
<div class="p-2">
<transition enter-active-class="animate__animated animate__fadeInDown" leave-active-class="animate__animated animate__fadeOutUp">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="店铺" prop="shopId">
<el-select v-model="queryParams.shopId" placeholder="请选择店铺">
<el-option v-for="item in shopList" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="商家编码" prop="itemNumber">
<el-input v-model="queryParams.itemNumber" placeholder="请输入编码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['zhishu:shopGoodsPublished:remove']">删除</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="shopGoodsPublishedList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="图示" align="center" prop="bookPic" :show-overflow-tooltip="true">
<template #default="{ row }">
<el-image
style="width: 50px;height: 50px"
:src="row.bookPic"
fit="scale-down"
:preview-src-list="[row.bookPic]"
preview-teleported
>
<template #error>
<div class="image-slot">
暂无
</div>
</template>
</el-image>
</template>
</el-table-column>
<el-table-column label="商家编码" align="left" prop="itemNumber"/>
<el-table-column label="线上商品名称" align="left" prop="goodsName" :show-overflow-tooltip="true">
<template #default="{ row }">
<div class="truncate-cell">
<el-link
v-if="row.shopType === 1"
type="primary"
:href="`https://mobile.yangkeduo.com/goods.html?goods_id=${row.onlineId}`"
target="_blank"
:underline="false"
>
{{ row.goodsName }}
</el-link>
<el-link
v-else-if="row.shopType === 2"
type="primary"
:href="`https://book.kongfz.com/${row.mallId}/${row.onlineId}`"
target="_blank"
:underline="false"
>
{{ row.goodsName }}
</el-link>
</div>
</template>
</el-table-column>
<el-table-column label="店铺" align="left" prop="shopName"/>
<el-table-column label="线上商品/规格ID" align="left" prop="onlineId"/>
<el-table-column label="状态" align="left" prop="status">
<template #default="{ row }">
<span v-if="row.status==0">在售</span>
<span v-else>未售</span>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
</div>
</template>
<script setup name="ShopGoodsPublished">
import { getShopGoodsPublishedList, deleteShopGoodsPublished } from '@/api/modules/shopGoodsPublished';
import { getListShop } from '@/api/zhishu/shop';
import { ref, reactive, toRefs, onMounted } from 'vue';
import { depotNameList } from '@/api/zhishu/shelves';
import { ElMessage, ElMessageBox } from 'element-plus';
//
const shopGoodsPublishedList = ref([]);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref();
const initFormData = {
id: undefined,
shopGoodsId: undefined,
shopId: undefined,
goodsName: undefined,
shopName: undefined,
platformId: undefined,
status: undefined,
itemNumber: undefined,
bookPic: undefined,
isbn: undefined,
conditionCode: undefined,
price: undefined,
createTime: undefined,
updateTime: undefined
}
const data = reactive({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
shopGoodsId: undefined,
shopId: undefined,
goodsName: undefined,
shopName: undefined,
platformId: undefined,
status: undefined,
itemNumber: undefined,
bookPic: undefined,
isbn: undefined,
conditionCode: undefined,
price: undefined,
createTime: undefined,
updateTime: undefined,
depotId: undefined,
params: {}
},
rules: {
id: [
{ required: true, message: "主键不能为空", trigger: "blur" }
],
}
});
const { queryParams, form, rules } = toRefs(data);
//
const getList = async () => {
loading.value = true;
try {
const res = await getShopGoodsPublishedList(queryParams.value);
shopGoodsPublishedList.value = res.data.rows || res.rows || [];
total.value = res.data.total || res.total || 0;
} catch (error) {
console.error('获取列表失败:', error);
ElMessage.error('获取列表失败');
} finally {
loading.value = false;
}
}
const depotList = ref([]);
const selectedId = ref(null);
const handleDepotChange = (val) => {
queryParams.value.depotId = val?.id || null;
}
const loadData = async () => {
loading.value = true;
try {
const res = await depotNameList();
depotList.value = res.rows || [];
} catch (error) {
console.error('加载数据失败:', error);
} finally {
loading.value = false;
}
}
const conditionCodeTypes = [
{ value: '1', label: '一品' },
{ value: '2', label: '二品' },
{ value: '3', label: '三品' },
{ value: '4', label: '四品' },
{ value: '5', label: '五品' },
{ value: '6', label: '六品' },
{ value: '6.5', label: '六五品' },
{ value: '7', label: '七品' },
{ value: '7.5', label: '七五品' },
{ value: '8', label: '八品' },
{ value: '8.5', label: '八五品' },
{ value: '9', label: '九品' },
{ value: '9.5', label: '九五品' },
{ value: '10', label: '全新' }
];
//
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
//
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
//
const handleSelectionChange = (selection) => {
ids.value = selection.map(item => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
//
const handleDelete = async (row) => {
const _ids = row?.id || ids.value;
try {
await ElMessageBox.confirm('是否确认删除记录发布数据编号为"' + _ids + '"的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
});
await deleteShopGoodsPublished(_ids);
ElMessage.success("删除成功");
await getList();
} catch (error) {
if (error !== 'cancel') {
console.error('删除失败:', error);
ElMessage.error('删除失败');
}
} finally {
loading.value = false;
}
}
//
const shopList = ref([]);
const getShopList = async () => {
try {
const res = await getListShop();
const data = res.data || res;
if (!data || data.length === 0) {
shopList.value = [];
} else {
shopList.value = data.map(item => ({
value: item.id,
label: item.shopName
}));
}
} catch (error) {
console.error('获取店铺列表失败:', error);
ElMessage.error('获取店铺列表失败');
}
}
onMounted(() => {
getList();
loadData();
getShopList();
});
</script>
<style scoped>
/* 调整表头字体大小 */
:deep(.el-table__header) th .cell {
font-size: 18px;
font-weight: bold;
}
/* 调整表格内容字体大小 */
.el-table {
font-size: 17px !important;
}
.truncate-cell {
max-width: 200px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.image-slot {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
background: #f5f7fa;
color: #909399;
font-size: 12px;
}
</style>

File diff suppressed because it is too large Load Diff