From f3e793d0cb0810401545820c41b18df16db7f6fa Mon Sep 17 00:00:00 2001
From: wanglizhong <wlz>
Date: 星期四, 01 五月 2025 19:21:06 +0800
Subject: [PATCH] fix:ui 层面增加匿名访问

---
 ruoyi-ui/src/permission.js                                                            |    6 
 ruoyi-ui/src/utils/request.js                                                         |    5 
 ruoyi-ui/src/views/anonymous/test.vue                                                 |  211 ++++++++++++++++++++++++++++++++++++++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysClientAppController.java |    1 
 ruoyi-ui/src/api/anonymous/index.js                                                   |   18 +++
 ruoyi-ui/src/router/index.js                                                          |   12 +
 6 files changed, 247 insertions(+), 6 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysClientAppController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysClientAppController.java
index 79c319b..672944d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysClientAppController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysClientAppController.java
@@ -125,6 +125,7 @@
         String sign = SecurityUtils.md5(signStr);
         
         AjaxResult ajax = AjaxResult.success();
+        ajax.put("use","md5(appId+timestamp+securityKey)");
         ajax.put("appId", appId);
         ajax.put("timestamp", String.valueOf(timestamp));
         ajax.put("sign", sign);
diff --git a/ruoyi-ui/src/api/anonymous/index.js b/ruoyi-ui/src/api/anonymous/index.js
new file mode 100644
index 0000000..63fd42b
--- /dev/null
+++ b/ruoyi-ui/src/api/anonymous/index.js
@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 鐢熸垚绛惧悕
+export function generateSign(appId) {
+  return request({
+    url: '/system/clientApp/generateSign/' + appId,
+    method: 'get'
+  })
+}
+
+// 鍖垮悕璁块棶绀轰緥
+export function anonymousTest(data) {
+  return request({
+    url: '/system/clientApp/testSign',
+    method: 'get',
+    params: data
+  })
+}
\ No newline at end of file
diff --git a/ruoyi-ui/src/permission.js b/ruoyi-ui/src/permission.js
index b66190b..5256c2c 100644
--- a/ruoyi-ui/src/permission.js
+++ b/ruoyi-ui/src/permission.js
@@ -9,7 +9,7 @@
 
 NProgress.configure({ showSpinner: false })
 
-const whiteList = ['/login', '/register']
+const whiteList = ['/login', '/register','/anonymous/*']
 
 const isWhiteList = (path) => {
   return whiteList.some(pattern => isPathMatch(pattern, path))
@@ -47,9 +47,11 @@
       }
     }
   } else {
+    debugger;
     // 娌℃湁token
-    if (isWhiteList(to.path)) {
+    if (isWhiteList(to.path) || to.meta.anonymous) {
       // 鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝鐩存帴杩涘叆
+      
       next()
     } else {
       next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 鍚﹀垯鍏ㄩ儴閲嶅畾鍚戝埌鐧诲綍椤�
diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js
index 00013cc..635a020 100644
--- a/ruoyi-ui/src/router/index.js
+++ b/ruoyi-ui/src/router/index.js
@@ -95,11 +95,17 @@
     ]
   },
   {
-    path: 'order/detail/:id',
+    path: '/order/detail/:id',
     component: () => import('@/views/system/order/detail'),
     name: 'OrderDetail',
-    meta: { title: '璁㈠崟璇︽儏' },
-    hidden: true
+    hidden: true,
+    meta: { title: '璁㈠崟璇︽儏椤�', anonymous: true }
+  },
+  {
+    path: '/anonymous/test',
+    component: () => import('@/views/anonymous/test'),
+    hidden: true,
+    meta: { title: '鍖垮悕璁块棶娴嬭瘯', anonymous: true }
   }
 ]
 
diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js
index ffb0d21..1f4d473 100644
--- a/ruoyi-ui/src/utils/request.js
+++ b/ruoyi-ui/src/utils/request.js
@@ -26,7 +26,10 @@
   const isToken = (config.headers || {}).isToken === false
   // 鏄惁闇�瑕侀槻姝㈡暟鎹噸澶嶆彁浜�
   const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
-  if (getToken() && !isToken) {
+  
+
+  
+  if (!isToken &&  getToken()) {
     config.headers['Authorization'] = 'Bearer ' + getToken() // 璁╂瘡涓姹傛惡甯﹁嚜瀹氫箟token 璇锋牴鎹疄闄呮儏鍐佃嚜琛屼慨鏀�
   }
   // get璇锋眰鏄犲皠params鍙傛暟
diff --git a/ruoyi-ui/src/views/anonymous/test.vue b/ruoyi-ui/src/views/anonymous/test.vue
new file mode 100644
index 0000000..eaf8e11
--- /dev/null
+++ b/ruoyi-ui/src/views/anonymous/test.vue
@@ -0,0 +1,211 @@
+<template>
+  <div class="anonymous-container">
+    <div class="test-card">
+      <h2 class="card-title">鍖垮悕璁块棶娴嬭瘯</h2>
+      <div class="form-content">
+        <div class="form-item">
+          <label>搴旂敤ID锛�</label>
+          <input v-model="form.appId" placeholder="璇疯緭鍏ュ簲鐢↖D" class="input-field" />
+        </div>
+        <div class="form-actions">
+          <button class="btn btn-primary" @click="handleTest">娴嬭瘯璁块棶</button>
+          <button class="btn btn-success" @click="handleGenerateSign">鐢熸垚绛惧悕</button>
+        </div>
+      </div>
+
+      <!-- 鏄剧ず绛惧悕淇℃伅 -->
+      <div v-if="signInfo" class="info-card">
+        <h3>绛惧悕淇℃伅</h3>
+        <div class="info-item">
+          <span class="label">鏃堕棿鎴筹細</span>
+          <span class="value">{{ signInfo.timestamp }}</span>
+        </div>
+        <div class="info-item">
+          <span class="label">绛惧悕锛�</span>
+          <span class="value">{{ signInfo.sign }}</span>
+        </div>
+        <div class="info-item">
+          <span class="label">绛惧悕瀛楃涓诧細</span>
+          <span class="value">{{ signInfo.signStr }}</span>
+        </div>
+      </div>
+
+      <!-- 鏄剧ず娴嬭瘯缁撴灉 -->
+      <div v-if="testResult" class="info-card">
+        <h3>娴嬭瘯缁撴灉</h3>
+        <pre class="result-content">{{ JSON.stringify(testResult, null, 2) }}</pre>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { generateSign, anonymousTest } from '@/api/anonymous'
+import { Message } from 'element-ui'
+
+export default {
+  name: 'AnonymousTest',
+  data() {
+    return {
+      form: {
+        appId: ''
+      },
+      signInfo: null,
+      testResult: null
+    }
+  },
+  methods: {
+    // 鐢熸垚绛惧悕
+    handleGenerateSign() {
+      if (!this.form.appId) {
+        Message.warning('璇疯緭鍏ュ簲鐢↖D')
+        return
+      }
+      generateSign(this.form.appId).then(response => {
+        this.signInfo = response.data
+        Message.success('绛惧悕鐢熸垚鎴愬姛')
+      })
+    },
+    // 娴嬭瘯鍖垮悕璁块棶
+    handleTest() {
+      if (!this.signInfo) {
+        Message.warning('璇峰厛鐢熸垚绛惧悕')
+        return
+      }
+      const params = {
+        appId: this.form.appId,
+        sign: this.signInfo.sign,
+        timestamp: this.signInfo.timestamp
+      }
+      anonymousTest(params).then(response => {
+        this.testResult = response
+        Message.success('娴嬭瘯鎴愬姛')
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+.anonymous-container {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  min-height: 100vh;
+  background-color: #f0f2f5;
+  padding: 20px;
+}
+
+.test-card {
+  background: white;
+  border-radius: 8px;
+  box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
+  padding: 30px;
+  width: 100%;
+  max-width: 600px;
+}
+
+.card-title {
+  margin: 0 0 20px;
+  color: #333;
+  text-align: center;
+}
+
+.form-content {
+  margin-bottom: 20px;
+}
+
+.form-item {
+  margin-bottom: 15px;
+}
+
+.form-item label {
+  display: block;
+  margin-bottom: 5px;
+  color: #606266;
+}
+
+.input-field {
+  width: 100%;
+  padding: 8px 12px;
+  border: 1px solid #dcdfe6;
+  border-radius: 4px;
+  font-size: 14px;
+  transition: border-color 0.2s;
+}
+
+.input-field:focus {
+  outline: none;
+  border-color: #409eff;
+}
+
+.form-actions {
+  display: flex;
+  gap: 10px;
+  margin-top: 20px;
+}
+
+.btn {
+  padding: 8px 20px;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+  font-size: 14px;
+  transition: opacity 0.2s;
+}
+
+.btn:hover {
+  opacity: 0.8;
+}
+
+.btn-primary {
+  background-color: #409eff;
+  color: white;
+}
+
+.btn-success {
+  background-color: #67c23a;
+  color: white;
+}
+
+.info-card {
+  margin-top: 20px;
+  padding: 15px;
+  background: #f8f9fa;
+  border-radius: 4px;
+}
+
+.info-card h3 {
+  margin: 0 0 15px;
+  color: #333;
+  font-size: 16px;
+}
+
+.info-item {
+  margin: 10px 0;
+  line-height: 1.5;
+}
+
+.label {
+  font-weight: bold;
+  color: #606266;
+  margin-right: 10px;
+}
+
+.value {
+  font-family: monospace;
+  color: #666;
+  word-break: break-all;
+}
+
+.result-content {
+  background-color: #f5f7fa;
+  padding: 15px;
+  border-radius: 4px;
+  margin: 10px 0 0;
+  overflow-x: auto;
+  font-family: monospace;
+  font-size: 13px;
+  line-height: 1.5;
+}
+</style>

--
Gitblit v1.9.1