From 8c9532125bf9b9666a7cb33b8ffd1fd77d5d4e10 Mon Sep 17 00:00:00 2001 From: zhang zhuo Date: Mon, 26 May 2025 18:08:25 +0800 Subject: [PATCH] init --- .env.development | 8 ++ .env.production | 11 +++ .env.staging | 11 +++ .gitignore | 25 ++++++ LICENSE | 21 +++++ README.md | 0 index.html | 174 ++++++++++++++++++++++++++++++++++++++ package.json | 34 ++++++++ public/config.ts | 0 public/images/logo.png | Bin 0 -> 6919 bytes src/App.vue | 24 ++++++ src/api/index.ts | 8 ++ src/config/index.ts | 4 + src/locales/index.ts | 29 +++++++ src/locales/lang/en.ts | 6 ++ src/locales/lang/zh-cn.ts | 6 ++ src/main.ts | 21 +++++ src/utils/tools.ts | 45 ++++++++++ tsconfig.json | 13 +++ vite-env.d.ts | 5 ++ vite.config.ts | 57 +++++++++++++ 21 files changed, 502 insertions(+) create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .env.staging create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 index.html create mode 100644 package.json create mode 100644 public/config.ts create mode 100644 public/images/logo.png create mode 100644 src/App.vue create mode 100644 src/api/index.ts create mode 100644 src/config/index.ts create mode 100644 src/locales/index.ts create mode 100644 src/locales/lang/en.ts create mode 100644 src/locales/lang/zh-cn.ts create mode 100644 src/main.ts create mode 100644 src/utils/tools.ts create mode 100644 tsconfig.json create mode 100644 vite-env.d.ts create mode 100644 vite.config.ts diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..2d7a8a1 --- /dev/null +++ b/.env.development @@ -0,0 +1,8 @@ +# 页面标题 +VITE_APP_TITLE=里派基础框架 + +# 开发环境配置 +VITE_APP_ENV='development' + +# 开发环境 +VITE_APP_BASE_API='/dev-api' \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..3761888 --- /dev/null +++ b/.env.production @@ -0,0 +1,11 @@ +# 页面标题 +VITE_APP_TITLE=里派基础框架 + +# 生产环境配置 +VITE_APP_ENV='production' + +# 生产环境 +VITE_APP_BASE_API='/prod-api' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS=gzip \ No newline at end of file diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..a2c5eba --- /dev/null +++ b/.env.staging @@ -0,0 +1,11 @@ +# 页面标题 +VITE_APP_TITLE=里派基础框架 + +# 生产环境配置 +VITE_APP_ENV='staging' + +# 生产环境 +VITE_APP_BASE_API='/staging-api' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS=gzip \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..deae0fd --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +.DS_Store +node_modules/ +dist/ +src/views/system/menu/test +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.hbuilder + +package-lock.json +yarn.lock +vite.config.js.* \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ab19ca3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 leapy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/index.html b/index.html new file mode 100644 index 0000000..850150a --- /dev/null +++ b/index.html @@ -0,0 +1,174 @@ + + + + + + + + %VITE_APP_TITLE% + + + + + +
+
+ +
+
%VITE_APP_TITLE%
+
+ +
+ + + + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..b81de03 --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "admin", + "version": "1.0.0", + "description": "one basic framework", + "author": "cfn", + "type": "module", + "scripts": { + "dev": "vite", + "build:prod": "vite build", + "build:stage": "vite build --mode staging", + "preview": "vite preview" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "axios": "^1.9.0", + "crypto-js": "^4.2.0", + "element-plus": "^2.9.10", + "nprogress": "^0.2.0", + "sortablejs": "^1.15.6", + "vue": "^3.5.14", + "vue-i18n": "^12.0.0-alpha.2", + "vue-router": "^4.5.1", + "vuedraggable": "^2.24.3", + "vuex": "^4.1.0" + }, + "devDependencies": { + "@types/node": "^22.15.21", + "@vitejs/plugin-vue": "^5.2.4", + "eslint": "^9.27.0", + "sass": "^1.89.0", + "vite": "^6.3.5" + }, + "license": "MIT" +} diff --git a/public/config.ts b/public/config.ts new file mode 100644 index 0000000..e69de29 diff --git a/public/images/logo.png b/public/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..773d87997e046ac11407921a686c7dd71e1bc2a0 GIT binary patch literal 6919 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 literal 0 HcmV?d00001 diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..4d33adf --- /dev/null +++ b/src/App.vue @@ -0,0 +1,24 @@ + + + diff --git a/src/api/index.ts b/src/api/index.ts new file mode 100644 index 0000000..fc4edcb --- /dev/null +++ b/src/api/index.ts @@ -0,0 +1,8 @@ +const modules = import.meta.glob('./model/**/*.ts') // 异步加载 + +// 使用示例 +const loadModel = async (modelName: string) => { + const path = `./model/${modelName}.ts` + const module = await modules[path]() + return module.default +} \ No newline at end of file diff --git a/src/config/index.ts b/src/config/index.ts new file mode 100644 index 0000000..c7fc925 --- /dev/null +++ b/src/config/index.ts @@ -0,0 +1,4 @@ +export default { + //语言 + LANG: 'zh-cn', +} \ No newline at end of file diff --git a/src/locales/index.ts b/src/locales/index.ts new file mode 100644 index 0000000..ac597a9 --- /dev/null +++ b/src/locales/index.ts @@ -0,0 +1,29 @@ +import { createI18n } from 'vue-i18n' +import el_zh_cn from 'element-plus/dist/locale/zh-cn' +import el_en from 'element-plus/dist/locale/en' + +import config from "@/config" +import tools from '@/utils/tools' +import zh_cn from './lang/zh-cn.js' +import en from './lang/en.js' + +const messages = { + 'zh-cn': { + el: el_zh_cn, + ...zh_cn + }, + 'en': { + el: el_en, + ...en + } +} + +const i18n = createI18n({ + legacy: false, + fallbackLocale: 'zh-cn', + locale: tools.data.get("APP_LANG") || config.LANG, + globalInjection: true, + messages, +}) + +export default i18n; diff --git a/src/locales/lang/en.ts b/src/locales/lang/en.ts new file mode 100644 index 0000000..85e211a --- /dev/null +++ b/src/locales/lang/en.ts @@ -0,0 +1,6 @@ +export default { + system: { + webTitleDev: 'Property Management System (Testing)', + webTitle: 'Property Management System', + } +} \ No newline at end of file diff --git a/src/locales/lang/zh-cn.ts b/src/locales/lang/zh-cn.ts new file mode 100644 index 0000000..3a38335 --- /dev/null +++ b/src/locales/lang/zh-cn.ts @@ -0,0 +1,6 @@ +export default { + system: { + webTitleDev: '物业管理系统(测试)', + webTitle: '物业管理系统', + } +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..8377398 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,21 @@ +import { createApp } from 'vue' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import 'element-plus/theme-chalk/display.css' +import i18n from './locales' + +// import leapy from './leapy' +// import router from './router' +// import store from './store' +import App from './App.vue' + +const app = createApp(App); + +// app.use(store); +// app.use(router); +app.use(ElementPlus); +app.use(i18n); +// app.use(leapy); + +//挂载app +app.mount('#app'); \ No newline at end of file diff --git a/src/utils/tools.ts b/src/utils/tools.ts new file mode 100644 index 0000000..d11969a --- /dev/null +++ b/src/utils/tools.ts @@ -0,0 +1,45 @@ +import CryptoJS from 'crypto-js'; + +const tools = { + data: { + set(cacheKey, data, expireIn = 0) { + let cacheValue = { + content: data, + expireIn: expireIn === 0 ? 0 : new Date().getTime() + expireIn * 1000 + } + return localStorage.setItem(cacheKey, tools.base64.encrypt(JSON.stringify(cacheValue))) + }, + get(cacheKey) { + try { + const cacheValue = JSON.parse(tools.base64.decrypt(localStorage.getItem(cacheKey))) + if (cacheValue) { + let nowTime = new Date().getTime() + if (nowTime > cacheValue.expireIn && cacheValue.expireIn !== 0) { + localStorage.removeItem(cacheKey) + return null; + } + return cacheValue.content + } + return null + } catch (err) { + return null + } + }, + remove(cacheKey) { + return localStorage.removeItem(cacheKey) + }, + clear() { + return localStorage.clear() + } + }, + base64: { + encrypt(data){ + return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(data)) + }, + decrypt(cipher){ + return CryptoJS.enc.Base64.parse(cipher).toString(CryptoJS.enc.Utf8) + } + } +} + +export default tools \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7ae935f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "node", + "types": ["node"], + "baseUrl": "./", + "paths": { + "@/*": ["src/*"] + }, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true + } +} \ No newline at end of file diff --git a/vite-env.d.ts b/vite-env.d.ts new file mode 100644 index 0000000..ebb3c5e --- /dev/null +++ b/vite-env.d.ts @@ -0,0 +1,5 @@ +declare module "*.vue" { + import { DefineComponent } from "vue"; + const component: DefineComponent<{}, {}, any>; + export default component; +} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..cf21991 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,57 @@ +import {defineConfig, loadEnv} from 'vite' +import vue from '@vitejs/plugin-vue' +import * as path from 'path' + +export default defineConfig(({mode, command}) => { + const env = loadEnv(mode, process.cwd()) + const {VITE_APP_ENV} = env + return { + resolve: { + alias: { + // 设置路径 + '~': path.resolve(__dirname, './'), + // 设置别名 + '@': path.resolve(__dirname, './src'), + // 资源地址 + '@assets': path.resolve(__dirname, './src/assets') + }, + extensions: ['.ts', '.json', '.vue', '.js'] + }, + base: '/', + // vite 相关配置 + server: { + port: 8611, + host: true, + // open: true, + proxy: { + '/api': { + target: 'http://dev.api.eswhyf.cn', + changeOrigin: true, + rewrite: (p) => p.replace(/^\/api/, '') + } + } + }, + build: { + outDir: 'dist', + assetsDir: 'static', + sourcemap: true, + rollupOptions: { + output: { + manualChunks(id) { + if (id.includes('node_modules')) { + return 'vendor' + } + } + } + } + }, + plugins: [vue()], + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/variables.scss" as *;` + } + } + } + } +}) \ No newline at end of file