From 8ecee5ddef6f6ab53af86784b15c376e257654a1 Mon Sep 17 00:00:00 2001 From: LiuJiaNan <15703339975@163.com> Date: Wed, 22 Oct 2025 11:23:09 +0800 Subject: [PATCH] init --- .editorconfig | 13 + .env | 2 + .env.development | 2 + .env.production | 2 + .gitignore | 13 + .vscode/settings.json | 47 ++ README.md | 7 + eslint.config.js | 56 ++ index.html | 19 + jsconfig.json | 10 + package.json | 65 ++ postcss.config.cjs | 28 + public/vite.svg | 1 + src/App.vue | 25 + src/assets/js/constant.js | 1 + src/assets/js/mitt.js | 3 + src/components/children/index.vue | 9 + src/data_dictionary/index.js | 14 + src/layout/index.vue | 24 + src/main.js | 61 ++ src/pinia/index.js | 7 + src/pinia/menu.js | 30 + src/pinia/nav.js | 18 + src/pinia/router.js | 18 + src/pinia/user.js | 33 + src/request/api.js | 4 + src/request/data_dictionary.js | 11 + src/request/system_management.js | 34 ++ src/router/index.js | 59 ++ src/views/404.vue | 574 ++++++++++++++++++ src/views/index/index.vue | 7 + src/views/login/index.vue | 231 +++++++ .../data_dictionary/components/add.vue | 144 +++++ .../data_dictionary/index.vue | 148 +++++ .../menu/components/button.vue | 78 +++ .../menu/components/icon.vue | 185 ++++++ .../menu/components/menu.vue | 218 +++++++ .../menu/components/sort.vue | 84 +++ src/views/system_management/menu/index.vue | 353 +++++++++++ .../system_management/role/components/add.vue | 151 +++++ src/views/system_management/role/index.vue | 125 ++++ vite.config.js | 97 +++ web-types.json | 22 + 43 files changed, 3033 insertions(+) create mode 100644 .editorconfig create mode 100644 .env create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 jsconfig.json create mode 100644 package.json create mode 100644 postcss.config.cjs create mode 100644 public/vite.svg create mode 100644 src/App.vue create mode 100644 src/assets/js/constant.js create mode 100644 src/assets/js/mitt.js create mode 100644 src/components/children/index.vue create mode 100644 src/data_dictionary/index.js create mode 100644 src/layout/index.vue create mode 100644 src/main.js create mode 100644 src/pinia/index.js create mode 100644 src/pinia/menu.js create mode 100644 src/pinia/nav.js create mode 100644 src/pinia/router.js create mode 100644 src/pinia/user.js create mode 100644 src/request/api.js create mode 100644 src/request/data_dictionary.js create mode 100644 src/request/system_management.js create mode 100644 src/router/index.js create mode 100644 src/views/404.vue create mode 100644 src/views/index/index.vue create mode 100644 src/views/login/index.vue create mode 100644 src/views/system_management/data_dictionary/components/add.vue create mode 100644 src/views/system_management/data_dictionary/index.vue create mode 100644 src/views/system_management/menu/components/button.vue create mode 100644 src/views/system_management/menu/components/icon.vue create mode 100644 src/views/system_management/menu/components/menu.vue create mode 100644 src/views/system_management/menu/components/sort.vue create mode 100644 src/views/system_management/menu/index.vue create mode 100644 src/views/system_management/role/components/add.vue create mode 100644 src/views/system_management/role/index.vue create mode 100644 vite.config.js create mode 100644 web-types.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..271822f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.env b/.env new file mode 100644 index 0000000..b1d3aec --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +VITE_PROXY=/api +VITE_FILE_URL=https://file.zcloudchina.com/YTHFile diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..f8f9632 --- /dev/null +++ b/.env.development @@ -0,0 +1,2 @@ +VITE_BASE=/ +VITE_BASE_URL= diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..f8f9632 --- /dev/null +++ b/.env.production @@ -0,0 +1,2 @@ +VITE_BASE=/ +VITE_BASE_URL= diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..22f27f5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +/src/test/ +/target/ +.idea + +/node_modules +/dist +*.local +package-lock.json +yarn.lock +pnpm-lock.yaml +env.d.ts +auto-imports.d.ts +components.d.ts diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..96ed201 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,47 @@ +{ + "prettier.enable": false, + "editor.formatOnSave": false, + + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.organizeImports": "never" + }, + + "eslint.rules.customizations": [ + { "rule": "style/*", "severity": "off", "fixable": true }, + { "rule": "format/*", "severity": "off", "fixable": true }, + { "rule": "*-indent", "severity": "off", "fixable": true }, + { "rule": "*-spacing", "severity": "off", "fixable": true }, + { "rule": "*-spaces", "severity": "off", "fixable": true }, + { "rule": "*-order", "severity": "off", "fixable": true }, + { "rule": "*-dangle", "severity": "off", "fixable": true }, + { "rule": "*-newline", "severity": "off", "fixable": true }, + { "rule": "*quotes", "severity": "off", "fixable": true }, + { "rule": "*semi", "severity": "off", "fixable": true } + ], + + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue", + "html", + "markdown", + "json", + "json5", + "jsonc", + "yaml", + "toml", + "xml", + "gql", + "graphql", + "astro", + "svelte", + "css", + "less", + "scss", + "pcss", + "postcss" + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..e62e093 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# Vue 3 + Vite + +This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 ` + + + + diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..d5329ef --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": [ + "src/*" + ] + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ddab3d8 --- /dev/null +++ b/package.json @@ -0,0 +1,65 @@ +{ + "name": "blank-vue-template", + "type": "module", + "version": "0.0.0", + "private": true, + "web-types": "./web-types.json", + "scripts": { + "dev": "vite --mode development", + "build": "vite build --mode production", + "preview": "vite preview", + "lint": "eslint --ext .js,.vue --fix src" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "@icon-park/vue-next": "^1.4.2", + "@vueuse/core": "^13.9.0", + "@vueuse/integrations": "^13.9.0", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "animate.css": "^4.1.1", + "autofit.js": "^3.2.3", + "axios": "^1.7.9", + "crypto-js": "^4.2.0", + "dayjs": "^1.11.13", + "echarts": "^5.5.1", + "element-plus": "^2.9.1", + "lodash-es": "^4.17.21", + "mitt": "^3.0.1", + "normalize.css": "^8.0.1", + "pinia": "^3.0.3", + "pinia-plugin-persistedstate": "^4.3.0", + "qrcode": "^1.5.4", + "qs": "^6.13.1", + "throttle-debounce": "^5.0.2", + "v-viewer": "^3.0.21", + "viewerjs": "^1.11.7", + "vue": "^3.5.13", + "vue-countup-v3": "^1.4.2", + "vue-draggable-plus": "^0.3.5", + "vue-esign": "^1.1.4", + "vue-router": "^4.5.0", + "vue3-pdfjs": "^0.1.6", + "vue3-print-nb": "^0.1.4", + "vue3-puzzle-vcode": "^1.1.7", + "vue3-seamless-scroll": "^2.0.1", + "zy-vue-library": "^1.1.5" + }, + "devDependencies": { + "@antfu/eslint-config": "^5.4.1", + "@types/node": "^18.19.68", + "@vant/auto-import-resolver": "^1.2.1", + "@vitejs/plugin-vue": "^5.2.1", + "autoprefixer": "^10.4.20", + "eslint": "^9.36.0", + "eslint-plugin-format": "^1.0.2", + "sass": "^1.83.0", + "unplugin-auto-import": "^0.12.2", + "unplugin-element-plus": "^0.8.0", + "unplugin-vue-components": "^0.22.12", + "vite": "^6.0.3", + "vite-plugin-env-parse": "^1.0.15", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-remove-console": "^2.2.0" + } +} diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..2ab71f8 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,28 @@ +module.exports = { + plugins: { + autoprefixer: { + overrideBrowserslist: [ + "Android 4.1", + "iOS 7.1", + "Chrome > 31", + "ff > 31", + "ie >= 8", + "> 1%", + ], + grid: true, + }, + // '@our-patches/postcss-px-to-viewport': { + // unitToConvert: 'px', + // viewportWidth: 1920, + // unitPrecision: 3, + // viewportUnit: 'vw', + // selectorBlackList: ['.ignore', '.hairlines'], + // minPixelValue: 1, + // mediaQuery: false, + // exclude: [/^node_modules$/], + // include: [/BI/], + // landscapeUnit: 'vw', + // landscapeWidth: 750, + // } + }, +}; diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..3bea712 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/src/assets/js/constant.js b/src/assets/js/constant.js new file mode 100644 index 0000000..6bdb47b --- /dev/null +++ b/src/assets/js/constant.js @@ -0,0 +1 @@ +// 将常用的值储存成常量,防止重复使用写错 diff --git a/src/assets/js/mitt.js b/src/assets/js/mitt.js new file mode 100644 index 0000000..3470ab0 --- /dev/null +++ b/src/assets/js/mitt.js @@ -0,0 +1,3 @@ +import mitt from "mitt"; + +export default mitt(); diff --git a/src/components/children/index.vue b/src/components/children/index.vue new file mode 100644 index 0000000..2f48910 --- /dev/null +++ b/src/components/children/index.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/data_dictionary/index.js b/src/data_dictionary/index.js new file mode 100644 index 0000000..3c5dfca --- /dev/null +++ b/src/data_dictionary/index.js @@ -0,0 +1,14 @@ +import { getDataDictionariesList } from "@/request/data_dictionary.js"; + +// 无法确定parentId的数据字典 +export const appFnGetDataDictionary = async (params) => { + const { dictionariesList } = await getDataDictionariesList(params); + return dictionariesList; +}; +// 导航栏 +export const appFnGetMenuNavList = async () => { + const { dictionariesList } = await getDataDictionariesList({ + parentId: "7b2cf146798280ecf8f4dfbf8c4f59d8", + }); + return dictionariesList; +}; diff --git a/src/layout/index.vue b/src/layout/index.vue new file mode 100644 index 0000000..34fb098 --- /dev/null +++ b/src/layout/index.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..726ffcc --- /dev/null +++ b/src/main.js @@ -0,0 +1,61 @@ +import { install } from "@icon-park/vue-next/es/all"; +import ElDialog from "element-plus/es/components/dialog/index"; +import ElSelect from "element-plus/es/components/select/index"; +import VueViewer from "v-viewer"; +import { createApp } from "vue"; +import print from "vue3-print-nb"; +import { + configureAesSecret, + configureAxios, + configureDynamicRouter, + permissionDirective, +} from "zy-vue-library"; +import { useMenuStore } from "@/pinia/menu.js"; +import { useNavStore } from "@/pinia/nav.js"; +import { useRouterStore } from "@/pinia/router.js"; +import { useUserStore } from "@/pinia/user.js"; +import App from "./App"; +import pinia from "./pinia"; +import router from "./router"; +import "dayjs/locale/zh-cn"; +import "zy-vue-library/css/index.scss"; +import "normalize.css"; +import "animate.css"; +import "viewerjs/dist/viewer.css"; +import "element-plus/es/components/loading/style/css"; +import "element-plus/es/components/message/style/css"; +import "element-plus/es/components/message-box/style/css"; +import "element-plus/es/components/notification/style/css"; + +ElDialog.props.closeOnClickModal.default = false; +ElDialog.props.closeOnPressEscape.default = false; +ElSelect.props.filterable = { type: Boolean, default: true }; +ElSelect.props.clearable = { type: Boolean, default: true }; +const app = createApp(App); +install(app, "icon"); +app + .use(pinia) + .use(router) + .use(VueViewer, { + defaultOptions: { + zIndex: 9999, + }, + }) + .use(print) + .use(permissionDirective) + .mount("#app"); +configureAesSecret({ encryptKey: "daac3ae52eff4cec" }); +configureAxios({ router, store: useUserStore() }); +configureDynamicRouter({ + router, + stores: { + routerStore: useRouterStore(), + menuStore: useMenuStore(), + userStore: useUserStore(), + navStore: useNavStore(), + }, + modules: import.meta.glob([ + "./views/**/*.vue", + "!./views/**/components/*.vue", + ]), +}); diff --git a/src/pinia/index.js b/src/pinia/index.js new file mode 100644 index 0000000..add6afe --- /dev/null +++ b/src/pinia/index.js @@ -0,0 +1,7 @@ +import { createPinia } from "pinia"; +import piniaPersistedstate from "pinia-plugin-persistedstate"; + +const pinia = createPinia(); +pinia.use(piniaPersistedstate); + +export default pinia; diff --git a/src/pinia/menu.js b/src/pinia/menu.js new file mode 100644 index 0000000..128c3c7 --- /dev/null +++ b/src/pinia/menu.js @@ -0,0 +1,30 @@ +import { defineStore } from "pinia"; + +export const useMenuStore = defineStore("menuStore", { + state: () => ({ + menusAll: [], + menus: [], + model: "", + }), + getters: { + getMenus: state => state.menus, + getModel: state => state.model, + }, + actions: { + setMenus(menus) { + this.menusAll = menus; + }, + setModel(model) { + this.model = model; + this.menus = []; + for (let i = 0; i < this.menusAll.length; i++) { + if (this.menusAll[i].meta.model === model) { + this.menus.push(this.menusAll[i]); + } + } + }, + }, + persist: { + storage: window.sessionStorage, + }, +}); diff --git a/src/pinia/nav.js b/src/pinia/nav.js new file mode 100644 index 0000000..0ea4f95 --- /dev/null +++ b/src/pinia/nav.js @@ -0,0 +1,18 @@ +import { defineStore } from "pinia"; + +export const useNavStore = defineStore("navStore", { + state: () => ({ + navList: [], + }), + getters: { + getNavList: state => state.navList, + }, + actions: { + setNavList(navList) { + this.navList = navList; + }, + }, + persist: { + storage: window.sessionStorage, + }, +}); diff --git a/src/pinia/router.js b/src/pinia/router.js new file mode 100644 index 0000000..165dbcb --- /dev/null +++ b/src/pinia/router.js @@ -0,0 +1,18 @@ +import { defineStore } from "pinia"; + +export const useRouterStore = defineStore("routerStore", { + state: () => ({ + routers: [], + }), + getters: { + getRouters: state => state.routers, + }, + actions: { + setRouters(routers) { + this.routers = routers; + }, + }, + persist: { + storage: window.sessionStorage, + }, +}); diff --git a/src/pinia/user.js b/src/pinia/user.js new file mode 100644 index 0000000..3c6723e --- /dev/null +++ b/src/pinia/user.js @@ -0,0 +1,33 @@ +import { defineStore } from "pinia"; + +export const useUserStore = defineStore("userStore", { + state: () => ({ + userInfo: {}, + token: "", + tokenTime: "", + permissions: [], + }), + getters: { + getUserInfo: state => state.userInfo, + getToken: state => state.token, + getTokenTime: state => state.tokenTime, + getPermissions: state => state.permissions, + }, + actions: { + setUserInfo(userInfo) { + this.userInfo = userInfo; + }, + async setToken(token) { + this.token = token; + }, + async setTokenTime(tokenTime) { + this.tokenTime = tokenTime; + }, + setPermissions(permissions) { + this.permissions = permissions; + }, + }, + persist: { + storage: window.sessionStorage, + }, +}); diff --git a/src/request/api.js b/src/request/api.js new file mode 100644 index 0000000..377abd1 --- /dev/null +++ b/src/request/api.js @@ -0,0 +1,4 @@ +import { postRequest } from "zy-vue-library"; + +export const Login = params => postRequest("/sys/login", params); // 登录 +export const getUserInfo = params => postRequest("/sys-user/info", params); // 获取用户信息 diff --git a/src/request/data_dictionary.js b/src/request/data_dictionary.js new file mode 100644 index 0000000..cb77d1a --- /dev/null +++ b/src/request/data_dictionary.js @@ -0,0 +1,11 @@ +import { getRequest, postRequest } from "zy-vue-library"; + +// 获取部门树形 +export const getDepartmentTree = params => + getRequest("/sysdepartment/listTree", params); +// 获取部门树形 +export const getDepartmentTreeByCorpId = params => + getRequest("/corp-department/list-tree", params); +// 获取数据字典 +export const getDataDictionariesList = params => + postRequest("/sys/dictionaries/list", params); diff --git a/src/request/system_management.js b/src/request/system_management.js new file mode 100644 index 0000000..4d19d46 --- /dev/null +++ b/src/request/system_management.js @@ -0,0 +1,34 @@ +import { postRequest } from "zy-vue-library"; + +export const getRoleList = params => + postRequest("/sys/role/listPage", params); // 角色管理列表 +export const getRoleListAll = params => + postRequest("/sys/role/listAll", params); // 角色管理列表所有 +export const setRoleDelete = params => + postRequest("/sys/role/delete", params); // 角色管理删除 +export const setRoleAdd = params => postRequest("/sys/role/save", params); // 角色管理添加 +export const setRoleEdit = params => postRequest("/sys/role/update", params); // 角色管理修改 +export const getRoleView = params => postRequest("/sys/role/info", params); // 角色管理查看 +export const getDataDictionaryList = params => + postRequest("/sys/dictionaries/listPage", params); // 数据字典列表 +export const setDataDictionaryDelete = params => + postRequest("/sys/dictionaries/delete", params); // 数据字典删除 +export const setDataDictionaryAdd = params => + postRequest("/sys/dictionaries/save", params); // 数据字典添加 +export const setDataDictionaryEdit = params => + postRequest("/sys/dictionaries/update", params); // 数据字典修改 +export const getDataDictionaryInfo = params => + postRequest("/sys/dictionaries/info", params); // 数据字典查看 +export const getDataDictionaryRepeat = params => + postRequest("/sys/dictionaries/findByBianma", params); // 数据字典验证编码是否重复 +export const getRouteList = params => postRequest("/sys/menu/list", params); // 菜单管理列表 +export const getRouteView = params => postRequest("/sys/menu/info", params); // 菜单管理查看 +export const getDataRouteKeyDuplication = params => + postRequest("/sys/menu/getDataRouteKeyDuplication", params); // 菜单检验key是否有重复 +export const setRouteAdd = params => postRequest("/sys/menu/save", params); // 菜单管理添加 +export const setRouteEdit = params => postRequest("/sys/menu/update", params); // 菜单管理修改 +export const setRouteDelete = params => + postRequest("/sys/menu/delete", params); // 菜单管理删除 +export const setRouteIcon = params => postRequest("/sys/menu/icon", params); // 菜单管理修改图标 +export const setRouteSort = params => + postRequest("/sys/menu/editMenuOrder", params); // 菜单管理排序 diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..e80755c --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,59 @@ +import { createRouter, createWebHashHistory } from "vue-router"; +import layout from "@/layout/index.vue"; +import children from "../components/children/index.vue"; + +const routes = [ + { + path: "/login", + name: "/login", + meta: { title: "登录", isLogin: false }, + component: () => import("@/views/login/index"), + }, + { + path: "/", + name: "app", + redirect: "/index", + meta: { title: "首页", isLogin: true }, + component: layout, + children: [ + { + path: "/index", + name: "/index", + meta: { + title: "首页", + breadcrumb: false, + isMenu: false, + isSubMenu: false, + isBack: false, + }, + component: () => import("@/views/index/index"), + }, + ], + }, + { + path: "/404", + name: "/404", + meta: { title: "404", isLogin: false }, + component: () => import("@/views/404"), + }, + { + path: "/mobile", + meta: { isLogin: false }, + component: children, + children: [], + }, +]; +const router = createRouter({ + history: createWebHashHistory(import.meta.env.BASE_URL), + routes, + scrollBehavior(to, from, savedPosition) { + if (savedPosition) { + return savedPosition; + } + else { + return { left: 0, top: 0 }; + } + }, +}); + +export default router; diff --git a/src/views/404.vue b/src/views/404.vue new file mode 100644 index 0000000..fce16ab --- /dev/null +++ b/src/views/404.vue @@ -0,0 +1,574 @@ + + + + + diff --git a/src/views/index/index.vue b/src/views/index/index.vue new file mode 100644 index 0000000..d9deda7 --- /dev/null +++ b/src/views/index/index.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/src/views/login/index.vue b/src/views/login/index.vue new file mode 100644 index 0000000..f632f51 --- /dev/null +++ b/src/views/login/index.vue @@ -0,0 +1,231 @@ + + + + + diff --git a/src/views/system_management/data_dictionary/components/add.vue b/src/views/system_management/data_dictionary/components/add.vue new file mode 100644 index 0000000..eea8407 --- /dev/null +++ b/src/views/system_management/data_dictionary/components/add.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/src/views/system_management/data_dictionary/index.vue b/src/views/system_management/data_dictionary/index.vue new file mode 100644 index 0000000..c670ad9 --- /dev/null +++ b/src/views/system_management/data_dictionary/index.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/views/system_management/menu/components/button.vue b/src/views/system_management/menu/components/button.vue new file mode 100644 index 0000000..5cd9051 --- /dev/null +++ b/src/views/system_management/menu/components/button.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/views/system_management/menu/components/icon.vue b/src/views/system_management/menu/components/icon.vue new file mode 100644 index 0000000..ed8ede0 --- /dev/null +++ b/src/views/system_management/menu/components/icon.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/src/views/system_management/menu/components/menu.vue b/src/views/system_management/menu/components/menu.vue new file mode 100644 index 0000000..5929900 --- /dev/null +++ b/src/views/system_management/menu/components/menu.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/src/views/system_management/menu/components/sort.vue b/src/views/system_management/menu/components/sort.vue new file mode 100644 index 0000000..9250da7 --- /dev/null +++ b/src/views/system_management/menu/components/sort.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/views/system_management/menu/index.vue b/src/views/system_management/menu/index.vue new file mode 100644 index 0000000..756e7ea --- /dev/null +++ b/src/views/system_management/menu/index.vue @@ -0,0 +1,353 @@ + + + + + diff --git a/src/views/system_management/role/components/add.vue b/src/views/system_management/role/components/add.vue new file mode 100644 index 0000000..ab46c5b --- /dev/null +++ b/src/views/system_management/role/components/add.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/src/views/system_management/role/index.vue b/src/views/system_management/role/index.vue new file mode 100644 index 0000000..65b760d --- /dev/null +++ b/src/views/system_management/role/index.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..b66f5e8 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,97 @@ +import vue from "@vitejs/plugin-vue"; +import AutoImport from "unplugin-auto-import/vite"; +import { ElementPlusResolver } from "unplugin-vue-components/resolvers"; +import Components from "unplugin-vue-components/vite"; +import { defineConfig, loadEnv } from "vite"; +// import EnhanceLog from "vite-plugin-enhance-log"; +import { envParse } from "vite-plugin-env-parse"; +import eslintPlugin from "vite-plugin-eslint"; +import removeConsole from "vite-plugin-remove-console"; + +export default ({ mode }) => { + return defineConfig({ + base: loadEnv(mode, process.cwd()).VITE_BASE, + plugins: [ + vue(), + envParse(), + eslintPlugin({ + cache: false, + include: ["./src/**/*.js", "./src/**/*.vue", "./src/**/*.ts"], + exclude: ["./node_modules/**", "./zy-vue-library/**"], + }), + removeConsole({ + includes: [ + "assert", + "clear", + "count", + "countReset", + "createTask", + "debug", + "dir", + "dirxml", + "error", + "group", + "groupCollapsed", + "groupEnd", + "info", + "log", + "profile", + "profileEnd", + "table", + "time", + "timeEnd", + "timeLog", + "timeStamp", + "trace", + "warn", + ], + }), + AutoImport({ + resolvers: [ElementPlusResolver()], + }), + Components({ + resolvers: [ElementPlusResolver()], + }), + // EnhanceLog({ + // splitBy: "🐶", + // preTip: "🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀", + // }), + ], + optimizeDeps: { + include: ["qrcode", "@vue-office/pdf", "crypto-js"], + }, + server: { + host: true, // 本机的局域网IP,不然其他人无法通过IP访问到,0.0.0.0或true会自动获取本机的IP + port: 18471, // 端口号 + open: true, // 是否自动打开浏览器 + proxy: { + [loadEnv(mode, process.cwd()).VITE_PROXY]: { + target: loadEnv(mode, process.cwd()).VITE_BASE_URL, + changeOrigin: true, + ws: true, + rewrite: path => path.replace(/^\/api/, ""), + }, + }, + }, + resolve: { + alias: { + "@": "/src", // 别名,@代表src目录 + }, + extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"], // 引入文件时哪些后缀名可以不写 + }, + build: { + rollupOptions: { + // 打包多个入口文件 + // input: { + // admin: path.resolve(__dirname, "index.html"), + // 其它入口文件路径需要为src/views/*/index.html + // }, + output: { + chunkFileNames: "static/js/[name]-[hash].js", + entryFileNames: "static/js/[name]-[hash].js", + assetFileNames: "static/[ext]/name-[hash].[ext]", + }, + }, + }, + }); +}; diff --git a/web-types.json b/web-types.json new file mode 100644 index 0000000..c1b1532 --- /dev/null +++ b/web-types.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://json.schemastore.org/web-types", + "framework": "vue", + "name": "name written in package.json", + "version": "version written in package.json", + "contributions": { + "html": { + "types-syntax": "typescript", + "attributes": [ + { + "name": "v-permission" + }, + { + "name": "v-viewer" + }, + { + "name": "v-print" + } + ] + } + } +}