Commit af2b1eb25f17bace718ca0de3db8a87c0b5c8ac5

Authored by xingyu
1 parent 3b441fd7

fix: bugs

yudao-ui-admin-vue3/src/components/DictTag/src/DictTag.vue
... ... @@ -8,7 +8,7 @@ const props = defineProps({
8 8 required: true
9 9 },
10 10 value: {
11   - type: [String, Number] as PropType<string | number>,
  11 + type: [String, Number, Boolean] as PropType<string | number | boolean>,
12 12 required: true
13 13 }
14 14 })
... ...
yudao-ui-admin-vue3/src/router/index.ts
... ... @@ -11,6 +11,7 @@ import { useDictStoreWithOut } from &#39;@/store/modules/dict&#39;
11 11 import { useUserStoreWithOut } from '@/store/modules/user'
12 12 import { listSimpleDictDataApi } from '@/api/system/dict/dict.data'
13 13 import { isRelogin } from '@/config/axios'
  14 +import { getInfoApi } from '@/api/login'
14 15  
15 16 const { start, done } = useNProgress()
16 17  
... ... @@ -52,6 +53,8 @@ router.beforeEach(async (to, from, next) =&gt; {
52 53 }
53 54 if (userStore.getRoles.length === 0) {
54 55 isRelogin.show = true
  56 + const res = await getInfoApi()
  57 + await userStore.setUserInfoAction(res)
55 58 isRelogin.show = false
56 59 // 后端过滤菜单
57 60 await permissionStore.generateRoutes()
... ...
yudao-ui-admin-vue3/src/store/modules/user.ts
... ... @@ -27,9 +27,6 @@ export const useUserStore = defineStore({
27 27 nickname: ''
28 28 }
29 29 }),
30   - persist: {
31   - enabled: true
32   - },
33 30 getters: {
34 31 getPermissions(): string[] {
35 32 return this.permissions
... ...
yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue
... ... @@ -21,19 +21,17 @@ import {
21 21 getPassword,
22 22 getTenantName
23 23 } from '@/utils/auth'
24   -import { useUserStore } from '@/store/modules/user'
25 24 import { usePermissionStore } from '@/store/modules/permission'
26 25 import { useRouter } from 'vue-router'
27 26 import { useI18n } from '@/hooks/web/useI18n'
28 27 import { required } from '@/utils/formRules'
29 28 import { Icon } from '@/components/Icon'
30 29 import { LoginStateEnum, useLoginState, useFormValid } from './useLogin'
31   -import type { RouteLocationNormalizedLoaded, RouteRecordRaw } from 'vue-router'
  30 +import type { RouteLocationNormalizedLoaded } from 'vue-router'
32 31 import { Verify } from '@/components/Verifition'
33 32  
34   -const { currentRoute, addRoute, push } = useRouter()
  33 +const { currentRoute, push } = useRouter()
35 34 const permissionStore = usePermissionStore()
36   -const userStore = useUserStore()
37 35 const formLogin = ref()
38 36 const { validForm } = useFormValid(formLogin)
39 37 const { setLoginState, getLoginState } = useLoginState()
... ... @@ -111,23 +109,11 @@ const handleLogin = async (params) =&gt; {
111 109 loginData.loginForm.captchaVerification = params.captchaVerification
112 110 const res = await LoginApi.loginApi(loginData.loginForm)
113 111 setToken(res)
114   - const userInfo = await LoginApi.getInfoApi()
115   - await userStore.setUserInfoAction(userInfo)
116   - await getRoutes()
117   - loginLoading.value = false
118   -}
119   -
120   -// 获取路由
121   -const getRoutes = async () => {
122   - // 后端过滤菜单
123   - await permissionStore.generateRoutes()
124   - permissionStore.getAddRouters.forEach((route) => {
125   - addRoute(route as RouteRecordRaw) // 动态添加可访问路由表
126   - })
127 112 if (!redirect.value) {
128 113 redirect.value = '/'
129 114 }
130 115 push({ path: redirect.value || permissionStore.addRouters[0].path })
  116 + loginLoading.value = false
131 117 }
132 118  
133 119 // 社交登录
... ...
yudao-ui-admin-vue3/src/views/Login/components/MobileForm.vue
... ... @@ -5,13 +5,12 @@ import LoginFormTitle from &#39;./LoginFormTitle.vue&#39;
5 5 import { ElForm, ElFormItem, ElInput, ElRow, ElCol, ElMessage } from 'element-plus'
6 6 import { useI18n } from '@/hooks/web/useI18n'
7 7 import { required } from '@/utils/formRules'
8   -import { getTenantIdByNameApi, sendSmsCodeApi, smsLoginApi, getInfoApi } from '@/api/login'
  8 +import { getTenantIdByNameApi, sendSmsCodeApi, smsLoginApi } from '@/api/login'
9 9 import { useCache } from '@/hooks/web/useCache'
10 10 import { usePermissionStore } from '@/store/modules/permission'
11 11 import { useRouter } from 'vue-router'
12 12 import { setToken } from '@/utils/auth'
13   -import { useUserStore } from '@/store/modules/user'
14   -import type { RouteLocationNormalizedLoaded, RouteRecordRaw } from 'vue-router'
  13 +import type { RouteLocationNormalizedLoaded } from 'vue-router'
15 14 import { useLoginState, LoginStateEnum, useFormValid } from './useLogin'
16 15 const formSmsLogin = ref()
17 16 const { validForm } = useFormValid(formSmsLogin)
... ... @@ -21,9 +20,8 @@ const iconHouse = useIcon({ icon: &#39;ep:house&#39; })
21 20 const iconCellphone = useIcon({ icon: 'ep:cellphone' })
22 21 const iconCircleCheck = useIcon({ icon: 'ep:circle-check' })
23 22 const { wsCache } = useCache()
24   -const userStore = useUserStore()
25 23 const permissionStore = usePermissionStore()
26   -const { currentRoute, addRoute, push } = useRouter()
  24 +const { currentRoute, push } = useRouter()
27 25 const loginLoading = ref(false)
28 26 const { t } = useI18n()
29 27  
... ... @@ -102,24 +100,16 @@ const signIn = async () =&gt; {
102 100 await smsLoginApi(smsVO.loginSms)
103 101 .then(async (res) => {
104 102 setToken(res?.token)
105   - const userInfo = await getInfoApi()
106   - await userStore.setUserInfoAction(userInfo)
107   - getRoutes()
  103 + if (!redirect.value) {
  104 + redirect.value = '/'
  105 + }
  106 + push({ path: redirect.value || permissionStore.addRouters[0].path })
108 107 })
109 108 .catch(() => {})
110 109 .finally(() => {
111 110 loginLoading.value = false
112 111 })
113 112 }
114   -// 获取路由
115   -const getRoutes = async () => {
116   - // 后端过滤菜单
117   - await permissionStore.generateRoutes()
118   - permissionStore.getAddRouters.forEach((route) => {
119   - addRoute(route as RouteRecordRaw) // 动态添加可访问路由表
120   - })
121   - push({ path: redirect.value || permissionStore.addRouters[0].path })
122   -}
123 113 </script>
124 114 <template>
125 115 <el-form
... ...
yudao-ui-admin-vue3/src/views/infra/codegen/components/Preview.vue
... ... @@ -135,7 +135,7 @@ defineExpose({
135 135 :name="item.filePath"
136 136 :key="item.filePath"
137 137 >
138   - <el-button text style="float: right" @click="copy(item.code)">
  138 + <el-button link style="float: right" @click="copy(item.code)">
139 139 {{ t('common.copy') }}
140 140 </el-button>
141 141 <pre>{{ item.code }}</pre>
... ...
yudao-ui-admin-vue3/src/views/infra/fileList/index.vue
1 1 <script setup lang="ts">
2   -import { ref } from 'vue'
  2 +import { ref, unref } from 'vue'
3 3 import dayjs from 'dayjs'
4 4 import { ElMessage, ElUpload, UploadInstance, UploadRawFile, ElImage } from 'element-plus'
5 5 import { useTable } from '@/hooks/web/useTable'
... ... @@ -8,6 +8,7 @@ import type { FileVO } from &#39;@/api/infra/fileList/types&#39;
8 8 import { allSchemas } from './fileList.data'
9 9 import * as FileApi from '@/api/infra/fileList'
10 10 import { getAccessToken, getTenantId } from '@/utils/auth'
  11 +import { useClipboard } from '@vueuse/core'
11 12  
12 13 const { t } = useI18n() // 国际化
13 14  
... ... @@ -76,6 +77,18 @@ const handleDetail = (row: FileVO) =&gt; {
76 77 dialogTitle.value = t('action.detail')
77 78 dialogVisible.value = true
78 79 }
  80 +// ========== 复制相关 ==========
  81 +const handleCopy = async (text: string) => {
  82 + const { copy, copied, isSupported } = useClipboard({ source: text })
  83 + if (!isSupported) {
  84 + ElMessage.error(t('common.copyError'))
  85 + } else {
  86 + await copy()
  87 + if (unref(copied)) {
  88 + ElMessage.success(t('common.copySuccess'))
  89 + }
  90 + }
  91 +}
79 92 // ========== 初始化 ==========
80 93 getList()
81 94 </script>
... ... @@ -117,6 +130,9 @@ getList()
117 130 <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
118 131 </template>
119 132 <template #action="{ row }">
  133 + <el-button link type="primary" @click="handleCopy(row.url)">
  134 + <Icon icon="ep:copy-document" class="mr-1px" /> {{ t('common.copy') }}
  135 + </el-button>
120 136 <el-button link type="primary" @click="handleDetail(row)">
121 137 <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
122 138 </el-button>
... ...