Browse Source

feat: router

main
xingyuv 2 years ago
parent
commit
e89fe32f3a
  1. 5
      src/api/system/sms/smsTemplate/index.ts
  2. 2
      src/components/Application/src/search/AppSearchModal.vue
  3. 2
      src/components/Button/src/BasicButton.vue
  4. 2
      src/components/ContextMenu/src/ContextMenu.vue
  5. 2
      src/components/Cropper/src/CropperAvatar.vue
  6. 2
      src/components/Menu/src/components/MenuItemContent.vue
  7. 2
      src/components/Scrollbar/src/Scrollbar.vue
  8. 2
      src/components/SimpleMenu/src/SimpleSubMenu.vue
  9. 2
      src/components/SimpleMenu/src/components/SubMenuItem.vue
  10. 2
      src/components/Table/src/components/TableAction.vue
  11. 9
      src/layouts/default/header/components/Breadcrumb.vue
  12. 2
      src/layouts/default/header/components/ErrorAction.vue
  13. 2
      src/layouts/default/header/components/user-dropdown/DropMenuItem.vue
  14. 31
      src/layouts/default/header/components/user-dropdown/index.vue
  15. 2
      src/layouts/default/setting/index.vue
  16. 2
      src/layouts/default/tabs/index.vue
  17. 4
      src/utils/http/axios/Axios.ts
  18. 6
      src/views/base/lock/LockPage.vue
  19. 1
      src/views/base/profile/AccountBind.vue

5
src/api/system/sms/smsTemplate/index.ts

@ -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 })
}

2
src/components/Application/src/search/AppSearchModal.vue

@ -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'

2
src/components/Button/src/BasicButton.vue

@ -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
src/components/ContextMenu/src/ContextMenu.vue

@ -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'

2
src/components/Cropper/src/CropperAvatar.vue

@ -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'])

2
src/components/Menu/src/components/MenuItemContent.vue

@ -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'

2
src/components/Scrollbar/src/Scrollbar.vue

@ -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">

2
src/components/SimpleMenu/src/SimpleSubMenu.vue

@ -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'

2
src/components/SimpleMenu/src/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'

2
src/components/Table/src/components/TableAction.vue

@ -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'

9
src/layouts/default/header/components/Breadcrumb.vue

@ -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')

2
src/layouts/default/header/components/ErrorAction.vue

@ -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'

2
src/layouts/default/header/components/user-dropdown/DropMenuItem.vue

@ -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({

31
src/layouts/default/header/components/user-dropdown/index.vue

@ -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

2
src/layouts/default/setting/index.vue

@ -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'

2
src/layouts/default/tabs/index.vue

@ -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
}

4
src/utils/http/axios/Axios.ts

@ -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

6
src/views/base/lock/LockPage.vue

@ -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'

1
src/views/base/profile/AccountBind.vue

@ -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'