<template>
|
<view class="pages-version-car-program-upload">
|
<view>
|
<a-button type="primary" class="max-button" :disabled="updating"
|
@click="clickCheckUpdate">{{translate('check_update')}}</a-button>
|
|
</view>
|
<view class="group" v-if="newPack.version">
|
<view class="item big-text ">
|
{{translate('updatable_version')}}:{{newPack.version}}
|
</view>
|
<view class="item gray-text">
|
{{newVersionSize}}
|
</view>
|
<view class="item">
|
{{translate('current_version')}}:{{shellVersion}}
|
</view>
|
</view>
|
<view class="no-version gray-text" v-else>
|
<uni-icons type="upload-filled" size="150" color="#888"></uni-icons>
|
{{ translate('current_version')}}:{{shellVersion}}
|
</view>
|
<!-- <template v-if="verFileList.length >0">
|
<view class="group ">
|
{{translate('current_version')}}:{{shellVersion}}
|
</view>
|
<view class="group big-text">
|
{{translate('updatable_version')}}:
|
</view>
|
</template>
|
|
<view class="list">
|
<label class="item" v-for="item in verFileList" :key="item.version" @click="clickVersionItem(item)">
|
<view class="name" :class="item.isNew ? '':'disabled'">{{item.version}}</view>
|
<uni-icons v-if="newPack.version == item.version" type="checkmarkempty" size="20"
|
color="#0055ff"></uni-icons>
|
<progress v-if="updating && newPack.version == item.version" class="progress" :percent="percentage"
|
backgroundColor="#fff" activeColor="#10AEFF" stroke-width="3" />
|
</label>
|
</view>
|
<view class="no-version gray-text" v-if="verFileList.length == 0">
|
<uni-icons type="upload-filled" size="150" color="#888"></uni-icons>
|
{{translate('current_version')}}:{{shellVersion}}
|
</view> -->
|
<view class="button-group" v-if="newPack.version">
|
<a-button type="primary" class="button" :disabled="updating"
|
@click="clickNowUpdate">{{translate('update_immediately')}}</a-button>
|
|
</view>
|
|
</view>
|
</template>
|
<script>
|
import {
|
session,
|
showToast,
|
showModal,
|
showError
|
} from "@/comm/utils.js"
|
import TaskInit from "@/comm/extend.js"
|
import {
|
Button
|
} from 'antd-mobile-vue-next'
|
import {
|
getShellVersion,
|
shellUpgrade
|
} from "@/api/vehicle.js"
|
import cmdProgress from "@/components/cmd-progress/index.vue"
|
export default {
|
name: "PagesVersionCarProgramUpload",
|
components: {
|
'a-button': Button,
|
cmdProgress
|
},
|
data() {
|
return {
|
ip: "",
|
shellVersion: "",
|
newPack: {
|
version: "",
|
filePath: "",
|
size: 0
|
},
|
percentage: 0, //下载进度
|
updating: false,
|
verFileList: []
|
}
|
},
|
onLoad(option) {
|
|
this.ip = option.ip || ""
|
uni.setNavigationBarTitle({
|
title: this.translate('version_update')
|
})
|
this.loadData()
|
|
},
|
computed: {
|
newVersionSize() {
|
const packSize = this.newPack?.size || 0
|
console.log(packSize)
|
let size = 0
|
if (packSize < 1024 * 1024) {
|
size = Math.round(packSize * 100 / 1024)
|
return `${size/100} KB`
|
} else if (packSize < 1024 * 1024 * 1024) {
|
size = Math.round(packSize * 100 / (1024 * 1024))
|
return `${size/100} MB`
|
} else {
|
size = Math.round(packSize * 100 / (1024 * 1024 * 1024))
|
return `${size/100} GB`
|
}
|
}
|
|
},
|
methods: {
|
setData(obj) {
|
let that = this;
|
let keys = [];
|
let val, data;
|
|
Object.keys(obj).forEach(function(key) {
|
keys = key.split(".");
|
val = obj[key];
|
data = that.$data;
|
keys.forEach(function(key2, index) {
|
if (index + 1 == keys.length) {
|
that.$set(data, key2, val);
|
} else {
|
if (!data[key2]) {
|
that.$set(data, key2, {});
|
}
|
}
|
data = data[key2];
|
});
|
});
|
},
|
async loadData() {
|
this.checkVersion()
|
|
},
|
getVersionFromFileName(fileName) {
|
if (!fileName.trim()) {
|
return {
|
date: "",
|
ver: ""
|
}
|
}
|
let versionInfos = fileName.trim().split('_');
|
let date = versionInfos[1]
|
let version2 = versionInfos[2]
|
let versionInfos2 = version2.split('.');
|
versionInfos2.pop()
|
return {
|
date,
|
ver: versionInfos2.join(".")
|
}
|
},
|
async loadServerVersionFile() {
|
try {
|
var verName = ""
|
var verPath = ""
|
var fileList = []
|
var listVer = []
|
try {
|
fileList = await TaskInit.fileUtils.listSavedFiles('car_version')
|
} catch (ex) {
|
console.log(ex)
|
}
|
this.verFileList = []
|
let versionInfos = this.shellVersion.trim().split('_');
|
let oldDate = ""
|
let oldVer = ""
|
if (versionInfos.length == 2) {
|
oldDate = versionInfos[0]
|
oldVer = versionInfos[1]
|
}
|
for (let i in fileList) {
|
const ele = fileList[i]
|
const newVer = this.getVersionFromFileName(ele.name)
|
const curVer = `${newVer.date ||""}_${newVer.ver ||""}`
|
const isVer = this.compareVersion(newVer, {
|
date: oldDate,
|
ver: oldVer
|
});
|
if (isVer) {
|
ele.isNew = true
|
ele.size = await TaskInit.fileUtils.getSavedFileSize(ele.fullPath)
|
}
|
ele.version = curVer
|
listVer.push(ele)
|
}
|
listVer.sort((a, b) => {
|
return a.version > b.version
|
});
|
this.verFileList = listVer
|
if (listVer.length > 0) {
|
const verItem = listVer[0]
|
if (verItem.isNew) {
|
this.newPack = {
|
version: verItem.version,
|
filePath: verItem.fullPath,
|
size: verItem.size,
|
}
|
|
}
|
|
}
|
|
} catch (ex) {
|
|
}
|
},
|
compareVersion(curV, reqV) {
|
|
if (curV.date == reqV.date) {
|
return curV.ver > reqV.ver
|
}
|
return parseInt(curV.date) > parseInt(reqV.date)
|
},
|
async updateShellVersion(filePath) {
|
const _this = this;
|
this.updating = true
|
shellUpgrade(this.ip, filePath, (res) => {
|
|
_this.updating = false
|
_this.shellVersion = _this.newPack.version
|
this.newPack = {
|
version: "",
|
filePath: "",
|
size: 0
|
}
|
this.loadServerVersionFile();
|
showToast(this.translate('update_success'));
|
}, (res) => {
|
_this.percentage = res.progress
|
}, (err) => {
|
showToast(this.translate('update_fail'));
|
_this.updating = false
|
})
|
},
|
async checkVersion(version) {
|
try {
|
this.newPack = {
|
version: "",
|
filePath: "",
|
size: 0
|
}
|
const verInfo = await getShellVersion(this.ip)
|
this.shellVersion = verInfo?.software_version || ""
|
await this.loadServerVersionFile();
|
|
} catch (ex) {
|
showError(ex)
|
}
|
},
|
clickVersionItem(item) {
|
if (item.isNew && !this.updating) {
|
this.newPack = {
|
version: item.version,
|
filePath: item.fullPath,
|
size: item.size
|
}
|
}
|
|
},
|
clickCheckUpdate(e) {
|
this.checkVersion()
|
},
|
|
clickNowUpdate() {
|
this.updateShellVersion(this.newPack.filePath)
|
},
|
translate(t) {
|
if (typeof this.$t == "function") return this.$t(`page.${t}`)
|
else return t;
|
},
|
}
|
}
|
</script>
|
|
<style lang="scss">
|
.pages-version-car-program-upload {
|
display: flex;
|
width: 750rpx;
|
height: 100vh;
|
flex-direction: column;
|
|
.list {
|
overflow-y: auto;
|
display: flex;
|
flex-direction: column;
|
width: calc(100% - 20rpx);
|
margin: 10rpx;
|
padding: 0 20rpx;
|
max-height: 60vh;
|
|
.item {
|
width: calc(100% - 20rpx);
|
padding: 20rpx;
|
display: flex;
|
flex-direction: row;
|
margin: 10rpx 10rpx;
|
background-color: #fff;
|
border-radius: 10rpx;
|
position: relative;
|
|
.progress {
|
position: absolute;
|
bottom: 5rpx;
|
left: 0;
|
right: 0;
|
}
|
|
.name {
|
flex: 1;
|
}
|
|
}
|
|
.disabled {
|
color: gray;
|
}
|
|
|
}
|
|
.group {
|
width: calc(100% - 40rpx);
|
// border: 2rpx solid #ccc;
|
// background-color: #fff;
|
border-radius: 20rpx;
|
margin: 20rpx;
|
padding: 0 20rpx;
|
display: flex;
|
flex-direction: column;
|
|
.item {
|
width: 100%;
|
padding: 20rpx;
|
display: flex;
|
flex-direction: row;
|
align-items: center;
|
|
}
|
|
|
}
|
|
.tip {
|
color: #888;
|
padding: 10rpx;
|
margin-left: 50rpx;
|
}
|
|
.gray-text {
|
color: #888;
|
}
|
|
.big-text {
|
font-size: 40rpx;
|
}
|
|
.no-version {
|
margin: auto;
|
display: flex;
|
flex-direction: column;
|
}
|
|
.button-group {
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
flex-direction: column;
|
font-size: 30rpx !important;
|
|
}
|
|
.max-button {
|
margin: auto;
|
margin-top: 20rpx;
|
margin-bottom: 20rpx;
|
border-radius: 40rpx;
|
height: 80rpx;
|
line-height: 60rpx;
|
width: 600rpx;
|
}
|
|
.button {
|
margin: auto;
|
margin-top: 20rpx;
|
border-radius: 10rpx;
|
height: 56rpx;
|
line-height: 32rpx;
|
width: 400rpx;
|
}
|
|
}
|
</style>
|