generated from Leo_Ding/web-template
邻里互助
This commit is contained in:
parent
ae7e6f07e3
commit
69a80a2e2f
4
.env.dev
4
.env.dev
@ -2,7 +2,7 @@
|
||||
NODE_ENV=development
|
||||
|
||||
# app
|
||||
VITE_TITLE=GuXuan-Admin
|
||||
VITE_TITLE=JinShan-Admin
|
||||
VITE_PUBLIC_PATH=/
|
||||
VITE_OUT_DIR=dist
|
||||
VITE_PERMISSION=false
|
||||
@ -12,7 +12,7 @@ VITE_ROUTER_BASE=/
|
||||
VITE_ROUTER_HISTORY=hash
|
||||
|
||||
# api
|
||||
VITE_API_BASIC=/
|
||||
VITE_API_BASIC=http://10.10.1.6:8071
|
||||
VITE_API_HTTP=/api/v1/
|
||||
# storage
|
||||
VITE_STORAGE_NAMESPACE = gin-admin_local_
|
||||
@ -2,7 +2,7 @@
|
||||
NODE_ENV=production
|
||||
|
||||
# app
|
||||
VITE_TITLE=GuXuan-Admin
|
||||
VITE_TITLE=JinShan-Admin
|
||||
VITE_PUBLIC_PATH=/
|
||||
VITE_OUT_DIR=dist
|
||||
VITE_PERMISSION=true
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
# GuXuan-Admin-Template
|
||||
# JinShan-Admin-Template
|
||||
|
||||
> GIN-Admin-vue is a frontend project for [gin-admin](https://github.com/LyricTian/gin-admin) base on Ant Design React.
|
||||
|
||||

|
||||

|
||||
|
||||
- [Preview](http://101.42.232.163:8040)
|
||||
- Username: admin
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
export default () => ({
|
||||
host: true,
|
||||
port: 8080,
|
||||
open:true,
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://101.42.232.163:8080/api',
|
||||
target: 'http://10.10.1.6:8071',
|
||||
// target: 'http://127.0.0.1:8045/api',
|
||||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace('/api', ''),
|
||||
|
||||
581
package-lock.json
generated
581
package-lock.json
generated
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "gin-admin",
|
||||
"name": "JinShan-Admin",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "gin-admin",
|
||||
"name": "JinShan-Admin",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"@ant-design/colors": "^7.0.0",
|
||||
@ -49,10 +49,12 @@
|
||||
"husky": "^8.0.3",
|
||||
"less": "^4.2.0",
|
||||
"lint-staged": "^14.0.0",
|
||||
"mockjs": "^1.1.0",
|
||||
"rollup-plugin-visualizer": "^5.9.2",
|
||||
"vite": "^4.4.9",
|
||||
"vite-plugin-compression": "^0.5.1",
|
||||
"vite-plugin-eslint": "^1.8.1",
|
||||
"vite-plugin-mock": "^3.0.2",
|
||||
"vite-plugin-progress": "^0.0.7",
|
||||
"vitepress": "^1.0.0-beta.7"
|
||||
}
|
||||
@ -1479,6 +1481,20 @@
|
||||
"@ctrl/tinycolor": "^3.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/anymatch": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
|
||||
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"normalize-path": "^3.0.0",
|
||||
"picomatch": "^2.0.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/argparse": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
|
||||
@ -1533,6 +1549,19 @@
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/binary-extensions": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
||||
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/body-scroll-lock": {
|
||||
"version": "4.0.0-beta.0",
|
||||
"resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz",
|
||||
@ -1591,6 +1620,22 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/bundle-require": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/bundle-require/-/bundle-require-4.2.1.tgz",
|
||||
"integrity": "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"load-tsconfig": "^0.2.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"esbuild": ">=0.17"
|
||||
}
|
||||
},
|
||||
"node_modules/callsites": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",
|
||||
@ -1624,6 +1669,44 @@
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/chokidar": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
|
||||
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"anymatch": "~3.1.2",
|
||||
"braces": "~3.0.2",
|
||||
"glob-parent": "~5.1.2",
|
||||
"is-binary-path": "~2.1.0",
|
||||
"is-glob": "~4.0.1",
|
||||
"normalize-path": "~3.0.0",
|
||||
"readdirp": "~3.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.10.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/chokidar/node_modules/glob-parent": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"is-glob": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-cursor": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz",
|
||||
@ -1764,6 +1847,39 @@
|
||||
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/connect": {
|
||||
"version": "3.7.0",
|
||||
"resolved": "https://registry.npmmirror.com/connect/-/connect-3.7.0.tgz",
|
||||
"integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"debug": "2.6.9",
|
||||
"finalhandler": "1.1.2",
|
||||
"parseurl": "~1.3.3",
|
||||
"utils-merge": "1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/connect/node_modules/debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/connect/node_modules/ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/copy-anything": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
|
||||
@ -1949,6 +2065,13 @@
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
|
||||
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
|
||||
},
|
||||
"node_modules/ee-first": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
|
||||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
@ -1959,6 +2082,16 @@
|
||||
"resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
|
||||
"integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
|
||||
},
|
||||
"node_modules/encodeurl": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/errno": {
|
||||
"version": "0.1.8",
|
||||
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
|
||||
@ -2018,6 +2151,13 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/escape-html": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
|
||||
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/escape-string-regexp": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
||||
@ -2446,6 +2586,42 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/finalhandler": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.2.tgz",
|
||||
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"debug": "2.6.9",
|
||||
"encodeurl": "~1.0.2",
|
||||
"escape-html": "~1.0.3",
|
||||
"on-finished": "~2.3.0",
|
||||
"parseurl": "~1.3.3",
|
||||
"statuses": "~1.5.0",
|
||||
"unpipe": "~1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/finalhandler/node_modules/debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/finalhandler/node_modules/ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/find-up": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
||||
@ -2737,6 +2913,19 @@
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/is-binary-path": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
||||
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"binary-extensions": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/is-docker": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
|
||||
@ -3137,6 +3326,16 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/load-tsconfig": {
|
||||
"version": "0.2.5",
|
||||
"resolved": "https://registry.npmmirror.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
|
||||
"integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/locate-path": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
||||
@ -3385,12 +3584,23 @@
|
||||
"integrity": "sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/mockjs": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz",
|
||||
"integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"commander": "*"
|
||||
},
|
||||
"bin": {
|
||||
"random": "bin/random"
|
||||
}
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "4.0.2",
|
||||
@ -3438,6 +3648,16 @@
|
||||
"node": ">= 4.4.x"
|
||||
}
|
||||
},
|
||||
"node_modules/normalize-path": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm-run-path": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz",
|
||||
@ -3476,6 +3696,19 @@
|
||||
"url": "https://github.com/fb55/nth-check?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/on-finished": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz",
|
||||
"integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ee-first": "1.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
@ -3599,6 +3832,16 @@
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/parseurl": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
|
||||
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/path-exists": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||
@ -3625,6 +3868,13 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/path-to-regexp": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
|
||||
"integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/picocolors": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||
@ -3886,6 +4136,19 @@
|
||||
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/readdirp": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
|
||||
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"picomatch": "^2.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/regenerator-runtime": {
|
||||
"version": "0.13.9",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
|
||||
@ -4363,6 +4626,16 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/statuses": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",
|
||||
"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/string-argv": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz",
|
||||
@ -4538,6 +4811,16 @@
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/unpipe": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
|
||||
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/untildify": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/untildify/-/untildify-4.0.0.tgz",
|
||||
@ -4562,6 +4845,16 @@
|
||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/utils-merge": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "4.4.9",
|
||||
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.4.9.tgz",
|
||||
@ -4666,6 +4959,48 @@
|
||||
"vite": ">=2"
|
||||
}
|
||||
},
|
||||
"node_modules/vite-plugin-mock": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/vite-plugin-mock/-/vite-plugin-mock-3.0.2.tgz",
|
||||
"integrity": "sha512-bD//HvkTygGmk+LsIAdf0jGNlCv4iWv0kZlH9UEgWT6QYoUwfjQAE4SKxHRw2tfLgVhbPQVv/+X3YlNWvueGUA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"bundle-require": "^4.0.1",
|
||||
"chokidar": "^3.5.3",
|
||||
"connect": "^3.7.0",
|
||||
"debug": "^4.3.4",
|
||||
"fast-glob": "^3.2.12",
|
||||
"path-to-regexp": "^6.2.1",
|
||||
"picocolors": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"esbuild": ">=0.17",
|
||||
"mockjs": ">=1.1.0",
|
||||
"vite": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vite-plugin-mock/node_modules/debug": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",
|
||||
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ms": "^2.1.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"supports-color": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/vite-plugin-progress": {
|
||||
"version": "0.0.7",
|
||||
"resolved": "https://registry.npmjs.org/vite-plugin-progress/-/vite-plugin-progress-0.0.7.tgz",
|
||||
@ -5977,6 +6312,16 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"anymatch": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
|
||||
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"normalize-path": "^3.0.0",
|
||||
"picomatch": "^2.0.4"
|
||||
}
|
||||
},
|
||||
"argparse": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
|
||||
@ -6025,6 +6370,12 @@
|
||||
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz",
|
||||
"integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw=="
|
||||
},
|
||||
"binary-extensions": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
||||
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
|
||||
"dev": true
|
||||
},
|
||||
"body-scroll-lock": {
|
||||
"version": "4.0.0-beta.0",
|
||||
"resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz",
|
||||
@ -6074,6 +6425,15 @@
|
||||
"run-applescript": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"bundle-require": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/bundle-require/-/bundle-require-4.2.1.tgz",
|
||||
"integrity": "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"load-tsconfig": "^0.2.3"
|
||||
}
|
||||
},
|
||||
"callsites": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",
|
||||
@ -6095,6 +6455,33 @@
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
|
||||
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"anymatch": "~3.1.2",
|
||||
"braces": "~3.0.2",
|
||||
"fsevents": "~2.3.2",
|
||||
"glob-parent": "~5.1.2",
|
||||
"is-binary-path": "~2.1.0",
|
||||
"is-glob": "~4.0.1",
|
||||
"normalize-path": "~3.0.0",
|
||||
"readdirp": "~3.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"glob-parent": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-glob": "^4.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"cli-cursor": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz",
|
||||
@ -6212,6 +6599,35 @@
|
||||
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
|
||||
"dev": true
|
||||
},
|
||||
"connect": {
|
||||
"version": "3.7.0",
|
||||
"resolved": "https://registry.npmmirror.com/connect/-/connect-3.7.0.tgz",
|
||||
"integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"debug": "2.6.9",
|
||||
"finalhandler": "1.1.2",
|
||||
"parseurl": "~1.3.3",
|
||||
"utils-merge": "1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"copy-anything": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
|
||||
@ -6363,6 +6779,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"ee-first": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
|
||||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
|
||||
"dev": true
|
||||
},
|
||||
"emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
@ -6373,6 +6795,12 @@
|
||||
"resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
|
||||
"integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
|
||||
},
|
||||
"encodeurl": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
|
||||
"dev": true
|
||||
},
|
||||
"errno": {
|
||||
"version": "0.1.8",
|
||||
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
|
||||
@ -6419,6 +6847,12 @@
|
||||
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
|
||||
"dev": true
|
||||
},
|
||||
"escape-html": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
|
||||
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
|
||||
"dev": true
|
||||
},
|
||||
"escape-string-regexp": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
||||
@ -6737,6 +7171,38 @@
|
||||
"to-regex-range": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"finalhandler": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.2.tgz",
|
||||
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"debug": "2.6.9",
|
||||
"encodeurl": "~1.0.2",
|
||||
"escape-html": "~1.0.3",
|
||||
"on-finished": "~2.3.0",
|
||||
"parseurl": "~1.3.3",
|
||||
"statuses": "~1.5.0",
|
||||
"unpipe": "~1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"find-up": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
||||
@ -6946,6 +7412,15 @@
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||
"dev": true
|
||||
},
|
||||
"is-binary-path": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
||||
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"binary-extensions": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"is-docker": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
|
||||
@ -7238,6 +7713,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"load-tsconfig": {
|
||||
"version": "0.2.5",
|
||||
"resolved": "https://registry.npmmirror.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
|
||||
"integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
|
||||
"dev": true
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
||||
@ -7431,12 +7912,20 @@
|
||||
"integrity": "sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==",
|
||||
"dev": true
|
||||
},
|
||||
"mockjs": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz",
|
||||
"integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"commander": "*"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"nanoid": {
|
||||
"version": "4.0.2",
|
||||
@ -7466,6 +7955,12 @@
|
||||
"sax": "^1.2.4"
|
||||
}
|
||||
},
|
||||
"normalize-path": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
||||
"dev": true
|
||||
},
|
||||
"npm-run-path": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz",
|
||||
@ -7497,6 +7992,15 @@
|
||||
"boolbase": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"on-finished": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz",
|
||||
"integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ee-first": "1.1.1"
|
||||
}
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
@ -7587,6 +8091,12 @@
|
||||
"integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
|
||||
"dev": true
|
||||
},
|
||||
"parseurl": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
|
||||
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
|
||||
"dev": true
|
||||
},
|
||||
"path-exists": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||
@ -7604,6 +8114,12 @@
|
||||
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
||||
"dev": true
|
||||
},
|
||||
"path-to-regexp": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
|
||||
"integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
|
||||
"dev": true
|
||||
},
|
||||
"picocolors": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||
@ -7761,6 +8277,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
|
||||
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"picomatch": "^2.2.1"
|
||||
}
|
||||
},
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.9",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
|
||||
@ -8117,6 +8642,12 @@
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
|
||||
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
|
||||
},
|
||||
"statuses": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",
|
||||
"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
|
||||
"dev": true
|
||||
},
|
||||
"string-argv": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz",
|
||||
@ -8254,6 +8785,12 @@
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
|
||||
"dev": true
|
||||
},
|
||||
"unpipe": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
|
||||
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
|
||||
"dev": true
|
||||
},
|
||||
"untildify": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/untildify/-/untildify-4.0.0.tgz",
|
||||
@ -8275,6 +8812,12 @@
|
||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
|
||||
"dev": true
|
||||
},
|
||||
"utils-merge": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
|
||||
"dev": true
|
||||
},
|
||||
"vite": {
|
||||
"version": "4.4.9",
|
||||
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.4.9.tgz",
|
||||
@ -8337,6 +8880,32 @@
|
||||
"rollup": "^2.77.2"
|
||||
}
|
||||
},
|
||||
"vite-plugin-mock": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/vite-plugin-mock/-/vite-plugin-mock-3.0.2.tgz",
|
||||
"integrity": "sha512-bD//HvkTygGmk+LsIAdf0jGNlCv4iWv0kZlH9UEgWT6QYoUwfjQAE4SKxHRw2tfLgVhbPQVv/+X3YlNWvueGUA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bundle-require": "^4.0.1",
|
||||
"chokidar": "^3.5.3",
|
||||
"connect": "^3.7.0",
|
||||
"debug": "^4.3.4",
|
||||
"fast-glob": "^3.2.12",
|
||||
"path-to-regexp": "^6.2.1",
|
||||
"picocolors": "^1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",
|
||||
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "^2.1.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"vite-plugin-progress": {
|
||||
"version": "0.0.7",
|
||||
"resolved": "https://registry.npmjs.org/vite-plugin-progress/-/vite-plugin-progress-0.0.7.tgz",
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "guxuan-admin",
|
||||
"name": "JinShan-Admin",
|
||||
"private": true,
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
@ -58,10 +58,12 @@
|
||||
"husky": "^8.0.3",
|
||||
"less": "^4.2.0",
|
||||
"lint-staged": "^14.0.0",
|
||||
"mockjs": "^1.1.0",
|
||||
"rollup-plugin-visualizer": "^5.9.2",
|
||||
"vite": "^4.4.9",
|
||||
"vite-plugin-compression": "^0.5.1",
|
||||
"vite-plugin-eslint": "^1.8.1",
|
||||
"vite-plugin-mock": "^3.0.2",
|
||||
"vite-plugin-progress": "^0.0.7",
|
||||
"vitepress": "^1.0.0-beta.7"
|
||||
}
|
||||
|
||||
16
src/apis/modules/activity.js
Normal file
16
src/apis/modules/activity.js
Normal file
@ -0,0 +1,16 @@
|
||||
/**
|
||||
* 区域模块接口
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
// 获取项目列表
|
||||
export const getProjectList = (params) => request.basic.get('/api/v1/activities', params)
|
||||
// 获取单挑数据
|
||||
export const getItem = (id) => request.basic.get(`/api/v1/activities/${id}`)
|
||||
// 添加条目
|
||||
export const createProject = (params) => request.basic.post('/api/v1/activities', params)
|
||||
// 更新role
|
||||
export const updateItem = (id, params) => request.basic.put(`/api/v1/activities/${id}`, params)
|
||||
// 删除数据
|
||||
export const delItem = (id) => request.basic.delete(`/api/v1/activities/${id}`)
|
||||
//获取活动报名列表
|
||||
export const getActivityList=(params)=>request.basic.get('/api/v1/activity-details',params)
|
||||
15
src/apis/modules/announcement.js
Normal file
15
src/apis/modules/announcement.js
Normal file
@ -0,0 +1,15 @@
|
||||
/**
|
||||
* 消息公告
|
||||
*/
|
||||
|
||||
import request from '@/utils/request'
|
||||
// 获取公告列表
|
||||
export const getNoticesList = (params) => request.basic.get('/api/v1/notices', params)
|
||||
// 获取条目
|
||||
export const getNotices = (id) => request.basic.get(`/api/v1/notices/${id}`)
|
||||
// 添加公告
|
||||
export const createNotices = (params) => request.basic.post('/api/v1/notices', params)
|
||||
// 更新公告
|
||||
export const updateNotices = (id, params) => request.basic.put(`/api/v1/notices/${id}`, params)
|
||||
// 删除公告
|
||||
export const delNotices = (id) => request.basic.delete(`/api/v1/notices/${id}`)
|
||||
@ -5,3 +5,10 @@ export const getRegion = (params) => request.basic.get('/region', params)
|
||||
|
||||
// 获取 验证码ID
|
||||
export const getCaptcha = (params) => request.basic.get('/api/v1/captcha/id', params)
|
||||
|
||||
//上传图片
|
||||
export const uploadFile=(params)=>request.basic.post('/api/v1/upload',params,{
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
},
|
||||
})
|
||||
14
src/apis/modules/imgmgt.js
Normal file
14
src/apis/modules/imgmgt.js
Normal file
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* 图片管理接口
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
// 获取菜单列表
|
||||
export const getDataList = (params) => request.basic.get('/api/v1/banners', params)
|
||||
// 获取菜单条数据
|
||||
export const getMenu = (id) => request.basic.get(`/api/v1/banners/${id}`)
|
||||
// 添加菜单
|
||||
export const createMenu = (params) => request.basic.post('/api/v1/banners', params)
|
||||
// 更新菜单
|
||||
export const updateMenu = (id, params) => request.basic.put(`/api/v1/banners/${id}`, params)
|
||||
// 删除菜单
|
||||
export const delMenu = (id) => request.basic.delete(`/api/v1/banners/${id}`)
|
||||
14
src/apis/modules/mock.js
Normal file
14
src/apis/modules/mock.js
Normal file
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* 权限接口
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
// 获取role列表
|
||||
export const getUserRoleList = (params) => request.basic.get('/system/getUserRoleList', params)
|
||||
// 获取role条数据
|
||||
export const getRole = (id) => request.basic.get(`/api/v1/roles/${id}`)
|
||||
// 添加role
|
||||
export const createRole = (params) => request.basic.post('/api/v1/roles', params)
|
||||
// 更新role
|
||||
export const updateRole = (id, params) => request.basic.put(`/api/v1/roles/${id}`, params)
|
||||
// 删除role
|
||||
export const delRole = (id) => request.basic.delete(`/api/v1/roles/${id}`)
|
||||
@ -2,6 +2,7 @@ import request from '@/utils/request'
|
||||
|
||||
// 登录
|
||||
export const login = (params) => request.basic.post('/api/v1/login', params)
|
||||
export const mocklogin = (params) => request.basic.post('/api/login', params)
|
||||
// 获取用户详情
|
||||
export const getUserDetail = () => request.basic.get('/api/v1/current/user')
|
||||
// 更新用户信息
|
||||
|
||||
BIN
src/assets/blankSpace.png
Normal file
BIN
src/assets/blankSpace.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
BIN
src/assets/errImg.png
Normal file
BIN
src/assets/errImg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
539
src/assets/iconfont/demo.css
Normal file
539
src/assets/iconfont/demo.css
Normal file
@ -0,0 +1,539 @@
|
||||
/* Logo 字体 */
|
||||
@font-face {
|
||||
font-family: "iconfont logo";
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-family: "iconfont logo";
|
||||
font-size: 160px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* tabs */
|
||||
.nav-tabs {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-more {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
#tabs {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
#tabs li {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
border-bottom: 2px solid transparent;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: -1px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
|
||||
#tabs .active {
|
||||
border-bottom-color: #f00;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.tab-container .content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* 页面布局 */
|
||||
.main {
|
||||
padding: 30px 100px;
|
||||
width: 960px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.main .logo {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
margin-bottom: 30px;
|
||||
line-height: 1;
|
||||
height: 110px;
|
||||
margin-top: -50px;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.main .logo a {
|
||||
font-size: 160px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.helps {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.helps pre {
|
||||
padding: 20px;
|
||||
margin: 10px 0;
|
||||
border: solid 1px #e7e1cd;
|
||||
background-color: #fffdef;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.icon_lists {
|
||||
width: 100% !important;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.icon_lists li {
|
||||
width: 100px;
|
||||
margin-bottom: 10px;
|
||||
margin-right: 20px;
|
||||
text-align: center;
|
||||
list-style: none !important;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.icon_lists li .code-name {
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.icon_lists .icon {
|
||||
display: block;
|
||||
height: 100px;
|
||||
line-height: 100px;
|
||||
font-size: 42px;
|
||||
margin: 10px auto;
|
||||
color: #333;
|
||||
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
-moz-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
transition: font-size 0.25s linear, width 0.25s linear;
|
||||
}
|
||||
|
||||
.icon_lists .icon:hover {
|
||||
font-size: 100px;
|
||||
}
|
||||
|
||||
.icon_lists .svg-icon {
|
||||
/* 通过设置 font-size 来改变图标大小 */
|
||||
width: 1em;
|
||||
/* 图标和文字相邻时,垂直对齐 */
|
||||
vertical-align: -0.15em;
|
||||
/* 通过设置 color 来改变 SVG 的颜色/fill */
|
||||
fill: currentColor;
|
||||
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
|
||||
normalize.css 中也包含这行 */
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.icon_lists li .name,
|
||||
.icon_lists li .code-name {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* markdown 样式 */
|
||||
.markdown {
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.markdown img {
|
||||
vertical-align: middle;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
color: #404040;
|
||||
font-weight: 500;
|
||||
line-height: 40px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown h2,
|
||||
.markdown h3,
|
||||
.markdown h4,
|
||||
.markdown h5,
|
||||
.markdown h6 {
|
||||
color: #404040;
|
||||
margin: 1.6em 0 0.6em 0;
|
||||
font-weight: 500;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.markdown h2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.markdown h3 {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.markdown h4 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.markdown h5 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown h6 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown hr {
|
||||
height: 1px;
|
||||
border: 0;
|
||||
background: #e9e9e9;
|
||||
margin: 16px 0;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown p {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown>p,
|
||||
.markdown>blockquote,
|
||||
.markdown>.highlight,
|
||||
.markdown>ol,
|
||||
.markdown>ul {
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.markdown ul>li {
|
||||
list-style: circle;
|
||||
}
|
||||
|
||||
.markdown>ul li,
|
||||
.markdown blockquote ul>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown>ul li p,
|
||||
.markdown>ol li p {
|
||||
margin: 0.6em 0;
|
||||
}
|
||||
|
||||
.markdown ol>li {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
.markdown>ol li,
|
||||
.markdown blockquote ol>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown code {
|
||||
margin: 0 3px;
|
||||
padding: 0 5px;
|
||||
background: #eee;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.markdown strong,
|
||||
.markdown b {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0px;
|
||||
empty-cells: show;
|
||||
border: 1px solid #e9e9e9;
|
||||
width: 95%;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table th,
|
||||
.markdown>table td {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 8px 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
background: #F7F7F7;
|
||||
}
|
||||
|
||||
.markdown blockquote {
|
||||
font-size: 90%;
|
||||
color: #999;
|
||||
border-left: 4px solid #e9e9e9;
|
||||
padding-left: 0.8em;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown blockquote p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.markdown .anchor {
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.markdown .waiting {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.markdown h1:hover .anchor,
|
||||
.markdown h2:hover .anchor,
|
||||
.markdown h3:hover .anchor,
|
||||
.markdown h4:hover .anchor,
|
||||
.markdown h5:hover .anchor,
|
||||
.markdown h6:hover .anchor {
|
||||
opacity: 1;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.markdown>br,
|
||||
.markdown>p>br {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
background: white;
|
||||
padding: 0.5em;
|
||||
color: #333333;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-meta {
|
||||
color: #969896;
|
||||
}
|
||||
|
||||
.hljs-string,
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-strong,
|
||||
.hljs-emphasis,
|
||||
.hljs-quote {
|
||||
color: #df5000;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-type {
|
||||
color: #a71d5d;
|
||||
}
|
||||
|
||||
.hljs-literal,
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-attribute {
|
||||
color: #0086b3;
|
||||
}
|
||||
|
||||
.hljs-section,
|
||||
.hljs-name {
|
||||
color: #63a35c;
|
||||
}
|
||||
|
||||
.hljs-tag {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-attr,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class,
|
||||
.hljs-selector-attr,
|
||||
.hljs-selector-pseudo {
|
||||
color: #795da3;
|
||||
}
|
||||
|
||||
.hljs-addition {
|
||||
color: #55a532;
|
||||
background-color: #eaffea;
|
||||
}
|
||||
|
||||
.hljs-deletion {
|
||||
color: #bd2c00;
|
||||
background-color: #ffecec;
|
||||
}
|
||||
|
||||
.hljs-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* 代码高亮 */
|
||||
/* PrismJS 1.15.0
|
||||
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
|
||||
/**
|
||||
* prism.js default theme for JavaScript, CSS and HTML
|
||||
* Based on dabblet (http://dabblet.com)
|
||||
* @author Lea Verou
|
||||
*/
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
color: black;
|
||||
background: none;
|
||||
text-shadow: 0 1px white;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::-moz-selection,
|
||||
pre[class*="language-"] ::-moz-selection,
|
||||
code[class*="language-"]::-moz-selection,
|
||||
code[class*="language-"] ::-moz-selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::selection,
|
||||
pre[class*="language-"] ::selection,
|
||||
code[class*="language-"]::selection,
|
||||
code[class*="language-"] ::selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
@media print {
|
||||
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
text-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
pre[class*="language-"] {
|
||||
padding: 1em;
|
||||
margin: .5em 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
:not(pre)>code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
background: #f5f2f0;
|
||||
}
|
||||
|
||||
/* Inline code */
|
||||
:not(pre)>code[class*="language-"] {
|
||||
padding: .1em;
|
||||
border-radius: .3em;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.token.comment,
|
||||
.token.prolog,
|
||||
.token.doctype,
|
||||
.token.cdata {
|
||||
color: slategray;
|
||||
}
|
||||
|
||||
.token.punctuation {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.namespace {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.token.property,
|
||||
.token.tag,
|
||||
.token.boolean,
|
||||
.token.number,
|
||||
.token.constant,
|
||||
.token.symbol,
|
||||
.token.deleted {
|
||||
color: #905;
|
||||
}
|
||||
|
||||
.token.selector,
|
||||
.token.attr-name,
|
||||
.token.string,
|
||||
.token.char,
|
||||
.token.builtin,
|
||||
.token.inserted {
|
||||
color: #690;
|
||||
}
|
||||
|
||||
.token.operator,
|
||||
.token.entity,
|
||||
.token.url,
|
||||
.language-css .token.string,
|
||||
.style .token.string {
|
||||
color: #9a6e3a;
|
||||
background: hsla(0, 0%, 100%, .5);
|
||||
}
|
||||
|
||||
.token.atrule,
|
||||
.token.attr-value,
|
||||
.token.keyword {
|
||||
color: #07a;
|
||||
}
|
||||
|
||||
.token.function,
|
||||
.token.class-name {
|
||||
color: #DD4A68;
|
||||
}
|
||||
|
||||
.token.regex,
|
||||
.token.important,
|
||||
.token.variable {
|
||||
color: #e90;
|
||||
}
|
||||
|
||||
.token.important,
|
||||
.token.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.token.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.token.entity {
|
||||
cursor: help;
|
||||
}
|
||||
23
src/assets/iconfont/iconfont.css
Normal file
23
src/assets/iconfont/iconfont.css
Normal file
@ -0,0 +1,23 @@
|
||||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 4966438 */
|
||||
src: url('iconfont.woff2?t=1751607897346') format('woff2'),
|
||||
url('iconfont.woff?t=1751607897346') format('woff'),
|
||||
url('iconfont.ttf?t=1751607897346') format('truetype');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-family: "iconfont" !important;
|
||||
font-size: 16px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-huodongliebiao-copy:before {
|
||||
content: "\e600";
|
||||
}
|
||||
|
||||
.icon-gonggao:before {
|
||||
content: "\e62a";
|
||||
}
|
||||
|
||||
1
src/assets/iconfont/iconfont.js
Normal file
1
src/assets/iconfont/iconfont.js
Normal file
@ -0,0 +1 @@
|
||||
window._iconfont_svg_string_4966438='<svg><symbol id="icon-huodongliebiao-copy" viewBox="0 0 1024 1024"><path d="M419.749 488.787H219.263c-38.598 0-70-31.402-70-70V218.3c0-38.598 31.402-70 70-70h200.486c38.598 0 70 31.402 70 70v200.486c0 38.599-31.402 70.001-70 70.001zM219.263 208.3c-5.514 0-10 4.486-10 10v200.486c0 5.514 4.486 10 10 10h200.486c5.514 0 10-4.486 10-10V218.3c0-5.514-4.486-10-10-10H219.263zM419.749 875.699H219.263c-38.598 0-70-31.401-70-70V605.214c0-38.599 31.402-70 70-70h200.486c38.598 0 70 31.401 70 70v200.485c0 38.599-31.402 70-70 70zM219.263 595.214c-5.514 0-10 4.486-10 10v200.485c0 5.514 4.486 10 10 10h200.486c5.514 0 10-4.486 10-10V605.214c0-5.514-4.486-10-10-10H219.263zM844.737 277.999h-248c-16.568 0-30-13.432-30-30s13.432-30 30-30h248c16.568 0 30 13.432 30 30s-13.431 30-30 30zM844.737 419.088h-248c-16.568 0-30-13.432-30-30s13.432-30 30-30h248c16.568 0 30 13.432 30 30s-13.431 30-30 30z" fill="#007dc3" ></path><path d="M844.737 664.912h-248c-16.568 0-30-13.432-30-30s13.432-30 30-30h248c16.568 0 30 13.432 30 30s-13.431 30-30 30zM844.737 806.001h-248c-16.568 0-30-13.432-30-30s13.432-30 30-30h248c16.568 0 30 13.432 30 30s-13.431 30-30 30z" fill="#007dc3" ></path></symbol><symbol id="icon-gonggao" viewBox="0 0 1030 1024"><path d="M748.8 281.6c-6.4-6.4-12.8-19.2-19.2-25.6-12.8-19.2-38.4-19.2-51.2-6.4-19.2 12.8-19.2 38.4-6.4 57.6 6.4 12.8 12.8 19.2 19.2 25.6 38.4 51.2 70.4 96 70.4 179.2s-32 134.4-70.4 185.6l-12.8 19.2c-12.8 19.2-6.4 44.8 6.4 57.6 6.4 6.4 12.8 6.4 19.2 6.4 12.8 0 25.6-6.4 32-19.2l12.8-19.2c38.4-57.6 89.6-128 89.6-236.8-6.4-102.4-44.8-166.4-89.6-224zM512 0c-25.6 0-51.2 12.8-83.2 44.8l-217.6 224h-96c-64 0-115.2 51.2-115.2 121.6v236.8c0 64 51.2 121.6 115.2 121.6h96l217.6 230.4c32 32 57.6 44.8 83.2 44.8s57.6-19.2 57.6-76.8v-876.8c0-51.2-32-70.4-57.6-70.4z m-19.2 934.4c-6.4 0-6.4-6.4-12.8-12.8l-230.4-236.8c-6.4-6.4-19.2-12.8-25.6-12.8h-115.2c-19.2 0-38.4-19.2-38.4-38.4v-236.8c0-19.2 19.2-38.4 38.4-38.4h115.2c12.8 0 19.2-6.4 25.6-12.8l230.4-236.8 12.8-12.8v838.4z" fill="#666666" ></path><path d="M864 121.6c-12.8-19.2-38.4-19.2-51.2-6.4s-19.2 38.4-6.4 57.6c76.8 89.6 147.2 198.4 147.2 339.2 0 147.2-70.4 249.6-147.2 339.2-12.8 19.2-12.8 38.4 6.4 57.6 6.4 6.4 12.8 12.8 25.6 12.8s19.2-6.4 25.6-12.8c83.2-96 166.4-224 166.4-390.4-6.4-179.2-89.6-300.8-166.4-396.8z" fill="#666666" ></path></symbol></svg>',(c=>{var t=(e=(e=document.getElementsByTagName("script"))[e.length-1]).getAttribute("data-injectcss"),e=e.getAttribute("data-disable-injectsvg");if(!e){var n,o,i,s,d,l=function(t,e){e.parentNode.insertBefore(t,e)};if(t&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(t){console&&console.log(t)}}n=function(){var t,e=document.createElement("div");e.innerHTML=c._iconfont_svg_string_4966438,(e=e.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",e=e,(t=document.body).firstChild?l(e,t.firstChild):t.appendChild(e))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(n,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),n()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=n,s=c.document,d=!1,h(),s.onreadystatechange=function(){"complete"==s.readyState&&(s.onreadystatechange=null,a())})}function a(){d||(d=!0,i())}function h(){try{s.documentElement.doScroll("left")}catch(t){return void setTimeout(h,50)}a()}})(window);
|
||||
23
src/assets/iconfont/iconfont.json
Normal file
23
src/assets/iconfont/iconfont.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": "4966438",
|
||||
"name": "近山",
|
||||
"font_family": "iconfont",
|
||||
"css_prefix_text": "icon-",
|
||||
"description": "",
|
||||
"glyphs": [
|
||||
{
|
||||
"icon_id": "29742036",
|
||||
"name": "活动列表",
|
||||
"font_class": "huodongliebiao-copy",
|
||||
"unicode": "e600",
|
||||
"unicode_decimal": 58880
|
||||
},
|
||||
{
|
||||
"icon_id": "8765148",
|
||||
"name": "公告",
|
||||
"font_class": "gonggao",
|
||||
"unicode": "e62a",
|
||||
"unicode_decimal": 58922
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
src/assets/iconfont/iconfont.ttf
Normal file
BIN
src/assets/iconfont/iconfont.ttf
Normal file
Binary file not shown.
BIN
src/assets/iconfont/iconfont.woff
Normal file
BIN
src/assets/iconfont/iconfont.woff
Normal file
Binary file not shown.
BIN
src/assets/iconfont/iconfont.woff2
Normal file
BIN
src/assets/iconfont/iconfont.woff2
Normal file
Binary file not shown.
@ -65,7 +65,7 @@ const content = ref('')
|
||||
const opts = deepMerge(
|
||||
{
|
||||
language: 'zh-Hans',
|
||||
height: 480,
|
||||
height: props.height,
|
||||
branding: false,
|
||||
resize: false,
|
||||
promotion: false,
|
||||
|
||||
@ -106,9 +106,6 @@ const handlePreview = async (file) => {
|
||||
|
||||
// 修改handleChange方法
|
||||
const handleChange = ({ file, fileList: updatedList }) => {
|
||||
console.log(111)
|
||||
console.log(file.status)
|
||||
console.log(updatedList)
|
||||
// 处理上传成功的情况
|
||||
if (file.status === 'done') {
|
||||
const response = file.response;
|
||||
@ -145,7 +142,7 @@ const handleCustomRequest = async (options) => {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
|
||||
const { data } = await apis.common.uploadImg(formData);
|
||||
const { data } = await apis.common.uploadFile(formData);
|
||||
const fullUrl = config('http.apiBasic') + data;
|
||||
|
||||
// 正确构造文件对象
|
||||
|
||||
@ -19,6 +19,7 @@ import UploadImage from './Upload/UploadImage.vue'
|
||||
import UploadInput from './Upload/UploadInput.vue'
|
||||
import Scrollbar from './Scrollbar/Scrollbar.vue'
|
||||
import Cascader from './Cascader/Cascader.vue'
|
||||
import GxUpload from './GxUpload/index.vue'
|
||||
import { setupLoadingDirective } from './Loading/directive'
|
||||
|
||||
const componentList = [
|
||||
@ -41,6 +42,7 @@ const componentList = [
|
||||
UploadInput,
|
||||
Scrollbar,
|
||||
Cascader,
|
||||
GxUpload
|
||||
]
|
||||
|
||||
export const loading = Loading
|
||||
|
||||
38
src/enums/enums.js
Normal file
38
src/enums/enums.js
Normal file
@ -0,0 +1,38 @@
|
||||
export class EnumManager {
|
||||
constructor(data) {
|
||||
this.data = data;
|
||||
this.valueMap = new Map(data.map(item => [item.value, item.name]));
|
||||
this.nameMap = new Map(data.map(item => [item.name, item.value]));
|
||||
this.colorMap=new Map(data.map(item=>[item.value,item.color]))
|
||||
}
|
||||
|
||||
// 获取整个数组
|
||||
getAll() {
|
||||
return this.data.map(item=>({label:item.name,value:item.value}))
|
||||
}
|
||||
|
||||
// 根据value获取name
|
||||
getName(value) {
|
||||
return this.valueMap.get(value) || '';
|
||||
}
|
||||
//根据value获取color
|
||||
getColor(value){
|
||||
return this.colorMap.get(value)||''
|
||||
}
|
||||
// 根据name获取value(可选)
|
||||
getValue(name) {
|
||||
return this.nameMap.get(name) || '';
|
||||
}
|
||||
|
||||
// 获取所有value的数组
|
||||
getValues() {
|
||||
return Array.from(this.valueMap.keys());
|
||||
}
|
||||
|
||||
// 获取所有name的数组
|
||||
getNames() {
|
||||
return Array.from(this.valueMap.values());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
15
src/enums/index.js
Normal file
15
src/enums/index.js
Normal file
@ -0,0 +1,15 @@
|
||||
import {EnumManager} from './enums'
|
||||
|
||||
const activatyStatus = new EnumManager([
|
||||
{ value: 1, name: '待审核', color: '#faad14' }, // 黄色(警告色)
|
||||
{ value: 2, name: '进行中', color: '#52c41a' }, // 绿色(进行中)
|
||||
{ value: 3, name: '已完成', color: '#1890ff' }, // 蓝色(完成色)
|
||||
{ value: 4, name: '已过期', color: '#bfbfbf' }, // 灰色(失效色)
|
||||
{ value: 5, name: '审核不通过', color: '#ff4d4f' } // 红色(错误色)
|
||||
])
|
||||
|
||||
const enumsStatus = new EnumManager([
|
||||
{ value: 0, name: '启用', color: '#52c41a' }, // 绿色(启用)
|
||||
{ value: 1, name: '停用', color: '#ff4d4f' } // 红色(停用)
|
||||
])
|
||||
export {activatyStatus,enumsStatus}
|
||||
@ -4,3 +4,4 @@ export { default as useMenu } from './useMenu'
|
||||
export { default as useModal } from './useModal'
|
||||
export { default as useMultiTab } from './useMultiTab'
|
||||
export { default as usePagination } from './usePagination'
|
||||
export { default as useSpining } from './useSpining'
|
||||
15
src/hooks/useSpining.js
Normal file
15
src/hooks/useSpining.js
Normal file
@ -0,0 +1,15 @@
|
||||
import { ref } from 'vue'
|
||||
export default () => {
|
||||
const spining = ref(false) // 直接使用基本类型ref
|
||||
const showSpining = () => {
|
||||
spining.value = true
|
||||
}
|
||||
const hideSpining = () => {
|
||||
spining.value = false
|
||||
}
|
||||
return {
|
||||
spining, // 直接暴露ref
|
||||
showSpining,
|
||||
hideSpining,
|
||||
}
|
||||
}
|
||||
@ -5,10 +5,8 @@
|
||||
<h1>{{ title }}</h1>
|
||||
</div>
|
||||
<div class="aside-body">
|
||||
<img
|
||||
alt=""
|
||||
:src="assets('logos.png')" />
|
||||
<h3>{{ $t('pages.layouts.userLayout.title') }}</h3>
|
||||
<img alt="" :src="assets('logos.png')" />
|
||||
<!-- <h3>{{ $t('pages.layouts.userLayout.title') }}</h3> -->
|
||||
<!-- <p>Vue3 + Ant Design Vue + vite</p>-->
|
||||
</div>
|
||||
<div class="aside-footer">
|
||||
@ -27,9 +25,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="basic-header__right"
|
||||
style="padding: 30px">
|
||||
<div class="basic-header__right" style="padding: 30px">
|
||||
<a-space :size="16">
|
||||
<a-dropdown :trigger="['hover']">
|
||||
<action-button :style="{ height: '44px' }">
|
||||
@ -38,10 +34,7 @@
|
||||
<a-spin />
|
||||
<template #overlay>
|
||||
<a-menu v-model:selectedKeys="current">
|
||||
<a-menu-item
|
||||
v-for="(item, key) in langData"
|
||||
:key="key"
|
||||
@click="handleLang(key)">
|
||||
<a-menu-item v-for="(item, key) in langData" :key="key" @click="handleLang(key)">
|
||||
{{ item.icon }} {{ item.label }}
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
|
||||
@ -1,18 +1,11 @@
|
||||
<template>
|
||||
<a-layout-header
|
||||
class="basic-header"
|
||||
:class="cpClassNames"
|
||||
:style="cpStyles">
|
||||
<a-layout-header class="basic-header" :class="cpClassNames" :style="cpStyles">
|
||||
<!-- 左侧 -->
|
||||
<div
|
||||
v-if="cpShowLeftSlot"
|
||||
class="basic-header__left">
|
||||
<div v-if="cpShowLeftSlot" class="basic-header__left">
|
||||
<slot name="left"></slot>
|
||||
</div>
|
||||
<!-- 中间 -->
|
||||
<div
|
||||
v-if="cpShowDefaultSlot"
|
||||
class="basic-header__center">
|
||||
<div v-if="cpShowDefaultSlot" class="basic-header__center">
|
||||
<slot></slot>
|
||||
</div>
|
||||
<!-- 右侧 -->
|
||||
@ -28,10 +21,7 @@
|
||||
<a-spin />
|
||||
<template #overlay>
|
||||
<a-menu v-model:selectedKeys="current">
|
||||
<a-menu-item
|
||||
v-for="(item, key) in langData"
|
||||
:key="key"
|
||||
@click="handleLang(key)">
|
||||
<a-menu-item v-for="(item, key) in langData" :key="key" @click="handleLang(key)">
|
||||
{{ item.icon }} {{ item.label }}
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
@ -40,9 +30,7 @@
|
||||
|
||||
<a-dropdown :trigger="['click']">
|
||||
<action-button :style="{ height: '44px' }">
|
||||
<a-avatar
|
||||
class="mr-8-1 display-inline-flex justify-content-center"
|
||||
:size="24"
|
||||
<a-avatar class="mr-8-1 display-inline-flex justify-content-center" :size="24"
|
||||
:src="userInfo?.avatar">
|
||||
</a-avatar>
|
||||
<span>{{ userInfo?.name }}</span>
|
||||
@ -50,15 +38,13 @@
|
||||
<a-spin />
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item
|
||||
<!-- <a-menu-item
|
||||
key="edit"
|
||||
@click="handleOpen">
|
||||
<edit-outlined />
|
||||
{{ $t('component.RightContent.profile') }}
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
key="logout"
|
||||
@click="handleLogout">
|
||||
</a-menu-item> -->
|
||||
<a-menu-item key="logout" @click="handleLogout">
|
||||
<login-outlined></login-outlined>
|
||||
{{ $t('component.RightContent.logout') }}
|
||||
</a-menu-item>
|
||||
@ -164,9 +150,7 @@ function handleLogout() {
|
||||
*/
|
||||
|
||||
function handleOpen() {
|
||||
router.push({
|
||||
name: 'setting',
|
||||
})
|
||||
router.push()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,17 +1,8 @@
|
||||
<template>
|
||||
<div
|
||||
class="basic-menu"
|
||||
ref="basicMenuRef">
|
||||
<a-menu
|
||||
v-model:selected-keys="selectedKeys"
|
||||
:get-pop-container="() => basicMenuRef"
|
||||
:inline-collapsed="collapsed"
|
||||
:mode="mode"
|
||||
:open-keys="cpOpenKeys"
|
||||
:theme="theme"
|
||||
:items="items"
|
||||
@openChange="onOpenChange"
|
||||
@click="handleClick"></a-menu>
|
||||
<div class="basic-menu" ref="basicMenuRef">
|
||||
<a-menu v-model:selected-keys="selectedKeys" :get-pop-container="() => basicMenuRef"
|
||||
:inline-collapsed="collapsed" :mode="mode" :open-keys="cpOpenKeys" :theme="theme" :items="items"
|
||||
@openChange="onOpenChange" @click="handleClick"></a-menu>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -79,17 +70,30 @@ watch(
|
||||
h(Badge, { count: item?.meta?.badge || 0 }),
|
||||
]),
|
||||
icon: (item) => {
|
||||
const iconName = item?.meta?.icon;
|
||||
if(!iconName) return
|
||||
// 处理阿里巴巴Iconfont图标 (以'icon-'开头)
|
||||
if (typeof (iconName)==='string') {
|
||||
const iconfontName = iconName;
|
||||
return h('span', {
|
||||
class: 'ceshi',
|
||||
'aria-hidden': true,
|
||||
innerHTML: `<i class='iconfont ${iconfontName}' style='font-size:14px'></i>`
|
||||
});
|
||||
} else {
|
||||
const icon = item?.meta?.icon
|
||||
if (icon) {
|
||||
return h(icon)
|
||||
}
|
||||
return ''
|
||||
}
|
||||
},
|
||||
children: 'children',
|
||||
},
|
||||
treeFieldName: 'children',
|
||||
keepOtherFields: true,
|
||||
})
|
||||
console.log(items)
|
||||
},
|
||||
{ immediate: true, deep: true }
|
||||
)
|
||||
@ -173,6 +177,7 @@ function onOpenChange(value) {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
&__name {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
|
||||
@ -1,13 +1,6 @@
|
||||
<template>
|
||||
<a-layout-sider
|
||||
breakpoint="lg"
|
||||
class="basic-side"
|
||||
v-model:collapsed="collapsed"
|
||||
:style="cpStyles"
|
||||
:collapsible="true"
|
||||
:collapsed-width="config.sideCollapsedWidth"
|
||||
:theme="theme"
|
||||
:width="config.sideWidth">
|
||||
<a-layout-sider breakpoint="lg" class="basic-side" v-model:collapsed="collapsed" :style="cpStyles"
|
||||
:collapsible="true" :collapsed-width="config.sideCollapsedWidth" :theme="theme" :width="config.sideWidth">
|
||||
<template #trigger>
|
||||
<div class="basic-side__trigger">
|
||||
<component :is="collapsed ? MenuUnfoldOutlined : MenuFoldOutlined"></component>
|
||||
@ -16,14 +9,10 @@
|
||||
<div class="basic-side__header">
|
||||
<slot name="header"></slot>
|
||||
</div>
|
||||
<x-scrollbar
|
||||
v-if="cpShowDefaultSlot"
|
||||
class="basic-side__body">
|
||||
<x-scrollbar v-if="cpShowDefaultSlot" class="basic-side__body">
|
||||
<slot></slot>
|
||||
</x-scrollbar>
|
||||
<div
|
||||
v-if="cpShowFooterSlot"
|
||||
class="basic-side__footer">
|
||||
<div v-if="cpShowFooterSlot" class="basic-side__footer">
|
||||
<slot name="footer"></slot>
|
||||
</div>
|
||||
</a-layout-sider>
|
||||
|
||||
@ -32,4 +32,8 @@ export default {
|
||||
account: '个人页',
|
||||
'account.trigger': '触发报错',
|
||||
'account.logout': '退出登录',
|
||||
homebanner:'首页轮播图',
|
||||
neighborhood:'邻里圈轮播图',
|
||||
announcementList:'社区公告',
|
||||
activity:'活动列表'
|
||||
}
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
import { createApp } from 'vue'
|
||||
|
||||
import App from '@/App.vue'
|
||||
import { useCore } from '@/core'
|
||||
|
||||
import { useCore } from '@/core'
|
||||
import './assets/iconfont/iconfont.css';
|
||||
const app = createApp(App)
|
||||
|
||||
useCore(app)
|
||||
app.mount('#app')
|
||||
|
||||
@ -1,11 +1,10 @@
|
||||
import Mock from 'mockjs'
|
||||
|
||||
import './modules/common.js'
|
||||
import './modules/system.js'
|
||||
import './modules/user.js'
|
||||
|
||||
export const setupMock = () => {
|
||||
Mock.setup({
|
||||
timeout: 200,
|
||||
})
|
||||
}
|
||||
// src/mock/index.js
|
||||
import userMocks from './modules/user';
|
||||
export default [
|
||||
...userMocks
|
||||
];
|
||||
// export const setupMock = () => {
|
||||
// Mock.setup({
|
||||
// timeout: 200,
|
||||
// })
|
||||
// }
|
||||
|
||||
@ -1,124 +0,0 @@
|
||||
import Mock from 'mockjs'
|
||||
|
||||
import { builder, getQueryParams } from '../util'
|
||||
|
||||
// 获取欢迎页数据
|
||||
Mock.mock(new RegExp('/home/getData'), 'get', () => {
|
||||
return builder(
|
||||
Mock.mock({
|
||||
'dynamicRows|5': [
|
||||
{
|
||||
id: '@increment',
|
||||
avatar: '@image(32, @color, @cfirst)',
|
||||
title: '@cparagraph(1, 2)',
|
||||
time: '@datetime',
|
||||
},
|
||||
],
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
// 获取分页列表
|
||||
Mock.mock(new RegExp('/common/getPageList'), 'get', () => {
|
||||
return builder(
|
||||
Mock.mock({
|
||||
'rows|10': [
|
||||
{
|
||||
id: '@increment',
|
||||
avatar: '@image(60, @color)',
|
||||
userName: '@cname',
|
||||
'userList|2-4': [
|
||||
{
|
||||
id: '@increment',
|
||||
avatar: '@image(60, @color)',
|
||||
},
|
||||
],
|
||||
title: '@ctitle',
|
||||
name: '@ctitle',
|
||||
desc: '@cparagraph(3)',
|
||||
desc1: '@cparagraph(1)',
|
||||
'valid|1': true,
|
||||
keyValue: '@word',
|
||||
content: '@cparagraph(3)',
|
||||
'tags|2-3': ['@cword(3,5)'],
|
||||
url: '@url("https")',
|
||||
time: '@date(yyyy-MM-dd HH:mm)',
|
||||
time1: '@date(MM-dd)',
|
||||
star: '@integer(20, 200)',
|
||||
like: '@integer(20, 200)',
|
||||
comment: '@integer(20, 200)',
|
||||
cover: '@image(532x320)',
|
||||
activeUsers: '@integer(10, 99)',
|
||||
newUsers: '@integer(1000, 5000)',
|
||||
count: '@integer(1, 100)',
|
||||
'status|1': ['成功', '失败'],
|
||||
},
|
||||
],
|
||||
total: 32,
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
// 保存/删除
|
||||
Mock.mock(new RegExp(/(save|delete)/), 'post', () => {
|
||||
return builder(
|
||||
Mock.mock({
|
||||
result: true,
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
// 文件上传
|
||||
Mock.mock(new RegExp('/comment/upload'), 'post', () => {
|
||||
return builder(
|
||||
Mock.mock({
|
||||
src: '@image(80, @color)',
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
// 获取地区列表
|
||||
Mock.mock(new RegExp('/common/getRegionList'), 'get', (options) => {
|
||||
const { parentId = 0 } = getQueryParams(options)
|
||||
|
||||
const list = {
|
||||
0: [
|
||||
{ id: 1, name: '北京' },
|
||||
{ id: 2, name: '山东省' },
|
||||
],
|
||||
1: [{ id: 11, name: '北京市' }],
|
||||
2: [
|
||||
{ id: 21, name: '济南市' },
|
||||
{ id: 22, name: '菏泽市' },
|
||||
{ id: 23, name: '青岛市' },
|
||||
],
|
||||
11: [
|
||||
{ id: 111, name: '东城区' },
|
||||
{ id: 112, name: '西城区' },
|
||||
{ id: 113, name: '海淀区' },
|
||||
{ id: 114, name: '昌平区' },
|
||||
{ id: 114, name: '朝阳区' },
|
||||
],
|
||||
21: [
|
||||
{ id: 211, name: '历下区' },
|
||||
{ id: 212, name: '市中区' },
|
||||
{ id: 213, name: '槐荫区' },
|
||||
],
|
||||
22: [
|
||||
{ id: 221, name: '牡丹区' },
|
||||
{ id: 222, name: '定陶区' },
|
||||
{ id: 223, name: '郓城县' },
|
||||
],
|
||||
23: [
|
||||
{ id: 231, name: '市南区' },
|
||||
{ id: 232, name: '市北区' },
|
||||
{ id: 233, name: '黄岛区' },
|
||||
],
|
||||
}
|
||||
|
||||
return builder(
|
||||
Mock.mock({
|
||||
rows: list[parentId],
|
||||
})
|
||||
)
|
||||
})
|
||||
@ -1,391 +0,0 @@
|
||||
import Mock from 'mockjs'
|
||||
|
||||
import { builder } from '../util'
|
||||
|
||||
// 获取角色列表
|
||||
Mock.mock(new RegExp('/system/getUserRoleList'), 'get', () => {
|
||||
return builder(
|
||||
Mock.mock({
|
||||
rows: [
|
||||
{
|
||||
name: '超级管理员',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
{
|
||||
name: '管理员',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
children: [
|
||||
{
|
||||
name: '系统管理员',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
{
|
||||
name: '业务管理员',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
{
|
||||
name: '数据管理员',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: '操作员',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
children: [
|
||||
{
|
||||
name: '公告维护员',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
{
|
||||
name: '审核员',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
{
|
||||
name: '复审员',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
// 获取用户分页列表
|
||||
Mock.mock(new RegExp('/system/getUserPageList'), 'get', () => {
|
||||
return builder(
|
||||
Mock.mock({
|
||||
'rows|10': [
|
||||
{
|
||||
id: '@id',
|
||||
avatar: '@image(60x60, @color, @cfirst)',
|
||||
userName: '@email',
|
||||
name: '@cname',
|
||||
'roleName|+1': ['超级管理员', '业务管理员', '数据管理员'],
|
||||
date: '@date',
|
||||
},
|
||||
],
|
||||
total: 40,
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
// 获取菜单列表
|
||||
Mock.mock(new RegExp('/system/getMenuList'), 'get', () => {
|
||||
return builder(
|
||||
Mock.mock({
|
||||
rows: [
|
||||
{
|
||||
name: '欢迎页',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'menu',
|
||||
},
|
||||
{
|
||||
name: '表单页',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'menu',
|
||||
children: [
|
||||
{
|
||||
name: '基础表单',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'menu',
|
||||
children: [
|
||||
{
|
||||
name: '新增',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
{
|
||||
name: '编辑',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
{
|
||||
name: '删除',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: '分步表单',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'menu',
|
||||
children: [
|
||||
{
|
||||
name: '新增',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
{
|
||||
name: '编辑',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
{
|
||||
name: '删除',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: '列表页',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'menu',
|
||||
children: [
|
||||
{
|
||||
name: '基础列表',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'menu',
|
||||
children: [
|
||||
{
|
||||
name: '新增',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
{
|
||||
name: '编辑',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
{
|
||||
name: '删除',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: '卡片列表',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'menu',
|
||||
children: [
|
||||
{
|
||||
name: '新增',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
{
|
||||
name: '编辑',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
{
|
||||
name: '删除',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: '搜索列表',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'menu',
|
||||
children: [
|
||||
{
|
||||
name: '新增',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
{
|
||||
name: '编辑',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
{
|
||||
name: '删除',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
type: 'button',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
// 获取菜单列表
|
||||
Mock.mock(new RegExp('/system/getNewMenuList'), 'get', () => {
|
||||
return builder(
|
||||
Mock.mock({
|
||||
rows: [
|
||||
{
|
||||
name: '欢迎页',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
{
|
||||
name: '表单页',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
children: [
|
||||
{
|
||||
name: '基础表单',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
{
|
||||
name: '分步表单',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: '列表页',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
children: [
|
||||
{
|
||||
name: '基础列表',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
{
|
||||
name: '卡片列表',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
{
|
||||
name: '搜索列表',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
// 获取字典分类列表
|
||||
Mock.mock(new RegExp('/system/getDictTypeList'), 'get', () => {
|
||||
return builder(
|
||||
Mock.mock({
|
||||
rows: [
|
||||
{
|
||||
name: '通知类型',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
code: '@word',
|
||||
},
|
||||
{
|
||||
name: '性别',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
code: '@word',
|
||||
},
|
||||
{
|
||||
name: '菜单类型',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
code: '@word',
|
||||
},
|
||||
{
|
||||
name: '用户类型',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
code: '@word',
|
||||
children: [
|
||||
{
|
||||
name: '移动端',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
code: '@word',
|
||||
},
|
||||
{
|
||||
name: '桌面端',
|
||||
alias: '@word(2,4)',
|
||||
sort: '@increment',
|
||||
key: '@id',
|
||||
code: '@word',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
})
|
||||
)
|
||||
})
|
||||
@ -1,22 +1,37 @@
|
||||
import Mock from 'mockjs'
|
||||
|
||||
import { builder, getBody } from '../util'
|
||||
|
||||
// 登录
|
||||
Mock.mock(new RegExp('/user/login'), 'post', (options) => {
|
||||
const { username, password } = getBody(options)
|
||||
|
||||
if ('admin' === username && '123456' === password) {
|
||||
return builder(
|
||||
Mock.mock({
|
||||
id: '@increment',
|
||||
username: username,
|
||||
avatar: '@dataImage',
|
||||
token: '@guid',
|
||||
email: '@email',
|
||||
})
|
||||
)
|
||||
} else {
|
||||
return builder({}, '301', '用户名或密码错误')
|
||||
// src/mock/user.js
|
||||
export default [
|
||||
// GET 示例
|
||||
{
|
||||
url: '/api/user',
|
||||
method: 'get',
|
||||
response: () => ({
|
||||
code: 0,
|
||||
data: {
|
||||
'list|5-10': [{
|
||||
'id|+1': 1,
|
||||
name: '@cname',
|
||||
avatar: '@image("100x100")'
|
||||
}]
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// POST 示例
|
||||
{
|
||||
url: '/api/login',
|
||||
method: 'post',
|
||||
timeout: 1000, // 模拟延迟
|
||||
response: ({ body }) => {
|
||||
if (body.username === 'admin' && body.password === '123456') {
|
||||
return {
|
||||
code: 0,
|
||||
token: 'mock_token_123456'
|
||||
}
|
||||
}
|
||||
return {
|
||||
code: 401,
|
||||
message: '认证失败'
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -1,57 +0,0 @@
|
||||
/**
|
||||
* 基础数据结构
|
||||
* @type {{msg: string, code: string, data: null, timestamp: number}}
|
||||
*/
|
||||
const responseBody = {
|
||||
code: 200,
|
||||
msg: 'success',
|
||||
timestamp: 0,
|
||||
data: null,
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建返回的数据结构
|
||||
* @param data
|
||||
* @param code
|
||||
* @param message
|
||||
* @returns {{msg: string, code: string, data: null, timestamp: number}}
|
||||
*/
|
||||
export const builder = (data = {}, code = 200, message = 'success') => {
|
||||
responseBody.data = data
|
||||
|
||||
if (code !== undefined && code !== 0) {
|
||||
responseBody.code = code
|
||||
}
|
||||
|
||||
if (message !== undefined && message !== null) {
|
||||
responseBody.msg = message
|
||||
}
|
||||
|
||||
responseBody.timestamp = new Date().getTime()
|
||||
return responseBody
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地址栏参数
|
||||
* @param options
|
||||
* @returns {{}|any}
|
||||
*/
|
||||
export const getQueryParams = (options) => {
|
||||
const url = options.url
|
||||
const search = url.split('?')[1]
|
||||
if (!search) {
|
||||
return {}
|
||||
}
|
||||
return JSON.parse(
|
||||
'{"' + decodeURIComponent(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}'
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取body参数
|
||||
* @param options
|
||||
* @returns {*}
|
||||
*/
|
||||
export const getBody = (options) => {
|
||||
return options.body && JSON.parse(options.body)
|
||||
}
|
||||
@ -9,7 +9,7 @@ import system from './system'
|
||||
import link from './link'
|
||||
import iframe from './iframe'
|
||||
import other from './other'
|
||||
|
||||
import pages from './pages'
|
||||
export default [
|
||||
...home,
|
||||
...form,
|
||||
@ -22,4 +22,5 @@ export default [
|
||||
...link,
|
||||
...iframe,
|
||||
...other,
|
||||
...pages
|
||||
]
|
||||
|
||||
52
src/router/routes/pages.js
Normal file
52
src/router/routes/pages.js
Normal file
@ -0,0 +1,52 @@
|
||||
import { TableOutlined,HomeOutlined } from '@ant-design/icons-vue'
|
||||
|
||||
export default [
|
||||
{
|
||||
path: 'homebanner/index',
|
||||
name: 'homebanner',
|
||||
component: 'pages/homeBanner/index.vue',
|
||||
meta: {
|
||||
icon: HomeOutlined,
|
||||
title: '首页轮播图',
|
||||
isMenu: true,
|
||||
keepAlive: true,
|
||||
permission: '*',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'neighborhood/index',
|
||||
name: 'neighborhood',
|
||||
component: 'pages/neighborhood/index.vue',
|
||||
meta: {
|
||||
icon: TableOutlined,
|
||||
title: '邻里圈轮播图',
|
||||
isMenu: true,
|
||||
keepAlive: true,
|
||||
permission: '*',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'announcementList/index',
|
||||
name: 'announcementList',
|
||||
component: 'pages/announcementList/index.vue',
|
||||
meta: {
|
||||
icon: 'icon-gonggao',
|
||||
title: '社区公告',
|
||||
isMenu: true,
|
||||
keepAlive: true,
|
||||
permission: '*',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'activity/index',
|
||||
name: 'activity',
|
||||
component: 'pages/activity/index.vue',
|
||||
meta: {
|
||||
icon: 'icon-huodongliebiao-copy',
|
||||
title: '热门活动',
|
||||
isMenu: true,
|
||||
keepAlive: true,
|
||||
permission: '*',
|
||||
},
|
||||
},
|
||||
]
|
||||
@ -2,17 +2,10 @@
|
||||
<div>
|
||||
<a-tabs>
|
||||
<!-- 账号登录 -->
|
||||
<a-tab-pane
|
||||
key="account"
|
||||
:tab="$t('pages.login.accountLogin.tab')">
|
||||
<a-form
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
ref="formRef">
|
||||
<a-tab-pane key="account" :tab="$t('pages.login.accountLogin.tab')">
|
||||
<a-form :model="formData" :rules="formRules" ref="formRef">
|
||||
<a-form-item name="username">
|
||||
<a-input
|
||||
:placeholder="$t('pages.login.username.placeholder')"
|
||||
v-model:value="formData.username"
|
||||
<a-input :placeholder="$t('pages.login.username.placeholder')" v-model:value="formData.username"
|
||||
size="large">
|
||||
<template #prefix>
|
||||
<user-outlined></user-outlined>
|
||||
@ -20,45 +13,28 @@
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item name="password">
|
||||
<a-input
|
||||
v-model:value="formData.password"
|
||||
size="large"
|
||||
type="password"
|
||||
:placeholder="$t('pages.login.password.placeholder')"
|
||||
@pressEnter="handleLogin">
|
||||
<a-input v-model:value="formData.password" size="large" type="password"
|
||||
:placeholder="$t('pages.login.password.placeholder')" @pressEnter="handleLogin">
|
||||
<template #prefix>
|
||||
<lock-outlined></lock-outlined>
|
||||
</template>
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item name="captcha_code">
|
||||
<!-- <a-form-item name="captcha_code">
|
||||
<a-space>
|
||||
<a-input
|
||||
v-model:value="formData.captcha_code"
|
||||
size="large"
|
||||
type="text"
|
||||
:placeholder="$t('pages.login.captcha.placeholder')"
|
||||
@pressEnter="handleLogin">
|
||||
<a-input v-model:value="formData.captcha_code" size="large" type="text"
|
||||
:placeholder="$t('pages.login.captcha.placeholder')" @pressEnter="handleLogin">
|
||||
<template #prefix>
|
||||
<safety-outlined />
|
||||
</template>
|
||||
</a-input>
|
||||
<a-image
|
||||
@click="getCaptcha"
|
||||
:preview="false"
|
||||
:width="140"
|
||||
:height="42"
|
||||
<a-image @click="getCaptcha" :preview="false" :width="140" :height="42"
|
||||
:src="captcha_img" />
|
||||
</a-space>
|
||||
</a-form-item>
|
||||
</a-form-item> -->
|
||||
<a-form-item>
|
||||
<a-button
|
||||
type="primary"
|
||||
size="large"
|
||||
block
|
||||
:loading="loading"
|
||||
@click="handleLogin"
|
||||
>{{ $t('pages.login.submit') }}
|
||||
<a-button type="primary" size="large" block :loading="loading" @click="handleLogin">{{
|
||||
$t('pages.login.submit') }}
|
||||
</a-button>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
@ -125,7 +101,6 @@ async function handleLogin() {
|
||||
formRef.value.validate().then(async (values) => {
|
||||
values.captcha_id = captcha_id.value
|
||||
if (values.password === 'abc-123') values.password = md5(values.password)
|
||||
|
||||
loading.value = true
|
||||
const { success } = await userStore
|
||||
.login({
|
||||
|
||||
195
src/views/pages/activity/components/EditDialog.vue
Normal file
195
src/views/pages/activity/components/EditDialog.vue
Normal file
@ -0,0 +1,195 @@
|
||||
<template>
|
||||
<a-modal :open="modal.open" :title="modal.title" :width="640" :confirm-loading="modal.confirmLoading"
|
||||
:after-close="onAfterClose" :cancel-text="cancelText" :ok-text="okText" @ok="handleOk" @cancel="handleCancel">
|
||||
<a-spin :spinning="spining">
|
||||
<a-form ref="formRef" :model="formData" :rules="formRules">
|
||||
<a-card class="mb-8-2">
|
||||
<a-row :gutter="12">
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'活动标题'" name="title">
|
||||
<a-input :placeholder="'请输入活动标题'" v-model:value="formData.title"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'活动内容'" name="activityContent">
|
||||
<x-editor v-model="formData.activityContent"></x-editor>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item :label="'活动时间'" name="activityTime">
|
||||
<a-input v-model:value="formData.activityTime" placeholder="请输入活动时间" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item :label="'状态'" name="status">
|
||||
<a-radio-group v-model:value="formData.status" :options="enumsStatus.getAll()"></a-radio-group>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item :label="'活动图片'" name="cover">
|
||||
<gx-upload v-model="formData.cover" accept-types=".jpg,.png,.webp"
|
||||
:fileNumber="1" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item :label="'背景图片'" name="backImg">
|
||||
<gx-upload v-model="formData.backImg" accept-types=".jpg,.png,.webp"
|
||||
:fileNumber="1" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
import { ref, onBeforeMount } from 'vue'
|
||||
import { config } from '@/config'
|
||||
import apis from '@/apis'
|
||||
import { useForm, useModal, useSpining } from '@/hooks'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import dayjs from 'dayjs'
|
||||
import GxUpload from '@/components/GxUpload/index.vue'
|
||||
import { spliceUrl } from "@/utils/util"
|
||||
import { enumsStatus } from '@/enums/index'
|
||||
const emit = defineEmits(['ok'])
|
||||
const { t } = useI18n() // 解构出t方法
|
||||
const { modal, showModal, hideModal, showLoading, hideLoading } = useModal()
|
||||
const { formRecord, formData, formRef, formRules, resetForm } = useForm()
|
||||
const { spining, showSpining, hideSpining } = useSpining()
|
||||
const cancelText = ref(t('button.cancel'))
|
||||
const okText = ref(t('button.confirm'))
|
||||
const fileList = ref([])
|
||||
formRules.value = {
|
||||
title: [{ required: true, message: '请输入活动名称' }],
|
||||
activityTime: [{ required: true, message: '请输入活动时间' }],
|
||||
cover: [{required: false, message: '请上传图片', trigger: 'change'}],
|
||||
backImg: [{ required: false, message: '请上传图片', trigger: 'change' }],
|
||||
activityContent:[{ required: true, message: '请输入活动内容' }]
|
||||
}
|
||||
|
||||
onBeforeMount(() => {
|
||||
|
||||
})
|
||||
|
||||
/**
|
||||
* 新建
|
||||
*/
|
||||
function handleCreate() {
|
||||
showModal({
|
||||
type: 'create',
|
||||
title: '新增活动',
|
||||
})
|
||||
// initData()
|
||||
formData.value.status = 'enabled'
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
async function handleEdit(record = {}) {
|
||||
showModal({
|
||||
type: 'edit',
|
||||
title: '编辑活动',
|
||||
})
|
||||
try {
|
||||
showSpining()
|
||||
const { data, success } = await apis.activity.getItem(record.id).catch()
|
||||
if (!success) {
|
||||
hideModal()
|
||||
return
|
||||
}
|
||||
hideSpining()
|
||||
formData.value = { ...data }
|
||||
formData.value.startAt = dayjs(data.startAt)
|
||||
formData.value.endAt = dayjs(data.endAt)
|
||||
formData.value.endSignupAt = dayjs(data.endSignupAt)
|
||||
|
||||
if (data.images && data.images.length > 0) {
|
||||
formData.value.fileList = data.images.map(item => config('http.apiBasic') + item)
|
||||
}
|
||||
} catch (error) {
|
||||
message.error({ content: error.message })
|
||||
hideSpining()
|
||||
}
|
||||
|
||||
}
|
||||
const uploadSuccess = (data) => {
|
||||
fileList.value.push(data)
|
||||
}
|
||||
/**
|
||||
* 确定
|
||||
*/
|
||||
function handleOk() {
|
||||
formRef.value.validateFields().then(async (values) => {
|
||||
try {
|
||||
showLoading()
|
||||
const params = {
|
||||
...values,
|
||||
cover: formData.value.cover?spliceUrl(formData.value.cover[0]):'',
|
||||
backImg: formData.value.backImg ? formData.value.backImg.map(item => spliceUrl(item)) : ''
|
||||
}
|
||||
let result = null
|
||||
switch (modal.value.type) {
|
||||
case 'create':
|
||||
result = await apis.activity.createProject(params).catch((error) => {
|
||||
throw new Error(error)
|
||||
})
|
||||
break
|
||||
case 'edit':
|
||||
result = await apis.activity.updateItem(formData.value.id, params).catch(() => {
|
||||
throw new Error(error)
|
||||
})
|
||||
break
|
||||
}
|
||||
hideLoading()
|
||||
if (config('http.code.success') === result?.success) {
|
||||
hideModal()
|
||||
emit('ok')
|
||||
}
|
||||
} catch (error) {
|
||||
message.error({ content: error.message })
|
||||
hideLoading()
|
||||
}
|
||||
})
|
||||
.catch((e) => {
|
||||
hideLoading()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 取消
|
||||
*/
|
||||
function handleCancel() {
|
||||
formData.value.areaId = 1
|
||||
hideModal()
|
||||
}
|
||||
const onRangeChange = (value, dateString) => {
|
||||
console.log('value', value)
|
||||
console.log('Formatted Selected Time: ', dateString);
|
||||
formData.value.startAt = dayjs(dateString[0])
|
||||
formData.value.endAt = dayjs(dateString[1])
|
||||
console.log(formData.value)
|
||||
};
|
||||
|
||||
/**
|
||||
* 关闭后
|
||||
*/
|
||||
function onAfterClose() {
|
||||
resetForm()
|
||||
hideLoading()
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
handleCreate,
|
||||
handleEdit,
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
212
src/views/pages/activity/index.vue
Normal file
212
src/views/pages/activity/index.vue
Normal file
@ -0,0 +1,212 @@
|
||||
<template>
|
||||
<!-- <x-search-bar class="mb-8-2">
|
||||
<template #default="{ gutter, colSpan }">
|
||||
<a-form :model="searchFormData" layout="inline">
|
||||
<a-row :gutter="gutter">
|
||||
<a-col v-bind="colSpan">
|
||||
<a-form-item label="姓名" name="name">
|
||||
<a-input placeholder="请输入姓名" v-model:value="searchFormData.name"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
||||
<a-col v-bind="colSpan">
|
||||
<a-form-item label="状态" name="status">
|
||||
<a-select v-model:value="searchFormData.status" allowClear>
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option value="enabled">启用</a-select-option>
|
||||
<a-select-option value="disabled">停用</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col class="align-right" v-bind="colSpan">
|
||||
<a-space>
|
||||
<a-button @click="handleResetSearch">{{ $t('button.reset') }}</a-button>
|
||||
<a-button ghost type="primary" @click="handleSearch">
|
||||
{{ $t('button.search') }}
|
||||
</a-button>
|
||||
</a-space>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</template>
|
||||
</x-search-bar> -->
|
||||
|
||||
<a-row :gutter="8" :wrap="false">
|
||||
<a-col flex="auto">
|
||||
<a-card type="flex">
|
||||
<x-action-bar class="mb-8-2">
|
||||
<a-button type="primary" @click="$refs.editDialogRef.handleCreate()">
|
||||
<template #icon>
|
||||
<plus-outlined></plus-outlined>
|
||||
</template>
|
||||
新增活动
|
||||
</a-button>
|
||||
</x-action-bar>
|
||||
<a-table :columns="columns" :data-source="listData" bordered="true" :loading="loading"
|
||||
:pagination="paginationState" :scroll="{ x: 1000 }" @change="onTableChange">
|
||||
<template #bodyCell="{ column, record }">
|
||||
|
||||
<template v-if="column.dataIndex === 'cover'">
|
||||
<img :src="config('http.apiConfig')+record.cover" alt="" srcset="">
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'content'">
|
||||
<span style="cursor: pointer;color:#1677ff;" @click="content = record.content || ''; type = 2; open = true" type="link">点击查看</span>
|
||||
</template>
|
||||
<template v-if="'status' === column.dataIndex">
|
||||
<a-tag :color="enumsStatus.getColor(record.status)">{{enumsStatus.getName(record.status)}}</a-tag>
|
||||
</template>
|
||||
<template v-if="'action' === column.key">
|
||||
<x-action-button @click="$refs.editDialogRef.handleEdit(record)">
|
||||
<a-tooltip>
|
||||
<template #title> {{ $t('pages.system.user.edit') }}</template>
|
||||
<edit-outlined /> </a-tooltip></x-action-button>
|
||||
|
||||
<x-action-button @click="handleDelete(record)">
|
||||
<a-tooltip>
|
||||
<template #title>{{ $t('pages.system.delete') }}</template>
|
||||
<delete-outlined style="color: #ff4d4f" /> </a-tooltip></x-action-button>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-modal v-model:open="open" :title="type === 1 ? '活动图片' : '活动详情'" @ok="open = false">
|
||||
<template v-if="type === 1">
|
||||
<a-image v-if="imgList.length > 0" :width="200" v-for="item of imgList"
|
||||
:src="config('http.apiBasic') + item" />
|
||||
<span v-else>
|
||||
暂无图片
|
||||
</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span>{{ content }}</span>
|
||||
</template>
|
||||
|
||||
</a-modal>
|
||||
|
||||
<edit-dialog ref="editDialogRef" @ok="onOk"></edit-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { message, Modal } from 'ant-design-vue'
|
||||
import { ref } from 'vue'
|
||||
import apis from '@/apis'
|
||||
import { formatUtcDateTime } from '@/utils/util'
|
||||
import { config } from '@/config'
|
||||
import dayjs from 'dayjs'
|
||||
import { usePagination } from '@/hooks'
|
||||
import EditDialog from './components/EditDialog.vue'
|
||||
import { PlusOutlined, EditOutlined, DeleteOutlined, QrcodeOutlined } from '@ant-design/icons-vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { enumsStatus } from '@/enums/index.js'
|
||||
defineOptions({
|
||||
name: 'activity',
|
||||
})
|
||||
const { t } = useI18n() // 解构出t方法
|
||||
const open = ref(false)
|
||||
const imgList = ref([])
|
||||
const type = ref(1)
|
||||
|
||||
const columns = [
|
||||
{ title: '活动标题', dataIndex: 'title'},
|
||||
{ title: '活动时间', dataIndex: 'activityTime',align: 'center' },
|
||||
{ title: '活动内容', dataIndex: 'activityContent',align: 'center' },
|
||||
{ title: '活动封面', dataIndex: 'cover', align: 'center', width: 100 },
|
||||
{ title: t('button.action'), key: 'action', fixed: 'right', width: 150, align: 'center' },
|
||||
]
|
||||
|
||||
const { listData, loading, showLoading, hideLoading, paginationState, resetPagination, searchFormData } =
|
||||
usePagination()
|
||||
|
||||
const editDialogRef = ref()
|
||||
getPageList()
|
||||
/**
|
||||
* 获取表格数据
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function getPageList() {
|
||||
try {
|
||||
showLoading()
|
||||
const { pageSize, current } = paginationState
|
||||
const { success, data, total } = await apis.activity
|
||||
.getProjectList({
|
||||
pageSize,
|
||||
current: current,
|
||||
...searchFormData.value,
|
||||
})
|
||||
.catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
hideLoading()
|
||||
if (config('http.code.success') === success) {
|
||||
listData.value = data
|
||||
paginationState.total = total
|
||||
}
|
||||
} catch (error) {
|
||||
hideLoading()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function handleDelete({ id }) {
|
||||
Modal.confirm({
|
||||
title: t('pages.system.user.delTip'),
|
||||
content: t('button.confirm'),
|
||||
okText: t('button.confirm'),
|
||||
onOk: () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
; (async () => {
|
||||
try {
|
||||
const { success } = await apis.activity.delItem(id).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
if (config('http.code.success') === success) {
|
||||
resolve()
|
||||
message.success(t('component.message.success.delete'))
|
||||
await getPageList()
|
||||
}
|
||||
} catch (error) {
|
||||
reject()
|
||||
}
|
||||
})()
|
||||
})
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
function onTableChange({ current, pageSize }) {
|
||||
paginationState.current = current
|
||||
paginationState.pageSize = pageSize
|
||||
getPageList()
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索
|
||||
*/
|
||||
function handleSearch() {
|
||||
resetPagination()
|
||||
getPageList()
|
||||
}
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function handleResetSearch() {
|
||||
searchFormData.value = {}
|
||||
resetPagination()
|
||||
getPageList()
|
||||
}
|
||||
/**
|
||||
* 编辑完成
|
||||
*/
|
||||
async function onOk() {
|
||||
await getPageList()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
206
src/views/pages/announcementList/components/AddDialog.vue
Normal file
206
src/views/pages/announcementList/components/AddDialog.vue
Normal file
@ -0,0 +1,206 @@
|
||||
<template>
|
||||
<a-modal :open="modal.open" :title="modal.title" :width="640" :confirm-loading="modal.confirmLoading"
|
||||
:after-close="onAfterClose" :cancel-text="cancelText" :ok-text="okText" @ok="handleOk" @cancel="handleCancel">
|
||||
<a-spin :spinning="spining">
|
||||
<a-form ref="formRef" :model="formData" :rules="formRules" :label-col="{ style: { width: '90px' } }">
|
||||
<a-card class="mb-8-2">
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="24">
|
||||
<a-form-item label="公告标题" name="title">
|
||||
<a-input placeholder="请输入标题" v-model:value="formData.title"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="创建时间" name="createdAt">
|
||||
<a-date-picker v-model:value="formData.createdAt" placeholder="请选择发布时间"
|
||||
style="width: 100%;" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item label="排序" name="sequence">
|
||||
<a-input-number v-model:value="formData.sequence" style="width: 100%;" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item :label="'状态'" name="status">
|
||||
<a-radio-group v-model:value="formData.status" :options="enumsStatus.getAll()"></a-radio-group>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'公告内容'" name="desc">
|
||||
<x-editor v-model="formData.desc" :uploadHandler="uploadHandler" :height="350"></x-editor>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'公告封面'" name="img">
|
||||
<gx-upload v-model="formData.img" :fileNumber="1"></gx-upload>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
import { ref } from 'vue'
|
||||
import { config } from '@/config'
|
||||
import apis from '@/apis'
|
||||
import { useForm, useModal, useSpining } from '@/hooks'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import dayjs from 'dayjs'
|
||||
import { enumsStatus } from '@/enums/index'
|
||||
import {spliceUrl} from '@/utils/util'
|
||||
const emit = defineEmits(['ok'])
|
||||
const { t } = useI18n() // 解构出t方法
|
||||
const { modal, showModal, hideModal, showLoading, hideLoading } = useModal()
|
||||
const { formRecord, formData, formRef, formRules, resetForm } = useForm()
|
||||
const cancelText = ref(t('button.cancel'))
|
||||
const okText = ref(t('button.confirm'))
|
||||
const rolesValue = ref([])
|
||||
const roles = ref([])
|
||||
const { spining, showSpining, hideSpining } = useSpining()
|
||||
formRules.value = {
|
||||
title: { required: true, message: '请输入标题' },
|
||||
desc: { required: true, message: '请输入内容' },
|
||||
sequence: { required: true, message: '请选择排序' },
|
||||
status: { required: true, message: '请选择是否启用' },
|
||||
createdAt: { required: true, message: '请选择创建时间' },
|
||||
img:{required: false, message: '请上传封面'}
|
||||
}
|
||||
|
||||
/**
|
||||
* 新建
|
||||
*/
|
||||
function handleCreate() {
|
||||
showModal({
|
||||
type: 'create',
|
||||
title: '新增',
|
||||
})
|
||||
formData.value.status = 0
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
async function handleEdit(record = {}) {
|
||||
try {
|
||||
showModal({ type: 'edit', title: '修改公告信息' })
|
||||
showSpining()
|
||||
const { data, success } = await apis.announcement.getNotices(record.id).catch()
|
||||
if (!success) {
|
||||
hideModal()
|
||||
return
|
||||
}
|
||||
hideSpining()
|
||||
formData.value = { ...data }
|
||||
formData.value.createdAt = dayjs(data.createdAt)
|
||||
formData.value.img=formData.value.img?[config('http.apiBasic')+formData.value.img]:[]
|
||||
} catch (error) {
|
||||
message.error(error.message)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定
|
||||
*/
|
||||
function handleOk() {
|
||||
console.log(formData.value)
|
||||
formRef.value
|
||||
.validateFields()
|
||||
.then(async (values) => {
|
||||
console.log(2222)
|
||||
try {
|
||||
showLoading()
|
||||
const params = {
|
||||
...values,
|
||||
img:formData.value.img?spliceUrl(formData.value.img[0]):''
|
||||
}
|
||||
console.log(params);
|
||||
|
||||
let result = null
|
||||
switch (modal.value.type) {
|
||||
case 'create':
|
||||
result = await apis.announcement.createNotices(params).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
break
|
||||
case 'edit':
|
||||
result = await apis.announcement.updateNotices(formData.value.id, params).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
break
|
||||
}
|
||||
hideLoading()
|
||||
if (config('http.code.success') === result?.success) {
|
||||
hideModal()
|
||||
emit('ok')
|
||||
message.success(modal.value.type === 'create' ? '创建成功' : '更新成功')
|
||||
}
|
||||
} catch (error) {
|
||||
hideLoading()
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
hideLoading()
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 对权限组 过数据格式
|
||||
*/
|
||||
function formatArr(data, type = '') {
|
||||
const rolesArr = []
|
||||
data.forEach((item) => {
|
||||
roles.value.forEach((r) => {
|
||||
if (type === 'edit') {
|
||||
if (item.role_id === r.value) {
|
||||
rolesArr.push({
|
||||
value: item.role_id,
|
||||
label: r.label,
|
||||
})
|
||||
return
|
||||
}
|
||||
} else if (r.value === item) {
|
||||
rolesArr.push({
|
||||
role_id: item,
|
||||
role_name: r.label,
|
||||
})
|
||||
return
|
||||
}
|
||||
})
|
||||
})
|
||||
return rolesArr
|
||||
}
|
||||
const uploadHandler = async (file) => {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
const { data } = await apis.common.uploadImg(formData);
|
||||
return config('http.apiBasic') + data
|
||||
}
|
||||
/**
|
||||
* 取消
|
||||
*/
|
||||
function handleCancel() {
|
||||
hideModal()
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭后
|
||||
*/
|
||||
function onAfterClose() {
|
||||
resetForm()
|
||||
hideLoading()
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
handleCreate,
|
||||
handleEdit,
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
200
src/views/pages/announcementList/index.vue
Normal file
200
src/views/pages/announcementList/index.vue
Normal file
@ -0,0 +1,200 @@
|
||||
<template>
|
||||
<x-search-bar class="mb-8-2">
|
||||
<template #default="{ gutter, colSpan }">
|
||||
<a-form :model="searchFormData" layout="inline">
|
||||
<a-row :gutter="gutter">
|
||||
<a-col v-bind="colSpan">
|
||||
<a-form-item label="标题" name="title">
|
||||
<a-input placeholder="请输入标题" v-model:value="searchFormData.title"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col v-bind="colSpan">
|
||||
<a-form-item :label="'状态'" name="status">
|
||||
<a-input :placeholder="'请输入状态'" v-model:value="searchFormData.status"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col class="align-right" v-bind="colSpan">
|
||||
<a-space>
|
||||
<a-button @click="handleResetSearch">{{ $t('button.reset') }}</a-button>
|
||||
<a-button ghost type="primary" @click="handleSearch">
|
||||
{{ $t('button.search') }}
|
||||
</a-button>
|
||||
</a-space>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</template>
|
||||
</x-search-bar>
|
||||
<a-row :gutter="8" :wrap="false">
|
||||
<a-col flex="auto">
|
||||
<a-card type="flex">
|
||||
<x-action-bar class="mb-8-2">
|
||||
<a-button v-action="'add'" type="primary" @click="$refs.addDialogRef.handleCreate()">
|
||||
<template #icon>
|
||||
<plus-outlined></plus-outlined>
|
||||
</template>
|
||||
新增
|
||||
</a-button>
|
||||
</x-action-bar>
|
||||
<a-table :columns="columns" :data-source="listData" :loading="loading" bordered="true"
|
||||
:pagination="paginationState" :scroll="{ x: 1000 }" @change="onTableChange">
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if=" column.dataIndex === 'img'">
|
||||
<a-image :width="60" :src="record.img?config('http.apiBasic')+record.img:errImg" />
|
||||
</template>
|
||||
<template v-if="'status' === column.dataIndex">
|
||||
<a-tag :color="enumsStatus.getColor(record.status)">{{ enumsStatus.getName(record.status) }}</a-tag>
|
||||
</template>
|
||||
<template v-if="'createdAt' === column.dataIndex">
|
||||
{{ dayjs(record.createdAt).format('YYYY-MM-DD') }}
|
||||
</template>
|
||||
<template v-if="'desc' === column.dataIndex">
|
||||
<p v-html="record.desc"></p>
|
||||
</template>
|
||||
<template v-if="'action' === column.key">
|
||||
<x-action-button @click="$refs.addDialogRef.handleEdit(record)">
|
||||
<a-tooltip>
|
||||
<template #title> {{ '编辑公告' }}</template>
|
||||
<edit-outlined />
|
||||
</a-tooltip>
|
||||
</x-action-button>
|
||||
<x-action-button @click="handleRemove(record)">
|
||||
<a-tooltip>
|
||||
<template #title> {{ '删除公告' }}</template>
|
||||
<delete-outlined style="color: #ff4d4f" />
|
||||
</a-tooltip>
|
||||
</x-action-button>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
||||
<add-dialog ref="addDialogRef" @ok="onOk"></add-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { message, Modal } from 'ant-design-vue'
|
||||
import { ref } from 'vue'
|
||||
import apis from '@/apis'
|
||||
import { config } from '@/config'
|
||||
import { enumsStatus } from '@/enums/index.js'
|
||||
import { usePagination } from '@/hooks'
|
||||
import AddDialog from './components/AddDialog.vue'
|
||||
import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons-vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import dayjs from 'dayjs'
|
||||
import errImg from '@/assets/blankSpace.png'
|
||||
|
||||
defineOptions({
|
||||
name: 'systemRole',
|
||||
})
|
||||
const { t } = useI18n() // 解构出t方法
|
||||
const columns = [
|
||||
{ title: '封面', dataIndex: 'img', key: 'img',with:60,align:'center'},
|
||||
{ title: '标题', dataIndex: 'title', key: 'title', ellipsis: true },
|
||||
{ title: '内容', dataIndex: 'desc', ellipsis: true },
|
||||
{ title: '排序', dataIndex: 'sequence', width: 80, align: 'center' },
|
||||
{ title: '状态', key: 'status', dataIndex: 'status', width: 120, align: 'center' },
|
||||
{ title: '创建时间', dataIndex: 'createdAt', width: 200, align: 'center' },
|
||||
{ title: t('button.action'), key: 'action', fixed: 'right', width: 100, align: 'center' },
|
||||
]
|
||||
|
||||
const { listData, loading, showLoading, hideLoading, paginationState, searchFormData, resetPagination } =
|
||||
usePagination()
|
||||
// const { resetForm } = useForm()
|
||||
const addDialogRef = ref()
|
||||
|
||||
getPageList()
|
||||
|
||||
/**
|
||||
* 获取公公告列表
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function getPageList() {
|
||||
try {
|
||||
showLoading()
|
||||
const { pageSize, current } = paginationState
|
||||
const { success, data, total } = await apis.announcement
|
||||
.getNoticesList({
|
||||
pageSize,
|
||||
current: current,
|
||||
...searchFormData.value,
|
||||
})
|
||||
.catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
hideLoading()
|
||||
if (config('http.code.success') === success) {
|
||||
listData.value = data
|
||||
paginationState.total = total
|
||||
}
|
||||
} catch (error) {
|
||||
hideLoading()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除
|
||||
*/
|
||||
function handleRemove({ id }) {
|
||||
Modal.confirm({
|
||||
title: t('pages.system.role.delTip'),
|
||||
content: t('button.confirm'),
|
||||
okText: t('button.confirm'),
|
||||
onOk: () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
; (async () => {
|
||||
try {
|
||||
const { success } = await apis.announcement.delNotices(id).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
if (config('http.code.success') === success) {
|
||||
resolve()
|
||||
message.success(t('component.message.success.delete'))
|
||||
await getPageList()
|
||||
}
|
||||
} catch (error) {
|
||||
reject()
|
||||
}
|
||||
})()
|
||||
})
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
function onTableChange({ current, pageSize }) {
|
||||
paginationState.current = current
|
||||
paginationState.pageSize = pageSize
|
||||
getPageList()
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function handleResetSearch() {
|
||||
searchFormData.value = {}
|
||||
resetPagination()
|
||||
getPageList()
|
||||
}
|
||||
/**
|
||||
* 搜索
|
||||
*/
|
||||
function handleSearch() {
|
||||
resetPagination()
|
||||
getPageList()
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑完成
|
||||
*/
|
||||
async function onOk() {
|
||||
await getPageList()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
190
src/views/pages/homeBanner/components/EditDialog.vue
Normal file
190
src/views/pages/homeBanner/components/EditDialog.vue
Normal file
@ -0,0 +1,190 @@
|
||||
<template>
|
||||
<a-modal :open="modal.open" :title="modal.title" :width="640" :confirm-loading="modal.confirmLoading"
|
||||
:after-close="onAfterClose" :cancel-text="cancelText" :ok-text="okText" @ok="handleOk" @cancel="handleCancel">
|
||||
<a-spin :spinning="spining">
|
||||
<a-form ref="formRef" :model="formData" :rules="formRules">
|
||||
<a-card class="mb-8-2">
|
||||
<a-row :gutter="12">
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'名称'" name="title">
|
||||
<a-input :placeholder="'请输入名称'" v-model:value="formData.title"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'顺序'" name="sequence">
|
||||
<a-input-number :placeholder="'请输入顺序'" v-model:value="formData.sequence" style="width: 100%;"></a-input-number>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'状态'" name="status">
|
||||
<a-form-item :label="'状态'" name="status">
|
||||
<a-radio-group v-model:value="formData.status" :options="enumsStatus.getAll()"></a-radio-group>
|
||||
</a-form-item>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'图片'" name="img">
|
||||
<gx-upload v-model="formData.img" :fileNumber="1" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
import { ref } from 'vue'
|
||||
import { config } from '@/config'
|
||||
import apis from '@/apis'
|
||||
import { useForm, useModal, useSpining } from '@/hooks'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import dayjs from 'dayjs'
|
||||
import { createMenu, getMenu, updateMenu } from '@/apis/modules/imgmgt'
|
||||
import {spliceUrl} from '@/utils/util'
|
||||
const emit = defineEmits(['ok'])
|
||||
const { t } = useI18n() // 解构出t方法
|
||||
const { modal, showModal, hideModal, showLoading, hideLoading } = useModal()
|
||||
const { formRecord, formData, formRef, formRules, resetForm } = useForm()
|
||||
const { spining, showSpining, hideSpining } = useSpining()
|
||||
const cancelText = ref(t('button.cancel'))
|
||||
const okText = ref(t('button.confirm'))
|
||||
const rolesValue = ref([])
|
||||
const roles = ref([])
|
||||
const img = ref('')
|
||||
|
||||
formRules.value = {
|
||||
title: { required: true, message: '请输入名称' },
|
||||
status: [{ required: true, message: '请选择状态', trigger: 'change' }],
|
||||
sequence: [{ required: true, message: '请选择顺序', trigger: 'change' }],
|
||||
img: [{ required: true, message: '请上传图片', trigger: 'change' }],
|
||||
}
|
||||
|
||||
/**
|
||||
* 新建
|
||||
*/
|
||||
function handleCreate() {
|
||||
showModal({
|
||||
type: 'create',
|
||||
// 80对应about
|
||||
title: '添加',
|
||||
})
|
||||
formData.value.status = 0
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
async function handleEdit(record = {}) {
|
||||
showModal({
|
||||
type: 'edit',
|
||||
title: t('pages.system.user.edit'),
|
||||
})
|
||||
showSpining()
|
||||
const { data, success } = await apis.imgmgt.getMenu(record.id).catch()
|
||||
if (!success) {
|
||||
hideModal()
|
||||
return
|
||||
}
|
||||
hideSpining()
|
||||
formData.value = { ...data }
|
||||
formData.value.img=[config('http.apiBasic')+data.img]
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定
|
||||
*/
|
||||
function handleOk() {
|
||||
if (!formData.value.img) return message.error('请上传图片');
|
||||
formRef.value.validateFields().then(async (values) => {
|
||||
console.log(values)
|
||||
try {
|
||||
showLoading()
|
||||
const params = {
|
||||
...values,
|
||||
img: spliceUrl(formData.value?.img[0]),
|
||||
type: 'homeBanner' ,
|
||||
}
|
||||
let result = null
|
||||
switch (modal.value.type) {
|
||||
case 'create':
|
||||
result = await apis.imgmgt.createMenu(params).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
break
|
||||
case 'edit':
|
||||
// result = await apis.imgmgt.updateMenu(formData.value.id, params).catch(() => {
|
||||
result = await apis.imgmgt.updateMenu(formData.value.id, params).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
break
|
||||
}
|
||||
hideLoading()
|
||||
if (config('http.code.success') === result?.success) {
|
||||
hideModal()
|
||||
emit('ok')
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
hideLoading()
|
||||
}
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e)
|
||||
hideLoading()
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 对权限组 过数据格式
|
||||
*/
|
||||
function formatArr(data, type = '') {
|
||||
const rolesArr = []
|
||||
data.forEach((item) => {
|
||||
roles.value.forEach((r) => {
|
||||
if (type === 'edit') {
|
||||
if (item.role_id === r.value) {
|
||||
rolesArr.push({
|
||||
value: item.role_id,
|
||||
label: r.label,
|
||||
})
|
||||
return
|
||||
}
|
||||
} else if (r.value === item) {
|
||||
rolesArr.push({
|
||||
role_id: item,
|
||||
role_name: r.label,
|
||||
})
|
||||
return
|
||||
}
|
||||
})
|
||||
})
|
||||
return rolesArr
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消
|
||||
*/
|
||||
function handleCancel() {
|
||||
img.value = ''
|
||||
hideModal()
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭后
|
||||
*/
|
||||
function onAfterClose() {
|
||||
resetForm()
|
||||
hideLoading()
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
handleCreate,
|
||||
handleEdit,
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
193
src/views/pages/homeBanner/index.vue
Normal file
193
src/views/pages/homeBanner/index.vue
Normal file
@ -0,0 +1,193 @@
|
||||
<template>
|
||||
<x-search-bar class="mb-8-2">
|
||||
<template #default="{ gutter, colSpan }">
|
||||
<a-form :label-col="{ style: { width: '40px' } }" :model="searchFormData" layout="inline">
|
||||
<a-row :gutter="gutter">
|
||||
<a-col v-bind="colSpan">
|
||||
<a-form-item label="名称" name="name">
|
||||
<a-input placeholder="请输入图片名称" v-model:value="searchFormData.name"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col v-bind="colSpan">
|
||||
<a-form-item label="状态" name="status">
|
||||
<a-select v-model:value="searchFormData.status" allowClear>
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option value="enabled">启用</a-select-option>
|
||||
<a-select-option value="disabled">停用</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col class="align-right" v-bind="colSpan">
|
||||
<a-space>
|
||||
<a-button @click="handleResetSearch">{{ $t('button.reset') }}</a-button>
|
||||
<a-button ghost type="primary" @click="handleSearch">
|
||||
{{ $t('button.search') }}
|
||||
</a-button>
|
||||
</a-space>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</template>
|
||||
</x-search-bar>
|
||||
<a-row :gutter="8" :wrap="false">
|
||||
<a-col flex="auto">
|
||||
<a-card type="flex">
|
||||
<x-action-bar class="mb-8-2">
|
||||
<a-button type="primary" @click="$refs.editDialogRef.handleCreate()">
|
||||
<template #icon>
|
||||
<plus-outlined></plus-outlined>
|
||||
</template>
|
||||
新增
|
||||
</a-button>
|
||||
</x-action-bar>
|
||||
<a-table :columns="columns" :data-source="listData" bordered="true" :loading="loading"
|
||||
:pagination="paginationState" :scroll="{ x: 1000 }" @change="onTableChange">
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="'img' === column.dataIndex">
|
||||
<a-image :width="60" :src="record.img?config('http.apiBasic')+record.img:errImg" />
|
||||
</template>
|
||||
|
||||
<template v-if="'status' === column.dataIndex">
|
||||
<a-tag :color="enumsStatus.getColor(record.status)">{{ enumsStatus.getName(record.status) }}</a-tag>
|
||||
</template>
|
||||
<template v-if="'action' === column.key">
|
||||
<x-action-button @click="$refs.editDialogRef.handleEdit(record)">
|
||||
<a-tooltip>
|
||||
<template #title> {{ $t('pages.system.user.edit') }}</template>
|
||||
<edit-outlined /> </a-tooltip></x-action-button>
|
||||
<x-action-button @click="handleDelete(record)">
|
||||
<a-tooltip>
|
||||
<template #title>{{ $t('pages.system.delete') }}</template>
|
||||
<delete-outlined style="color: #ff4d4f" /> </a-tooltip></x-action-button>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
||||
<edit-dialog ref="editDialogRef" @ok="onOk"></edit-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { message, Modal } from 'ant-design-vue'
|
||||
import { ref } from 'vue'
|
||||
import apis from '@/apis'
|
||||
import { formatUtcDateTime } from '@/utils/util'
|
||||
import { config } from '@/config'
|
||||
import { statusUserTypeEnum } from '@/enums/system'
|
||||
import { usePagination } from '@/hooks'
|
||||
import errImg from '@/assets/blankSpace.png'
|
||||
import EditDialog from './components/EditDialog.vue'
|
||||
import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons-vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { delMenu, getDataList } from '@/apis/modules/imgmgt'
|
||||
import { enumsStatus } from '@/enums/index.js'
|
||||
defineOptions({
|
||||
name: 'homeBanner',
|
||||
})
|
||||
const { t } = useI18n() // 解构出t方法
|
||||
const columns = [
|
||||
{ title: '图片', dataIndex: 'img', width: 100, align: 'center' },
|
||||
{ title: '名称', dataIndex: 'title', key: 'name' },
|
||||
{ title: '状态', dataIndex: 'status', width: 120, align: 'center' },
|
||||
{ title: '顺序', dataIndex: 'sequence', width: 100, align: 'center' },
|
||||
{ title: t('button.action'), key: 'action', fixed: 'right', width: 100, align: 'center' },
|
||||
]
|
||||
|
||||
const { listData, loading, showLoading, hideLoading, paginationState, resetPagination, searchFormData } = usePagination()
|
||||
|
||||
const editDialogRef = ref()
|
||||
getPageList()
|
||||
/**
|
||||
* 获取用户列表
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
|
||||
async function getPageList() {
|
||||
try {
|
||||
showLoading()
|
||||
const { pageSize, current } = paginationState
|
||||
const { success, data, total } = await apis.imgmgt
|
||||
.getDataList({
|
||||
pageSize,
|
||||
current:current,
|
||||
type: 'homeBanner',
|
||||
...searchFormData.value,
|
||||
})
|
||||
.catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
hideLoading()
|
||||
if (config('http.code.success') === success) {
|
||||
//筛选type的值80对应about
|
||||
listData.value = data
|
||||
paginationState.total = total
|
||||
}
|
||||
} catch (error) {
|
||||
hideLoading()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function handleDelete({ id }) {
|
||||
Modal.confirm({
|
||||
title: t('pages.system.user.delTip'),
|
||||
content: t('button.confirm'),
|
||||
okText: t('button.confirm'),
|
||||
onOk: () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
; (async () => {
|
||||
try {
|
||||
const { success } = await apis.imgmgt.delMenu(id).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
if (config('http.code.success') === success) {
|
||||
resolve()
|
||||
message.success(t('component.message.success.delete'))
|
||||
await getPageList()
|
||||
}
|
||||
} catch (error) {
|
||||
reject()
|
||||
}
|
||||
})()
|
||||
})
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
function onTableChange({ current, pageSize }) {
|
||||
paginationState.current = current
|
||||
paginationState.pageSize = pageSize
|
||||
getPageList()
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索
|
||||
*/
|
||||
function handleSearch() {
|
||||
resetPagination()
|
||||
getPageList()
|
||||
}
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function handleResetSearch() {
|
||||
searchFormData.value = {}
|
||||
resetPagination()
|
||||
getPageList()
|
||||
}
|
||||
/**
|
||||
* 编辑完成
|
||||
*/
|
||||
async function onOk() {
|
||||
await getPageList()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
163
src/views/pages/nbdMutualAid/components/EditDialog.vue
Normal file
163
src/views/pages/nbdMutualAid/components/EditDialog.vue
Normal file
@ -0,0 +1,163 @@
|
||||
<template>
|
||||
<a-modal :open="modal.open" :title="modal.title" :width="640" :confirm-loading="modal.confirmLoading"
|
||||
:after-close="onAfterClose" :cancel-text="cancelText" :ok-text="okText" @ok="handleOk" @cancel="handleCancel">
|
||||
<a-spin :spinning="spining">
|
||||
<a-form ref="formRef" :model="formData" :rules="formRules">
|
||||
<a-card class="mb-8-2">
|
||||
<a-row :gutter="12">
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'名称'" name="title">
|
||||
<a-input :placeholder="'请输入名称'" v-model:value="formData.title"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'顺序'" name="sequence">
|
||||
<a-input-number :placeholder="'请输入顺序'" v-model:value="formData.sequence" style="width: 100%;"></a-input-number>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'状态'" name="status">
|
||||
<a-form-item :label="'状态'" name="status">
|
||||
<a-radio-group v-model:value="formData.status" :options="enumsStatus.getAll()"></a-radio-group>
|
||||
</a-form-item>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'图片'" name="img">
|
||||
<gx-upload v-model="formData.img" :fileNumber="1" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
import { ref } from 'vue'
|
||||
import { config } from '@/config'
|
||||
import apis from '@/apis'
|
||||
import { useForm, useModal, useSpining } from '@/hooks'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import dayjs from 'dayjs'
|
||||
import { createMenu, getMenu, updateMenu } from '@/apis/modules/imgmgt'
|
||||
import {spliceUrl} from '@/utils/util'
|
||||
const emit = defineEmits(['ok'])
|
||||
const { t } = useI18n() // 解构出t方法
|
||||
const { modal, showModal, hideModal, showLoading, hideLoading } = useModal()
|
||||
const { formRecord, formData, formRef, formRules, resetForm } = useForm()
|
||||
const { spining, showSpining, hideSpining } = useSpining()
|
||||
const cancelText = ref(t('button.cancel'))
|
||||
const okText = ref(t('button.confirm'))
|
||||
const rolesValue = ref([])
|
||||
const roles = ref([])
|
||||
const img = ref('')
|
||||
|
||||
formRules.value = {
|
||||
title: { required: true, message: '请输入名称' },
|
||||
status: [{ required: true, message: '请选择状态', trigger: 'change' }],
|
||||
sequence: [{ required: true, message: '请选择顺序', trigger: 'change' }],
|
||||
img: [{ required: true, message: '请上传图片', trigger: 'change' }],
|
||||
}
|
||||
|
||||
/**
|
||||
* 新建
|
||||
*/
|
||||
function handleCreate() {
|
||||
showModal({
|
||||
type: 'create',
|
||||
// 80对应about
|
||||
title: '添加',
|
||||
})
|
||||
formData.value.status = 0
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
async function handleEdit(record = {}) {
|
||||
showModal({
|
||||
type: 'edit',
|
||||
title: t('pages.system.user.edit'),
|
||||
})
|
||||
showSpining()
|
||||
const { data, success } = await apis.imgmgt.getMenu(record.id).catch()
|
||||
if (!success) {
|
||||
hideModal()
|
||||
return
|
||||
}
|
||||
hideSpining()
|
||||
formData.value = { ...data }
|
||||
formData.value.img=[config('http.apiBasic')+data.img]
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定
|
||||
*/
|
||||
function handleOk() {
|
||||
if (!formData.value.img) return message.error('请上传图片');
|
||||
formRef.value.validateFields().then(async (values) => {
|
||||
console.log(values)
|
||||
try {
|
||||
showLoading()
|
||||
const params = {
|
||||
...values,
|
||||
img: spliceUrl(formData.value?.img[0]),
|
||||
type: 'neighborhoodBanner' ,
|
||||
}
|
||||
let result = null
|
||||
switch (modal.value.type) {
|
||||
case 'create':
|
||||
result = await apis.imgmgt.createMenu(params).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
break
|
||||
case 'edit':
|
||||
// result = await apis.imgmgt.updateMenu(formData.value.id, params).catch(() => {
|
||||
result = await apis.imgmgt.updateMenu(formData.value.id, params).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
break
|
||||
}
|
||||
hideLoading()
|
||||
if (config('http.code.success') === result?.success) {
|
||||
hideModal()
|
||||
emit('ok')
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
hideLoading()
|
||||
}
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e)
|
||||
hideLoading()
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消
|
||||
*/
|
||||
function handleCancel() {
|
||||
formData.value.img=['']
|
||||
hideModal()
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭后
|
||||
*/
|
||||
function onAfterClose() {
|
||||
resetForm()
|
||||
hideLoading()
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
handleCreate,
|
||||
handleEdit,
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
193
src/views/pages/nbdMutualAid/index.vue
Normal file
193
src/views/pages/nbdMutualAid/index.vue
Normal file
@ -0,0 +1,193 @@
|
||||
<template>
|
||||
<x-search-bar class="mb-8-2">
|
||||
<template #default="{ gutter, colSpan }">
|
||||
<a-form :label-col="{ style: { width: '40px' } }" :model="searchFormData" layout="inline">
|
||||
<a-row :gutter="gutter">
|
||||
<a-col v-bind="colSpan">
|
||||
<a-form-item label="名称" name="name">
|
||||
<a-input placeholder="请输入图片名称" v-model:value="searchFormData.name"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col v-bind="colSpan">
|
||||
<a-form-item label="状态" name="status">
|
||||
<a-select v-model:value="searchFormData.status" allowClear>
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option value="enabled">启用</a-select-option>
|
||||
<a-select-option value="disabled">停用</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col class="align-right" v-bind="colSpan">
|
||||
<a-space>
|
||||
<a-button @click="handleResetSearch">{{ $t('button.reset') }}</a-button>
|
||||
<a-button ghost type="primary" @click="handleSearch">
|
||||
{{ $t('button.search') }}
|
||||
</a-button>
|
||||
</a-space>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</template>
|
||||
</x-search-bar>
|
||||
<a-row :gutter="8" :wrap="false">
|
||||
<a-col flex="auto">
|
||||
<a-card type="flex">
|
||||
<x-action-bar class="mb-8-2">
|
||||
<a-button type="primary" @click="$refs.editDialogRef.handleCreate()">
|
||||
<template #icon>
|
||||
<plus-outlined></plus-outlined>
|
||||
</template>
|
||||
新增
|
||||
</a-button>
|
||||
</x-action-bar>
|
||||
<a-table :columns="columns" :data-source="listData" bordered="true" :loading="loading"
|
||||
:pagination="paginationState" :scroll="{ x: 1000 }" @change="onTableChange">
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="'img' === column.dataIndex">
|
||||
<a-image :width="60" :src="record.img?config('http.apiBasic')+record.img:errImg" />
|
||||
</template>
|
||||
|
||||
<template v-if="'status' === column.dataIndex">
|
||||
<a-tag :color="enumsStatus.getColor(record.status)">{{ enumsStatus.getName(record.status) }}</a-tag>
|
||||
</template>
|
||||
<template v-if="'action' === column.key">
|
||||
<x-action-button @click="$refs.editDialogRef.handleEdit(record)">
|
||||
<a-tooltip>
|
||||
<template #title> {{ $t('pages.system.user.edit') }}</template>
|
||||
<edit-outlined /> </a-tooltip></x-action-button>
|
||||
<x-action-button @click="handleDelete(record)">
|
||||
<a-tooltip>
|
||||
<template #title>{{ $t('pages.system.delete') }}</template>
|
||||
<delete-outlined style="color: #ff4d4f" /> </a-tooltip></x-action-button>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
||||
<edit-dialog ref="editDialogRef" @ok="onOk"></edit-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { message, Modal } from 'ant-design-vue'
|
||||
import { ref } from 'vue'
|
||||
import apis from '@/apis'
|
||||
import { formatUtcDateTime } from '@/utils/util'
|
||||
import { config } from '@/config'
|
||||
import { statusUserTypeEnum } from '@/enums/system'
|
||||
import { usePagination } from '@/hooks'
|
||||
import errImg from '@/assets/blankSpace.png'
|
||||
import EditDialog from './components/EditDialog.vue'
|
||||
import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons-vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { delMenu, getDataList } from '@/apis/modules/imgmgt'
|
||||
import { enumsStatus } from '@/enums/index.js'
|
||||
defineOptions({
|
||||
name: 'nbdMa',
|
||||
})
|
||||
const { t } = useI18n() // 解构出t方法
|
||||
const columns = [
|
||||
{ title: '图片', dataIndex: 'img', width: 100, align: 'center' },
|
||||
{ title: '名称', dataIndex: 'title', key: 'name' },
|
||||
{ title: '状态', dataIndex: 'status', width: 120, align: 'center' },
|
||||
{ title: '顺序', dataIndex: 'sequence', width: 100, align: 'center' },
|
||||
{ title: t('button.action'), key: 'action', fixed: 'right', width: 100, align: 'center' },
|
||||
]
|
||||
|
||||
const { listData, loading, showLoading, hideLoading, paginationState, resetPagination, searchFormData } = usePagination()
|
||||
|
||||
const editDialogRef = ref()
|
||||
getPageList()
|
||||
/**
|
||||
* 获取用户列表
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
|
||||
async function getPageList() {
|
||||
try {
|
||||
showLoading()
|
||||
const { pageSize, current } = paginationState
|
||||
const { success, data, total } = await apis.imgmgt
|
||||
.getDataList({
|
||||
pageSize,
|
||||
current:current,
|
||||
type: 'neighborhoodBanner',
|
||||
...searchFormData.value,
|
||||
})
|
||||
.catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
hideLoading()
|
||||
if (config('http.code.success') === success) {
|
||||
//筛选type的值80对应about
|
||||
listData.value = data
|
||||
paginationState.total = total
|
||||
}
|
||||
} catch (error) {
|
||||
hideLoading()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function handleDelete({ id }) {
|
||||
Modal.confirm({
|
||||
title: t('pages.system.user.delTip'),
|
||||
content: t('button.confirm'),
|
||||
okText: t('button.confirm'),
|
||||
onOk: () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
; (async () => {
|
||||
try {
|
||||
const { success } = await apis.imgmgt.delMenu(id).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
if (config('http.code.success') === success) {
|
||||
resolve()
|
||||
message.success(t('component.message.success.delete'))
|
||||
await getPageList()
|
||||
}
|
||||
} catch (error) {
|
||||
reject()
|
||||
}
|
||||
})()
|
||||
})
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
function onTableChange({ current, pageSize }) {
|
||||
paginationState.current = current
|
||||
paginationState.pageSize = pageSize
|
||||
getPageList()
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索
|
||||
*/
|
||||
function handleSearch() {
|
||||
resetPagination()
|
||||
getPageList()
|
||||
}
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function handleResetSearch() {
|
||||
searchFormData.value = {}
|
||||
resetPagination()
|
||||
getPageList()
|
||||
}
|
||||
/**
|
||||
* 编辑完成
|
||||
*/
|
||||
async function onOk() {
|
||||
await getPageList()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
163
src/views/pages/neighborhood/components/EditDialog.vue
Normal file
163
src/views/pages/neighborhood/components/EditDialog.vue
Normal file
@ -0,0 +1,163 @@
|
||||
<template>
|
||||
<a-modal :open="modal.open" :title="modal.title" :width="640" :confirm-loading="modal.confirmLoading"
|
||||
:after-close="onAfterClose" :cancel-text="cancelText" :ok-text="okText" @ok="handleOk" @cancel="handleCancel">
|
||||
<a-spin :spinning="spining">
|
||||
<a-form ref="formRef" :model="formData" :rules="formRules">
|
||||
<a-card class="mb-8-2">
|
||||
<a-row :gutter="12">
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'名称'" name="title">
|
||||
<a-input :placeholder="'请输入名称'" v-model:value="formData.title"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'顺序'" name="sequence">
|
||||
<a-input-number :placeholder="'请输入顺序'" v-model:value="formData.sequence" style="width: 100%;"></a-input-number>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'状态'" name="status">
|
||||
<a-form-item :label="'状态'" name="status">
|
||||
<a-radio-group v-model:value="formData.status" :options="enumsStatus.getAll()"></a-radio-group>
|
||||
</a-form-item>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item :label="'图片'" name="img">
|
||||
<gx-upload v-model="formData.img" :fileNumber="1" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
import { ref } from 'vue'
|
||||
import { config } from '@/config'
|
||||
import apis from '@/apis'
|
||||
import { useForm, useModal, useSpining } from '@/hooks'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import dayjs from 'dayjs'
|
||||
import { createMenu, getMenu, updateMenu } from '@/apis/modules/imgmgt'
|
||||
import {spliceUrl} from '@/utils/util'
|
||||
const emit = defineEmits(['ok'])
|
||||
const { t } = useI18n() // 解构出t方法
|
||||
const { modal, showModal, hideModal, showLoading, hideLoading } = useModal()
|
||||
const { formRecord, formData, formRef, formRules, resetForm } = useForm()
|
||||
const { spining, showSpining, hideSpining } = useSpining()
|
||||
const cancelText = ref(t('button.cancel'))
|
||||
const okText = ref(t('button.confirm'))
|
||||
const rolesValue = ref([])
|
||||
const roles = ref([])
|
||||
const img = ref('')
|
||||
|
||||
formRules.value = {
|
||||
title: { required: true, message: '请输入名称' },
|
||||
status: [{ required: true, message: '请选择状态', trigger: 'change' }],
|
||||
sequence: [{ required: true, message: '请选择顺序', trigger: 'change' }],
|
||||
img: [{ required: true, message: '请上传图片', trigger: 'change' }],
|
||||
}
|
||||
|
||||
/**
|
||||
* 新建
|
||||
*/
|
||||
function handleCreate() {
|
||||
showModal({
|
||||
type: 'create',
|
||||
// 80对应about
|
||||
title: '添加',
|
||||
})
|
||||
formData.value.status = 0
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
async function handleEdit(record = {}) {
|
||||
showModal({
|
||||
type: 'edit',
|
||||
title: t('pages.system.user.edit'),
|
||||
})
|
||||
showSpining()
|
||||
const { data, success } = await apis.imgmgt.getMenu(record.id).catch()
|
||||
if (!success) {
|
||||
hideModal()
|
||||
return
|
||||
}
|
||||
hideSpining()
|
||||
formData.value = { ...data }
|
||||
formData.value.img=[config('http.apiBasic')+data.img]
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定
|
||||
*/
|
||||
function handleOk() {
|
||||
if (!formData.value.img) return message.error('请上传图片');
|
||||
formRef.value.validateFields().then(async (values) => {
|
||||
console.log(values)
|
||||
try {
|
||||
showLoading()
|
||||
const params = {
|
||||
...values,
|
||||
img: spliceUrl(formData.value?.img[0]),
|
||||
type: 'neighborhoodBanner' ,
|
||||
}
|
||||
let result = null
|
||||
switch (modal.value.type) {
|
||||
case 'create':
|
||||
result = await apis.imgmgt.createMenu(params).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
break
|
||||
case 'edit':
|
||||
// result = await apis.imgmgt.updateMenu(formData.value.id, params).catch(() => {
|
||||
result = await apis.imgmgt.updateMenu(formData.value.id, params).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
break
|
||||
}
|
||||
hideLoading()
|
||||
if (config('http.code.success') === result?.success) {
|
||||
hideModal()
|
||||
emit('ok')
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
hideLoading()
|
||||
}
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e)
|
||||
hideLoading()
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消
|
||||
*/
|
||||
function handleCancel() {
|
||||
formData.value.img=['']
|
||||
hideModal()
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭后
|
||||
*/
|
||||
function onAfterClose() {
|
||||
resetForm()
|
||||
hideLoading()
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
handleCreate,
|
||||
handleEdit,
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
193
src/views/pages/neighborhood/index.vue
Normal file
193
src/views/pages/neighborhood/index.vue
Normal file
@ -0,0 +1,193 @@
|
||||
<template>
|
||||
<x-search-bar class="mb-8-2">
|
||||
<template #default="{ gutter, colSpan }">
|
||||
<a-form :label-col="{ style: { width: '40px' } }" :model="searchFormData" layout="inline">
|
||||
<a-row :gutter="gutter">
|
||||
<a-col v-bind="colSpan">
|
||||
<a-form-item label="名称" name="name">
|
||||
<a-input placeholder="请输入图片名称" v-model:value="searchFormData.name"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col v-bind="colSpan">
|
||||
<a-form-item label="状态" name="status">
|
||||
<a-select v-model:value="searchFormData.status" allowClear>
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option value="enabled">启用</a-select-option>
|
||||
<a-select-option value="disabled">停用</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col class="align-right" v-bind="colSpan">
|
||||
<a-space>
|
||||
<a-button @click="handleResetSearch">{{ $t('button.reset') }}</a-button>
|
||||
<a-button ghost type="primary" @click="handleSearch">
|
||||
{{ $t('button.search') }}
|
||||
</a-button>
|
||||
</a-space>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</template>
|
||||
</x-search-bar>
|
||||
<a-row :gutter="8" :wrap="false">
|
||||
<a-col flex="auto">
|
||||
<a-card type="flex">
|
||||
<x-action-bar class="mb-8-2">
|
||||
<a-button type="primary" @click="$refs.editDialogRef.handleCreate()">
|
||||
<template #icon>
|
||||
<plus-outlined></plus-outlined>
|
||||
</template>
|
||||
新增
|
||||
</a-button>
|
||||
</x-action-bar>
|
||||
<a-table :columns="columns" :data-source="listData" bordered="true" :loading="loading"
|
||||
:pagination="paginationState" :scroll="{ x: 1000 }" @change="onTableChange">
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="'img' === column.dataIndex">
|
||||
<a-image :width="60" :src="record.img?config('http.apiBasic')+record.img:errImg" />
|
||||
</template>
|
||||
|
||||
<template v-if="'status' === column.dataIndex">
|
||||
<a-tag :color="enumsStatus.getColor(record.status)">{{ enumsStatus.getName(record.status) }}</a-tag>
|
||||
</template>
|
||||
<template v-if="'action' === column.key">
|
||||
<x-action-button @click="$refs.editDialogRef.handleEdit(record)">
|
||||
<a-tooltip>
|
||||
<template #title> {{ $t('pages.system.user.edit') }}</template>
|
||||
<edit-outlined /> </a-tooltip></x-action-button>
|
||||
<x-action-button @click="handleDelete(record)">
|
||||
<a-tooltip>
|
||||
<template #title>{{ $t('pages.system.delete') }}</template>
|
||||
<delete-outlined style="color: #ff4d4f" /> </a-tooltip></x-action-button>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
||||
<edit-dialog ref="editDialogRef" @ok="onOk"></edit-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { message, Modal } from 'ant-design-vue'
|
||||
import { ref } from 'vue'
|
||||
import apis from '@/apis'
|
||||
import { formatUtcDateTime } from '@/utils/util'
|
||||
import { config } from '@/config'
|
||||
import { statusUserTypeEnum } from '@/enums/system'
|
||||
import { usePagination } from '@/hooks'
|
||||
import errImg from '@/assets/blankSpace.png'
|
||||
import EditDialog from './components/EditDialog.vue'
|
||||
import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons-vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { delMenu, getDataList } from '@/apis/modules/imgmgt'
|
||||
import { enumsStatus } from '@/enums/index.js'
|
||||
defineOptions({
|
||||
name: 'homeBanner',
|
||||
})
|
||||
const { t } = useI18n() // 解构出t方法
|
||||
const columns = [
|
||||
{ title: '图片', dataIndex: 'img', width: 100, align: 'center' },
|
||||
{ title: '名称', dataIndex: 'title', key: 'name' },
|
||||
{ title: '状态', dataIndex: 'status', width: 120, align: 'center' },
|
||||
{ title: '顺序', dataIndex: 'sequence', width: 100, align: 'center' },
|
||||
{ title: t('button.action'), key: 'action', fixed: 'right', width: 100, align: 'center' },
|
||||
]
|
||||
|
||||
const { listData, loading, showLoading, hideLoading, paginationState, resetPagination, searchFormData } = usePagination()
|
||||
|
||||
const editDialogRef = ref()
|
||||
getPageList()
|
||||
/**
|
||||
* 获取用户列表
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
|
||||
async function getPageList() {
|
||||
try {
|
||||
showLoading()
|
||||
const { pageSize, current } = paginationState
|
||||
const { success, data, total } = await apis.imgmgt
|
||||
.getDataList({
|
||||
pageSize,
|
||||
current:current,
|
||||
type: 'neighborhoodBanner',
|
||||
...searchFormData.value,
|
||||
})
|
||||
.catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
hideLoading()
|
||||
if (config('http.code.success') === success) {
|
||||
//筛选type的值80对应about
|
||||
listData.value = data
|
||||
paginationState.total = total
|
||||
}
|
||||
} catch (error) {
|
||||
hideLoading()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function handleDelete({ id }) {
|
||||
Modal.confirm({
|
||||
title: t('pages.system.user.delTip'),
|
||||
content: t('button.confirm'),
|
||||
okText: t('button.confirm'),
|
||||
onOk: () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
; (async () => {
|
||||
try {
|
||||
const { success } = await apis.imgmgt.delMenu(id).catch(() => {
|
||||
throw new Error()
|
||||
})
|
||||
if (config('http.code.success') === success) {
|
||||
resolve()
|
||||
message.success(t('component.message.success.delete'))
|
||||
await getPageList()
|
||||
}
|
||||
} catch (error) {
|
||||
reject()
|
||||
}
|
||||
})()
|
||||
})
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
function onTableChange({ current, pageSize }) {
|
||||
paginationState.current = current
|
||||
paginationState.pageSize = pageSize
|
||||
getPageList()
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索
|
||||
*/
|
||||
function handleSearch() {
|
||||
resetPagination()
|
||||
getPageList()
|
||||
}
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function handleResetSearch() {
|
||||
searchFormData.value = {}
|
||||
resetPagination()
|
||||
getPageList()
|
||||
}
|
||||
/**
|
||||
* 编辑完成
|
||||
*/
|
||||
async function onOk() {
|
||||
await getPageList()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@ -8,7 +8,7 @@ import useVuePlugin from './config/useVuePlugin'
|
||||
import useVisualizerPlugin from './config/useVisualizerPlugin'
|
||||
import useServer from './config/useServer'
|
||||
// import useEslintPlugin from './config/useEslintPlugin'
|
||||
|
||||
import { viteMockServe } from 'vite-plugin-mock'
|
||||
export default ({ mode }) => {
|
||||
const env = loadEnv(mode, process.cwd(), '')
|
||||
return defineConfig({
|
||||
@ -53,7 +53,19 @@ export default ({ mode }) => {
|
||||
version: pkg.version,
|
||||
}),
|
||||
},
|
||||
plugins: [useVuePlugin(), useProgressPlugin(), useCompressPlugin(), useVisualizerPlugin()],
|
||||
plugins: [
|
||||
useVuePlugin(),
|
||||
useProgressPlugin(),
|
||||
useCompressPlugin(),
|
||||
useVisualizerPlugin(),
|
||||
viteMockServe({
|
||||
mockPath: 'src/mock', // mock 文件目录
|
||||
configPath:'src/mock/index.js',
|
||||
localEnabled: true, // 开发环境启用
|
||||
prodEnabled: false, // 生产环境禁用
|
||||
logger: true, // 控制台日志
|
||||
}),
|
||||
],
|
||||
server: useServer(),
|
||||
resolve: {
|
||||
alias: {
|
||||
|
||||
192
yarn.lock
192
yarn.lock
@ -629,6 +629,14 @@ ant-design-vue@^4.0.1:
|
||||
vue-types "^3.0.0"
|
||||
warning "^4.0.0"
|
||||
|
||||
anymatch@~3.1.2:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz"
|
||||
integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
|
||||
dependencies:
|
||||
normalize-path "^3.0.0"
|
||||
picomatch "^2.0.4"
|
||||
|
||||
argparse@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz"
|
||||
@ -673,6 +681,11 @@ bignumber.js@^9.0.0:
|
||||
resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz"
|
||||
integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==
|
||||
|
||||
binary-extensions@^2.0.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz"
|
||||
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
|
||||
|
||||
body-scroll-lock@4.0.0-beta.0:
|
||||
version "4.0.0-beta.0"
|
||||
resolved "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz"
|
||||
@ -698,7 +711,7 @@ brace-expansion@^1.1.7:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
braces@^3.0.2:
|
||||
braces@^3.0.2, braces@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
|
||||
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
||||
@ -712,6 +725,13 @@ bundle-name@^3.0.0:
|
||||
dependencies:
|
||||
run-applescript "^5.0.0"
|
||||
|
||||
bundle-require@^4.0.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.npmmirror.com/bundle-require/-/bundle-require-4.2.1.tgz"
|
||||
integrity sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==
|
||||
dependencies:
|
||||
load-tsconfig "^0.2.3"
|
||||
|
||||
callsites@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz"
|
||||
@ -735,6 +755,21 @@ chalk@5.3.0:
|
||||
resolved "https://registry.npmmirror.com/chalk/-/chalk-5.3.0.tgz"
|
||||
integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
|
||||
|
||||
chokidar@^3.5.3:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz"
|
||||
integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
|
||||
dependencies:
|
||||
anymatch "~3.1.2"
|
||||
braces "~3.0.2"
|
||||
glob-parent "~5.1.2"
|
||||
is-binary-path "~2.1.0"
|
||||
is-glob "~4.0.1"
|
||||
normalize-path "~3.0.0"
|
||||
readdirp "~3.6.0"
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
cli-cursor@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz"
|
||||
@ -801,7 +836,7 @@ combined-stream@^1.0.8:
|
||||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
commander@11.0.0:
|
||||
commander@*, commander@11.0.0:
|
||||
version "11.0.0"
|
||||
resolved "https://registry.npmmirror.com/commander/-/commander-11.0.0.tgz"
|
||||
integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==
|
||||
@ -816,6 +851,16 @@ concat-map@0.0.1:
|
||||
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
|
||||
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
|
||||
|
||||
connect@^3.7.0:
|
||||
version "3.7.0"
|
||||
resolved "https://registry.npmmirror.com/connect/-/connect-3.7.0.tgz"
|
||||
integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==
|
||||
dependencies:
|
||||
debug "2.6.9"
|
||||
finalhandler "1.1.2"
|
||||
parseurl "~1.3.3"
|
||||
utils-merge "1.0.1"
|
||||
|
||||
copy-anything@^2.0.1:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz"
|
||||
@ -886,11 +931,18 @@ debug@^4.3.3:
|
||||
ms "2.1.2"
|
||||
|
||||
debug@^4.3.4:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
version "4.4.1"
|
||||
resolved "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz"
|
||||
integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
ms "^2.1.3"
|
||||
|
||||
debug@2.6.9:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz"
|
||||
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@4.3.4:
|
||||
version "4.3.4"
|
||||
@ -982,6 +1034,11 @@ echarts@^5.4.3:
|
||||
tslib "2.3.0"
|
||||
zrender "5.4.4"
|
||||
|
||||
ee-first@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz"
|
||||
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
|
||||
@ -997,6 +1054,11 @@ encode-utf8@^1.0.3:
|
||||
resolved "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz"
|
||||
integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==
|
||||
|
||||
encodeurl@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz"
|
||||
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
|
||||
|
||||
errno@^0.1.1:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz"
|
||||
@ -1004,7 +1066,7 @@ errno@^0.1.1:
|
||||
dependencies:
|
||||
prr "~1.0.1"
|
||||
|
||||
esbuild@^0.18.10:
|
||||
esbuild@^0.18.10, esbuild@>=0.17:
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz"
|
||||
integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
|
||||
@ -1037,6 +1099,11 @@ escalade@^3.1.1:
|
||||
resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
|
||||
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
|
||||
|
||||
escape-html@~1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz"
|
||||
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
|
||||
|
||||
escape-string-regexp@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
|
||||
@ -1207,7 +1274,7 @@ fast-diff@^1.1.2:
|
||||
resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz"
|
||||
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
|
||||
|
||||
fast-glob@^3.3.0:
|
||||
fast-glob@^3.2.12, fast-glob@^3.3.0:
|
||||
version "3.3.1"
|
||||
resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz"
|
||||
integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
|
||||
@ -1259,6 +1326,19 @@ fill-range@^7.0.1:
|
||||
dependencies:
|
||||
to-regex-range "^5.0.1"
|
||||
|
||||
finalhandler@1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.2.tgz"
|
||||
integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
|
||||
dependencies:
|
||||
debug "2.6.9"
|
||||
encodeurl "~1.0.2"
|
||||
escape-html "~1.0.3"
|
||||
on-finished "~2.3.0"
|
||||
parseurl "~1.3.3"
|
||||
statuses "~1.5.0"
|
||||
unpipe "~1.0.0"
|
||||
|
||||
find-up@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
|
||||
@ -1347,6 +1427,13 @@ glob-parent@^6.0.2:
|
||||
dependencies:
|
||||
is-glob "^4.0.3"
|
||||
|
||||
glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
glob@^7.1.3:
|
||||
version "7.2.3"
|
||||
resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
|
||||
@ -1446,6 +1533,13 @@ inherits@2:
|
||||
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
|
||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||
|
||||
is-binary-path@~2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz"
|
||||
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
|
||||
dependencies:
|
||||
binary-extensions "^2.0.0"
|
||||
|
||||
is-docker@^2.0.0, is-docker@^2.1.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz"
|
||||
@ -1471,7 +1565,7 @@ is-fullwidth-code-point@^4.0.0:
|
||||
resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz"
|
||||
integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
|
||||
|
||||
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
|
||||
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
|
||||
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
|
||||
@ -1643,6 +1737,11 @@ listr2@6.6.1:
|
||||
rfdc "^1.3.0"
|
||||
wrap-ansi "^8.1.0"
|
||||
|
||||
load-tsconfig@^0.2.3:
|
||||
version "0.2.5"
|
||||
resolved "https://registry.npmmirror.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz"
|
||||
integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==
|
||||
|
||||
locate-path@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
|
||||
@ -1774,11 +1873,23 @@ minisearch@^6.1.0:
|
||||
resolved "https://registry.npmjs.org/minisearch/-/minisearch-6.1.0.tgz"
|
||||
integrity sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==
|
||||
|
||||
ms@^2.1.1:
|
||||
mockjs@^1.1.0, mockjs@>=1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz"
|
||||
integrity sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==
|
||||
dependencies:
|
||||
commander "*"
|
||||
|
||||
ms@^2.1.1, ms@^2.1.3:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
|
||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz"
|
||||
integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
|
||||
|
||||
ms@2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz"
|
||||
@ -1813,6 +1924,11 @@ needle@^3.1.0:
|
||||
iconv-lite "^0.6.3"
|
||||
sax "^1.2.4"
|
||||
|
||||
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz"
|
||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||
|
||||
npm-run-path@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz"
|
||||
@ -1839,6 +1955,13 @@ nth-check@^2.1.1:
|
||||
dependencies:
|
||||
boolbase "^1.0.0"
|
||||
|
||||
on-finished@~2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz"
|
||||
integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==
|
||||
dependencies:
|
||||
ee-first "1.1.1"
|
||||
|
||||
once@^1.3.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
|
||||
@ -1953,6 +2076,11 @@ parse-node-version@^1.0.1:
|
||||
resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz"
|
||||
integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
|
||||
|
||||
parseurl@~1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz"
|
||||
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
|
||||
|
||||
path-exists@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
|
||||
@ -1973,12 +2101,17 @@ path-key@^4.0.0:
|
||||
resolved "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz"
|
||||
integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
|
||||
|
||||
path-to-regexp@^6.2.1:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz"
|
||||
integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==
|
||||
|
||||
picocolors@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
|
||||
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||
|
||||
picomatch@^2.2.2, picomatch@^2.3.1:
|
||||
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
@ -2087,6 +2220,13 @@ rd@^2.0.1:
|
||||
dependencies:
|
||||
"@types/node" "^10.3.6"
|
||||
|
||||
readdirp@~3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz"
|
||||
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
|
||||
dependencies:
|
||||
picomatch "^2.2.1"
|
||||
|
||||
regenerator-runtime@^0.13.4:
|
||||
version "0.13.9"
|
||||
resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
|
||||
@ -2286,6 +2426,11 @@ source-map@~0.6.0:
|
||||
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
|
||||
statuses@~1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz"
|
||||
integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
|
||||
|
||||
string-argv@0.3.2:
|
||||
version "0.3.2"
|
||||
resolved "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz"
|
||||
@ -2446,6 +2591,11 @@ universalify@^2.0.0:
|
||||
resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
|
||||
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
|
||||
|
||||
unpipe@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz"
|
||||
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
||||
|
||||
untildify@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/untildify/-/untildify-4.0.0.tgz"
|
||||
@ -2463,6 +2613,11 @@ util-deprecate@^1.0.2:
|
||||
resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz"
|
||||
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
||||
|
||||
utils-merge@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz"
|
||||
integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
|
||||
|
||||
vite-plugin-compression@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz"
|
||||
@ -2481,6 +2636,19 @@ vite-plugin-eslint@^1.8.1:
|
||||
"@types/eslint" "^8.4.5"
|
||||
rollup "^2.77.2"
|
||||
|
||||
vite-plugin-mock@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.npmmirror.com/vite-plugin-mock/-/vite-plugin-mock-3.0.2.tgz"
|
||||
integrity sha512-bD//HvkTygGmk+LsIAdf0jGNlCv4iWv0kZlH9UEgWT6QYoUwfjQAE4SKxHRw2tfLgVhbPQVv/+X3YlNWvueGUA==
|
||||
dependencies:
|
||||
bundle-require "^4.0.1"
|
||||
chokidar "^3.5.3"
|
||||
connect "^3.7.0"
|
||||
debug "^4.3.4"
|
||||
fast-glob "^3.2.12"
|
||||
path-to-regexp "^6.2.1"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
vite-plugin-progress@^0.0.7:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.npmjs.org/vite-plugin-progress/-/vite-plugin-progress-0.0.7.tgz"
|
||||
@ -2490,7 +2658,7 @@ vite-plugin-progress@^0.0.7:
|
||||
progress "^2.0.3"
|
||||
rd "^2.0.1"
|
||||
|
||||
vite@^4.0.0, vite@^4.4.7, vite@^4.4.9, vite@>=2, vite@>=2.0.0, vite@>2.0.0-0:
|
||||
vite@^4.0.0, vite@^4.4.7, vite@^4.4.9, vite@>=2, vite@>=2.0.0, vite@>=4.0.0, vite@>2.0.0-0:
|
||||
version "4.4.9"
|
||||
resolved "https://registry.npmmirror.com/vite/-/vite-4.4.9.tgz"
|
||||
integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user