浏览代码

feat(version): 添加获取版本公告功能并优化版本检查逻辑

- 新增 getVersionByRoleType 函数以获取版本公告
- 在 Home 和 OTA 视图中使用该函数替代原有的版本获取逻辑
- 优化版本比较逻辑,确保获取最新版本信息
- 更新版本号显示和下载链接的处理方式
kongwenhao 2 天之前
父节点
当前提交
a651d9be40
共有 3 个文件被更改,包括 49 次插入40 次删除
  1. 6 0
      frontend/src/apis/other.ts
  2. 15 17
      frontend/src/views/Home/index.vue
  3. 28 23
      frontend/src/views/OTA/index.vue

+ 6 - 0
frontend/src/apis/other.ts

@@ -58,4 +58,10 @@ export async function downlaodCustomerTemplate(params: { id: number , filename:
 // 更新模板列(商品文字字段)
 export async function updateTemplateColumn(params: { id: string | number; template_excel_headers: Array<{key: string; value: string}> }){
     return POST('/api/ai_image/auto_photo/update_template_colum', params)
+}
+
+
+// 获取版本公告
+export async function getVersionByRoleType(params: {  role_type: number }){
+    return GET('/api/index/version_by_role_type', params)
 }

+ 15 - 17
frontend/src/views/Home/index.vue

@@ -37,6 +37,7 @@ import packageJson from '@/../../package.json';
 import { getRouterUrl } from '@/utils/appfun';
 import useUserInfo from "@/stores/modules/user";
 import tokenInfo from "@/stores/modules/token";
+import { getVersionByRoleType } from '@/apis/other'
 
 const router = useRouter();
 const loading = ref(true);
@@ -239,28 +240,25 @@ const openOTA = () => {
 const checkForUpdates = async () => {
   try {
     // 添加时间戳避免缓存问题
-    const timestamp = new Date().getTime();
-    const response = await axios.get('https://ossimg.valimart.net/frontend/html/zhihuiyin/version.json', {
-      params: {
-        _t: timestamp
-      }
-    });
-
+    // const timestamp = new Date().getTime();
+    // const response = await axios.get('https://ossimg.valimart.net/frontend/html/zhihuiyin/version.json', {
+    //   params: {
+    //     _t: timestamp
+    //   }
+    // });
+    const { data }  = await getVersionByRoleType({ role_type: 6 })
     // 确保 response.data 是 JSON 数据
-    let data;
-    if (typeof response.data === 'string') {
-      data = JSON.parse(response.data);
-    } else {
-      data = response.data;
-    }
-
+    // let data;
+    // if (typeof response.data === 'string') {
+    //   data = JSON.parse(response.data);
+    // } else {
+    //   data = response.data;
+    // }
     if (data.length > 0) {
-      const latest = data[data.length - 1];
+      const latest = data[0];
       latestVersion.value = latest.version;
-
       // 比较版本号
       isLatest.value = compareVersions(currentVersion.value, latest.version) >= 0;
-
       // 如果发现新版本,自动打开OTA窗口
       if (!isLatest.value) {
         openOTA();

+ 28 - 23
frontend/src/views/OTA/index.vue

@@ -7,6 +7,10 @@ import client from "@/stores/modules/client";
 import  icpList from '@/utils/ipc'
 import socket from "@/stores/modules/socket";
 import UpdateDialog from '@/components/UpdateDialog'
+import { getVersionByRoleType } from '@/apis/other'
+
+
+
 
 const currentVersion = ref(packageJson.version);
 const latestVersion = ref('');
@@ -29,31 +33,29 @@ const paginatedVersions = computed(() => {
 const fetchVersions = async () => {
   try {
     // 添加时间戳避免缓存问题
-    const timestamp = new Date().getTime();
-    const response = await axios.get('https://ossimg.valimart.net/frontend/html/zhihuiyin/version.json', {
-      params: {
-        _t: timestamp
-      }
-    });
-
+    // const timestamp = new Date().getTime();
+    // const response = await axios.get('https://ossimg.valimart.net/frontend/html/zhihuiyin/version.json', {
+    //   params: {
+    //     _t: timestamp
+    //   }
+    // });
+
+    const { data } = await getVersionByRoleType({ role_type: 6 })
+    console.log('data' , data)
     // 确保 response.data 是 JSON 数据
-    let data;
-    if (typeof response.data === 'string') {
-      data = JSON.parse(response.data);
-    } else {
-      data = response.data;
-    }
-
+    // let data;
+    // if (typeof response.data === 'string') {
+    //   data = JSON.parse(response.data);
+    // } else {
+    //   data = response.data;
+    // }
     versions.value = data;
-
     if (data.length > 0) {
-      const latest = data[data.length - 1];
+      const latest = data[0];
       latestVersion.value = latest.version;
-
       // 比较版本号
       isLatest.value = compareVersions(currentVersion.value, latest.version) >= 0;
     }
-
     // 初始化分页信息
     totalItems.value = versions.value.length;
   } catch (error) {
@@ -80,7 +82,7 @@ const compareVersions = (v1, v2) => {
 
 // 下载最新版本
 const downloadUpdate = () => {
-  downloadSpecificVersion(versions.value[versions.value.length - 1].url)
+  downloadSpecificVersion(versions.value[0].attachment)
 };
 
 
@@ -164,17 +166,20 @@ onMounted(() => {
           <!-- 使用计算属性获取分页数据 -->
           <el-table :data="paginatedVersions" border>
             <el-table-column prop="version" label="版本号" width="70"></el-table-column>
-            <el-table-column prop="date" label="发布日期" width="100"></el-table-column>
+            <el-table-column prop="release_date" label="发布日期" width="100"></el-table-column>
             <el-table-column label="描述">
               <template #default="{ row }">
-                <el-tooltip :content="row.describe" placement="top" :show-when="hover" :width="500">
-                  <span class="version-describe" v-html="row.describe"></span>
+                <el-tooltip placement="top" :show-when="hover" :width="500">
+                  <template #content >
+                    <div v-html="row.detail"></div>
+                  </template>
+                  <span class="version-describe" v-html="row.detail"></span>
                 </el-tooltip>
               </template>
             </el-table-column>
             <el-table-column label="操作"  width="80">
               <template #default="{ row }">
-                <el-button size="small" @click="downloadSpecificVersion(row.url)" v-log="{ describe: { action: '点击下载历史版本', version: row.version, url: row.url } }">下载</el-button>
+                <el-button size="small" @click="downloadSpecificVersion(row.attachment)" v-log="{ describe: { action: '点击下载历史版本', version: row.version, url: row.attachment } }">下载</el-button>
               </template>
             </el-table-column>
           </el-table>