From eb8f647c5e39fe25f638d401e17816ef3233b261 Mon Sep 17 00:00:00 2001
From: jmal <zhushilun084@gmail.com>
Date: Thu, 6 Jun 2024 13:41:22 +0800
Subject: [PATCH] =?UTF-8?q?perf:=20=E7=BE=8E=E5=8C=96=E5=88=86=E4=BA=AB?=
 =?UTF-8?q?=E9=93=BE=E6=8E=A5URL?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/App.vue                          |  2 +-
 src/components/ShareDialog/index.vue | 13 ++++++++-----
 src/permission.js                    | 13 +++++++++++--
 src/router/index.js                  | 15 ++-------------
 src/views/public/share/shareList.vue | 27 +++++++++++++++++++--------
 5 files changed, 41 insertions(+), 29 deletions(-)

diff --git a/src/App.vue b/src/App.vue
index ac2e9c08..e9d41229 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -6,7 +6,7 @@
 
 <script>
 const pcList = ['/', '/s']
-const mobileList = ['/_m', '/_m/', '/s_m', '/s_m/']
+const mobileList = ['/_m', '/_m/']
 export default {
   name: 'App',
   components: {},
diff --git a/src/components/ShareDialog/index.vue b/src/components/ShareDialog/index.vue
index 7820ac3c..988cab07 100644
--- a/src/components/ShareDialog/index.vue
+++ b/src/components/ShareDialog/index.vue
@@ -264,7 +264,7 @@ export default {
     showSharedPage(shareObject) {
       this.shareOptionConfig.shared = true
       this.shareOptionConfig.linkLabel = '分享链接'
-      this.setShareLink(this.getShareLink(shareObject.shareId))
+      this.setShareLink(this.getShareLink(shareObject.shareId, shareObject.shortId))
       this.shareOption.isPrivacy = shareObject.isPrivacy
       this.shareOption.operationPermissionList = shareObject.operationPermissionList || []
       if (shareObject.expireDate) {
@@ -339,8 +339,11 @@ export default {
     timeFormat(time) {
       return moment(time).format("yyyy-MM-DD HH:mm")
     },
-    getShareLink(shareId) {
-      return window.location.origin + '/s?s=' + shareId
+    getShareLink(shareId, shortId) {
+      if (!shortId) {
+        shortId = shareId
+      }
+      return `${window.location.origin}/s/${shortId}`
     },
     createShare(update) {
       this.generateShareLinkLoading = true
@@ -368,8 +371,8 @@ export default {
         operationPermissionList: this.shareOption.operationPermissionList
       }).then(res => {
         if (res.data) {
-          let {shareId, extractionCode, operationPermissionList} = res.data
-          this.setShareLink(this.getShareLink(shareId))
+          let {shareId, shortId, extractionCode, operationPermissionList} = res.data
+          this.setShareLink(this.getShareLink(shareId, shortId))
           this.shareId = shareId
           this.generateShareLinkLoading = false
           this.shareOptionConfig.shared = true
diff --git a/src/permission.js b/src/permission.js
index 964681b7..1a0a3e82 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -7,7 +7,7 @@ import getPageTitle from '@/utils/get-page-title'
 
 NProgress.configure({ showSpinner: false }) // NProgress配置
 
-const whiteList = ['/login','/s','/s/','/s_m','/s_m/'] // 白名单
+const whiteList = ['/login','/s','/s/'] // 白名单
 
 router.beforeEach(async(to, from, next) => {
   // 开始进度条
@@ -51,7 +51,7 @@ router.beforeEach(async(to, from, next) => {
     }
   } else {
     // 没有登录的情况
-    if (whiteList.indexOf(to.path) !== -1) {
+    if (hasWhiteList(to.path)) {
       //  没有token但是在白名单中,直接进入
       next()
     } else {
@@ -65,6 +65,15 @@ router.beforeEach(async(to, from, next) => {
   }
 })
 
+function hasWhiteList(path) {
+  for (let i = 0; i < whiteList.length; i++) {
+    if (path.indexOf(whiteList[i]) !== -1) {
+      return true
+    }
+  }
+  return false
+}
+
 function setMenuList(next, to){
   if(store.getters.menuList.length === 0){
     store.dispatch('user/setMenuList').then((res) => {
diff --git a/src/router/index.js b/src/router/index.js
index 9b07fa8b..43f4eed1 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -47,12 +47,12 @@ export const constantRoutes = [
     hidden: true
   },
   {
-    path: '/s',
+    path: '/s/:id',
     component: Layout,
     children: [
       {
         path: '',
-        name: 's',
+        name: 'share',
         component: () => import('@/views/public/share/shareList'),
       }
     ]
@@ -85,17 +85,6 @@ export const dynamicRouters = [
       meta: { title: '文件传输' }
     }]
   },
-  {
-    path: '/s_m',
-    component: Layout,
-    children: [
-      {
-        path: '',
-        name: 's_m',
-        component: () => import('@/views/public/share/shareList'),
-      }
-    ]
-  },
   {
     path: '/tag',
     component: Layout,
diff --git a/src/views/public/share/shareList.vue b/src/views/public/share/shareList.vue
index 02200837..f708f7c0 100644
--- a/src/views/public/share/shareList.vue
+++ b/src/views/public/share/shareList.vue
@@ -223,7 +223,7 @@
         </van-grid>
       </van-checkbox-group>
     </div>
-    <div v-if="linkFailed && !showShareCode" class="share-header">
+    <div v-if="linkFailed && !showShareCode" class="share-header-prompt">
       <p v-if="prompt !== ''">温馨提示:</p>
       <p>{{ prompt }}</p>
     </div>
@@ -401,7 +401,8 @@ export default {
       shareLink: '',
       shareFileName: '',
       generateShareLinkLoading: true,
-      shareId: this.$route.query.s,
+      shareId: '',
+      shortId: this.$route.params.id,
       currentDirName: '',
       linkFailed: true,
       textPreviewVisible: false,
@@ -584,7 +585,7 @@ export default {
       if (index === 0) {
         this.pathList.splice(this.pathList.findIndex((v, i) => i === index + 1), this.pathList.length - (index + 1))
         this.getFileList(null, true);
-        this.$router.push(`/s?s=${this.shareId}&vmode=${this.vmode}`)
+        this.pushRouter()
       }
       if (item && item.fileId) {
         this.accessShareOpenDir(item.fileId)
@@ -598,8 +599,7 @@ export default {
       if (this.grid) {
         this.vmode = 'grid'
       }
-      let f = ''
-      this.$router.push(`/s?s=${this.shareId}&vmode=${this.vmode}`)
+      this.pushRouter()
     },
     accessShareOpenDir(fileId) {
       this.tableLoading = true
@@ -627,7 +627,7 @@ export default {
     getFileList(pagination, overload) {
       this.tableLoading = true
       api.accessShare({
-        share: this.shareId,
+        share: this.shortId,
         pageIndex: this.pagination.pageIndex,
         pageSize: this.pagination.pageSize,
         showFolderSize: true
@@ -689,10 +689,11 @@ export default {
       })
     },
     getSharer() {
-      api.getSharer({shareId: this.shareId}).then(res => {
+      api.getSharer({shareId: this.shortId}).then(res => {
         this.sharer = res.data
         this.setLoginTitle()
         if (res.data) {
+          this.shareId = res.data.shareId
           this.sharerAvatarUrl = window.location.origin + this.imageUrl + res.data.avatar
           if (this.sharer.netdiskName) {
             this.netdiskName = this.sharer.netdiskName
@@ -1046,6 +1047,9 @@ export default {
         clipboard.destroy()
       })
     },
+    pushRouter() {
+      this.$router.push(`/s/${this.shortId}/?vmode=${this.vmode}`)
+    },
     // 点击文件或文件夹
     fileClick(row) {
       window.shareId = this.shareId
@@ -1057,7 +1061,7 @@ export default {
         item['index'] = this.pathList.length
         this.pathList.push(item)
         this.pagination.pageIndex = 1
-        this.$router.push(`?s=${this.shareId}&vmode=${this.vmode}`)
+        this.pushRouter()
         this.accessShareOpenDir(row.id)
       } else {
         if (row.contentType.startsWith('image')) {
@@ -1133,6 +1137,13 @@ export default {
   padding: 0 15px;
 }
 
+.share-header-prompt {
+  text-align: center;
+  font-size: 18px;
+  font-weight: 500;
+  margin-bottom: 10px;
+}
+
 .share-header {
   text-align: center;
   font-size: 18px;