布局优化,目录结构优化

This commit is contained in:
Gary Fu
2023-12-24 12:10:28 +08:00
parent 6e15f9e36c
commit 6696f56ee5
15 changed files with 237 additions and 536 deletions

View File

@@ -2,10 +2,6 @@
This template should help get you started developing with Vue 3 in Vite. This template should help get you started developing with Vue 3 in Vite.
## Recommended IDE Setup
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
## Customize configuration ## Customize configuration
See [Vite Configuration Reference](https://vitejs.dev/config/). See [Vite Configuration Reference](https://vitejs.dev/config/).

485
package-lock.json generated
View File

@@ -8,24 +8,24 @@
"name": "simple-element-plus-template", "name": "simple-element-plus-template",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.3.1",
"@vueuse/core": "^10.7.0", "@vueuse/core": "^10.7.0",
"dayjs": "^1.11.8", "dayjs": "^1.11.10",
"element-plus": "^2.3.4", "element-plus": "^2.4.4",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"pinia": "^2.0.32", "pinia": "^2.1.7",
"pinia-plugin-persistedstate": "^3.2.0", "pinia-plugin-persistedstate": "^3.2.1",
"vue": "^3.2.47", "vue": "^3.3.13",
"vue-i18n": "^9.2.2", "vue-i18n": "^9.8.0",
"vue-router": "^4.1.6" "vue-router": "^4.2.5"
}, },
"devDependencies": { "devDependencies": {
"@rushstack/eslint-patch": "^1.2.0", "@rushstack/eslint-patch": "^1.6.1",
"@vitejs/plugin-vue": "^4.0.0", "@vitejs/plugin-vue": "^4.5.2",
"@vue/eslint-config-standard": "^8.0.1", "@vue/eslint-config-standard": "^8.0.1",
"eslint": "^8.34.0", "eslint": "^8.56.0",
"eslint-plugin-vue": "^9.9.0", "eslint-plugin-vue": "^9.19.2",
"vite": "^4.1.4" "vite": "^5.0.10"
} }
}, },
"node_modules/@aashutoshrathi/word-wrap": { "node_modules/@aashutoshrathi/word-wrap": {
@@ -64,346 +64,10 @@
"vue": "^3.2.0" "vue": "^3.2.0"
} }
}, },
"node_modules/@esbuild/android-arm": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
"integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
"integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
"integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
"integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
"integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
"integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
"integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
"integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
"integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ia32": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
"integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-loong64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
"integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
"cpu": [
"loong64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-mips64el": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
"integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
"cpu": [
"mips64el"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ppc64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
"integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-riscv64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
"integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-s390x": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
"integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
"cpu": [
"s390x"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
"integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/netbsd-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
"integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/openbsd-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
"integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/sunos-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
"integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
"integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-ia32": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
"integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-x64": { "node_modules/@esbuild/win32-x64": {
"version": "0.18.20", "version": "0.19.10",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.10.tgz",
"integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", "integrity": "sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -618,6 +282,19 @@
"url": "https://opencollective.com/popperjs" "url": "https://opencollective.com/popperjs"
} }
}, },
"node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz",
"integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rushstack/eslint-patch": { "node_modules/@rushstack/eslint-patch": {
"version": "1.6.1", "version": "1.6.1",
"resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz",
@@ -1485,9 +1162,9 @@
} }
}, },
"node_modules/esbuild": { "node_modules/esbuild": {
"version": "0.18.20", "version": "0.19.10",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.10.tgz",
"integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "integrity": "sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"bin": { "bin": {
@@ -1497,28 +1174,29 @@
"node": ">=12" "node": ">=12"
}, },
"optionalDependencies": { "optionalDependencies": {
"@esbuild/android-arm": "0.18.20", "@esbuild/aix-ppc64": "0.19.10",
"@esbuild/android-arm64": "0.18.20", "@esbuild/android-arm": "0.19.10",
"@esbuild/android-x64": "0.18.20", "@esbuild/android-arm64": "0.19.10",
"@esbuild/darwin-arm64": "0.18.20", "@esbuild/android-x64": "0.19.10",
"@esbuild/darwin-x64": "0.18.20", "@esbuild/darwin-arm64": "0.19.10",
"@esbuild/freebsd-arm64": "0.18.20", "@esbuild/darwin-x64": "0.19.10",
"@esbuild/freebsd-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.19.10",
"@esbuild/linux-arm": "0.18.20", "@esbuild/freebsd-x64": "0.19.10",
"@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-arm": "0.19.10",
"@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-arm64": "0.19.10",
"@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-ia32": "0.19.10",
"@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-loong64": "0.19.10",
"@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-mips64el": "0.19.10",
"@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-ppc64": "0.19.10",
"@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-riscv64": "0.19.10",
"@esbuild/linux-x64": "0.18.20", "@esbuild/linux-s390x": "0.19.10",
"@esbuild/netbsd-x64": "0.18.20", "@esbuild/linux-x64": "0.19.10",
"@esbuild/openbsd-x64": "0.18.20", "@esbuild/netbsd-x64": "0.19.10",
"@esbuild/sunos-x64": "0.18.20", "@esbuild/openbsd-x64": "0.19.10",
"@esbuild/win32-arm64": "0.18.20", "@esbuild/sunos-x64": "0.19.10",
"@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-arm64": "0.19.10",
"@esbuild/win32-x64": "0.18.20" "@esbuild/win32-ia32": "0.19.10",
"@esbuild/win32-x64": "0.19.10"
} }
}, },
"node_modules/escape-html": { "node_modules/escape-html": {
@@ -2073,20 +1751,6 @@
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true "dev": true
}, },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/function-bind": { "node_modules/function-bind": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -3219,18 +2883,31 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "3.29.4", "version": "4.9.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz",
"integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==",
"dev": true, "dev": true,
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
}, },
"engines": { "engines": {
"node": ">=14.18.0", "node": ">=18.0.0",
"npm": ">=8.0.0" "npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.9.1",
"@rollup/rollup-android-arm64": "4.9.1",
"@rollup/rollup-darwin-arm64": "4.9.1",
"@rollup/rollup-darwin-x64": "4.9.1",
"@rollup/rollup-linux-arm-gnueabihf": "4.9.1",
"@rollup/rollup-linux-arm64-gnu": "4.9.1",
"@rollup/rollup-linux-arm64-musl": "4.9.1",
"@rollup/rollup-linux-riscv64-gnu": "4.9.1",
"@rollup/rollup-linux-x64-gnu": "4.9.1",
"@rollup/rollup-linux-x64-musl": "4.9.1",
"@rollup/rollup-win32-arm64-msvc": "4.9.1",
"@rollup/rollup-win32-ia32-msvc": "4.9.1",
"@rollup/rollup-win32-x64-msvc": "4.9.1",
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
@@ -3610,29 +3287,29 @@
"dev": true "dev": true
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "4.5.1", "version": "5.0.10",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz",
"integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", "integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"esbuild": "^0.18.10", "esbuild": "^0.19.3",
"postcss": "^8.4.27", "postcss": "^8.4.32",
"rollup": "^3.27.1" "rollup": "^4.2.0"
}, },
"bin": { "bin": {
"vite": "bin/vite.js" "vite": "bin/vite.js"
}, },
"engines": { "engines": {
"node": "^14.18.0 || >=16.0.0" "node": "^18.0.0 || >=20.0.0"
}, },
"funding": { "funding": {
"url": "https://github.com/vitejs/vite?sponsor=1" "url": "https://github.com/vitejs/vite?sponsor=1"
}, },
"optionalDependencies": { "optionalDependencies": {
"fsevents": "~2.3.2" "fsevents": "~2.3.3"
}, },
"peerDependencies": { "peerDependencies": {
"@types/node": ">= 14", "@types/node": "^18.0.0 || >=20.0.0",
"less": "*", "less": "*",
"lightningcss": "^1.21.0", "lightningcss": "^1.21.0",
"sass": "*", "sass": "*",

View File

@@ -9,23 +9,23 @@
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore" "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore"
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.3.1",
"@vueuse/core": "^10.7.0", "@vueuse/core": "^10.7.0",
"dayjs": "^1.11.8", "dayjs": "^1.11.10",
"element-plus": "^2.3.4", "element-plus": "^2.4.4",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"pinia": "^2.0.32", "pinia": "^2.1.7",
"pinia-plugin-persistedstate": "^3.2.0", "pinia-plugin-persistedstate": "^3.2.1",
"vue": "^3.2.47", "vue": "^3.3.13",
"vue-i18n": "^9.2.2", "vue-i18n": "^9.8.0",
"vue-router": "^4.1.6" "vue-router": "^4.2.5"
}, },
"devDependencies": { "devDependencies": {
"@rushstack/eslint-patch": "^1.2.0", "@rushstack/eslint-patch": "^1.6.1",
"@vitejs/plugin-vue": "^4.0.0", "@vitejs/plugin-vue": "^4.5.2",
"@vue/eslint-config-standard": "^8.0.1", "@vue/eslint-config-standard": "^8.0.1",
"eslint": "^8.34.0", "eslint": "^8.56.0",
"eslint-plugin-vue": "^9.9.0", "eslint-plugin-vue": "^9.19.2",
"vite": "^4.1.4" "vite": "^5.0.10"
} }
} }

View File

@@ -5,18 +5,26 @@ defineProps({
required: true required: true
}, },
index: { index: {
type: String, type: Number,
required: false required: false
} }
}) })
</script> </script>
<template> <template>
<el-menu-item <div
:route="menuItem.route" v-if="menuItem.isSplit"
:key="menuItem.index||index"
:class="menuItem.menuCls"
>
{{ menuItem.splitText }}
</div>
<el-sub-menu
v-else-if="menuItem.children && menuItem.children.length"
:key="menuItem.index||index"
:index="`${menuItem.index||index}`"
:class="menuItem.menuCls"
v-bind="menuItem.attrs" v-bind="menuItem.attrs"
:index="index"
@click="menuItem.click&&menuItem.click()"
> >
<template #title> <template #title>
<common-icon <common-icon
@@ -25,6 +33,37 @@ defineProps({
<span v-if="menuItem.labelKey||menuItem.label"> <span v-if="menuItem.labelKey||menuItem.label">
{{ menuItem.labelKey?$t(menuItem.labelKey):menuItem.label }} {{ menuItem.labelKey?$t(menuItem.labelKey):menuItem.label }}
</span> </span>
<div
v-if="menuItem.html"
v-html="menuItem.html"
/>
</template>
<common-menu-item
v-for="(childMenu, childIdx) in menuItem.children"
:key="childMenu.index||childIdx"
:index="childIdx"
:menu-item="childMenu"
/>
</el-sub-menu>
<el-menu-item
v-else
:class="menuItem.menuCls"
:route="menuItem.route"
v-bind="menuItem.attrs"
:index="menuItem.index"
@click="menuItem.click&&menuItem.click()"
>
<common-icon
:icon="menuItem.icon"
/>
<template #title>
<span v-if="menuItem.labelKey||menuItem.label">
{{ menuItem.labelKey?$t(menuItem.labelKey):menuItem.label }}
</span>
<div
v-if="menuItem.html"
v-html="menuItem.html"
/>
</template> </template>
</el-menu-item> </el-menu-item>
</template> </template>

View File

@@ -14,13 +14,12 @@ const menuItems = computed(() => {
return filterMenus(props.menus) return filterMenus(props.menus)
}) })
const calcWithIf = menuItem => { const calcWithIf = menuItem => {
if (menuItem.iconIf) { ['icon', 'labelKey', 'label', 'html'].forEach(key => {
menuItem.icon = menuItem.iconIf(menuItem) const keyIf = menuItem[`${key}If`]
} if (keyIf) {
if (menuItem.labelIf) { menuItem[key] = keyIf(menuItem)
menuItem.label = menuItem.labelIf(menuItem) }
} })
return menuItem.icon
} }
const filterMenus = menus => menus.filter(menu => !menu.disabled) const filterMenus = menus => menus.filter(menu => !menu.disabled)
.map(menu => { .map(menu => {
@@ -35,43 +34,17 @@ const filterMenus = menus => menus.filter(menu => !menu.disabled)
<template> <template>
<el-menu <el-menu
v-bind="$attrs" v-bind="$attrs"
:default-active="$route.path"
router router
:collapse="collapse" :collapse="collapse"
> >
<template v-for="(menuItem, index) in menuItems"> <template
<div v-for="(menuItem, index) in menuItems"
v-if="menuItem.isSplit" :key="index"
:key="menuItem.index||index" >
:class="menuItem.splitCls"
>
{{ menuItem.splitText }}
</div>
<el-sub-menu
v-else-if="menuItem.children && menuItem.children.length"
:key="menuItem.index||index"
:index="`${menuItem.index||index}`"
v-bind="menuItem.attrs"
>
<template #title>
<common-icon
:icon="menuItem.icon"
/>
<span v-if="menuItem.labelKey||menuItem.label">
{{ menuItem.labelKey?$t(menuItem.labelKey):menuItem.label }}
</span>
</template>
<common-menu-item
v-for="(childMenu, childIdx) in menuItem.children"
:key="childMenu.index||childIdx"
:index="childMenu.index"
:menu-item="childMenu"
/>
</el-sub-menu>
<common-menu-item <common-menu-item
v-else
:key="menuItem.index||index"
:index="menuItem.index"
:menu-item="menuItem" :menu-item="menuItem"
:index="index"
/> />
</template> </template>
</el-menu> </el-menu>

View File

@@ -1,6 +1,6 @@
<script setup> <script setup>
import { useGlobalConfigStore } from '@/stores/GlobalConfigStore' import { useGlobalConfigStore } from '@/stores/GlobalConfigStore'
import { useBusinessMenus } from '@/services/GlobalService' import { useBusinessMenus } from '@/services/global/GlobalService'
const globalConfigStore = useGlobalConfigStore() const globalConfigStore = useGlobalConfigStore()
const businessMenus = useBusinessMenus() const businessMenus = useBusinessMenus()
</script> </script>

View File

@@ -1,5 +1,5 @@
<script setup> <script setup>
import { useBaseTopMenus, useBusinessMenus } from '@/services/GlobalService' import { useBaseTopMenus, useBusinessMenus } from '@/services/global/GlobalService'
import { useGlobalConfigStore } from '@/stores/GlobalConfigStore' import { useGlobalConfigStore } from '@/stores/GlobalConfigStore'
import { GlobalLayoutMode } from '@/consts/GlobalConstants' import { GlobalLayoutMode } from '@/consts/GlobalConstants'
import { computed } from 'vue' import { computed } from 'vue'

11
src/messages/base.js Normal file
View File

@@ -0,0 +1,11 @@
import cloneDeep from 'lodash/cloneDeep'
const base = { // 预定义几种属性
label: {},
msg: {},
error: {}
}
export function baseMessages () {
return cloneDeep(base)
}

18
src/messages/common_cn.js Normal file
View File

@@ -0,0 +1,18 @@
import { baseMessages } from '@/messages/base'
export const common = baseMessages()
common.label.login = '登录'
common.label.index = '首页'
common.label.langCn = '中文'
common.label.langEn = 'English'
common.label.language = '语言'
common.label.theme = '主题'
common.label.layout = '布局'
common.label.layoutLeft = '左侧菜单'
common.label.layoutTop = '顶部菜单'
common.label.themeDefault = '默认'
common.label.themeDark = '黑色'
common.label.personalCenter = '个人中心'
common.label.personalInfo = '个人资料'
common.label.about = '关于'
common.label.logout = '退出'

18
src/messages/common_en.js Normal file
View File

@@ -0,0 +1,18 @@
import { baseMessages } from '@/messages/base'
export const common = baseMessages()
common.label.login = 'Login'
common.label.index = 'Home'
common.label.langCn = '中文'
common.label.langEn = 'English'
common.label.language = 'Language'
common.label.theme = 'Themes'
common.label.layout = 'Layout'
common.label.layoutLeft = 'Left Menus'
common.label.layoutTop = 'Top Menus'
common.label.themeDefault = 'default'
common.label.themeDark = 'dark'
common.label.personalCenter = 'Personal Center'
common.label.personalInfo = 'Personal Info'
common.label.about = 'About'
common.label.logout = 'Logout'

12
src/messages/menu_cn.js Normal file
View File

@@ -0,0 +1,12 @@
import { baseMessages } from '@/messages/base'
export const menu = baseMessages()
menu.label.systemManagement = '系统管理'
menu.label.userManagement = '用户管理'
menu.label.roleManagement = '角色管理'
menu.label.authorityManagement = '权限管理'
menu.label.menuManagement = '菜单管理'
menu.label.errorPage = '错误页面'
menu.label.errorPage404 = '找不到页面'
menu.label.errorPage403 = '没有权限'
menu.label.errorPage500 = '服务器错误'

12
src/messages/menu_en.js Normal file
View File

@@ -0,0 +1,12 @@
import { baseMessages } from '@/messages/base'
export const menu = baseMessages()
menu.label.systemManagement = 'System Management'
menu.label.userManagement = 'User Management'
menu.label.roleManagement = 'Role Management'
menu.label.authorityManagement = 'Authority Management'
menu.label.menuManagement = 'Menu Management'
menu.label.errorPage = 'Error Page'
menu.label.errorPage404 = 'Not Found'
menu.label.errorPage403 = 'Access Denied'
menu.label.errorPage500 = 'Server Error'

View File

@@ -1,34 +1,7 @@
import { common } from '@/messages/common_cn'
import { menu } from '@/messages/menu_cn'
export default { export default {
common: { // 通用资源 common,
label: { menu
login: '登录',
index: '首页',
langCn: '中文',
langEn: 'English',
language: '语言',
theme: '主题',
layout: '布局',
layoutLeft: '左侧菜单',
layoutTop: '顶部菜单',
themeDefault: '默认',
themeDark: '黑色',
personalCenter: '个人中心',
personalInfo: '个人资料',
about: '关于',
logout: '退出'
}
},
menu: {
label: {
systemManagement: '系统管理',
userManagement: '用户管理',
roleManagement: '角色管理',
authorityManagement: '权限管理',
menuManagement: '菜单管理',
errorPage: '错误页面',
errorPage404: '找不到页面',
errorPage403: '没有权限',
errorPage500: '服务器错误'
}
}
} }

View File

@@ -1,34 +1,7 @@
import { common } from '@/messages/common_en'
import { menu } from '@/messages/menu_en'
export default { export default {
common: { common,
label: { menu
login: 'Login',
index: 'Home',
langCn: '中文',
langEn: 'English',
language: 'Language',
theme: 'Themes',
layout: 'Layout',
layoutLeft: 'Left Menus',
layoutTop: 'Top Menus',
themeDefault: 'default',
themeDark: 'dark',
personalCenter: 'Personal Center',
personalInfo: 'Personal Info',
about: 'About',
logout: 'Logout'
}
},
menu: {
label: {
systemManagement: 'System Management',
userManagement: 'User Management',
roleManagement: 'Role Management',
authorityManagement: 'Authority Management',
menuManagement: 'Menu Management',
errorPage: 'Error Page',
errorPage404: 'Not Found',
errorPage403: 'Access Denied',
errorPage500: 'Server Error'
}
}
} }

View File

@@ -7,12 +7,11 @@ export const useBaseTopMenus = () => {
return ref([ return ref([
{ {
iconIf: () => globalConfigStore.isCollapseLeft ? 'expand' : 'fold', iconIf: () => globalConfigStore.isCollapseLeft ? 'expand' : 'fold',
click: globalConfigStore.collapseLeft, click: globalConfigStore.collapseLeft
disabled: globalConfigStore.layoutMode !== GlobalLayoutMode.LEFT
}, },
{ {
isSplit: true, isSplit: true,
splitCls: 'flex-grow' menuCls: 'flex-grow'
}, },
{ {
labelKey: 'common.label.language', labelKey: 'common.label.language',
@@ -84,10 +83,10 @@ export const useBaseTopMenus = () => {
} }
export const useBusinessMenus = () => { export const useBusinessMenus = () => {
const globalConfigStore = useGlobalConfigStore()
return ref([ return ref([
{ {
labelIf: () => globalConfigStore.layoutMode === GlobalLayoutMode.LEFT && globalConfigStore.isCollapseLeft ? 'SEP' : 'Simple Element Plus' icon: 'HomeFilled',
label: 'Simple Element Plus'
}, },
{ {
icon: 'setting', icon: 'setting',