Browse Source

release: update 3.2.0

i18n
xiaoxian521 3 years ago
parent
commit
f80fbbed20
  1. 12
      .eslintrc.js
  2. 4
      package.json
  3. 54
      pnpm-lock.yaml
  4. 2
      public/serverConfig.json
  5. 11
      src/layout/components/navbar.vue
  6. 6
      src/layout/components/notice/index.vue
  7. 2
      src/layout/components/notice/noticeItem.vue
  8. 4
      src/layout/components/notice/noticeList.vue
  9. 2
      src/layout/components/panel/index.vue
  10. 4
      src/layout/components/search/components/SearchModal.vue
  11. 4
      src/layout/components/search/components/SearchResult.vue
  12. 30
      src/layout/components/setting/index.vue
  13. 22
      src/layout/components/sidebar/horizontal.vue
  14. 12
      src/layout/components/sidebar/logo.vue
  15. 22
      src/layout/components/sidebar/mixNav.vue
  16. 19
      src/layout/components/sidebar/sidebarItem.vue
  17. 19
      src/layout/components/tag/index.vue
  18. 2
      src/layout/frameView.vue
  19. 2
      src/layout/redirect.vue
  20. 9
      src/style/sidebar.scss
  21. 4
      src/views/permission/button/index.vue

12
.eslintrc.js

@ -61,6 +61,18 @@ module.exports = {
"@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-empty-function": "off", "@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-non-null-assertion": "off", "@typescript-eslint/no-non-null-assertion": "off",
"vue/html-self-closing": [
"error",
{
html: {
void: "always",
normal: "always",
component: "always"
},
svg: "always",
math: "always"
}
],
"@typescript-eslint/no-unused-vars": [ "@typescript-eslint/no-unused-vars": [
"error", "error",
{ {

4
package.json

@ -1,6 +1,6 @@
{ {
"name": "pure-admin-thin", "name": "pure-admin-thin",
"version": "3.1.0",
"version": "3.2.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "cross-env --max_old_space_size=4096 vite", "dev": "cross-env --max_old_space_size=4096 vite",
@ -105,7 +105,7 @@
"stylelint-order": "^5.0.0", "stylelint-order": "^5.0.0",
"typescript": "^4.6.2", "typescript": "^4.6.2",
"unplugin-element-plus": "^0.3.2", "unplugin-element-plus": "^0.3.2",
"vite": "^2.9.0-beta.3",
"vite": "^2.9.0-beta.4",
"vite-plugin-live-reload": "^2.1.0", "vite-plugin-live-reload": "^2.1.0",
"vite-plugin-mock": "^2.9.6", "vite-plugin-mock": "^2.9.6",
"vite-plugin-remove-console": "^0.0.6", "vite-plugin-remove-console": "^0.0.6",

54
pnpm-lock.yaml

@ -75,7 +75,7 @@ specifiers:
stylelint-order: ^5.0.0 stylelint-order: ^5.0.0
typescript: ^4.6.2 typescript: ^4.6.2
unplugin-element-plus: ^0.3.2 unplugin-element-plus: ^0.3.2
vite: ^2.9.0-beta.3
vite: ^2.9.0-beta.4
vite-plugin-live-reload: ^2.1.0 vite-plugin-live-reload: ^2.1.0
vite-plugin-mock: ^2.9.6 vite-plugin-mock: ^2.9.6
vite-plugin-remove-console: ^0.0.6 vite-plugin-remove-console: ^0.0.6
@ -127,7 +127,7 @@ devDependencies:
"@iconify-icons/fa-solid": 1.2.2 "@iconify-icons/fa-solid": 1.2.2
"@iconify-icons/ri": 1.2.1 "@iconify-icons/ri": 1.2.1
"@iconify/vue": 3.1[email protected] "@iconify/vue": 3.1[email protected]
"@intlify/vite-plugin-vue-i18n": 3.3.1_5005873cfdafd7bccc775c7a0caf8390
"@intlify/vite-plugin-vue-i18n": 3.3.1_fecf2311320b252734da88aa76ba6360
"@pureadmin/theme": 0.0.1 "@pureadmin/theme": 0.0.1
"@types/element-resize-detector": 1.1.3 "@types/element-resize-detector": 1.1.3
"@types/js-cookie": 3.0.1 "@types/js-cookie": 3.0.1
@ -139,8 +139,8 @@ devDependencies:
"@types/qs": 6.9.7 "@types/qs": 6.9.7
"@typescript-eslint/eslint-plugin": 5.15.0_f2c49ce7d0e93ebcfdb4b7d25b131b28 "@typescript-eslint/eslint-plugin": 5.15.0_f2c49ce7d0e93ebcfdb4b7d25b131b28
"@typescript-eslint/parser": 5.15[email protected][email protected] "@typescript-eslint/parser": 5.15[email protected][email protected]
"@vitejs/plugin-legacy": 1.7[email protected].3
"@vitejs/plugin-vue": 2.2[email protected].3[email protected]
"@vitejs/plugin-legacy": 1.7[email protected].4
"@vitejs/plugin-vue": 2.2[email protected].4[email protected]
"@vitejs/plugin-vue-jsx": 1.3.8 "@vitejs/plugin-vue-jsx": 1.3.8
"@vue/eslint-config-prettier": 7.0[email protected][email protected] "@vue/eslint-config-prettier": 7.0[email protected][email protected]
"@vue/eslint-config-typescript": 10.0.0_5e58415d4c9ab0c3da8935a9b8bb8c26 "@vue/eslint-config-typescript": 10.0.0_5e58415d4c9ab0c3da8935a9b8bb8c26
@ -169,13 +169,13 @@ devDependencies:
stylelint-config-standard: 24.0[email protected] stylelint-config-standard: 24.0[email protected]
stylelint-order: 5.0[email protected] stylelint-order: 5.0[email protected]
typescript: 4.6.2 typescript: 4.6.2
unplugin-element-plus: 0.3[email protected][email protected].3
vite: 2.9.0-beta.3[email protected]
unplugin-element-plus: 0.3[email protected][email protected].4
vite: 2.9.0-beta.4[email protected]
vite-plugin-live-reload: 2.1.0 vite-plugin-live-reload: 2.1.0
vite-plugin-mock: 2.9.6_0f4f060d71e998e1697ce4d6d1a6c012
vite-plugin-mock: 2.9.6_cc7e5ded527ea0e0180226d44637e3ca
vite-plugin-remove-console: 0.0.6 vite-plugin-remove-console: 0.0.6
vite-plugin-style-import: 1.4[email protected].3
vite-plugin-windicss: 1.8[email protected].3
vite-plugin-style-import: 1.4[email protected].4
vite-plugin-windicss: 1.8[email protected].4
vite-svg-loader: 2.2.0 vite-svg-loader: 2.2.0
vue-eslint-parser: 8.3[email protected] vue-eslint-parser: 8.3[email protected]
windicss: 3.5.1 windicss: 3.5.1
@ -1006,7 +1006,7 @@ packages:
} }
engines: { node: ">= 12" } engines: { node: ">= 12" }
/@intlify/vite-plugin-vue-i18n/3.3.1_5005873cfdafd7bccc775c7a0caf8390:
/@intlify/vite-plugin-vue-i18n/3.3.1_fecf2311320b252734da88aa76ba6360:
resolution: resolution:
{ {
integrity: sha512-b9HIUANzL4/LmrA5RqeiPabZl2/RiWNAJ90TVZ8kSi3APRZ4BbmwUAclKe8ip+1jCDhqaGO/qfAI7SbQ0Y76Uw== integrity: sha512-b9HIUANzL4/LmrA5RqeiPabZl2/RiWNAJ90TVZ8kSi3APRZ4BbmwUAclKe8ip+1jCDhqaGO/qfAI7SbQ0Y76Uw==
@ -1028,7 +1028,7 @@ packages:
debug: 4.3.3 debug: 4.3.3
fast-glob: 3.2.11 fast-glob: 3.2.11
source-map: 0.6.1 source-map: 0.6.1
vite: 2.9.0-beta.3[email protected]
vite: 2.9.0-beta.4[email protected]
vue-i18n: 9.2.0-[email protected] vue-i18n: 9.2.0-[email protected]
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -1451,7 +1451,7 @@ packages:
eslint-visitor-keys: 3.3.0 eslint-visitor-keys: 3.3.0
dev: true dev: true
/@vitejs/plugin-legacy/[email protected].3:
/@vitejs/plugin-legacy/[email protected].4:
resolution: resolution:
{ {
integrity: sha512-RqgILXsGpfV7NHodVCdBVau8ss5+ynMXp6JGF/F7nhSy0bnwSQPlMS3KFqh7twfifXK8VuMriqfU4CxOiqmNnA== integrity: sha512-RqgILXsGpfV7NHodVCdBVau8ss5+ynMXp6JGF/F7nhSy0bnwSQPlMS3KFqh7twfifXK8VuMriqfU4CxOiqmNnA==
@ -1465,7 +1465,7 @@ packages:
magic-string: 0.25.9 magic-string: 0.25.9
regenerator-runtime: 0.13.9 regenerator-runtime: 0.13.9
systemjs: 6.12.1 systemjs: 6.12.1
vite: 2.9.0-beta.3[email protected]
vite: 2.9.0-beta.4[email protected]
dev: true dev: true
/@vitejs/plugin-vue-jsx/1.3.8: /@vitejs/plugin-vue-jsx/1.3.8:
@ -1485,7 +1485,7 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@vitejs/plugin-vue/[email protected].3[email protected]:
/@vitejs/plugin-vue/[email protected].4[email protected]:
resolution: resolution:
{ {
integrity: sha512-ev9AOlp0ljCaDkFZF3JwC/pD2N4Hh+r5srl5JHM6BKg5+99jiiK0rE/XaRs3pVm1wzyKkjUy/StBSoXX5fFzcw== integrity: sha512-ev9AOlp0ljCaDkFZF3JwC/pD2N4Hh+r5srl5JHM6BKg5+99jiiK0rE/XaRs3pVm1wzyKkjUy/StBSoXX5fFzcw==
@ -1495,7 +1495,7 @@ packages:
vite: ^2.5.10 vite: ^2.5.10
vue: ^3.2.25 vue: ^3.2.25
dependencies: dependencies:
vite: 2.9.0-beta.3[email protected]
vite: 2.9.0-beta.4[email protected]
vue: 3.2.31 vue: 3.2.31
dev: true dev: true
@ -6869,7 +6869,7 @@ packages:
engines: { node: ">= 0.8" } engines: { node: ">= 0.8" }
dev: true dev: true
/unplugin-element-plus/[email protected][email protected].3:
/unplugin-element-plus/[email protected][email protected].4:
resolution: resolution:
{ {
integrity: sha512-/oPbLA1ByrZ3VvN3jrVtVZcGJ147+ccyrL1w9d8wNLTTMH+buxdtiMQQv9R7Muz22ocJvebXZzlRVlA/JeeVPA== integrity: sha512-/oPbLA1ByrZ3VvN3jrVtVZcGJ147+ccyrL1w9d8wNLTTMH+buxdtiMQQv9R7Muz22ocJvebXZzlRVlA/JeeVPA==
@ -6879,7 +6879,7 @@ packages:
"@rollup/pluginutils": 4.2.0 "@rollup/pluginutils": 4.2.0
es-module-lexer: 0.10.4 es-module-lexer: 0.10.4
magic-string: 0.26.1 magic-string: 0.26.1
unplugin: 0.3[email protected][email protected].3
unplugin: 0.3[email protected][email protected].4
transitivePeerDependencies: transitivePeerDependencies:
- esbuild - esbuild
- rollup - rollup
@ -6887,7 +6887,7 @@ packages:
- webpack - webpack
dev: true dev: true
/unplugin/[email protected][email protected].3:
/unplugin/[email protected][email protected].4:
resolution: resolution:
{ {
integrity: sha512-WjZWpUqqcYPQ/efR00Zm2m1+J1LitwoZ4uhHV4VdZ+IpW0Nh/qnDYtVf+nLhozXdGxslMPecOshVR7NiWFl4gA== integrity: sha512-WjZWpUqqcYPQ/efR00Zm2m1+J1LitwoZ4uhHV4VdZ+IpW0Nh/qnDYtVf+nLhozXdGxslMPecOshVR7NiWFl4gA==
@ -6908,7 +6908,7 @@ packages:
optional: true optional: true
dependencies: dependencies:
rollup: 2.70.1 rollup: 2.70.1
vite: 2.9.0-beta.3[email protected]
vite: 2.9.0-beta.4[email protected]
webpack-virtual-modules: 0.4.3 webpack-virtual-modules: 0.4.3
dev: true dev: true
@ -6992,7 +6992,7 @@ packages:
chokidar: 3.5.3 chokidar: 3.5.3
dev: true dev: true
/vite-plugin-mock/2.9.6_0f4f060d71e998e1697ce4d6d1a6c012:
/vite-plugin-mock/2.9.6_cc7e5ded527ea0e0180226d44637e3ca:
resolution: resolution:
{ {
integrity: sha512-/Rm59oPppe/ncbkSrUuAxIQihlI2YcBmnbR4ST1RA2VzM1C0tEQc1KlbQvnUGhXECAGTaQN2JyasiwXP6EtKgg== integrity: sha512-/Rm59oPppe/ncbkSrUuAxIQihlI2YcBmnbR4ST1RA2VzM1C0tEQc1KlbQvnUGhXECAGTaQN2JyasiwXP6EtKgg==
@ -7012,7 +7012,7 @@ packages:
fast-glob: 3.2.11 fast-glob: 3.2.11
mockjs: 1.1.0 mockjs: 1.1.0
path-to-regexp: 6.2.0 path-to-regexp: 6.2.0
vite: 2.9.0-beta.3[email protected]
vite: 2.9.0-beta.4[email protected]
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
@ -7025,7 +7025,7 @@ packages:
} }
dev: true dev: true
/vite-plugin-style-import/[email protected].3:
/vite-plugin-style-import/[email protected].4:
resolution: resolution:
{ {
integrity: sha512-lJCRvm7+So0hHdnSJiJPg9gD5mxtL6YY0jmhEph+k7ArpsyvqOh6han2kG5htbWWDZxHkUN9d1BuTFL//yCLLQ== integrity: sha512-lJCRvm7+So0hHdnSJiJPg9gD5mxtL6YY0jmhEph+k7ArpsyvqOh6han2kG5htbWWDZxHkUN9d1BuTFL//yCLLQ==
@ -7039,12 +7039,12 @@ packages:
es-module-lexer: 0.9.3 es-module-lexer: 0.9.3
fs-extra: 10.0.1 fs-extra: 10.0.1
magic-string: 0.25.9 magic-string: 0.25.9
vite: 2.9.0-beta.3[email protected]
vite: 2.9.0-beta.4[email protected]
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/vite-plugin-windicss/[email protected].3:
/vite-plugin-windicss/[email protected].4:
resolution: resolution:
{ {
integrity: sha512-RIw2GD6H6cKNE8wZXVOBs4L1uTicVS0FaAkeqXvy1oyuXLC4SXmvnzEuoK0+qFuWJjW0ECNwE8eU+ZZhzNQKUg== integrity: sha512-RIw2GD6H6cKNE8wZXVOBs4L1uTicVS0FaAkeqXvy1oyuXLC4SXmvnzEuoK0+qFuWJjW0ECNwE8eU+ZZhzNQKUg==
@ -7055,7 +7055,7 @@ packages:
"@windicss/plugin-utils": 1.8.3 "@windicss/plugin-utils": 1.8.3
debug: 4.3.3 debug: 4.3.3
kolorist: 1.5.1 kolorist: 1.5.1
vite: 2.9.0-beta.3[email protected]
vite: 2.9.0-beta.4[email protected]
windicss: 3.5.1 windicss: 3.5.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -7071,10 +7071,10 @@ packages:
svgo: 2.8.0 svgo: 2.8.0
dev: true dev: true
/vite/2.9.0-beta.3[email protected]:
/vite/2.9.0-beta.4[email protected]:
resolution: resolution:
{ {
integrity: sha512-x3G5GGQQlapvyjr2jhFTT16NIbKJdcfYOa6oD8OZuy+WqGTSYolowGJP7tUrTe9y5n641CBKLuhjqXc4gpwUVQ==
integrity: sha512-ToelFqN8lBaiK34VHzTbixOImHoHBw/PCveV5Xynd4ie1twcE0G6t9MFgunuN1hoajWMraGL5bV+pZ3hENR7GA==
} }
engines: { node: ">=12.2.0" } engines: { node: ">=12.2.0" }
hasBin: true hasBin: true

2
public/serverConfig.json

@ -1,5 +1,5 @@
{ {
"Version": "3.1.0",
"Version": "3.2.0",
"Title": "PureAdmin", "Title": "PureAdmin",
"FixedHeader": true, "FixedHeader": true,
"HiddenSideBar": false, "HiddenSideBar": false,

11
src/layout/components/navbar.vue

@ -82,10 +82,11 @@ function translationEn() {
<el-dropdown-item <el-dropdown-item
:style="getDropdownItemStyle(locale, 'en')" :style="getDropdownItemStyle(locale, 'en')"
@click="translationEn" @click="translationEn"
><el-icon class="check-en" v-show="locale === 'en'"
><IconifyIconOffline icon="check" /></el-icon
>English</el-dropdown-item
> >
<span class="check-en" v-show="locale === 'en'">
<IconifyIconOffline icon="check" /> </span
>English
</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
@ -106,13 +107,13 @@ function translationEn() {
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
<el-icon
<span
class="el-icon-setting" class="el-icon-setting"
:title="t('buttons.hssystemSet')" :title="t('buttons.hssystemSet')"
@click="onPanel" @click="onPanel"
> >
<IconifyIconOffline icon="setting" /> <IconifyIconOffline icon="setting" />
</el-icon>
</span>
</div> </div>
</div> </div>
</template> </template>

6
src/layout/components/notice/index.vue

@ -24,9 +24,9 @@ function tabClick() {
<el-dropdown ref="dropdownDom" trigger="click" placement="bottom-end"> <el-dropdown ref="dropdownDom" trigger="click" placement="bottom-end">
<span class="dropdown-badge"> <span class="dropdown-badge">
<el-badge :value="noticesNum" :max="99"> <el-badge :value="noticesNum" :max="99">
<el-icon class="header-notice-icon"
><IconifyIconOffline icon="bell"
/></el-icon>
<span class="header-notice-icon">
<IconifyIconOffline icon="bell" />
</span>
</el-badge> </el-badge>
</span> </span>
<template #dropdown> <template #dropdown>

2
src/layout/components/notice/noticeItem.vue

@ -50,7 +50,7 @@ function hoverDescription(event, description) {
:size="30" :size="30"
:src="props.noticeItem.avatar" :src="props.noticeItem.avatar"
class="notice-container-avatar" class="notice-container-avatar"
></el-avatar>
/>
<div class="notice-container-text"> <div class="notice-container-text">
<div class="notice-text-title"> <div class="notice-text-title">
<el-tooltip <el-tooltip

4
src/layout/components/notice/noticeList.vue

@ -17,7 +17,7 @@ const props = defineProps({
v-for="(item, index) in props.list" v-for="(item, index) in props.list"
:noticeItem="item" :noticeItem="item"
:key="index" :key="index"
></NoticeItem>
/>
</div> </div>
<el-empty v-else description="暂无数据"></el-empty>
<el-empty v-else description="暂无数据" />
</template> </template>

2
src/layout/components/panel/index.vue

@ -26,7 +26,7 @@ emitter.on("openPanel", () => {
<IconifyIconOffline icon="close" /> <IconifyIconOffline icon="close" />
</el-icon> </el-icon>
</div> </div>
<div style="border-bottom: 1px solid #dcdfe6"></div>
<div style="border-bottom: 1px solid #dcdfe6" />
<slot /> <slot />
</div> </div>
</div> </div>

4
src/layout/components/search/components/SearchModal.vue

@ -139,9 +139,9 @@ onKeyStroke("ArrowDown", handleDown);
@input="handleSearch" @input="handleSearch"
> >
<template #prefix> <template #prefix>
<el-icon class="el-input__icon">
<span class="el-input__icon">
<IconifyIconOffline icon="search" /> <IconifyIconOffline icon="search" />
</el-icon>
</span>
</template> </template>
</el-input> </el-input>
<div class="search-result-container"> <div class="search-result-container">

4
src/layout/components/search/components/SearchResult.vue

@ -11,9 +11,7 @@
@click="handleTo" @click="handleTo"
@mouseenter="handleMouse(item)" @mouseenter="handleMouse(item)"
> >
<component
:is="useRenderIcon(item.meta?.icon ?? 'bookmark-2-line')"
></component>
<component :is="useRenderIcon(item.meta?.icon ?? 'bookmark-2-line')" />
<span class="result-item-title">{{ t(item.meta?.title) }}</span> <span class="result-item-title">{{ t(item.meta?.title) }}</span>
<enterOutlined /> <enterOutlined />
</div> </div>

30
src/layout/components/setting/index.vue

@ -316,8 +316,7 @@ nextTick(() => {
:active-icon="dayIcon" :active-icon="dayIcon"
:inactive-icon="darkIcon" :inactive-icon="darkIcon"
@change="dataThemeChange" @change="dataThemeChange"
>
</el-switch>
/>
<el-divider>导航栏模式</el-divider> <el-divider>导航栏模式</el-divider>
<ul class="pure-theme"> <ul class="pure-theme">
@ -327,8 +326,8 @@ nextTick(() => {
ref="verticalRef" ref="verticalRef"
@click="setLayoutModel('vertical')" @click="setLayoutModel('vertical')"
> >
<div></div>
<div></div>
<div />
<div />
</li> </li>
</el-tooltip> </el-tooltip>
@ -338,8 +337,8 @@ nextTick(() => {
ref="horizontalRef" ref="horizontalRef"
@click="setLayoutModel('horizontal')" @click="setLayoutModel('horizontal')"
> >
<div></div>
<div></div>
<div />
<div />
</li> </li>
</el-tooltip> </el-tooltip>
@ -349,8 +348,8 @@ nextTick(() => {
ref="mixRef" ref="mixRef"
@click="setLayoutModel('mix')" @click="setLayoutModel('mix')"
> >
<div></div>
<div></div>
<div />
<div />
</li> </li>
</el-tooltip> </el-tooltip>
</ul> </ul>
@ -384,8 +383,7 @@ nextTick(() => {
active-text="开" active-text="开"
inactive-text="关" inactive-text="关"
@change="greyChange" @change="greyChange"
>
</el-switch>
/>
</li> </li>
<li v-show="!dataTheme"> <li v-show="!dataTheme">
<span>色弱模式</span> <span>色弱模式</span>
@ -396,8 +394,7 @@ nextTick(() => {
active-text="开" active-text="开"
inactive-text="关" inactive-text="关"
@change="weekChange" @change="weekChange"
>
</el-switch>
/>
</li> </li>
<li> <li>
<span>隐藏标签页</span> <span>隐藏标签页</span>
@ -408,8 +405,7 @@ nextTick(() => {
active-text="开" active-text="开"
inactive-text="关" inactive-text="关"
@change="tagsChange" @change="tagsChange"
>
</el-switch>
/>
</li> </li>
<li> <li>
<span>侧边栏Logo</span> <span>侧边栏Logo</span>
@ -422,8 +418,7 @@ nextTick(() => {
active-text="开" active-text="开"
inactive-text="关" inactive-text="关"
@change="logoChange" @change="logoChange"
>
</el-switch>
/>
</li> </li>
<li> <li>
<span>标签页持久化</span> <span>标签页持久化</span>
@ -434,8 +429,7 @@ nextTick(() => {
active-text="开" active-text="开"
inactive-text="关" inactive-text="关"
@change="multiTagsCacheChange" @change="multiTagsCacheChange"
>
</el-switch>
/>
</li> </li>
<li> <li>

22
src/layout/components/sidebar/horizontal.vue

@ -69,11 +69,7 @@ function translationEn() {
<template> <template>
<div class="horizontal-header"> <div class="horizontal-header">
<div class="horizontal-header-left" @click="backHome"> <div class="horizontal-header-left" @click="backHome">
<FontIcon
icon="team-iconlogo"
svg
style="width: 35px; height: 35px"
></FontIcon>
<FontIcon icon="team-iconlogo" svg style="width: 35px; height: 35px" />
<h4>{{ title }}</h4> <h4>{{ title }}</h4>
</div> </div>
<el-menu <el-menu
@ -106,15 +102,17 @@ function translationEn() {
<el-dropdown-item <el-dropdown-item
:style="getDropdownItemStyle(locale, 'zh')" :style="getDropdownItemStyle(locale, 'zh')"
@click="translationCh" @click="translationCh"
><el-icon class="check-zh" v-show="locale === 'zh'"
><IconifyIconOffline icon="check" /></el-icon
>简体中文</el-dropdown-item
> >
<span class="check-zh" v-show="locale === 'zh'">
<IconifyIconOffline icon="check" /> </span
>简体中文
</el-dropdown-item>
<el-dropdown-item <el-dropdown-item
:style="getDropdownItemStyle(locale, 'en')" :style="getDropdownItemStyle(locale, 'en')"
@click="translationEn" @click="translationEn"
><el-icon class="check-en" v-show="locale === 'en'"
><IconifyIconOffline icon="check" /></el-icon
>
<span class="check-en" v-show="locale === 'en'">
<IconifyIconOffline icon="check" /> </span
>English</el-dropdown-item >English</el-dropdown-item
> >
</el-dropdown-menu> </el-dropdown-menu>
@ -138,13 +136,13 @@ function translationEn() {
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
<el-icon
<span
class="el-icon-setting" class="el-icon-setting"
:title="t('buttons.hssystemSet')" :title="t('buttons.hssystemSet')"
@click="onPanel" @click="onPanel"
> >
<IconifyIconOffline icon="setting" /> <IconifyIconOffline icon="setting" />
</el-icon>
</span>
</div> </div>
</div> </div>
</template> </template>

12
src/layout/components/sidebar/logo.vue

@ -18,11 +18,7 @@ const title =
class="sidebar-logo-link" class="sidebar-logo-link"
to="/" to="/"
> >
<FontIcon
icon="team-iconlogo"
svg
style="width: 35px; height: 35px"
></FontIcon>
<FontIcon icon="team-iconlogo" svg style="width: 35px; height: 35px" />
<span class="sidebar-title">{{ title }}</span> <span class="sidebar-title">{{ title }}</span>
</router-link> </router-link>
<router-link <router-link
@ -32,11 +28,7 @@ const title =
class="sidebar-logo-link" class="sidebar-logo-link"
to="/" to="/"
> >
<FontIcon
icon="team-iconlogo"
svg
style="width: 35px; height: 35px"
></FontIcon>
<FontIcon icon="team-iconlogo" svg style="width: 35px; height: 35px" />
<span class="sidebar-title">{{ title }}</span> <span class="sidebar-title">{{ title }}</span>
</router-link> </router-link>
</transition> </transition>

22
src/layout/components/sidebar/mixNav.vue

@ -119,11 +119,9 @@ function translationEn() {
:index="resolvePath(route) || route.redirect" :index="resolvePath(route) || route.redirect"
> >
<template #title> <template #title>
<el-icon v-show="route.meta.icon" :class="route.meta.icon">
<component
:is="useRenderIcon(route.meta && route.meta.icon)"
></component>
</el-icon>
<div v-show="route.meta.icon" :class="['el-icon', route.meta.icon]">
<component :is="useRenderIcon(route.meta && route.meta.icon)" />
</div>
<span>{{ transformI18n(route.meta.title, route.meta.i18n) }}</span> <span>{{ transformI18n(route.meta.title, route.meta.i18n) }}</span>
<FontIcon <FontIcon
v-if="route.meta.extraIcon" v-if="route.meta.extraIcon"
@ -132,7 +130,7 @@ function translationEn() {
style="position: absolute; right: 10px" style="position: absolute; right: 10px"
:icon="route.meta.extraIcon.name" :icon="route.meta.extraIcon.name"
:svg="route.meta.extraIcon.svg ? true : false" :svg="route.meta.extraIcon.svg ? true : false"
></FontIcon>
/>
</template> </template>
</el-menu-item> </el-menu-item>
</el-menu> </el-menu>
@ -151,15 +149,15 @@ function translationEn() {
<el-dropdown-item <el-dropdown-item
:style="getDropdownItemStyle(locale, 'zh')" :style="getDropdownItemStyle(locale, 'zh')"
@click="translationCh" @click="translationCh"
><el-icon class="check-zh" v-show="locale === 'zh'"
><IconifyIconOffline icon="check" /></el-icon
><span class="check-zh" v-show="locale === 'zh'"
><IconifyIconOffline icon="check" /></span
>简体中文</el-dropdown-item >简体中文</el-dropdown-item
> >
<el-dropdown-item <el-dropdown-item
:style="getDropdownItemStyle(locale, 'en')" :style="getDropdownItemStyle(locale, 'en')"
@click="translationEn" @click="translationEn"
><el-icon class="check-en" v-show="locale === 'en'"
><IconifyIconOffline icon="check" /></el-icon
><span class="check-en" v-show="locale === 'en'"
><IconifyIconOffline icon="check" /></span
>English</el-dropdown-item >English</el-dropdown-item
> >
</el-dropdown-menu> </el-dropdown-menu>
@ -183,13 +181,13 @@ function translationEn() {
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
<el-icon
<span
class="el-icon-setting" class="el-icon-setting"
:title="t('buttons.hssystemSet')" :title="t('buttons.hssystemSet')"
@click="onPanel" @click="onPanel"
> >
<IconifyIconOffline icon="setting" /> <IconifyIconOffline icon="setting" />
</el-icon>
</span>
</div> </div>
</div> </div>
</template> </template>

19
src/layout/components/sidebar/sidebarItem.vue

@ -148,7 +148,7 @@ function resolvePath(routePath) {
:class="{ 'submenu-title-noDropdown': !isNest }" :class="{ 'submenu-title-noDropdown': !isNest }"
:style="getNoDropdownStyle" :style="getNoDropdownStyle"
> >
<el-icon v-show="props.item.meta.icon">
<div class="el-icon" v-show="props.item.meta.icon">
<component <component
:is=" :is="
useRenderIcon( useRenderIcon(
@ -156,8 +156,8 @@ function resolvePath(routePath) {
(props.item.meta && props.item.meta.icon) (props.item.meta && props.item.meta.icon)
) )
" "
></component>
</el-icon>
/>
</div>
<div <div
v-if=" v-if="
!pureApp.sidebar.opened && !pureApp.sidebar.opened &&
@ -203,7 +203,7 @@ function resolvePath(routePath) {
:style="getExtraIconStyle" :style="getExtraIconStyle"
:icon="onlyOneChild.meta.extraIcon.name" :icon="onlyOneChild.meta.extraIcon.name"
:svg="onlyOneChild.meta.extraIcon.svg ? true : false" :svg="onlyOneChild.meta.extraIcon.svg ? true : false"
></FontIcon>
/>
</div> </div>
</template> </template>
</el-menu-item> </el-menu-item>
@ -216,11 +216,14 @@ function resolvePath(routePath) {
popper-append-to-body popper-append-to-body
> >
<template #title> <template #title>
<el-icon v-show="props.item.meta.icon" :class="props.item.meta.icon">
<div
v-show="props.item.meta.icon"
:class="['el-icon', props.item.meta.icon]"
>
<component <component
:is="useRenderIcon(props.item.meta && props.item.meta.icon)" :is="useRenderIcon(props.item.meta && props.item.meta.icon)"
></component>
</el-icon>
/>
</div>
<span v-if="!menuMode">{{ <span v-if="!menuMode">{{
transformI18n(props.item.meta.title, props.item.meta.i18n) transformI18n(props.item.meta.title, props.item.meta.i18n)
}}</span> }}</span>
@ -250,7 +253,7 @@ function resolvePath(routePath) {
style="position: absolute; right: 10px" style="position: absolute; right: 10px"
:icon="props.item.meta.extraIcon.name" :icon="props.item.meta.extraIcon.name"
:svg="props.item.meta.extraIcon.svg ? true : false" :svg="props.item.meta.extraIcon.svg ? true : false"
></FontIcon>
/>
</template> </template>
<sidebar-item <sidebar-item
v-for="child in props.item.children" v-for="child in props.item.children"

19
src/layout/components/tag/index.vue

@ -428,7 +428,8 @@ function onClickDrop(key, item, selectRoute?: RouteConfigs) {
}); });
} }
function handleCommand(command: any) {
function handleCommand(command: object) {
// @ts-expect-error
const { key, item } = command; const { key, item } = command;
onClickDrop(key, item); onClickDrop(key, item);
} }
@ -663,7 +664,7 @@ const getContextMenuStyle = computed((): CSSProperties => {
<router-link :to="item.path" <router-link :to="item.path"
>{{ transformI18n(item.meta.title, item.meta.i18n) }} >{{ transformI18n(item.meta.title, item.meta.i18n) }}
</router-link> </router-link>
<el-icon
<span
v-if=" v-if="
iconIsActive(item, index) || iconIsActive(item, index) ||
(index === activeIndex && index !== 0) (index === activeIndex && index !== 0)
@ -672,12 +673,12 @@ const getContextMenuStyle = computed((): CSSProperties => {
@click.stop="deleteMenu(item)" @click.stop="deleteMenu(item)"
> >
<IconifyIconOffline icon="close-bold" /> <IconifyIconOffline icon="close-bold" />
</el-icon>
</span>
<div <div
:ref="'schedule' + index" :ref="'schedule' + index"
v-if="showModel !== 'card'" v-if="showModel !== 'card'"
:class="[scheduleIsActive(item)]" :class="[scheduleIsActive(item)]"
></div>
/>
</div> </div>
</div> </div>
</div> </div>
@ -710,13 +711,13 @@ const getContextMenuStyle = computed((): CSSProperties => {
<!-- 右侧功能按钮 --> <!-- 右侧功能按钮 -->
<ul class="right-button"> <ul class="right-button">
<li> <li>
<el-icon
<span
:title="t('buttons.hsrefreshRoute')" :title="t('buttons.hsrefreshRoute')"
class="el-icon-refresh-right rotate" class="el-icon-refresh-right rotate"
@click="onFresh" @click="onFresh"
> >
<IconifyIconOffline icon="refresh-right" /> <IconifyIconOffline icon="refresh-right" />
</el-icon>
</span>
</li> </li>
<li> <li>
<el-dropdown <el-dropdown
@ -724,9 +725,7 @@ const getContextMenuStyle = computed((): CSSProperties => {
placement="bottom-end" placement="bottom-end"
@command="handleCommand" @command="handleCommand"
> >
<el-icon>
<IconifyIconOffline icon="arrow-down" />
</el-icon>
<IconifyIconOffline icon="arrow-down" />
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item <el-dropdown-item
@ -748,7 +747,7 @@ const getContextMenuStyle = computed((): CSSProperties => {
</el-dropdown> </el-dropdown>
</li> </li>
<li> <li>
<slot></slot>
<slot />
</li> </li>
</ul> </ul>
</div> </div>

2
src/layout/frameView.vue

@ -1,6 +1,6 @@
<template> <template>
<div class="frame" v-loading="loading"> <div class="frame" v-loading="loading">
<iframe :src="frameSrc" class="frame-iframe" ref="frameRef"></iframe>
<iframe :src="frameSrc" class="frame-iframe" ref="frameRef" />
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>

2
src/layout/redirect.vue

@ -16,5 +16,5 @@ replace({
</script> </script>
<template> <template>
<div></div>
<div />
</template> </template>

9
src/style/sidebar.scss

@ -202,7 +202,7 @@
.horizontal-header-right { .horizontal-header-right {
display: flex; display: flex;
min-width: 280px;
min-width: 340px;
align-items: center; align-items: center;
color: $subMenuActiveText; color: $subMenuActiveText;
justify-content: flex-end; justify-content: flex-end;
@ -609,15 +609,12 @@ body[layout="vertical"] {
} }
} }
/* 无子菜单 */
/* 有无子菜单 */
.el-sub-menu__title,
.el-menu-item [class^="el-icon"] { .el-menu-item [class^="el-icon"] {
right: 5px; right: 5px;
} }
.el-sub-menu__title [class^="el-icon"] {
right: 2px;
}
.submenu-title-noDropdown { .submenu-title-noDropdown {
background: transparent !important; background: transparent !important;
} }

4
src/views/permission/button/index.vue

@ -24,8 +24,8 @@ function changRole(value) {
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<el-radio-group v-model="auth" @change="changRole"> <el-radio-group v-model="auth" @change="changRole">
<el-radio-button label="admin"></el-radio-button>
<el-radio-button label="test"></el-radio-button>
<el-radio-button label="admin" />
<el-radio-button label="test" />
</el-radio-group> </el-radio-group>
</div> </div>
</template> </template>

Loading…
Cancel
Save