| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- <script setup>
- import { ref, onMounted, computed } from 'vue';
- import axios from 'axios';
- import packageJson from '@/../../package.json';
- import { ElMessage } from 'element-plus';
- 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('');
- const isLatest = ref(true);
- const versions = ref([]); // 所有版本数据
- // 分页相关
- const currentPage = ref(1);
- const pageSize = ref(20);
- const totalItems = ref(0);
- // 计算属性:获取当前页的数据
- const paginatedVersions = computed(() => {
- const start = (currentPage.value - 1) * pageSize.value;
- const end = start + pageSize.value;
- return (versions.value || []).slice(start, end);
- });
- // 获取版本信息
- 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 { 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;
- // }
- versions.value = data;
- if (data.length > 0) {
- const latest = data[0];
- latestVersion.value = latest.version;
- // 比较版本号
- isLatest.value = compareVersions(currentVersion.value, latest.version) >= 0;
- }
- // 初始化分页信息
- totalItems.value = versions.value.length;
- } catch (error) {
- console.error('获取版本信息失败:', error);
- ElMessage.error('无法获取版本信息');
- }
- };
- // 版本号比较函数
- const compareVersions = (v1, v2) => {
- const parts1 = v1.split('.').map(Number);
- const parts2 = v2.split('.').map(Number);
- for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
- const num1 = parts1[i] || 0;
- const num2 = parts2[i] || 0;
- if (num1 > num2) return 1;
- if (num1 < num2) return -1;
- }
- return 0;
- };
- // 下载最新版本
- const downloadUpdate = () => {
- downloadSpecificVersion(versions.value[0].attachment)
- };
- const updateVisible = ref( false)
- const updateResult = ref({})
- const clientStore = client();
- const socketStore = socket()
- // 下载特定版本
- const downloadSpecificVersion = (url) => {
- clientStore.ipc.removeAllListeners('app.updater');
- clientStore.ipc.removeAllListeners(icpList.ota.updateVersion);
- clientStore.ipc.send(icpList.ota.updateVersion,url);
- clientStore.ipc.on(icpList.ota.updateVersion, async (event, result) => {
- console.log('==============================')
- console.log('checkUpdate')
- console.log(event)
- console.log(result)
- })
- clientStore.ipc.on('app.updater', async (event, result) => {
- try {
- let res = JSON.parse(result)
- if([1,3,4].includes(res.status)){
- updateResult.value = res
- updateVisible.value = true
- console.log(updateResult.value)
- console.log(updateVisible.value)
- }else{
- updateVisible.value = false
- ElMessage.error('下载失败')
- }
- }catch (e) {
- console.log(e)
- }
- })
- };
- // 处理分页变化
- const handlePageChange = (page) => {
- currentPage.value = page;
- };
- onMounted(() => {
- fetchVersions();
- });
- </script>
- <template>
- <el-container>
- <el-dialog
- v-model="updateVisible"
- :close-on-click-modal="false"
- title="软件下载中"
- >
- <div class="desc line-30 fs-16">{{updateResult.desc}}</div>
- </el-dialog>
- <el-main>
- <div class="version-check-container">
- <el-card class="current-version-card">
- <p>当前版本 <span class="fs-14">版本号: {{ currentVersion }}</span></p>
- <p>状态: <span :class="{ 'text-green': isLatest, 'text-red': !isLatest }">{{ isLatest ? '您已经是最新版本' : '发现新版本' }}</span></p>
- <p v-if="!isLatest">新版本: {{ latestVersion }}</p>
- <el-button v-if="!isLatest" type="primary" @click="downloadUpdate" v-log="{ describe: { action: '点击下载最新版本', latestVersion } }">下载更新</el-button>
- </el-card>
- <el-card class="history-versions-card mar-top-10">
- <h3>历史版本</h3>
- <!-- 使用计算属性获取分页数据 -->
- <el-table :data="paginatedVersions" border>
- <el-table-column prop="version" label="版本号" width="70"></el-table-column>
- <el-table-column prop="release_date" label="发布日期" width="100"></el-table-column>
- <el-table-column label="描述">
- <template #default="{ row }">
- <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.attachment)" v-log="{ describe: { action: '点击下载历史版本', version: row.version, url: row.attachment } }">下载</el-button>
- </template>
- </el-table-column>
- </el-table>
- <el-pagination
- layout="prev, pager, next"
- :total="totalItems"
- :page-size="pageSize"
- v-model:current-page="currentPage"
- @current-change="handlePageChange"
- style="margin-top: 15px;"
- />
- </el-card>
- </div>
- </el-main>
- </el-container>
- </template>
- <style scoped>
- .version-describe {
- display: inline-block;
- width: 100%; /* 根据需要调整 */
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- </style>
|