From fc0646f5a7d8ff66470fc3228ac7cff24497d54c Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期五, 22 八月 2025 17:30:30 +0800 Subject: [PATCH] 添加蓉政通登陆接口 --- src/views/dingdingLogin.vue | 5 src/utils/auth.ts | 9 + src/utils/request.ts | 54 +++++----- src/router/index.ts | 6 + src/views/dingdingLogin copy.vue | 58 +++++----- src/views/system/oss/index.vue | 99 ++++++++++--------- src/api/system/user/index.ts | 8 + src/permission.ts | 4 8 files changed, 139 insertions(+), 104 deletions(-) diff --git a/src/api/system/user/index.ts b/src/api/system/user/index.ts index ccbe8d4..4bd033c 100644 --- a/src/api/system/user/index.ts +++ b/src/api/system/user/index.ts @@ -202,6 +202,14 @@ params: data }) } + +export const rztLogin=(data: any ): AxiosPromise<String> => { + return request({ + url: '/auth/rztLogin', + method: 'get', + params: data + }) +} export default { listUser, getUser, diff --git a/src/permission.ts b/src/permission.ts index 6c4934b..dc4da57 100644 --- a/src/permission.ts +++ b/src/permission.ts @@ -12,7 +12,7 @@ import { fa } from 'element-plus/es/locale'; NProgress.configure({ showSpinner: false }); -const whiteList = ['/login', '/register', '/social-callback']; +const whiteList = ['/login', '/register', '/social-callback', '/rzt_login']; router.beforeEach(async (to, from, next) => { NProgress.start(); @@ -22,7 +22,7 @@ to.meta.title && useSettingsStore().setTitle(to.meta.title as string); /* has token*/ - if (to.path === '/login') { + if (to.path === '/login' || to.path === '/rzt_login') { next({ path: '/' }); NProgress.done(); } else { diff --git a/src/router/index.ts b/src/router/index.ts index 3aa27d3..ea47731 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -44,10 +44,16 @@ }, { path: '/login', + // component: () => import('@/views/rztLogin.vue'), component: () => import('@/views/dingdingLogin.vue'), hidden: true }, { + path: '/rzt_login', + component: () => import('@/views/rztLogin.vue'), + hidden: true + }, + { path: '/dingdingLogin', component: () => import('@/views/dingdingLogin.vue'), hidden: true diff --git a/src/utils/auth.ts b/src/utils/auth.ts index db50ac9..5878c88 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,9 +1,18 @@ const TokenKey = 'Admin-Token'; +const PlatKey = 'Admin-Plat'; const tokenStorage = useStorage<null | string>(TokenKey, null); +const platStorage = useStorage<null | string>(PlatKey, null); export const getToken = () => tokenStorage.value; export const setToken = (access_token: string) => (tokenStorage.value = access_token); export const removeToken = () => (tokenStorage.value = null); + + +export const getPlat = () => platStorage.value; + +export const setPlat = (access_plat: string) => (platStorage.value = access_plat); + +export const removePlat = () => (platStorage.value = null); \ No newline at end of file diff --git a/src/utils/request.ts b/src/utils/request.ts index 79b82f4..4a40ea9 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,6 +1,6 @@ import axios, { AxiosResponse, InternalAxiosRequestConfig } from 'axios'; import { useUserStore } from '@/store/modules/user'; -import { getToken } from '@/utils/auth'; +import { getToken, getPlat } from '@/utils/auth'; import { tansParams, blobValidate } from '@/utils/ruoyi'; import cache from '@/plugins/cache'; import { HttpStatus } from '@/enums/RespEnum'; @@ -12,6 +12,7 @@ import { encrypt } from '@/utils/jsencrypt'; import router from "@/router"; import { ElLoading, ElMessage, ElNotification } from "element-plus"; +import { el } from 'element-plus/es/locale'; let downloadLoadingInstance: LoadingInstance; // 鏄惁鏄剧ず閲嶆柊鐧诲綍 @@ -115,7 +116,10 @@ await userStore.logout() console.log(code, 'code=============='); - await router.push({ path: '/login' }); + if (getPlat() === 'dingding') + await router.push({ path: '/login' }); + else + await router.push({ path: '/rzt_login' }); return } else if (code === HttpStatus.SERVER_ERROR) { console.log(msg); @@ -149,30 +153,30 @@ downloadLoadingInstance = ElLoading.service({ text: '姝e湪涓嬭浇鏁版嵁锛岃绋嶅��', background: 'rgba(0, 0, 0, 0.7)' }); // prettier-ignore return service.post(url, params, { - transformRequest: [ - (params: any) => { - return tansParams(params); - } - ], - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - responseType: 'blob' - }).then(async (resp: any) => { - const isLogin = blobValidate(resp); - if (isLogin) { - const blob = new Blob([resp]); - FileSaver.saveAs(blob, fileName); - } else { - const resText = await resp.data.text(); - const rspObj = JSON.parse(resText); - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']; - ElMessage.error(errMsg); + transformRequest: [ + (params: any) => { + return tansParams(params); } - downloadLoadingInstance.close(); - }).catch((r: any) => { - console.error(r); - ElMessage.error('涓嬭浇鏂囦欢鍑虹幇閿欒锛岃鑱旂郴绠$悊鍛橈紒'); - downloadLoadingInstance.close(); - }); + ], + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + responseType: 'blob' + }).then(async (resp: any) => { + const isLogin = blobValidate(resp); + if (isLogin) { + const blob = new Blob([resp]); + FileSaver.saveAs(blob, fileName); + } else { + const resText = await resp.data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']; + ElMessage.error(errMsg); + } + downloadLoadingInstance.close(); + }).catch((r: any) => { + console.error(r); + ElMessage.error('涓嬭浇鏂囦欢鍑虹幇閿欒锛岃鑱旂郴绠$悊鍛橈紒'); + downloadLoadingInstance.close(); + }); } // 瀵煎嚭 axios 瀹炰緥 export default service; diff --git a/src/views/dingdingLogin copy.vue b/src/views/dingdingLogin copy.vue index ac7b967..d0994a0 100644 --- a/src/views/dingdingLogin copy.vue +++ b/src/views/dingdingLogin copy.vue @@ -19,40 +19,40 @@ }; onMounted(() => { const route = useRoute(); - let code = route.query.code; + let code = route.query.code as string; if (code) { getUserDate(code); } else { // STEP3锛氬湪闇�瑕佺殑鏃跺�欙紝璋冪敤 window.DTFrameLogin 鏂规硶鏋勯�犵櫥褰曚簩缁寸爜锛屽苟澶勭悊鐧诲綍鎴愬姛鎴栧け璐ョ殑鍥炶皟銆� - window.DTFrameLogin( - { - id: 'self_defined_element', - width: 300, - height: 300 - }, - { - redirect_uri: encodeURIComponent('https://f060-183-223-248-101.ngrok-free.app/auth/dingdingLogin'), - client_id: 'dingl5dxahaj3uzfug66', - scope: 'openid', - response_type: 'code', - state: 'STATE', - prompt: 'consent' - }, - (loginResult: any) => { - console.log('loginResult:' + loginResult); + // window.DTFrameLogin( + // { + // id: 'self_defined_element', + // width: 300, + // height: 300 + // }, + // { + // redirect_uri: encodeURIComponent('https://f060-183-223-248-101.ngrok-free.app/auth/dingdingLogin'), + // client_id: 'dingl5dxahaj3uzfug66', + // scope: 'openid', + // response_type: 'code', + // state: 'STATE', + // prompt: 'consent' + // }, + // (loginResult: any) => { + // console.log('loginResult:' + loginResult); - debugger; - const { redirectUrl, authCode, state } = loginResult; - // 杩欓噷鍙互鐩存帴杩涜閲嶅畾鍚� - window.location.href = redirectUrl; - // 涔熷彲浠ュ湪涓嶈烦杞〉闈㈢殑鎯呭喌涓嬶紝浣跨敤code杩涜鎺堟潈 - console.log(authCode); - }, - (errorMsg: any) => { - // 杩欓噷涓�鑸渶瑕佸睍绀虹櫥褰曞け璐ョ殑鍏蜂綋鍘熷洜,鍙互浣跨敤toast绛夎交鎻愮ず - console.error(`errorMsg of errorCbk: ${errorMsg}`); - } - ); + // debugger; + // const { redirectUrl, authCode, state } = loginResult; + // // 杩欓噷鍙互鐩存帴杩涜閲嶅畾鍚� + // window.location.href = redirectUrl; + // // 涔熷彲浠ュ湪涓嶈烦杞〉闈㈢殑鎯呭喌涓嬶紝浣跨敤code杩涜鎺堟潈 + // console.log(authCode); + // }, + // (errorMsg: any) => { + // // 杩欓噷涓�鑸渶瑕佸睍绀虹櫥褰曞け璐ョ殑鍏蜂綋鍘熷洜,鍙互浣跨敤toast绛夎交鎻愮ず + // console.error(`errorMsg of errorCbk: ${errorMsg}`); + // } + // ); } }); </script> diff --git a/src/views/dingdingLogin.vue b/src/views/dingdingLogin.vue index 6c39461..96ca002 100644 --- a/src/views/dingdingLogin.vue +++ b/src/views/dingdingLogin.vue @@ -9,7 +9,7 @@ <script setup name="Oss" lang="ts"> import { useRoute } from 'vue-router'; import { dingdingLogin } from '@/api/system/user'; -import { setToken } from '@/utils/auth'; +import { setToken,setPlat } from '@/utils/auth'; import { ElMessage } from 'element-plus'; import { any } from 'vue-types'; @@ -39,8 +39,9 @@ }); }; onMounted(() => { + setPlat('dingding'); const router = useRoute(); - let code = router.query.code; + let code = router.query.code ; let authCode = router.query.authCode; if (code) { getUserDate(authCode, code); diff --git a/src/views/system/oss/index.vue b/src/views/system/oss/index.vue index e4604ce..d787b9c 100644 --- a/src/views/system/oss/index.vue +++ b/src/views/system/oss/index.vue @@ -1,12 +1,14 @@ <template> <div class="p-2"> - <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> + <transition :enter-active-class="proxy?.animate.searchAnimate.enter" + :leave-active-class="proxy?.animate.searchAnimate.leave"> <div class="mb-[10px]" v-show="showSearch"> <el-card shadow="hover"> <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px"> <el-form-item label="鍘熷悕" prop="originalName"> - <el-input v-model="queryParams.originalName" placeholder="璇疯緭鍏ュ師鍚�" clearable style="width: 200px" @keyup.enter="handleQuery" /> + <el-input v-model="queryParams.originalName" placeholder="璇疯緭鍏ュ師鍚�" clearable style="width: 200px" + @keyup.enter="handleQuery" /> </el-form-item> <el-form-item> @@ -22,7 +24,7 @@ <template #header> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> -<!-- <el-button type="primary" plain icon="Upload" @click="handleFile" v-if="isContains(useUserStore().permissions, 'system:oss:upload')">涓婁紶鏂囦欢</el-button>--> + <!-- <el-button type="primary" plain icon="Upload" @click="handleFile" v-if="isContains(useUserStore().permissions, 'system:oss:upload')">涓婁紶鏂囦欢</el-button>--> </el-col> <!-- <el-col :span="1.5">--> @@ -33,40 +35,39 @@ <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> </el-row> </template> - <el-table - v-loading="loading" - :data="ossList" - @selection-change="handleSelectionChange" - :header-cell-class-name="handleHeaderClass" - @header-click="handleHeaderCLick" - v-if="showTable" - > - <el-table-column type="index" /> + <el-table v-loading="loading" :data="ossList" @selection-change="handleSelectionChange" + :header-cell-class-name="handleHeaderClass" @header-click="handleHeaderCLick" v-if="showTable"> + <el-table-column type="index" /> <!-- <el-table-column type="selection" width="55" align="center" />--> <el-table-column label="鍘熷悕" align="center" prop="originalName" /> <el-table-column label="涓婁紶鏃堕棿" align="center" prop="createTime" /> <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-tooltip content="鏌ョ湅鎻愬彇鐮�" placement="top"> - <el-button link type="primary" icon="Search" @click="handleCode(scope.row)" v-if="isContains(useUserStore().permissions, 'system:oss:view')"></el-button> + <el-button link type="primary" icon="Search" @click="handleCode(scope.row)" + v-if="isContains(useUserStore().permissions, 'system:oss:view')"></el-button> </el-tooltip> <el-tooltip content="涓嬭浇" placement="top"> - <el-button link type="primary" icon="Download" @click="handleDownload(scope.row)" v-if="isContains(useUserStore().permissions, 'system:oss:download')"></el-button> + <el-button link type="primary" icon="Download" @click="handleDownload(scope.row)" + v-if="isContains(useUserStore().permissions, 'system:oss:download')"></el-button> </el-tooltip> <el-tooltip content="鍒犻櫎" placement="top"> - <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-if="isContains(useUserStore().permissions, 'system:oss:remove')"></el-button> + <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" + v-if="isContains(useUserStore().permissions, 'system:oss:remove')"></el-button> </el-tooltip> </template> </el-table-column> </el-table> - <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> + <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" + v-model:limit="queryParams.pageSize" @pagination="getList" /> </el-card> <!-- 娣诲姞鎴栦慨鏀筄SS瀵硅薄瀛樺偍瀵硅瘽妗� --> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-form ref="ossFormRef" :model="form" :rules="rules" label-width="80px"> <el-form-item label="鏂囦欢鍚�"> - <fileUpload ref="childFile" @closePopup="getList();lookPawsd($event)" @openPopup="lookPawsd($event)" v-model="form.file" v-if="type === 0" /> + <fileUpload ref="childFile" @closePopup="getList(); lookPawsd($event)" @openPopup="lookPawsd($event)" + v-model="form.file" v-if="type === 0" /> <imageUpload v-model="form.file" v-if="type === 1" /> <video-upload v-model="form.file" v-if="type === 2" /> </el-form-item> @@ -81,16 +82,20 @@ <el-dialog :title="titleDownload" v-model="visibleCode" width="500px" append-to-body> <div style="width: 100%;text-align: center"> <p style="color: red; font-size: 20px">鎻愬彇鐮佸皢浼氬湪24灏忔椂鍚庡け鏁堣灏藉揩涓嬭浇!</p> - <span v-show="titleDownload=='鏌ョ湅鎻愬彇鐮�'" style="font-size: 80px;">{{testtxt}}</span> + <span v-show="titleDownload == '鏌ョ湅鎻愬彇鐮�'" style="font-size: 80px;">{{ testtxt }}</span> </div> - <el-input style="margin: 10px 0" ref="inputRef" :style="inputSty" v-show="titleDownload=='杈撳叆鎻愬彇鐮�'" v-model="pasTxt" v-if="isContains(useUserStore().permissions, 'system:oss:download')" placeholder="璇疯緭鍏ユ枃浠舵彁鍙栫爜"></el-input> - <el-input style="margin: 10px 0" ref="inputRef" :style="inputSty" v-show="titleDownload=='璇疯緭鍏ユ彁鍙栫爜'" v-model="pasTxt" placeholder="璇疯緭鍏ユ枃浠舵彁鍙栫爜"></el-input> + <el-input style="margin: 10px 0" ref="inputRef" :style="inputSty" v-show="titleDownload == '杈撳叆鎻愬彇鐮�'" v-model="pasTxt" + v-if="isContains(useUserStore().permissions, 'system:oss:download')" placeholder="璇疯緭鍏ユ枃浠舵彁鍙栫爜"></el-input> + <el-input style="margin: 10px 0" ref="inputRef" :style="inputSty" v-show="titleDownload == '璇疯緭鍏ユ彁鍙栫爜'" + v-model="pasTxt" placeholder="璇疯緭鍏ユ枃浠舵彁鍙栫爜"></el-input> <!-- <el-button link type="primary" v-show="titleDownload=='杈撳叆鎻愬彇鐮�'" icon="Download" @click="handleDownloadFile()" v-if="isContains(useUserStore().permissions, 'system:oss:download')">涓嬭浇</el-button>--> <!-- <el-button link type="primary" v-show="titleDownload=='璇疯緭鍏ユ彁鍙栫爜'" icon="Delete" @click="delFile()" >鍒犻櫎</el-button>--> <template #footer> <div class="dialog-footer"> - <el-button link type="primary" v-show="titleDownload=='杈撳叆鎻愬彇鐮�'" icon="Download" @click="handleDownloadFile()" v-if="isContains(useUserStore().permissions, 'system:oss:download')">涓嬭浇</el-button> - <el-button link type="primary" v-show="titleDownload=='璇疯緭鍏ユ彁鍙栫爜'" icon="Delete" @click="delFile()" >鍒犻櫎</el-button> + <el-button link type="primary" v-show="titleDownload == '杈撳叆鎻愬彇鐮�'" icon="Download" @click="handleDownloadFile()" + v-if="isContains(useUserStore().permissions, 'system:oss:download')">涓嬭浇</el-button> + <el-button link type="primary" v-show="titleDownload == '璇疯緭鍏ユ彁鍙栫爜'" icon="Delete" + @click="delFile()">鍒犻櫎</el-button> <!-- <el-button type="primary" @click="visibleCode = false">纭� 瀹�</el-button>--> <el-button @click="visibleCode = false">鍙� 娑�</el-button> </div> @@ -104,7 +109,7 @@ import { OssForm, OssQuery, OssVO } from "@/api/system/oss/types"; import { to as tos } from "await-to-js"; import useUserStore from "@/store/modules/user"; -import { getToken, setToken } from "@/utils/auth"; +import { getToken, setToken, getPlat } from "@/utils/auth"; import usePermissionStore from "@/store/modules/permission"; import { isHttp } from "@/utils/validate"; import router from '@/router'; @@ -132,7 +137,7 @@ const titleDownload = ref<any>() const downIds = ref<any>() const inputRef = ref<any>() -const inputSty =ref<any>() +const inputSty = ref<any>() const currentIp = ref('') const childFile = ref<any>() const figType = ref<any>() @@ -279,7 +284,7 @@ dialog.visible = true; dialog.title = "涓婁紶鍥剧墖"; } -const handleVideo = ()=>{ +const handleVideo = () => { reset(); type.value = 2; dialog.visible = true; @@ -324,7 +329,7 @@ const handleDownload = (row: OssVO) => { titleDownload.value = '杈撳叆鎻愬彇鐮�' pasTxt.value = '' - inputSty.value ={ + inputSty.value = { border: '1px solid blue', borderRadius: '5px' } @@ -332,25 +337,25 @@ downIds.value = ref(row.ossId) console.log(toRaw(downIds.value.value)); } -const delFile=async () => { - let oss = figType.value+'/'+ pasTxt.value; +const delFile = async () => { + let oss = figType.value + '/' + pasTxt.value; await delOss(oss).finally(() => loading.value = false); await getList(); proxy?.$modal.msgSuccess("鍒犻櫎鎴愬姛"); visibleCode.value = false } -const handleDownloadFile = ()=>{ +const handleDownloadFile = () => { console.log(downIds.value); - if (pasTxt.value){ - proxy?.$download.ossDown(downIds.value.value,pasTxt.value) - }else { + if (pasTxt.value) { + proxy?.$download.ossDown(downIds.value.value, pasTxt.value) + } else { console.log(inputRef.value); - inputSty.value ={ + inputSty.value = { border: '1px solid red' } // inputRef.value.style.border = '1px solid red' } - visibleCode.value=false + visibleCode.value = false } /** 鐢ㄦ埛鐘舵�佷慨鏀� */ /** 鍒犻櫎鎸夐挳鎿嶄綔 */ @@ -358,7 +363,7 @@ let ossIds = row?.ossId || ids.value; titleDownload.value = '璇疯緭鍏ユ彁鍙栫爜' pasTxt.value = '' - inputSty.value ={ + inputSty.value = { border: '1px solid blue', borderRadius: '5px' } @@ -374,7 +379,7 @@ } const refreshPage = async () => { const accessRoutes = await usePermissionStore().generateRoutes(); - console.log(accessRoutes,'accessRoutes',router); + console.log(accessRoutes, 'accessRoutes', router); // 鏍规嵁roles鏉冮檺鐢熸垚鍙闂殑璺敱琛� accessRoutes.forEach((route) => { if (!isHttp(route.path)) { @@ -391,16 +396,16 @@ console.log(val); const res = await createUser(val) console.log(res); - if (res.code==200){ + if (res.code == 200) { const data = res.data; setToken(data.access_token); const [err] = await tos(useUserStore().getInfo()); - console.log('useUserStore', useUserStore,err); + console.log('useUserStore', useUserStore, err); await getList() // await refreshPage() - console.log('permissions', useUserStore().permissions,'system:oss:upload'); + console.log('permissions', useUserStore().permissions, 'system:oss:upload'); // token.value = data.access_token; } } @@ -411,8 +416,8 @@ // showValue.value = false; // } // }); -onBeforeMount( async () => { - console.log('绗竴',useUserStore().permissions); +onBeforeMount(async () => { + console.log('绗竴', useUserStore().permissions); // try { // // 浣跨敤fetch API鑾峰彇褰撳墠IP鍦板潃 // await fetch('https://api.ipify.org/?format=json') @@ -433,16 +438,18 @@ }) onMounted(async () => { - console.log('绗簩aaaaaaa',useUserStore().permissions); + console.log('绗簩aaaaaaa', useUserStore().permissions); // 绛夊緟 useUserStore() 鏂规硶鐨� getInfo() 鏂规硶杩斿洖缁撴灉骞惰祴鍊肩粰 err 鍙橀噺 // const [err] = await tos(useUserStore().getInfo()); - if (getToken()){ + if (getToken()) { console.log('鏈塼oken'); await getList(); - }else { + } else { console.log('鏃爐oken'); - - router.push('/login') + if (getPlat() == 'dingding') + router.push('/login') + else + router.push('/rzt_login') } // 璋冪敤 getList() 鏂规硶 -- Gitblit v1.8.0