diff --git a/README.en-US.md b/README.en-US.md index cfb1c3b6c5..95eef19982 100644 --- a/README.en-US.md +++ b/README.en-US.md @@ -10,6 +10,12 @@ `vue-pure-admin` is an open source, free and out-of-the-box middle and backend management system template. Completely adopts `ECMAScript` module (`ESM`) specifications to write and organize code, using the latest `Vue3`, `Vite`, `Element-Plus`, `TypeScript`, `Pinia`, `Tailwindcss` and other mainstream technologies develop +## Sponsors + + + + + ## Thin version (offering non-internationalized and internationalized versions) The simplified version is based on the shelf extracted from [vue-pure-admin](https://github.com/pure-admin/vue-pure-admin), which contains main functions and is more suitable for actual project development. The packaged size is introduced globally [element-plus](https://element-plus.org) is still below `2.3MB`, and the full version of the code will be permanently synchronized. After enabling `brotli` compression and `cdn` to replace the local library mode, the package size is less than `350kb` @@ -168,7 +174,7 @@ You are very welcome to join![Raise an issue](https://github.com/pure-admin/vu Thank you very much for your in-depth understanding of the source code and your outstanding contributions to the `pure-admin` organization ❤️ -| **Contributor** | **SpecificCode** | +| **Contributor** | **SpecificCode** | | :---------------------------------------------: | :------------------------------------------------------------------------------: | | [hb0730](https://github.com/hb0730) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=hb0730) | | [o-cc](https://github.com/o-cc) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=o-cc) | diff --git a/README.md b/README.md index eea8560b50..1c48333aa8 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,14 @@ ## 简介 -`vue-pure-admin` 是一款开源免费且开箱即用的中后台管理系统模版。完全采用 `ECMAScript` 模块(`ESM`)规范来编写和组织代码,使用了最新的 `Vue3`、`Vite`、`Element-Plus`、`TypeScript`、`Pinia`、`Tailwindcss` 等主流技术开发 +`vue-pure-admin` 是一款开源免费且开箱即用的中后台管理系统模版。完全采用 `ECMAScript` 模块(`ESM`)规范来编写和组织代码,使用了最新的 `Vue3`、 +`Vite`、`Element-Plus`、`TypeScript`、`Pinia`、`Tailwindcss` 等主流技术开发 + +## 赞助商 + + + + ## 精简版本(实际项目开发请用精简版本,提供 `非国际化` 、`国际化` 两个版本选择) diff --git a/build/optimize.ts b/build/optimize.ts index fd7acfb5df..9beb4f0ea4 100644 --- a/build/optimize.ts +++ b/build/optimize.ts @@ -16,6 +16,7 @@ const include = [ "qrcode", "intro.js", "vue-i18n", + "vxe-table", "vue-types", "js-cookie", "vue-tippy", @@ -44,6 +45,7 @@ const include = [ "@amap/amap-jsapi-loader", "el-table-infinite-scroll", "vue-waterfall-plugin-next", + "@infectoone/vue-ganttastic", "@wangeditor/editor-for-vue", "vuedraggable/src/vuedraggable" ]; diff --git a/locales/en.yaml b/locales/en.yaml index 91916826df..f0e64e98b3 100644 --- a/locales/en.yaml +++ b/locales/en.yaml @@ -26,6 +26,7 @@ menus: hshome: Home hslogin: Login hsempty: Empty Page + hstable: Table hssysManagement: System Manage hsUser: User Manage hsRole: Role Manage @@ -70,6 +71,7 @@ menus: hsTag: Tag hsStatistic: Statistic hsCollapse: Collapse + hsGanttastic: Gantt Chart hsProgress: Progress hsUpload: File Upload hsCheckCard: CheckCard @@ -92,6 +94,7 @@ menus: hsWavesurfer: Audio Visualization hsRipple: Ripple hsOptimize: Debounce、Throttle、Copy、Longpress Directives + hsVerify: Captcha hsWatermark: Water Mark hsPrint: Print hsDownload: Download @@ -132,6 +135,7 @@ menus: hsPureTableBase: Base Usage hsPureTableHigh: High Usage hsPureTableEdit: Edit Usage + hsVxeTable: Virtual Usage hsboard: Paint Board hsMenuoverflow: Menu Overflow Show Tooltip Text hsChildMenuoverflow: Child Menu Overflow Show Tooltip Text diff --git a/locales/zh-CN.yaml b/locales/zh-CN.yaml index 5665d00e04..66a7ff65f8 100644 --- a/locales/zh-CN.yaml +++ b/locales/zh-CN.yaml @@ -26,6 +26,7 @@ menus: hshome: 首页 hslogin: 登录 hsempty: 无Layout页 + hstable: 表格 hssysManagement: 系统管理 hsUser: 用户管理 hsRole: 角色管理 @@ -70,6 +71,7 @@ menus: hsTag: 标签 hsStatistic: 统计组件 hsCollapse: 折叠面板 + hsGanttastic: 甘特图 hsProgress: 进度条 hsUpload: 文件上传 hsCheckCard: 多选卡片 @@ -92,6 +94,7 @@ menus: hsWavesurfer: 音频可视化 hsRipple: 波纹(Ripple) hsOptimize: 防抖、截流、复制、长按指令 + hsVerify: 图形验证码 hsWatermark: 水印 hsPrint: 打印 hsDownload: 下载 @@ -132,6 +135,7 @@ menus: hsPureTableBase: 基础用法 hsPureTableHigh: 高级用法 hsPureTableEdit: 可编辑用法 + hsVxeTable: 虚拟滚动 hsboard: 艺术画板 hsMenuoverflow: 目录超出显示 Tooltip 文字提示 hsChildMenuoverflow: 菜单超出显示 Tooltip 文字提示 diff --git a/package.json b/package.json index 5688d433e0..c3a8c441fa 100644 --- a/package.json +++ b/package.json @@ -50,11 +50,14 @@ "dependencies": { "@amap/amap-jsapi-loader": "^1.0.1", "@howdyjs/mouse-menu": "^2.1.3", + "@infectoone/vue-ganttastic": "^2.3.1", "@logicflow/core": "^1.2.22", "@logicflow/extension": "^1.2.22", "@pureadmin/descriptions": "^1.2.1", "@pureadmin/table": "^3.1.2", "@pureadmin/utils": "^2.4.7", + "@vue-flow/background": "^1.3.0", + "@vue-flow/core": "^1.33.4", "@vueuse/core": "^10.9.0", "@vueuse/motion": "^2.1.0", "@wangeditor/editor": "^5.1.23", @@ -98,7 +101,9 @@ "vue-virtual-scroller": "2.0.0-beta.8", "vue-waterfall-plugin-next": "^2.4.3", "vue3-danmaku": "^1.6.0", + "vue3-puzzle-vcode": "^1.1.7", "vuedraggable": "^4.1.0", + "vxe-table": "^4.5.21", "wavesurfer.js": "^7.7.5", "xgplayer": "^3.0.14", "xlsx": "^0.18.5" @@ -114,6 +119,7 @@ "@iconify/vue": "^4.1.1", "@intlify/unplugin-vue-i18n": "^2.0.0", "@pureadmin/theme": "^3.2.0", + "@types/dagre": "^0.7.52", "@types/gradient-string": "^1.1.5", "@types/intro.js": "^5.1.5", "@types/js-cookie": "^3.0.6", @@ -130,6 +136,7 @@ "boxen": "^7.1.1", "cloc": "^2.11.0", "cssnano": "^6.1.0", + "dagre": "^0.8.5", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-define-config": "^2.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e11c056607..5d4669d91d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ dependencies: '@howdyjs/mouse-menu': specifier: ^2.1.3 version: 2.1.3(vue@3.4.21) + '@infectoone/vue-ganttastic': + specifier: ^2.3.1 + version: 2.3.1(dayjs@1.11.10)(vue@3.4.21) '@logicflow/core': specifier: ^1.2.22 version: 1.2.22 @@ -26,6 +29,12 @@ dependencies: '@pureadmin/utils': specifier: ^2.4.7 version: 2.4.7(echarts@5.5.0)(vue@3.4.21) + '@vue-flow/background': + specifier: ^1.3.0 + version: 1.3.0(@vue-flow/core@1.33.4)(vue@3.4.21) + '@vue-flow/core': + specifier: ^1.33.4 + version: 1.33.4(vue@3.4.21) '@vueuse/core': specifier: ^10.9.0 version: 10.9.0(vue@3.4.21) @@ -155,9 +164,15 @@ dependencies: vue3-danmaku: specifier: ^1.6.0 version: 1.6.0(vue@3.4.21) + vue3-puzzle-vcode: + specifier: ^1.1.7 + version: 1.1.7 vuedraggable: specifier: ^4.1.0 version: 4.1.0(vue@3.4.21) + vxe-table: + specifier: ^4.5.21 + version: 4.5.21(vue@3.4.21)(xe-utils@3.5.22) wavesurfer.js: specifier: ^7.7.5 version: 7.7.5 @@ -199,6 +214,9 @@ devDependencies: '@pureadmin/theme': specifier: ^3.2.0 version: 3.2.0 + '@types/dagre': + specifier: ^0.7.52 + version: 0.7.52 '@types/gradient-string': specifier: ^1.1.5 version: 1.1.5 @@ -247,6 +265,9 @@ devDependencies: cssnano: specifier: ^6.1.0 version: 6.1.0(postcss@8.4.35) + dagre: + specifier: ^0.8.5 + version: 0.8.5 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -1306,6 +1327,19 @@ packages: vue: 3.4.21(typescript@5.4.2) dev: true + /@infectoone/vue-ganttastic@2.3.1(dayjs@1.11.10)(vue@3.4.21): + resolution: {integrity: sha512-2P53V2N3SagJhqDMogcfpm50qIhqxEINufJBdWUGGZutnEquLg4CQThHysJsNZ11tght8TUPlBM10wHnZAMGiQ==} + peerDependencies: + dayjs: ^1.11.5 + vue: ^3.2.40 + dependencies: + '@vueuse/core': 9.13.0(vue@3.4.21) + dayjs: 1.11.10 + vue: 3.4.21(typescript@5.4.2) + transitivePeerDependencies: + - '@vue/composition-api' + dev: false + /@intlify/bundle-utils@7.5.1(vue-i18n@9.10.1): resolution: {integrity: sha512-UovJl10oBIlmYEcWw+VIHdKY5Uv5sdPG0b/b6bOYxGLln3UwB75+2dlc0F3Fsa0RhoznQ5Rp589/BZpABpE4Xw==} engines: {node: '>= 14.16'} @@ -2025,6 +2059,10 @@ packages: '@types/node': 20.11.27 dev: true + /@types/dagre@0.7.52: + resolution: {integrity: sha512-XKJdy+OClLk3hketHi9Qg6gTfe1F3y+UFnHxKA2rn9Dw+oXa4Gb378Ztz9HlMgZKSxpPmn4BNVh9wgkpvrK1uw==} + dev: true + /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -2374,6 +2412,30 @@ packages: path-browserify: 1.0.1 dev: true + /@vue-flow/background@1.3.0(@vue-flow/core@1.33.4)(vue@3.4.21): + resolution: {integrity: sha512-fu/8s9wzSOQIitnSTI10XT3bzTtagh4h8EF2SWwtlDklOZjAaKy75lqv4htHa3wigy/r4LGCOGwLw3Pk88/AxA==} + peerDependencies: + '@vue-flow/core': ^1.23.0 + vue: ^3.3.0 + dependencies: + '@vue-flow/core': 1.33.4(vue@3.4.21) + vue: 3.4.21(typescript@5.4.2) + dev: false + + /@vue-flow/core@1.33.4(vue@3.4.21): + resolution: {integrity: sha512-ryoamKfQ5pgtdv//Gjpyc4nsawMOwfI2jVzOPvZ92VQs78L4lidiWD7UybqeEkrGw6UPue1CGlzoy/4KlOWcSg==} + peerDependencies: + vue: ^3.3.0 + dependencies: + '@vueuse/core': 10.9.0(vue@3.4.21) + d3-drag: 3.0.0 + d3-selection: 3.0.0 + d3-zoom: 3.0.0 + vue: 3.4.21(typescript@5.4.2) + transitivePeerDependencies: + - '@vue/composition-api' + dev: false + /@vue/babel-helper-vue-transform-on@1.2.2: resolution: {integrity: sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==} dev: true @@ -3857,6 +3919,71 @@ packages: /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + /d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + dev: false + + /d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + dev: false + + /d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + dev: false + + /d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + dev: false + + /d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + dev: false + + /d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + dev: false + + /d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + dev: false + + /d3-transition@3.0.1(d3-selection@3.0.0): + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + dev: false + + /d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + dev: false + /d@1.0.2: resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} engines: {node: '>=0.12'} @@ -3865,6 +3992,13 @@ packages: type: 2.7.2 dev: false + /dagre@0.8.5: + resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} + dependencies: + graphlib: 2.1.8 + lodash: 4.17.21 + dev: true + /danmu.js@1.1.13: resolution: {integrity: sha512-knFd0/cB2HA4FFWiA7eB2suc5vCvoHdqio33FyyCSfP7C+1A+zQcTvnvwfxaZhrxsGj4qaQI2I8XiTqedRaVmg==} dependencies: @@ -4035,6 +4169,10 @@ packages: entities: 4.5.0 dev: true + /dom-zindex@1.0.1: + resolution: {integrity: sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg==} + dev: false + /dom7@3.0.0: resolution: {integrity: sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==} dependencies: @@ -4968,6 +5106,12 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true + /graphlib@2.1.8: + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} + dependencies: + lodash: 4.17.21 + dev: true + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -9097,6 +9241,10 @@ packages: vue: 3.4.21(typescript@5.4.2) dev: false + /vue3-puzzle-vcode@1.1.7: + resolution: {integrity: sha512-mW780dz7HKjrElnE60CeYSeHGidKBKHoMjTDYfqF21330rTkFOsfDK1FQKZ22MktgMtTEoS/imfpEDlM1cxY/g==} + dev: false + /vue@3.4.21(typescript@5.4.2): resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} peerDependencies: @@ -9121,6 +9269,17 @@ packages: vue: 3.4.21(typescript@5.4.2) dev: false + /vxe-table@4.5.21(vue@3.4.21)(xe-utils@3.5.22): + resolution: {integrity: sha512-yp+BNGCy61lk7ayf0LI3UNcR2fRmipGSiIAh3lNOIdyW1nAobf/GwIx3rXghjzFb0a6NNJeYxv2NM+gwXxtmww==} + peerDependencies: + vue: ^3.2.28 + xe-utils: ^3.5.0 + dependencies: + dom-zindex: 1.0.1 + vue: 3.4.21(typescript@5.4.2) + xe-utils: 3.5.22 + dev: false + /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. @@ -9311,6 +9470,10 @@ packages: optional: true dev: false + /xe-utils@3.5.22: + resolution: {integrity: sha512-rhWuM2fVXsdrqUtyjRAsYTDLvVzYSSZqg/uCRyDqcw96AweB1AWsnTJZyl9g68ejnP0xhxfSoNBSrIcOeX1yxA==} + dev: false + /xgplayer-subtitles@3.0.14(core-js@3.36.1): resolution: {integrity: sha512-w6H1h+g3kOI477kv2QBRMZe3M/1dHLXttHBwq4LwKTPGVQ19fLIDGwkfn+HeKwe1ocGDaaq96bS+l+BadnP9TA==} peerDependencies: diff --git a/public/platform-config.json b/public/platform-config.json index c6b2db6a91..eaef4a0d39 100644 --- a/public/platform-config.json +++ b/public/platform-config.json @@ -25,7 +25,7 @@ "ResponsiveStorageNameSpace": "responsive-", "MenuSearchHistory": 6, "MapConfigure": { - "amapKey": "97b3248d1553172e81f168cf94ea667e", + "amapKey": "adc139d56406f3844c8f1cf1c6b65c41", "options": { "resizeEnable": true, "center": [113.6401, 34.72468], diff --git a/public/sponsors/aitools.svg b/public/sponsors/aitools.svg new file mode 100644 index 0000000000..d04b628033 --- /dev/null +++ b/public/sponsors/aitools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReIcon/src/offlineIcon.ts b/src/components/ReIcon/src/offlineIcon.ts index 1582250e92..1056b1d960 100644 --- a/src/components/ReIcon/src/offlineIcon.ts +++ b/src/components/ReIcon/src/offlineIcon.ts @@ -31,6 +31,7 @@ import Links from "@iconify-icons/ri/links-fill"; import Search from "@iconify-icons/ri/search-line"; import FlUser from "@iconify-icons/ri/admin-line"; import Setting from "@iconify-icons/ri/settings-3-line"; +import BarChart from "@iconify-icons/ri/bar-chart-horizontal-line"; import LoginLog from "@iconify-icons/ri/window-line"; import Artboard from "@iconify-icons/ri/artboard-line"; import SystemLog from "@iconify-icons/ri/file-search-line"; @@ -53,6 +54,7 @@ addIcon("ri:table-line", Table); addIcon("ri:search-line", Search); addIcon("ri:admin-line", FlUser); addIcon("ri:settings-3-line", Setting); +addIcon("ri:bar-chart-horizontal-line", BarChart); addIcon("ri:window-line", LoginLog); addIcon("ri:file-search-line", SystemLog); addIcon("ri:artboard-line", Artboard); diff --git a/src/components/ReSegmented/src/index.css b/src/components/ReSegmented/src/index.css index 22acb2b9f7..97c9d76758 100644 --- a/src/components/ReSegmented/src/index.css +++ b/src/components/ReSegmented/src/index.css @@ -8,6 +8,21 @@ border-radius: 2px; } +.pure-segmented-block { + display: flex; +} + +.pure-segmented-block .pure-segmented-item { + flex: 1; + min-width: 0; +} + +.pure-segmented-block .pure-segmented-item > .pure-segmented-item-label > span { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + .pure-segmented-group { position: relative; display: flex; @@ -67,6 +82,7 @@ .pure-segmented-item-label { display: flex; align-items: center; + justify-content: center; } .pure-segmented-item-icon svg { diff --git a/src/components/ReSegmented/src/index.tsx b/src/components/ReSegmented/src/index.tsx index d8d5361864..7ac4a53b25 100644 --- a/src/components/ReSegmented/src/index.tsx +++ b/src/components/ReSegmented/src/index.tsx @@ -10,7 +10,12 @@ import { } from "vue"; import type { OptionsType } from "./type"; import { useRenderIcon } from "@/components/ReIcon/src/hooks"; -import { isFunction, isNumber, useDark } from "@pureadmin/utils"; +import { + isFunction, + isNumber, + useDark, + useResizeObserver +} from "@pureadmin/utils"; const props = { options: { @@ -22,6 +27,11 @@ const props = { type: undefined, require: false, default: "0" + }, + /** 将宽度调整为父元素宽度 */ + block: { + type: Boolean, + default: false } }; @@ -77,6 +87,14 @@ export default defineComponent({ }); } + if (props.block) { + useResizeObserver(".pure-segmented", () => { + nextTick(() => { + handleInit(curIndex.value); + }); + }); + } + watch( () => curIndex.value, index => { @@ -148,7 +166,9 @@ export default defineComponent({ }; return () => ( -
禁用
block 属性(将宽度调整为父元素宽度)
+可设置图标