feat: router
parent
c9ad9cfc5b
commit
e89fe32f3a
|
@ -73,8 +73,5 @@ export const sendSmsApi = (data: SendSmsReqVO) => {
|
|||
|
||||
// 导出短信模板
|
||||
export const exportPostApi = (params: SmsTemplateExportReqVO) => {
|
||||
return defHttp.download({
|
||||
url: '/system/sms-template/export-excel',
|
||||
params
|
||||
})
|
||||
return defHttp.download({ url: '/system/sms-template/export-excel', params })
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
import { computed, unref, ref, watch, nextTick } from 'vue'
|
||||
import { SearchOutlined } from '@ant-design/icons-vue'
|
||||
import AppSearchFooter from './AppSearchFooter.vue'
|
||||
import Icon from '@/components/Icon'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import vClickOutside from '@/directives/clickOutside'
|
||||
import { useDesign } from '@/hooks/web/useDesign'
|
||||
import { useRefs } from '@/hooks/core/useRefs'
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<script lang="ts" setup name="AButton" extends="Button" indeterminate="false">
|
||||
import { Button } from 'ant-design-vue'
|
||||
import { computed, unref } from 'vue'
|
||||
import Icon from '@/components/Icon/src/Icon.vue'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { buttonProps } from './props'
|
||||
import { useAttrs } from '@/hooks/core/useAttrs'
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
import type { ContextMenuItem, ItemContentProps, Axis } from './typing'
|
||||
import type { FunctionalComponent, CSSProperties } from 'vue'
|
||||
import { defineComponent, nextTick, onMounted, computed, ref, unref, onUnmounted } from 'vue'
|
||||
import Icon from '@/components/Icon'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { Menu, Divider } from 'ant-design-vue'
|
||||
|
||||
const prefixCls = 'context-menu'
|
||||
|
|
|
@ -21,7 +21,7 @@ import { useModal } from '@/components/Modal'
|
|||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { useI18n } from '@/hooks/web/useI18n'
|
||||
import type { ButtonProps } from '@/components/Button'
|
||||
import Icon from '@/components/Icon'
|
||||
import { Icon } from '@/components/Icon'
|
||||
|
||||
const emit = defineEmits(['update:value', 'change'])
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
</template>
|
||||
<script lang="ts" setup name="MenuItemContent">
|
||||
import { computed } from 'vue'
|
||||
import Icon from '@/components/Icon'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { useI18n } from '@/hooks/web/useI18n'
|
||||
import { useDesign } from '@/hooks/web/useDesign'
|
||||
import { contentProps } from '../props'
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<div
|
||||
ref="wrap"
|
||||
:class="[wrapClass, 'scrollbar__wrap', native ? '' : 'scrollbar__wrap--hidden-default']"
|
||||
:style="style"
|
||||
:style="style as any"
|
||||
@scroll="handleScroll"
|
||||
>
|
||||
<component :is="tag" ref="resize" :class="['scrollbar__view', viewClass]" :style="viewStyle">
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
import type { Menu } from '@/router/types'
|
||||
import { computed } from 'vue'
|
||||
import { useDesign } from '@/hooks/web/useDesign'
|
||||
import Icon from '@/components/Icon'
|
||||
import { Icon } from '@/components/Icon'
|
||||
|
||||
import MenuItem from './components/MenuItem.vue'
|
||||
import SubMenu from './components/SubMenuItem.vue'
|
||||
|
|
|
@ -54,7 +54,7 @@ import { propTypes } from '@/utils/propTypes'
|
|||
import { useMenuItem } from './useMenu'
|
||||
import { useSimpleRootMenuContext } from './useSimpleMenuContext'
|
||||
import { CollapseTransition } from '@/components/Transition'
|
||||
import Icon from '@/components/Icon'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { Popover } from 'ant-design-vue'
|
||||
import { isBoolean, isObject } from '@/utils/is'
|
||||
import mitt from '@/utils/mitt'
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
import { computed, toRaw, unref } from 'vue'
|
||||
import { MoreOutlined } from '@ant-design/icons-vue'
|
||||
import { Divider, Tooltip, TooltipProps } from 'ant-design-vue'
|
||||
import Icon from '@/components/Icon'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { ActionItem, TableActionType } from '@/components/Table'
|
||||
import { PopConfirmButton } from '@/components/Button'
|
||||
import { Dropdown } from '@/components/Dropdown'
|
||||
|
|
|
@ -17,27 +17,24 @@
|
|||
import type { RouteLocationMatched } from 'vue-router'
|
||||
import { useRouter } from 'vue-router'
|
||||
import type { Menu } from '@/router/types'
|
||||
|
||||
import { ref, watchEffect } from 'vue'
|
||||
|
||||
import { Breadcrumb } from 'ant-design-vue'
|
||||
import Icon from '@/components/Icon'
|
||||
|
||||
import { useDesign } from '@/hooks/web/useDesign'
|
||||
import { useRootSetting } from '@/hooks/setting/useRootSetting'
|
||||
import { useGo } from '@/hooks/web/usePage'
|
||||
import { useI18n } from '@/hooks/web/useI18n'
|
||||
|
||||
import { propTypes } from '@/utils/propTypes'
|
||||
import { isString } from '@/utils/is'
|
||||
import { filter } from '@/utils/helper/treeHelper'
|
||||
import { getMenus } from '@/router/menus'
|
||||
|
||||
import { REDIRECT_NAME } from '@/router/constant'
|
||||
import { getAllParentPath } from '@/router/helper/menuHelper'
|
||||
import { Icon } from '@/components/Icon'
|
||||
|
||||
defineProps({
|
||||
theme: propTypes.oneOf(['dark', 'light'])
|
||||
})
|
||||
|
||||
const routes = ref<RouteLocationMatched[]>([])
|
||||
const { currentRoute } = useRouter()
|
||||
const { prefixCls } = useDesign('layout-breadcrumb')
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<script lang="ts" setup name="ErrorAction">
|
||||
import { computed } from 'vue'
|
||||
import { Tooltip, Badge } from 'ant-design-vue'
|
||||
import Icon from '@/components/Icon'
|
||||
import { Icon } from '@/components/Icon'
|
||||
|
||||
import { useI18n } from '@/hooks/web/useI18n'
|
||||
import { useErrorLogStore } from '@/store/modules/errorLog'
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
import { MenuItem } from 'ant-design-vue'
|
||||
import { computed, getCurrentInstance } from 'vue'
|
||||
|
||||
import Icon from '@/components/Icon'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { propTypes } from '@/utils/propTypes'
|
||||
|
||||
const props = defineProps({
|
||||
|
|
|
@ -4,13 +4,14 @@
|
|||
<img :class="`${prefixCls}__header`" :src="getUserInfo.avatar" />
|
||||
<span :class="`${prefixCls}__info hidden md:block`">
|
||||
<span :class="`${prefixCls}__name `" class="truncate">
|
||||
{{ getUserInfo.realName }}
|
||||
{{ getUserInfo.nickname }}
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<template #overlay>
|
||||
<Menu @click="handleMenuClick">
|
||||
<MenuItem key="profile" :text="t('layout.header.accountCenter')" icon="ion:person-outline" />
|
||||
<MenuItem key="doc" :text="t('layout.header.dropdownItemDoc')" icon="ion:document-text-outline" v-if="getShowDoc" />
|
||||
<MenuDivider v-if="getShowDoc" />
|
||||
<MenuItem v-if="getUseLockPage" key="lock" :text="t('layout.header.tooltipLock')" icon="ion:lock-closed-outline" />
|
||||
|
@ -20,43 +21,40 @@
|
|||
</Dropdown>
|
||||
<LockAction @register="register" />
|
||||
</template>
|
||||
<script lang="ts" setup name="UserDropdown">
|
||||
// components
|
||||
import { Dropdown, Menu } from 'ant-design-vue'
|
||||
<script setup lang="ts" name="UserDropdown">
|
||||
import { Dropdown, Menu, MenuDivider } from 'ant-design-vue'
|
||||
import type { MenuInfo } from 'ant-design-vue/lib/menu/src/interface'
|
||||
|
||||
import { computed } from 'vue'
|
||||
|
||||
import { DOC_URL } from '@/settings/siteSetting'
|
||||
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import { useHeaderSetting } from '@/hooks/setting/useHeaderSetting'
|
||||
import { useI18n } from '@/hooks/web/useI18n'
|
||||
import { useDesign } from '@/hooks/web/useDesign'
|
||||
import { useModal } from '@/components/Modal'
|
||||
|
||||
import headerImg from '@/assets/images/header.jpg'
|
||||
import { propTypes } from '@/utils/propTypes'
|
||||
import { openWindow } from '@/utils'
|
||||
|
||||
import { useGo } from '@/hooks/web/usePage'
|
||||
import { createAsyncComponent } from '@/utils/factory/createAsyncComponent'
|
||||
const go = useGo()
|
||||
|
||||
type MenuEvent = 'profile' | 'logout' | 'doc' | 'lock'
|
||||
|
||||
const MenuItem = createAsyncComponent(() => import('./DropMenuItem.vue'))
|
||||
const LockAction = createAsyncComponent(() => import('../lock/LockModal.vue'))
|
||||
const MenuDivider = Menu.Divider
|
||||
type MenuEvent = 'logout' | 'doc' | 'lock'
|
||||
|
||||
defineProps({
|
||||
theme: propTypes.oneOf(['dark', 'light'])
|
||||
})
|
||||
|
||||
const { prefixCls } = useDesign('header-user-dropdown')
|
||||
const { t } = useI18n()
|
||||
const { getShowDoc, getUseLockPage } = useHeaderSetting()
|
||||
const userStore = useUserStore()
|
||||
|
||||
const getUserInfo = computed(() => {
|
||||
const { realName = '', avatar, desc } = userStore.getUserInfo || {}
|
||||
return { realName, avatar: avatar || headerImg, desc }
|
||||
const { nickname = '', avatar } = userStore.getUserInfo.user || {}
|
||||
return { nickname, avatar: avatar || headerImg }
|
||||
})
|
||||
|
||||
const [register, { openModal }] = useModal()
|
||||
|
@ -75,8 +73,15 @@ function openDoc() {
|
|||
openWindow(DOC_URL)
|
||||
}
|
||||
|
||||
function openProfile() {
|
||||
go('/profile/index')
|
||||
}
|
||||
|
||||
function handleMenuClick(e: MenuInfo) {
|
||||
switch (e.key as MenuEvent) {
|
||||
case 'profile':
|
||||
openProfile()
|
||||
break
|
||||
case 'logout':
|
||||
handleLoginOut()
|
||||
break
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
</template>
|
||||
<script lang="ts" setup name="SettingButton">
|
||||
import SettingDrawer from './SettingDrawer'
|
||||
import Icon from '@/components/Icon'
|
||||
import { Icon } from '@/components/Icon'
|
||||
|
||||
import { useDrawer } from '@/components/Drawer'
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ const getWrapClass = computed(() => {
|
|||
|
||||
listenerRouteChange((route) => {
|
||||
const { name } = route
|
||||
if (name === REDIRECT_NAME || !route || !userStore.getToken) {
|
||||
if (name === REDIRECT_NAME || !route || !userStore.getAccessToken) {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -84,9 +84,9 @@ export class VAxios {
|
|||
|
||||
const axiosCanceler = new AxiosCanceler()
|
||||
|
||||
// Request interceptor configuration processing
|
||||
// 请求拦截器配置处理
|
||||
this.axiosInstance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
|
||||
// If cancel repeat request is turned on, then cancel repeat request is prohibited
|
||||
// 如果开启取消重复请求,则禁止取消重复请求
|
||||
// @ts-ignore
|
||||
const { ignoreCancelToken } = config.requestOptions
|
||||
const ignoreCancel = ignoreCancelToken !== undefined ? ignoreCancelToken : this.options.requestOptions?.ignoreCancelToken
|
||||
|
|
|
@ -26,9 +26,9 @@
|
|||
<div :class="`${prefixCls}-entry`" v-show="!showDate">
|
||||
<div :class="`${prefixCls}-entry-content`">
|
||||
<div :class="`${prefixCls}-entry__header enter-x`">
|
||||
<img :src="userinfo.avatar || headerImg" :class="`${prefixCls}-entry__header-img`" />
|
||||
<img :src="userinfo.user.avatar || headerImg" :class="`${prefixCls}-entry__header-img`" />
|
||||
<p :class="`${prefixCls}-entry__header-name`">
|
||||
{{ userinfo.realName }}
|
||||
{{ userinfo.user.nickname }}
|
||||
</p>
|
||||
</div>
|
||||
<InputPassword :placeholder="t('sys.lock.placeholder')" class="enter-x" v-model:value="password" />
|
||||
|
@ -58,7 +58,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
<script setup lang="ts">
|
||||
import { ref, computed } from 'vue'
|
||||
import { Input } from 'ant-design-vue'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
</template>
|
||||
<script setup lang="ts">
|
||||
import { List } from 'ant-design-vue'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { CollapseContainer } from '@/components/Container/index'
|
||||
import { accountBindList } from './data'
|
||||
import { getUserProfileApi } from '@/api/base/profile'
|
||||
|
|
Loading…
Reference in New Issue