Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b4169367aa | |||
| 820d59cb2f | |||
| c58ec8c907 | |||
| dcf9d1b98c | |||
| fd4ff2d99d | |||
| 8bf7a893ae | |||
| ce4cf4078b | |||
| cbd45415bd | |||
| 140a564ee7 | |||
| 8d24a93f6d | |||
| 98135d6ce2 | |||
| a3ccb942e5 | |||
| eacc0d9547 | |||
| 9cc653b761 | |||
| 0cfc02c939 | |||
| 60252b5cfe | |||
| cc5207ae07 | |||
| 4ad2b51161 | |||
| 0f32263d12 |
@@ -1,15 +1,5 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="row flex sm12 xl12 md12 xs12" style="height: 100vh;">
|
||||
<div class="flex-center spinner-box mt-4 mb-5">
|
||||
<fulfilling-bouncing-circle-spinner
|
||||
:animation-duration="3000"
|
||||
:color="'#6c7fee'"
|
||||
:size="60"
|
||||
>
|
||||
</fulfilling-bouncing-circle-spinner>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -17,7 +7,6 @@
|
||||
import api from '@/data/api/index'
|
||||
import types from '@/store/modules/download/types'
|
||||
import { mapActions, mapMutations } from 'vuex'
|
||||
import { FulfillingBouncingCircleSpinner } from 'epic-spinners'
|
||||
import { mapFields } from 'vuex-map-fields'
|
||||
import newDownload from '@/factories/file/downloadFactory'
|
||||
import newChannel from '@/factories/file/channelFactory'
|
||||
@@ -27,11 +16,17 @@ import configTable from '@/data/config-table/index'
|
||||
export default {
|
||||
name: 'Download',
|
||||
components: {
|
||||
FulfillingBouncingCircleSpinner,
|
||||
},
|
||||
data: () => {
|
||||
return {
|
||||
controllerList: [],
|
||||
downloadList: [],
|
||||
format: 'csv',
|
||||
channel: '',
|
||||
metaListNew: [],
|
||||
downloading: false,
|
||||
fileNums: 0,
|
||||
count: 0,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -67,6 +62,172 @@ export default {
|
||||
}
|
||||
return results
|
||||
},
|
||||
writeFiles: async function () {
|
||||
if (this.metaListNew.length !== 0 && this.downloading === false) {
|
||||
this.downloading = true
|
||||
let meta
|
||||
const metaID = this.metaListNew.pop()
|
||||
const ret = await api.meta.getByID(metaID)
|
||||
|
||||
if (ret.status === 200) {
|
||||
meta = ret.data[0]
|
||||
}
|
||||
|
||||
if (meta !== undefined) {
|
||||
this.metaInfo = meta
|
||||
const channelParamObj = configTable.getModeConfig(meta.device.library_name, meta.parameter_set.MODE).channels
|
||||
const channelArray = this.channel === 'all' ? JSON.parse(this.metaInfo.channels) : Object.keys(channelParamObj).filter(ele => ele !== 'time')
|
||||
const channelList = []
|
||||
|
||||
// split to different subfile by channel
|
||||
if (meta.device.library_name.indexOf('Neulive') >= 0) {
|
||||
if (channelArray.some(el => el >= 256)) {
|
||||
channelList.push(channelArray.filter(el => (el >= 256 && el <= 259)))
|
||||
channelList.push(channelArray.filter(el => el < 256))
|
||||
} else {
|
||||
channelList.push(channelArray)
|
||||
}
|
||||
} else if (meta.device.library_name.indexOf('Elite') >= 0) {
|
||||
channelList.push(channelArray)
|
||||
}
|
||||
|
||||
while (channelList.length > 0) {
|
||||
const channels = channelList.pop()
|
||||
|
||||
let maxSplitFiles = 1
|
||||
let fileIndex = 0
|
||||
|
||||
// find max raw data need sub file
|
||||
for (const rawDataIndex of channels) {
|
||||
const dataLength = meta.raw_data[rawDataIndex].length
|
||||
|
||||
maxSplitFiles = Math.max(maxSplitFiles, Math.ceil(meta.raw_data[rawDataIndex].length / dataLength))
|
||||
meta.raw_data[rawDataIndex] = this.chunkArray(meta.raw_data[rawDataIndex], dataLength)
|
||||
}
|
||||
|
||||
while (fileIndex < maxSplitFiles) {
|
||||
// create new download info & add channel
|
||||
if (this.downloadInfo === null) {
|
||||
this.downloadInfo = newDownload()
|
||||
}
|
||||
this.downloadInfo.channel = channels
|
||||
|
||||
// download format
|
||||
this.downloadInfo.format = this.format
|
||||
|
||||
// download device and filename
|
||||
if (meta.device.library_name.indexOf('Neulive') >= 0) {
|
||||
this.downloadInfo.device = [meta.device.library_name.slice(0, 7), meta.device.library_name.slice(7)]
|
||||
if (this.downloadInfo.channel.some(el => el >= 256 && el <= 259)) {
|
||||
this.downloadInfo.filename = meta.name + '-accerlate'
|
||||
this.downloadInfo.size = parseInt(parseInt(meta.size) / (76 * (maxSplitFiles)))
|
||||
} else {
|
||||
this.downloadInfo.filename = meta.name
|
||||
this.downloadInfo.size = parseInt(meta.size / (maxSplitFiles))
|
||||
}
|
||||
} else if (meta.device.library_name.indexOf('Elite') >= 0) {
|
||||
this.downloadInfo.device = [meta.device.library_name.slice(0, 5), meta.device.library_name.slice(5)]
|
||||
this.downloadInfo.filename = meta.name
|
||||
this.downloadInfo.size = parseInt(meta.size / (maxSplitFiles))
|
||||
}
|
||||
|
||||
// create new channel info & get sample rate
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
if (this.downloadInfo.channelInfo[channel] === undefined) {
|
||||
this.downloadInfo.channelInfo[channel] = newChannel()
|
||||
this.setSampleRateDownload({ channel: channel })
|
||||
}
|
||||
}
|
||||
|
||||
// set download ID list
|
||||
this.clearIDListDownload()
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
this.setIDListDownload({ channel: channel, fileIndex: fileIndex })
|
||||
}
|
||||
|
||||
// if create writer
|
||||
this.clearStreamDownload()
|
||||
this.setStreamDownload()
|
||||
|
||||
// set Header
|
||||
if (this.downloadInfo.format !== 'csv-edf') {
|
||||
await this.setHeaderExport()
|
||||
}
|
||||
await this.setTitleExport()
|
||||
|
||||
// start download data
|
||||
let rowIndex = 0
|
||||
let columnNum = 0
|
||||
|
||||
const requestArray = []
|
||||
console.time('download')
|
||||
// console.log(this.downloadInfo)
|
||||
|
||||
while (rowIndex - 10 < this.downloadInfo.maxRows) {
|
||||
// console.log('rowIndex < this.downloadInfo.maxRows', rowIndex, this.downloadInfo.maxRows)
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
columnNum = this.downloadInfo.channelInfo[channel].downloadIDList.length
|
||||
for (const idx in this.downloadInfo.channelInfo[channel].downloadIDList) {
|
||||
const _idx = parseInt(idx)
|
||||
if (this.downloadInfo.channelInfo[channel].downloadDataBuffer[idx] === undefined) {
|
||||
this.downloadInfo.channelInfo[channel].downloadDataBuffer[idx] = []
|
||||
}
|
||||
// const rawID = this.downloadInfo.channelInfo[channel].downloadIDList[_idx][rowIndex]
|
||||
const rawIDList = this.downloadInfo.channelInfo[channel].downloadIDList[_idx].slice(rowIndex, rowIndex + 10)
|
||||
// console.log(channel, rawIDList)
|
||||
rawIDList.length > 0 && requestArray.push(api.raw.getAttrByIDs(channel, rawIDList, 'id-channel-size-serial_number-start_time-end_time-data'))
|
||||
if (rawIDList.length === 0) columnNum -= 1
|
||||
}
|
||||
}
|
||||
const responseArray = await Promise.all(requestArray)
|
||||
for (const responseIndex in responseArray) {
|
||||
const response = responseArray[responseIndex]
|
||||
// console.log('response', response)
|
||||
const idx = responseIndex % columnNum
|
||||
|
||||
for (const data of response.data) {
|
||||
const timeUnitScale = channelParamObj.time.unit[channelParamObj.time.downloadUnit]
|
||||
const channelUnitScale = channelParamObj[data.channel]?.unit[channelParamObj[data.channel]?.downloadUnit]
|
||||
// console.log('data', data)
|
||||
const dataArray = data.data.split('"***"').slice(0, -1)
|
||||
// console.log('dataArray', dataArray)
|
||||
for (const raw of dataArray) {
|
||||
const rawArray = raw.split(' ')
|
||||
const newArray = rawArray[0] === '' ? [] : rawArray.map((ele, index) => {
|
||||
// console.log((parseInt(ele) / timeUnitScale).toFixed(Math.log10(timeUnitScale)))
|
||||
return (index % 2 === 0) ? String((parseInt(ele) / timeUnitScale).toFixed(Math.log10(timeUnitScale))) : channelUnitScale ? String((parseInt(ele) / channelUnitScale).toFixed(Math.log10(channelUnitScale))) : ele
|
||||
})
|
||||
this.downloadInfo.channelInfo[data.channel].downloadDataBuffer[idx].push(...newArray)
|
||||
// console.log('rawArray', rawArray)
|
||||
}
|
||||
}
|
||||
}
|
||||
requestArray.length = 0
|
||||
// console.log('this.downloadInfo.channelInfo', this.downloadInfo.channelInfo)
|
||||
// console.log('this.downloadInfo.maxRows', this.downloadInfo.maxRows)
|
||||
await this.setDataExport({ last: (rowIndex >= this.downloadInfo.maxRows - 1) })
|
||||
rowIndex += 10
|
||||
}
|
||||
this.closeWriterDownload()
|
||||
fileIndex += 1
|
||||
}
|
||||
console.timeEnd('download')
|
||||
}
|
||||
}
|
||||
this.count += 1
|
||||
this.downloading = false
|
||||
this.$emit('download-finish')
|
||||
if (this.fileNums === 1) {
|
||||
this.showToast('Download Finish', {
|
||||
position: 'bottom-right',
|
||||
})
|
||||
} else {
|
||||
this.showToast(`${this.count} / ${this.fileNums} Finish`, {
|
||||
position: 'bottom-right',
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
...mapActions('download',
|
||||
[
|
||||
types.raw.rawDataByID,
|
||||
@@ -93,169 +254,13 @@ export default {
|
||||
async mounted () {
|
||||
await this.getControllerList()
|
||||
// TODO authorization
|
||||
const format = this.$route.params.format.split('-')[0]
|
||||
const allChannel = this.$route.params.format.split('-')[1]
|
||||
this.metaList = this.$route.params.metaList.split('-')
|
||||
const sd = this.$route.params.sd
|
||||
|
||||
while (this.metaList.length !== 0) {
|
||||
let meta
|
||||
const metaID = this.metaList.pop()
|
||||
const ret = await api.meta.getByID(metaID)
|
||||
|
||||
if (ret.status === 200) {
|
||||
meta = ret.data[0]
|
||||
}
|
||||
if (meta !== undefined) {
|
||||
this.metaInfo = meta
|
||||
const channelParamObj = configTable.getModeConfig(meta.device.library_name, meta.parameter_set.MODE).channels
|
||||
const channelArray = allChannel === 'all' ? JSON.parse(this.metaInfo.channels) : Object.keys(channelParamObj).filter(ele => ele !== 'time')
|
||||
const channelList = []
|
||||
|
||||
// split to different subfile by channel
|
||||
if (meta.device.library_name.indexOf('Neulive') >= 0) {
|
||||
if (channelArray.some(el => el >= 256)) {
|
||||
channelList.push(channelArray.filter(el => (el >= 256 && el <= 259)))
|
||||
channelList.push(channelArray.filter(el => el < 256))
|
||||
} else {
|
||||
channelList.push(channelArray)
|
||||
}
|
||||
} else if (meta.device.library_name.indexOf('Elite') >= 0) {
|
||||
channelList.push(channelArray)
|
||||
}
|
||||
|
||||
while (channelList.length > 0) {
|
||||
const channels = channelList.pop()
|
||||
|
||||
let maxSplitFiles = 1
|
||||
let fileIndex = 0
|
||||
|
||||
// find max raw data need sub file
|
||||
for (const rawDataIndex of channels) {
|
||||
const dataLength = meta.raw_data[rawDataIndex].length
|
||||
|
||||
maxSplitFiles = Math.max(maxSplitFiles, Math.ceil(meta.raw_data[rawDataIndex].length / dataLength))
|
||||
meta.raw_data[rawDataIndex] = this.chunkArray(meta.raw_data[rawDataIndex], dataLength)
|
||||
}
|
||||
|
||||
while (fileIndex < maxSplitFiles) {
|
||||
// create new download info & add channel
|
||||
if (this.downloadInfo === null) {
|
||||
this.downloadInfo = newDownload()
|
||||
}
|
||||
this.downloadInfo.channel = channels
|
||||
|
||||
// download format
|
||||
this.downloadInfo.format = format
|
||||
|
||||
// download device and filename
|
||||
if (meta.device.library_name.indexOf('Neulive') >= 0) {
|
||||
this.downloadInfo.device = [meta.device.library_name.slice(0, 7), meta.device.library_name.slice(7)]
|
||||
if (this.downloadInfo.channel.some(el => el >= 256 && el <= 259)) {
|
||||
this.downloadInfo.filename = meta.name + '-accerlate'
|
||||
this.downloadInfo.filename += (sd !== undefined) ? '-sd' : ''
|
||||
this.downloadInfo.size = parseInt(parseInt(meta.size) / (76 * (maxSplitFiles)))
|
||||
} else {
|
||||
this.downloadInfo.filename = meta.name
|
||||
this.downloadInfo.filename += (sd !== undefined) ? '-sd' : ''
|
||||
this.downloadInfo.size = parseInt(meta.size / (maxSplitFiles))
|
||||
}
|
||||
} else if (meta.device.library_name.indexOf('Elite') >= 0) {
|
||||
this.downloadInfo.device = [meta.device.library_name.slice(0, 5), meta.device.library_name.slice(5)]
|
||||
this.downloadInfo.filename = meta.name
|
||||
this.downloadInfo.size = parseInt(meta.size / (maxSplitFiles))
|
||||
}
|
||||
|
||||
// create new channel info & get sample rate
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
if (this.downloadInfo.channelInfo[channel] === undefined) {
|
||||
this.downloadInfo.channelInfo[channel] = newChannel()
|
||||
this.setSampleRateDownload({ channel: channel })
|
||||
}
|
||||
}
|
||||
|
||||
// set download ID list
|
||||
this.clearIDListDownload()
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
this.setIDListDownload({ channel: channel, fileIndex: fileIndex })
|
||||
}
|
||||
|
||||
// if create writer
|
||||
this.clearStreamDownload()
|
||||
this.setStreamDownload()
|
||||
|
||||
// set Header
|
||||
if (this.downloadInfo.format !== 'csv-edf') {
|
||||
await this.setHeaderExport()
|
||||
}
|
||||
await this.setTitleExport()
|
||||
|
||||
// start download data
|
||||
let rowIndex = 0
|
||||
let columnNum = 0
|
||||
|
||||
const requestArray = []
|
||||
console.time('download')
|
||||
// console.log(this.downloadInfo)
|
||||
|
||||
while (rowIndex - 10 < this.downloadInfo.maxRows) {
|
||||
// console.log('rowIndex < this.downloadInfo.maxRows', rowIndex, this.downloadInfo.maxRows)
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
columnNum = this.downloadInfo.channelInfo[channel].downloadIDList.length
|
||||
for (const idx in this.downloadInfo.channelInfo[channel].downloadIDList) {
|
||||
const _idx = parseInt(idx)
|
||||
if (this.downloadInfo.channelInfo[channel].downloadDataBuffer[idx] === undefined) {
|
||||
this.downloadInfo.channelInfo[channel].downloadDataBuffer[idx] = []
|
||||
}
|
||||
// const rawID = this.downloadInfo.channelInfo[channel].downloadIDList[_idx][rowIndex]
|
||||
const rawIDList = this.downloadInfo.channelInfo[channel].downloadIDList[_idx].slice(rowIndex, rowIndex + 10)
|
||||
// console.log(channel, rawIDList)
|
||||
rawIDList.length > 0 && requestArray.push(api.raw.getAttrByIDs(channel, rawIDList, 'id-channel-size-serial_number-start_time-end_time-data'))
|
||||
if (rawIDList.length === 0) columnNum -= 1
|
||||
}
|
||||
}
|
||||
const responseArray = await Promise.all(requestArray)
|
||||
// console.log('responseArray', responseArray)
|
||||
for (const responseIndex in responseArray) {
|
||||
const response = responseArray[responseIndex]
|
||||
// console.log('response', response)
|
||||
const idx = responseIndex % columnNum
|
||||
|
||||
for (const data of response.data) {
|
||||
const timeUnitScale = channelParamObj.time.unit[channelParamObj.time.downloadUnit]
|
||||
const channelUnitScale = channelParamObj[data.channel]?.unit[channelParamObj[data.channel]?.downloadUnit]
|
||||
// console.log('data', data)
|
||||
const dataArray = data.data.split('"***"').slice(0, -1)
|
||||
// console.log('dataArray', dataArray)
|
||||
for (const raw of dataArray) {
|
||||
const rawArray = raw.split(' ')
|
||||
const newArray = rawArray[0] === '' ? [] : rawArray.map((ele, index) => {
|
||||
// console.log((parseInt(ele) / timeUnitScale).toFixed(Math.log10(timeUnitScale)))
|
||||
return (index % 2 === 0) ? String((parseInt(ele) / timeUnitScale).toFixed(Math.log10(timeUnitScale))) : channelUnitScale ? String((parseInt(ele) / channelUnitScale).toFixed(Math.log10(channelUnitScale))) : ele
|
||||
})
|
||||
this.downloadInfo.channelInfo[data.channel].downloadDataBuffer[idx].push(...newArray)
|
||||
// console.log('rawArray', rawArray)
|
||||
}
|
||||
}
|
||||
}
|
||||
requestArray.length = 0
|
||||
// console.log('this.downloadInfo.channelInfo', this.downloadInfo.channelInfo)
|
||||
// console.log('this.downloadInfo.maxRows', this.downloadInfo.maxRows)
|
||||
await this.setDataExport({ last: (rowIndex >= this.downloadInfo.maxRows - 1) })
|
||||
rowIndex += 10
|
||||
}
|
||||
this.closeWriterDownload()
|
||||
fileIndex += 1
|
||||
}
|
||||
console.timeEnd('download')
|
||||
}
|
||||
}
|
||||
}
|
||||
await new Promise(resolve => setTimeout(resolve, 2000)) // sleep 2s prevent window close
|
||||
window.close()
|
||||
// await new Promise(resolve => setTimeout(resolve, 2000)) // sleep 2s prevent window close
|
||||
// window.close()
|
||||
setInterval(this.writeFiles, 1000)
|
||||
},
|
||||
destroyed () {
|
||||
this.pageMqttUnSub()
|
||||
// this.pageMqttUnSub()
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,18 +1,8 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="row flex sm12 xl12 md12 xs12" style="height: 100vh;">
|
||||
<div class="flex-center spinner-box mt-4 mb-5">
|
||||
<fulfilling-bouncing-circle-spinner
|
||||
:animation-duration="3000"
|
||||
:color="'#6c7fee'"
|
||||
:size="60"
|
||||
>
|
||||
</fulfilling-bouncing-circle-spinner>
|
||||
<progress-modal
|
||||
:ref="'progressModalRef'"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<progress-modal
|
||||
:ref="'progressModalRef'"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -20,7 +10,6 @@
|
||||
import api from '@/data/api/index'
|
||||
import types from '@/store/modules/download/types'
|
||||
import { mapActions, mapMutations } from 'vuex'
|
||||
import { FulfillingBouncingCircleSpinner } from 'epic-spinners'
|
||||
import { mapFields } from 'vuex-map-fields'
|
||||
import newDownload from '@/factories/file/downloadFactory'
|
||||
import newChannel from '@/factories/file/channelFactory'
|
||||
@@ -31,12 +20,18 @@ import configTable from '@/data/config-table/index'
|
||||
export default {
|
||||
name: 'DownloadOffline',
|
||||
components: {
|
||||
FulfillingBouncingCircleSpinner,
|
||||
progressModal,
|
||||
},
|
||||
data: () => {
|
||||
return {
|
||||
controllerList: [],
|
||||
downloadList: [],
|
||||
format: 'csv',
|
||||
channel: '',
|
||||
metaListNew: [],
|
||||
downloading: false,
|
||||
fileNums: 0,
|
||||
count: 0,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -72,6 +67,153 @@ export default {
|
||||
}
|
||||
return results
|
||||
},
|
||||
writeFiles: async function () {
|
||||
if (this.metaListNew.length !== 0 && this.downloading === false) {
|
||||
let meta
|
||||
const metaID = this.metaListNew.pop()
|
||||
const ret = await api.meta.getByID(metaID)
|
||||
|
||||
if (ret.status === 200) {
|
||||
meta = ret.data[0]
|
||||
}
|
||||
if (meta !== undefined) {
|
||||
this.metaInfo = meta
|
||||
const channelParamObj = configTable.getModeConfig(meta.device.library_name, meta.parameter_set.MODE).channels
|
||||
const channelArray = this.channel === 'all' ? JSON.parse(this.metaInfo.channels) : Object.keys(channelParamObj).filter(ele => ele !== 'time')
|
||||
const channelList = []
|
||||
|
||||
if (meta.device.library_name.indexOf('Neulive') >= 0) {
|
||||
if (channelArray.some(el => el >= 256)) {
|
||||
channelList.push(channelArray.filter(el => (el >= 256 && el <= 259)))
|
||||
channelList.push(channelArray.filter(el => el < 256))
|
||||
} else {
|
||||
channelList.push(channelArray)
|
||||
}
|
||||
} else if (meta.device.library_name.indexOf('Elite') >= 0) {
|
||||
channelList.push(channelArray)
|
||||
}
|
||||
|
||||
this.$refs.progressModalRef.show()
|
||||
|
||||
while (channelList.length > 0) {
|
||||
const channels = channelList.pop()
|
||||
|
||||
let maxSplitFiles = 1
|
||||
let fileIndex = 0
|
||||
|
||||
// find max raw data need sub file
|
||||
for (const rawDataIndex of Object.keys(meta.raw_data)) {
|
||||
let dataLength = 0
|
||||
if (rawDataIndex >= 256) {
|
||||
dataLength = meta.raw_data[rawDataIndex].length
|
||||
} else {
|
||||
dataLength = 10000
|
||||
}
|
||||
|
||||
maxSplitFiles = Math.max(maxSplitFiles, Math.ceil(meta.raw_data[rawDataIndex].length / dataLength))
|
||||
meta.raw_data[rawDataIndex] = this.chunkArray(meta.raw_data[rawDataIndex], dataLength)
|
||||
}
|
||||
|
||||
while (fileIndex < maxSplitFiles) {
|
||||
if (this.downloadInfo === null) {
|
||||
this.downloadInfo = newDownload()
|
||||
}
|
||||
this.downloadInfo.channel = channels
|
||||
// download format
|
||||
this.downloadInfo.format = this.format
|
||||
|
||||
// download device and filename
|
||||
if (meta.device.library_name.indexOf('Neulive') >= 0) {
|
||||
this.downloadInfo.device = [meta.device.library_name.slice(0, 7), meta.device.library_name.slice(7)]
|
||||
if (this.downloadInfo.channel.some(el => el >= 256 && el <= 259)) {
|
||||
this.downloadInfo.filename = meta.name + '-accerlate-' + this.format
|
||||
this.downloadInfo.size = parseInt(parseInt(meta.size) / 76)
|
||||
} else {
|
||||
this.downloadInfo.filename = meta.name + '-' + this.format
|
||||
this.downloadInfo.size = parseInt(meta.size)
|
||||
}
|
||||
} else if (meta.device.library_name.indexOf('Elite') >= 0) {
|
||||
this.downloadInfo.device = [meta.device.library_name.slice(0, 5), meta.device.library_name.slice(5)]
|
||||
this.downloadInfo.filename = meta.name + '-' + (fileIndex + 1).toString()
|
||||
this.downloadInfo.size = parseInt(meta.size)
|
||||
}
|
||||
|
||||
this.$refs.progressModalRef.setTitle(this.downloadInfo.filename)
|
||||
|
||||
// get sampleRate && downloadList
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
if (this.downloadInfo.channelInfo[channel] === undefined) {
|
||||
this.downloadInfo.channelInfo[channel] = newChannel()
|
||||
this.setSampleRateDownload({ channel: channel })
|
||||
}
|
||||
}
|
||||
|
||||
this.clearIDListDownload()
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
this.setIDListDownload({ channel: channel, fileIndex: fileIndex })
|
||||
}
|
||||
|
||||
// start download data
|
||||
fileIndex += 1
|
||||
let rowIndex = 0
|
||||
let columnNum = 0
|
||||
|
||||
const requestArray = []
|
||||
console.time('download')
|
||||
|
||||
while (rowIndex - 10 < this.downloadInfo.maxRows) {
|
||||
this.$refs.progressModalRef.setValue(parseInt((rowIndex / this.downloadInfo.maxRows) * 100))
|
||||
// console.log('rowIndex < this.downloadInfo.maxRows', rowIndex, this.downloadInfo.maxRows)
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
columnNum = this.downloadInfo.channelInfo[channel].downloadIDList.length
|
||||
for (const idx in this.downloadInfo.channelInfo[channel].downloadIDList) {
|
||||
const _idx = parseInt(idx)
|
||||
if (this.downloadInfo.channelInfo[channel].downloadDataBuffer[idx] === undefined) {
|
||||
this.downloadInfo.channelInfo[channel].downloadDataBuffer[idx] = []
|
||||
}
|
||||
// const rawID = this.downloadInfo.channelInfo[channel].downloadIDList[_idx][rowIndex]
|
||||
const rawIDList = this.downloadInfo.channelInfo[channel].downloadIDList[_idx].slice(rowIndex, rowIndex + 10)
|
||||
// console.log(channel, rawIDList)
|
||||
rawIDList.length > 0 && requestArray.push(api.raw.getAttrByIDs(channel, rawIDList, 'id-channel-size-serial_number-start_time-end_time-data'))
|
||||
if (rawIDList.length === 0) columnNum -= 1
|
||||
}
|
||||
}
|
||||
const responseArray = await Promise.all(requestArray)
|
||||
// console.log('responseArray', responseArray)
|
||||
for (const responseIndex in responseArray) {
|
||||
const response = responseArray[responseIndex]
|
||||
// console.log('response', response)
|
||||
const idx = responseIndex % columnNum
|
||||
// console.log('response', response)
|
||||
for (const data of response.data) {
|
||||
const timeUnitScale = channelParamObj.time.unit[channelParamObj.time.downloadUnit]
|
||||
const channelUnitScale = channelParamObj[data.channel]?.unit[channelParamObj[data.channel]?.downloadUnit]
|
||||
// console.log('data', data)
|
||||
const dataArray = data.data.split('"***"').slice(0, -1)
|
||||
// console.log('dataArray', dataArray)
|
||||
for (const raw of dataArray) {
|
||||
const rawArray = raw.split(' ')
|
||||
const newArray = rawArray[0] === '' ? [] : rawArray.map((ele, index) => {
|
||||
return (index % 2 === 0) ? String((parseInt(ele) / timeUnitScale).toFixed(Math.log10(timeUnitScale))) : channelUnitScale ? String((parseInt(ele) / channelUnitScale).toFixed(Math.log10(channelUnitScale))) : ele
|
||||
})
|
||||
this.downloadInfo.channelInfo[data.channel].downloadDataBuffer[idx].push(...newArray)
|
||||
// console.log('rawArray', rawArray)
|
||||
}
|
||||
}
|
||||
}
|
||||
requestArray.length = 0
|
||||
// console.log('this.downloadInfo.channelInfo', this.downloadInfo.channelInfo)
|
||||
// console.log('this.downloadInfo.maxRows', this.downloadInfo.maxRows)
|
||||
// await this.setDataExport({ last: (rowIndex >= this.downloadInfo.maxRows - 1) })
|
||||
rowIndex += 10
|
||||
}
|
||||
await this.setAllExport({ last: (rowIndex >= this.downloadInfo.maxRows - 1) })
|
||||
this.$refs.progressModalRef.setValue(100)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
...mapActions('download',
|
||||
[
|
||||
types.raw.rawDataByID,
|
||||
@@ -97,161 +239,7 @@ export default {
|
||||
},
|
||||
async mounted () {
|
||||
await this.getControllerList()
|
||||
// TODO authorization
|
||||
const format = this.$route.params.format.split('-')[0]
|
||||
const allChannel = this.$route.params.format.split('-')[1]
|
||||
this.metaList = this.$route.params.metaList.split('-')
|
||||
const sd = this.$route.params.sd
|
||||
|
||||
while (this.metaList.length !== 0) {
|
||||
let meta
|
||||
const metaID = this.metaList.pop()
|
||||
const ret = await api.meta.getByID(metaID)
|
||||
|
||||
if (ret.status === 200) {
|
||||
meta = ret.data[0]
|
||||
}
|
||||
if (meta !== undefined) {
|
||||
this.metaInfo = meta
|
||||
const channelParamObj = configTable.getModeConfig(meta.device.library_name, meta.parameter_set.MODE).channels
|
||||
const channelArray = allChannel === 'all' ? JSON.parse(this.metaInfo.channels) : Object.keys(channelParamObj).filter(ele => ele !== 'time')
|
||||
const channelList = []
|
||||
|
||||
if (meta.device.library_name.indexOf('Neulive') >= 0) {
|
||||
if (channelArray.some(el => el >= 256)) {
|
||||
channelList.push(channelArray.filter(el => (el >= 256 && el <= 259)))
|
||||
channelList.push(channelArray.filter(el => el < 256))
|
||||
} else {
|
||||
channelList.push(channelArray)
|
||||
}
|
||||
} else if (meta.device.library_name.indexOf('Elite') >= 0) {
|
||||
channelList.push(channelArray)
|
||||
}
|
||||
|
||||
this.$refs.progressModalRef.show()
|
||||
|
||||
while (channelList.length > 0) {
|
||||
const channels = channelList.pop()
|
||||
|
||||
let maxSplitFiles = 1
|
||||
let fileIndex = 0
|
||||
|
||||
// find max raw data need sub file
|
||||
for (const rawDataIndex of Object.keys(meta.raw_data)) {
|
||||
let dataLength = 0
|
||||
if (rawDataIndex >= 256) {
|
||||
dataLength = meta.raw_data[rawDataIndex].length
|
||||
} else {
|
||||
dataLength = 10000
|
||||
}
|
||||
|
||||
maxSplitFiles = Math.max(maxSplitFiles, Math.ceil(meta.raw_data[rawDataIndex].length / dataLength))
|
||||
meta.raw_data[rawDataIndex] = this.chunkArray(meta.raw_data[rawDataIndex], dataLength)
|
||||
}
|
||||
|
||||
while (fileIndex < maxSplitFiles) {
|
||||
if (this.downloadInfo === null) {
|
||||
this.downloadInfo = newDownload()
|
||||
}
|
||||
this.downloadInfo.channel = channels
|
||||
// download format
|
||||
this.downloadInfo.format = format
|
||||
|
||||
// download device and filename
|
||||
if (meta.device.library_name.indexOf('Neulive') >= 0) {
|
||||
this.downloadInfo.device = [meta.device.library_name.slice(0, 7), meta.device.library_name.slice(7)]
|
||||
if (this.downloadInfo.channel.some(el => el >= 256 && el <= 259)) {
|
||||
this.downloadInfo.filename = meta.name + '-accerlate-' + format
|
||||
this.downloadInfo.filename += (sd !== undefined) ? '-sd' : ''
|
||||
this.downloadInfo.size = parseInt(parseInt(meta.size) / 76)
|
||||
} else {
|
||||
this.downloadInfo.filename = meta.name + '-' + format
|
||||
this.downloadInfo.filename += (sd !== undefined) ? '-sd' : ''
|
||||
this.downloadInfo.size = parseInt(meta.size)
|
||||
}
|
||||
} else if (meta.device.library_name.indexOf('Elite') >= 0) {
|
||||
this.downloadInfo.device = [meta.device.library_name.slice(0, 5), meta.device.library_name.slice(5)]
|
||||
this.downloadInfo.filename = meta.name + '-' + (fileIndex + 1).toString()
|
||||
this.downloadInfo.size = parseInt(meta.size)
|
||||
}
|
||||
|
||||
this.$refs.progressModalRef.setTitle(this.downloadInfo.filename)
|
||||
|
||||
// get sampleRate && downloadList
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
if (this.downloadInfo.channelInfo[channel] === undefined) {
|
||||
this.downloadInfo.channelInfo[channel] = newChannel()
|
||||
this.setSampleRateDownload({ channel: channel })
|
||||
}
|
||||
}
|
||||
|
||||
this.clearIDListDownload()
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
this.setIDListDownload({ channel: channel, fileIndex: fileIndex })
|
||||
}
|
||||
|
||||
// start download data
|
||||
fileIndex += 1
|
||||
let rowIndex = 0
|
||||
let columnNum = 0
|
||||
|
||||
const requestArray = []
|
||||
console.time('download')
|
||||
|
||||
while (rowIndex - 10 < this.downloadInfo.maxRows) {
|
||||
this.$refs.progressModalRef.setValue(parseInt((rowIndex / this.downloadInfo.maxRows) * 100))
|
||||
// console.log('rowIndex < this.downloadInfo.maxRows', rowIndex, this.downloadInfo.maxRows)
|
||||
for (const channel of this.downloadInfo.channel) {
|
||||
columnNum = this.downloadInfo.channelInfo[channel].downloadIDList.length
|
||||
for (const idx in this.downloadInfo.channelInfo[channel].downloadIDList) {
|
||||
const _idx = parseInt(idx)
|
||||
if (this.downloadInfo.channelInfo[channel].downloadDataBuffer[idx] === undefined) {
|
||||
this.downloadInfo.channelInfo[channel].downloadDataBuffer[idx] = []
|
||||
}
|
||||
// const rawID = this.downloadInfo.channelInfo[channel].downloadIDList[_idx][rowIndex]
|
||||
const rawIDList = this.downloadInfo.channelInfo[channel].downloadIDList[_idx].slice(rowIndex, rowIndex + 10)
|
||||
// console.log(channel, rawIDList)
|
||||
rawIDList.length > 0 && requestArray.push(api.raw.getAttrByIDs(channel, rawIDList, 'id-channel-size-serial_number-start_time-end_time-data'))
|
||||
if (rawIDList.length === 0) columnNum -= 1
|
||||
}
|
||||
}
|
||||
const responseArray = await Promise.all(requestArray)
|
||||
// console.log('responseArray', responseArray)
|
||||
for (const responseIndex in responseArray) {
|
||||
const response = responseArray[responseIndex]
|
||||
// console.log('response', response)
|
||||
const idx = responseIndex % columnNum
|
||||
// console.log('response', response)
|
||||
for (const data of response.data) {
|
||||
const timeUnitScale = channelParamObj.time.unit[channelParamObj.time.downloadUnit]
|
||||
const channelUnitScale = channelParamObj[data.channel]?.unit[channelParamObj[data.channel]?.downloadUnit]
|
||||
// console.log('data', data)
|
||||
const dataArray = data.data.split('"***"').slice(0, -1)
|
||||
// console.log('dataArray', dataArray)
|
||||
for (const raw of dataArray) {
|
||||
const rawArray = raw.split(' ')
|
||||
const newArray = rawArray[0] === '' ? [] : rawArray.map((ele, index) => {
|
||||
return (index % 2 === 0) ? String((parseInt(ele) / timeUnitScale).toFixed(Math.log10(timeUnitScale))) : channelUnitScale ? String((parseInt(ele) / channelUnitScale).toFixed(Math.log10(channelUnitScale))) : ele
|
||||
})
|
||||
this.downloadInfo.channelInfo[data.channel].downloadDataBuffer[idx].push(...newArray)
|
||||
// console.log('rawArray', rawArray)
|
||||
}
|
||||
}
|
||||
}
|
||||
requestArray.length = 0
|
||||
// console.log('this.downloadInfo.channelInfo', this.downloadInfo.channelInfo)
|
||||
// console.log('this.downloadInfo.maxRows', this.downloadInfo.maxRows)
|
||||
// await this.setDataExport({ last: (rowIndex >= this.downloadInfo.maxRows - 1) })
|
||||
rowIndex += 10
|
||||
}
|
||||
await this.setAllExport({ last: (rowIndex >= this.downloadInfo.maxRows - 1) })
|
||||
this.$refs.progressModalRef.setValue(100)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
await new Promise(resolve => setTimeout(resolve, 2000)) // sleep
|
||||
window.close()
|
||||
setInterval(this.writeFiles, 1000)
|
||||
},
|
||||
destroyed () {
|
||||
},
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
<template>
|
||||
<div class="file-list">
|
||||
<div class="file-list" @mousedown="unSelectAll">
|
||||
<!-- Move Folder Modal -->
|
||||
<download ref="download_ref"></download>
|
||||
<download-offline ref="download_offline_ref"></download-offline>
|
||||
<folder-modal ref="folder_modal_ref" @refreshPage="refreshPage"></folder-modal>
|
||||
<!-- Create Folder Modal -->
|
||||
<va-modal
|
||||
class="flex sm12 xl12 md12 xs12"
|
||||
v-model="showModal.createFolder"
|
||||
@@ -20,7 +25,7 @@
|
||||
removable
|
||||
/>
|
||||
</va-modal>
|
||||
|
||||
<!-- Edit File Modal -->
|
||||
<va-modal
|
||||
class="flex sm12 xl12 md12 xs12"
|
||||
v-model="showModal.editFile"
|
||||
@@ -48,6 +53,7 @@
|
||||
removable
|
||||
/>
|
||||
</va-modal>
|
||||
<!-- Delete File Modal-->
|
||||
<va-modal
|
||||
v-model="showModal.deleteFile"
|
||||
size="small"
|
||||
@@ -64,6 +70,7 @@
|
||||
<p>Delete File {{ deleteInfo.name }} ? <input type="text" :ref="'delete_input'" style="opacity: 0; line-height: 0;"/></p>
|
||||
</va-modal>
|
||||
|
||||
<!-- Delete MultiFiles Modal -->
|
||||
<va-modal
|
||||
v-model="showModal.deleteMultiFiles"
|
||||
size="small"
|
||||
@@ -81,17 +88,6 @@
|
||||
</va-modal>
|
||||
|
||||
<va-card class="flex sm12 xl12 md12 xs12">
|
||||
<template slot="header">
|
||||
<div class="flex sm12 xl12 md12 xs12" style="text-align: end;">
|
||||
<va-button class="" color="success" v-if="selected.length" @click="downloadSelected" target="_blank" small>
|
||||
DOWNLOAD
|
||||
</va-button>
|
||||
<va-button class="" color="danger" v-if="selected.length" @click="deleteMultiFilesConfirm" target="_blank" small>
|
||||
DELETE
|
||||
</va-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- SearchField & perPageSelect-->
|
||||
<div class="row align--center">
|
||||
<div class="flex xs12 md6">
|
||||
@@ -116,32 +112,46 @@
|
||||
</div>
|
||||
|
||||
<!-- CreateFolder & FilePath -->
|
||||
<div class="flex mb-4">
|
||||
<va-icon
|
||||
name="fa fa-plus"
|
||||
size="1rem"
|
||||
class="mr-2"
|
||||
style="cursor: pointer;"
|
||||
:color="'primary'"
|
||||
@click.native="createFolderConfirm"
|
||||
/>
|
||||
<va-icon
|
||||
name="fa fa-folder-open"
|
||||
size="0.9rem"
|
||||
class="mr-2"
|
||||
style="cursor: pointer;"
|
||||
:color="(currentPathIndex === -1)?'primary':'dark'"
|
||||
@click.native="openHome"
|
||||
/>
|
||||
<span
|
||||
class="mt-0 mb-0 mr-2"
|
||||
v-for="(item, index) in pathLists" :key="index"
|
||||
:style="{ color:(currentPathIndex === index)?'#6c7fee':'#34495e', cursor:'pointer'}"
|
||||
@click="openPath(item,index)"
|
||||
>
|
||||
<span class="mr-1" style="color: #34495e; cursor: default;">/</span>
|
||||
{{ item.name }}
|
||||
</span>
|
||||
<div class="row">
|
||||
<div class="flex d-flex xl8 lg8 sm8 xs8" style="align-items: center;">
|
||||
<div>
|
||||
<va-icon
|
||||
name="fa fa-plus"
|
||||
size="1rem"
|
||||
class="mr-2"
|
||||
style="cursor: pointer;"
|
||||
:color="'primary'"
|
||||
@click.native="createFolderConfirm"
|
||||
/>
|
||||
<va-icon
|
||||
name="fa fa-folder-open"
|
||||
size="0.9rem"
|
||||
class="mr-2"
|
||||
style="cursor: pointer;"
|
||||
:color="(currentPathIndex === -1)?'primary':'dark'"
|
||||
/>
|
||||
<span
|
||||
class="mt-0 mb-0 mr-2"
|
||||
v-for="(item, index) in pathLists" :key="index"
|
||||
:style="{ color:(currentPathIndex === index)?'#6c7fee':'#34495e', cursor:'pointer'}"
|
||||
@click="openPath(item,index)"
|
||||
>
|
||||
<span class="mr-1" style="color: #34495e; cursor: default;">/</span>
|
||||
{{ item.name }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex xl4 lg4 sm4 xs4" style="text-align: end;">
|
||||
<va-button class="" color="primary" v-if="selected.length" @mousedown.stop="showFolderModal" target="_blank" small>
|
||||
MOVE
|
||||
</va-button>
|
||||
<va-button class="" color="success" v-if="selected.length" @mousedown.stop="downloadSelected" target="_blank" small>
|
||||
DOWNLOAD
|
||||
</va-button>
|
||||
<va-button class="" color="danger" v-if="selected.length" @mousedown.stop="deleteMultiFilesConfirm" target="_blank" small>
|
||||
DELETE
|
||||
</va-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- FileListTable -->
|
||||
@@ -160,14 +170,16 @@
|
||||
:fields="fields"
|
||||
:data="filteredData"
|
||||
:per-page="parseInt(perPage)"
|
||||
@row-clicked="openFile"
|
||||
@row-clicked="clickRow"
|
||||
@mouseup.native="mouseUp"
|
||||
@mousedown.native.stop="mouseDown"
|
||||
hoverable
|
||||
clickable
|
||||
v-else
|
||||
:ref="'datatable_ref'"
|
||||
v-else
|
||||
>
|
||||
<template slot="select" slot-scope="props">
|
||||
<va-checkbox :value="props.rowData.checked" @input="select(props.rowData)"/>
|
||||
<va-checkbox :value="props.rowData.checked"/>
|
||||
</template>
|
||||
<template slot="name" slot-scope="props">
|
||||
<va-icon
|
||||
@@ -195,7 +207,7 @@
|
||||
{{transDeviceInfo(props.rowData.device)}}
|
||||
</template>
|
||||
<template slot="actions" slot-scope="props" >
|
||||
<va-popover :message="`sdcard ${props.rowData.name}`" placement="top">
|
||||
<!-- <va-popover :message="`sdcard ${props.rowData.name}`" placement="top">
|
||||
<sd-card-button
|
||||
v-if="(props.rowData.type !== 'folder') && (props.rowData.device.library_name.indexOf('Neulive') >= 0) && (props.rowData.sd_data_record === true)"
|
||||
:meta="props.rowData"
|
||||
@@ -204,26 +216,26 @@
|
||||
@refreshPage="refreshPage"
|
||||
@downloadSdCard="downloadSdCard"
|
||||
/>
|
||||
</va-popover>
|
||||
<va-popover :message="`download ${props.rowData.name} in csv format`" placement="top">
|
||||
</va-popover> -->
|
||||
<va-popover :message="`Download csv`" placement="top">
|
||||
<va-button flat small color="gray" icon="fa fa-download" v-if="props.rowData.type !== 'folder' && props.rowData.device.library_name.indexOf('Neulive') >= 0" @click.stop="downloadCsv(props.rowData)"/>
|
||||
</va-popover>
|
||||
<va-popover :message="`download ${props.rowData.name} in excel format`" placement="top">
|
||||
<va-button flat small color="gray" icon="fa fa-download" v-if="props.rowData.type !== 'folder' && props.rowData.device.library_name.indexOf('Elite') >= 0" @click.stop="downloadExcel(props.rowData)"/>
|
||||
<va-popover :message="`Download excel`" placement="top">
|
||||
<va-button flat small color="gray" icon="fa fa-download" v-if="props.rowData.type !== 'folder' && props.rowData.device.library_name.indexOf('Elite') >= 0" @click.stop="newDownload(props.rowData)"/>
|
||||
</va-popover>
|
||||
<va-popover :message="`download ${props.rowData.name} in csv-edf format`" placement="top">
|
||||
<va-popover :message="`Download edf`" placement="top">
|
||||
<va-button flat small color="gray" icon="fa fa-download" v-if="props.rowData.type !== 'folder' && props.rowData.device.library_name.indexOf('Neulive') >= 0" @click.stop="downloadExcel(props.rowData)"/>
|
||||
</va-popover>
|
||||
<va-popover :message="`replay ${props.rowData.name}`" placement="top">
|
||||
<va-popover :message="`Replay`" placement="top">
|
||||
<va-button flat small color="gray" icon="fa fa-eye" v-if="props.rowData.type !== 'folder'" @click.stop="replay(props.rowData)"/>
|
||||
</va-popover>
|
||||
<va-popover :message="`spike ${props.rowData.name}`" placement="top">
|
||||
<va-popover :message="`Spike`" placement="top">
|
||||
<va-button flat small color="gray" icon="fa fa-filter" v-if="props.rowData.type !== 'folder' && props.rowData.device.library_name.indexOf('Neulive') >= 0" @click.stop="spike(props.rowData)"/>
|
||||
</va-popover>
|
||||
<va-popover :message="`edit ${props.rowData.name}`" placement="top">
|
||||
<va-popover :message="`Edit`" placement="top">
|
||||
<va-button flat small color="gray" icon="fa fa-pencil" @click.stop="editFileConfirm(props.rowData)"/>
|
||||
</va-popover>
|
||||
<va-popover :message="`delete ${props.rowData.name}`" placement="top">
|
||||
<va-popover :message="`Delete`" placement="top">
|
||||
<va-button flat small color="gray" icon="fa fa-trash" @click.stop="deleteFileConfirm(props.rowData)"/>
|
||||
</va-popover>
|
||||
</template>
|
||||
@@ -237,19 +249,25 @@ import { debounce } from 'lodash'
|
||||
import { file } from '../../../data/file/File'
|
||||
import { FulfillingBouncingCircleSpinner } from 'epic-spinners'
|
||||
import api from '../../../data/api/index'
|
||||
import SdCardButton from '../sdcard/SdCardButton.vue'
|
||||
// import SdCardButton from '../sdcard/SdCardButton.vue'
|
||||
import configTable from '@/data/config-table/index.js'
|
||||
import FolderModal from './FolderModal.vue'
|
||||
import Download from '../../download/Download.vue'
|
||||
import DownloadOffline from '../../download/DownloadOffline.vue'
|
||||
|
||||
export default {
|
||||
name: 'FileTable',
|
||||
components: {
|
||||
FulfillingBouncingCircleSpinner,
|
||||
SdCardButton,
|
||||
// SdCardButton,
|
||||
FolderModal,
|
||||
Download,
|
||||
DownloadOffline,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
term: null,
|
||||
perPage: '80',
|
||||
perPage: '40',
|
||||
perPageOptions: ['20', '40', '80', '160'],
|
||||
|
||||
fileLists: [],
|
||||
@@ -296,6 +314,18 @@ export default {
|
||||
},
|
||||
SDuuidList: [],
|
||||
controllerList: [],
|
||||
|
||||
// mouse click times
|
||||
clickCounter: 0,
|
||||
// record the selected index
|
||||
clickRecord: [],
|
||||
// record the target
|
||||
clickTarget: null,
|
||||
// mouseup or not
|
||||
clickStatus: false,
|
||||
// record shift+click target
|
||||
shiftIndexRecord: null,
|
||||
downloadIDList: [],
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -372,6 +402,9 @@ export default {
|
||||
}
|
||||
})
|
||||
},
|
||||
selectedNumber () {
|
||||
return this.fileLists.filter(file => file.checked).length
|
||||
},
|
||||
selected () {
|
||||
return this.fileLists.filter(file => file.checked)
|
||||
},
|
||||
@@ -380,20 +413,28 @@ export default {
|
||||
mqttPub: function (topic, mes) {
|
||||
this.$mqtt.publish(topic, mes)
|
||||
},
|
||||
// stopEvent: function (e) {
|
||||
// console.log(e)
|
||||
// e.stopPropagation()
|
||||
// },
|
||||
select: function (file) {
|
||||
event.stopPropagation()
|
||||
const idx = this.fileLists.findIndex(f => f.id === file.id)
|
||||
showFolderModal: async function () {
|
||||
this.$refs.folder_modal_ref.selected = this.selected
|
||||
await this.$refs.folder_modal_ref.refreshCollection()
|
||||
this.$refs.folder_modal_ref.showModal = true
|
||||
},
|
||||
unSelectAll: function () {
|
||||
this.fileLists.forEach(element => {
|
||||
element.checked = false
|
||||
})
|
||||
},
|
||||
selectConcat: function (idx) {
|
||||
this.fileLists[idx].checked = !this.fileLists[idx].checked
|
||||
},
|
||||
select: function (idx) {
|
||||
this.unSelectAll()
|
||||
this.fileLists[idx].checked = true
|
||||
},
|
||||
search: debounce(function (term) {
|
||||
this.term = term
|
||||
}, 400),
|
||||
transFileSize: function (fileSize) {
|
||||
if (fileSize === undefined) {
|
||||
if (fileSize === undefined || fileSize === -1) {
|
||||
return '--'
|
||||
} else {
|
||||
return this.GLOBAL.transFileSize(fileSize)
|
||||
@@ -416,7 +457,97 @@ export default {
|
||||
return device.device_name + '\n' + this.GLOBAL.transMac(device.device_address)
|
||||
}
|
||||
},
|
||||
clickRow: async function (rowData) {
|
||||
if (window.getSelection().toString() !== '' && this.clickEvent.shiftKey === false) return true
|
||||
window.getSelection().removeAllRanges()
|
||||
// click target id
|
||||
const idx = this.fileLists.findIndex(f => f.id === rowData.id)
|
||||
setTimeout(async () => {
|
||||
this.clickCounter += 1
|
||||
let timeOutTimer
|
||||
// single click
|
||||
if (this.clickCounter === 1) {
|
||||
// meta key or ctrl key
|
||||
if (this.clickEvent.metaKey === true || this.clickEvent.ctrlKey === true) {
|
||||
this.selectConcat(idx)
|
||||
if (this.clickRecord.includes(idx) === false) {
|
||||
this.clickRecord.push(idx)
|
||||
}
|
||||
this.shiftIndexRecord = null
|
||||
} else if (this.clickEvent.shiftKey === true) {
|
||||
// shift key
|
||||
const start = this.clickRecord[this.clickRecord.length - 1]
|
||||
const end = idx
|
||||
// if has shift event has trigger before then reset the checked
|
||||
if (this.shiftIndexRecord !== null) {
|
||||
if (start > this.shiftIndexRecord) {
|
||||
for (let i = start; i >= this.shiftIndexRecord; i--) {
|
||||
this.fileLists[i].checked = false
|
||||
}
|
||||
}
|
||||
if (start < this.shiftIndexRecord) {
|
||||
for (let i = start; i <= this.shiftIndexRecord; i++) {
|
||||
this.fileLists[i].checked = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (start > end) {
|
||||
for (let i = start; i >= end; i--) {
|
||||
this.fileLists[i].checked = true
|
||||
}
|
||||
}
|
||||
if (start < end) {
|
||||
for (let i = start; i <= end; i++) {
|
||||
this.fileLists[i].checked = true
|
||||
}
|
||||
}
|
||||
this.shiftIndexRecord = idx
|
||||
} else {
|
||||
// without any hotKey
|
||||
this.shiftIndexRecord = null
|
||||
this.clickRecord.length = 0
|
||||
this.selectConcat(idx)
|
||||
if (this.clickRecord.includes(idx) === false) {
|
||||
this.clickRecord.push(idx)
|
||||
}
|
||||
}
|
||||
timeOutTimer = setTimeout(() => {
|
||||
this.clickCounter = 0
|
||||
}, 300)
|
||||
} else if (this.clickCounter === 2) {
|
||||
clearTimeout(timeOutTimer)
|
||||
this.clickCounter = 0
|
||||
await this.openFile(rowData)
|
||||
}
|
||||
}, 0)
|
||||
},
|
||||
mouseDown: async function (e) {
|
||||
this.clickEvent = e
|
||||
this.clickStatus = true
|
||||
},
|
||||
mouseUp: function () {
|
||||
this.clickStatus = false
|
||||
},
|
||||
mouseMove: async function (e, rowData) {
|
||||
const idx = this.fileLists.findIndex(f => f.id === rowData.id)
|
||||
if (e.metaKey === true || e.ctrlKey === true) {
|
||||
if (this.clickStatus === true) {
|
||||
const indexOfRecord = this.clickRecord.indexOf(idx)
|
||||
// if (indexOfRecord === this.clickRecord.length - 1) return
|
||||
// console.log('indexOfRecord', indexOfRecord)
|
||||
if (indexOfRecord !== -1) {
|
||||
console.log(idx, 'false')
|
||||
this.clickRecord.splice(indexOfRecord, 1)
|
||||
this.fileLists[idx].checked = false
|
||||
} else {
|
||||
console.log(idx, 'true')
|
||||
this.clickRecord.push(idx)
|
||||
this.fileLists[idx].checked = true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
openFile: async function (info) {
|
||||
if (info.type === 'folder') {
|
||||
this.currentInfo = info
|
||||
@@ -529,56 +660,67 @@ export default {
|
||||
}, 100)
|
||||
},
|
||||
editFile: async function () {
|
||||
// TODO editFile
|
||||
if (this.editInfo.type !== 'folder') {
|
||||
await api.meta.update(this.editInfo.info.id, { name: this.editInfo.changedName })
|
||||
} else {
|
||||
}
|
||||
await this.editFileDone()
|
||||
},
|
||||
checkFileNameValidate: debounce(function (term) {
|
||||
const illegalChar = term.match(/[^(\w\-)]+/gm)
|
||||
this.editInfo.changedName = term
|
||||
if (term.length === 0) {
|
||||
// input text empty
|
||||
this.editInfo.error = true
|
||||
this.editInfo.success = false
|
||||
this.editInfo.errorMessages.pop()
|
||||
this.editInfo.errorMessages.push(this.editInfo.errorMessagesAll[1])
|
||||
} else if (illegalChar !== null) {
|
||||
// input text illegal
|
||||
this.editInfo.error = true
|
||||
this.editInfo.success = false
|
||||
this.editInfo.errorMessages.pop()
|
||||
this.editInfo.errorMessages.push(this.editInfo.errorMessagesAll[0] + ' ' + illegalChar[0])
|
||||
} else {
|
||||
const existedFile = this.fileLists.filter((file) => {
|
||||
if (file.name != null) {
|
||||
return file.name.replace('/', '') === term
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
if (existedFile.length === 0) {
|
||||
this.editInfo.error = false
|
||||
this.editInfo.success = true
|
||||
} else {
|
||||
// file name exist
|
||||
this.editInfo.error = true
|
||||
this.editInfo.success = false
|
||||
this.editInfo.errorMessages.pop()
|
||||
this.editInfo.errorMessages.push(this.editInfo.errorMessagesAll[2])
|
||||
}
|
||||
}
|
||||
}, 200),
|
||||
editFileDone: async function () {
|
||||
const tmpCurrentPage = this.$refs.datatable_ref.currentPage
|
||||
await this.refreshPage()
|
||||
this.$refs.datatable_ref.currentPage = tmpCurrentPage
|
||||
this.$refs.datatable_ref.inputPage(tmpCurrentPage)
|
||||
this.showToast(`${this.editInfo.info.name} -> ${this.editInfo.changedName}`, {
|
||||
position: 'bottom-right',
|
||||
})
|
||||
// TODO editFile
|
||||
if (this.editInfo.info.type === 'folder') {
|
||||
await api.collection.update(this.editInfo.info.id, { name: this.editInfo.changedName })
|
||||
const folder = this.fileLists.find((file) => {
|
||||
if (file.type === 'folder' && this.editInfo.info.id === file.id) return true
|
||||
})
|
||||
folder.name = this.editInfo.changedName
|
||||
} else {
|
||||
await api.meta.update(this.editInfo.info.id, { name: this.editInfo.changedName })
|
||||
const meta = this.fileLists.find((file) => {
|
||||
if (file.type === undefined && this.editInfo.info.id === file.id) return true
|
||||
})
|
||||
meta.name = this.editInfo.changedName
|
||||
}
|
||||
// await this.editFileDone()
|
||||
},
|
||||
checkFileNameValidate: debounce(function (term) {
|
||||
// const illegalChar = term.match(/[^(\w\-)]+/gm)
|
||||
this.editInfo.changedName = term
|
||||
// if (term.length === 0) {
|
||||
// // input text empty
|
||||
// this.editInfo.error = true
|
||||
// this.editInfo.success = false
|
||||
// this.editInfo.errorMessages.pop()
|
||||
// this.editInfo.errorMessages.push(this.editInfo.errorMessagesAll[1])
|
||||
// } else if (illegalChar !== null) {
|
||||
// // input text illegal
|
||||
// this.editInfo.error = true
|
||||
// this.editInfo.success = false
|
||||
// this.editInfo.errorMessages.pop()
|
||||
// this.editInfo.errorMessages.push(this.editInfo.errorMessagesAll[0] + ' ' + illegalChar[0])
|
||||
// } else {
|
||||
// const existedFile = this.fileLists.filter((file) => {
|
||||
// if (file.name != null) {
|
||||
// return file.name.replace('/', '') === term
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
// })
|
||||
// if (existedFile.length === 0) {
|
||||
// this.editInfo.error = false
|
||||
// this.editInfo.success = true
|
||||
// } else {
|
||||
// // file name exist
|
||||
// this.editInfo.error = true
|
||||
// this.editInfo.success = false
|
||||
// this.editInfo.errorMessages.pop()
|
||||
// this.editInfo.errorMessages.push(this.editInfo.errorMessagesAll[2])
|
||||
// }
|
||||
// }
|
||||
}, 200),
|
||||
editFileDone: async function () {
|
||||
// const tmpCurrentPage = this.$refs.datatable_ref.currentPage
|
||||
// await this.refreshPage()
|
||||
// if (this.$refs.datatable_ref) {
|
||||
// this.$refs.datatable_ref.currentPage = tmpCurrentPage
|
||||
// this.$refs.datatable_ref.inputPage(tmpCurrentPage)
|
||||
// }
|
||||
},
|
||||
undoEdit: function () {
|
||||
this.editInfo.success = false
|
||||
@@ -602,10 +744,19 @@ export default {
|
||||
},
|
||||
deleteFolder: async function (id) {
|
||||
await api.collection.update(id, { deleted: true })
|
||||
const childrenCollection = await api.collection.getByParent('folder', id)
|
||||
const childrenMeta = await api.meta.getByParent('folder', id)
|
||||
for (const collection of childrenCollection.data) {
|
||||
await this.deleteFolder(collection.id)
|
||||
}
|
||||
for (const meta of childrenMeta.data) {
|
||||
await this.deleteSingleFileByDeleteInfo(meta.id)
|
||||
}
|
||||
await api.collection.clearDel()
|
||||
},
|
||||
deleteSingleFileByDeleteInfo: async function () {
|
||||
await api.meta.update(this.deleteInfo.metaID, { deleted: true })
|
||||
deleteSingleFileByDeleteInfo: async function (metaID) {
|
||||
if (metaID === undefined) metaID = this.deleteInfo.metaID
|
||||
await api.meta.update(metaID, { deleted: true })
|
||||
await api.meta.clearDel()
|
||||
},
|
||||
deleteFileConfirm: function (info) {
|
||||
@@ -629,9 +780,19 @@ export default {
|
||||
deleteFileDone: async function () {
|
||||
const tmpCurrentPage = this.$refs.datatable_ref.currentPage
|
||||
// rebuild table
|
||||
this.fileLists = this.fileLists.filter(file => {
|
||||
return file.id !== this.deleteInfo.metaID
|
||||
})
|
||||
if (this.deleteInfo.metaID) {
|
||||
this.fileLists = this.fileLists.filter(file => {
|
||||
return file.id !== this.deleteInfo.metaID
|
||||
})
|
||||
}
|
||||
if (this.deleteInfo.folderID) {
|
||||
this.fileLists = this.fileLists.filter(file => {
|
||||
if (file.type === 'folder') {
|
||||
return file.id !== this.deleteInfo.folderID
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
// await this.refreshPage()
|
||||
await this.$refs.datatable_ref.inputPage(1)
|
||||
await this.$refs.datatable_ref.inputPage(tmpCurrentPage)
|
||||
@@ -651,7 +812,7 @@ export default {
|
||||
this.showToast('deleting file...', {
|
||||
position: 'bottom-right',
|
||||
})
|
||||
this.deleteSelected()
|
||||
await this.deleteSelected()
|
||||
},
|
||||
inputFieldReset: function (info) {
|
||||
info.name = ''
|
||||
@@ -689,23 +850,66 @@ export default {
|
||||
// this.$refs.datatable_ref.refresh()
|
||||
// this.$refs.datatable_ref.currentPage = 1
|
||||
},
|
||||
downloadSelected: function () {
|
||||
for (let i = 0; i < this.selected.length; i++) {
|
||||
const meta = this.selected[i]
|
||||
this.downloadExcel(meta)
|
||||
getAllChildrenByParent: async function (collection) {
|
||||
const childrenCollection = await api.collection.getByParent('folder', collection)
|
||||
const childrenMeta = await api.meta.getByParent('folder', collection)
|
||||
for (const collection of childrenCollection.data) {
|
||||
await this.getAllChildrenByParent(collection.id)
|
||||
}
|
||||
for (const meta of childrenMeta.data) {
|
||||
this.downloadIDList.push(meta.id)
|
||||
}
|
||||
},
|
||||
async deleteSelected () {
|
||||
downloadSelected: async function () {
|
||||
this.downloadIDList.length = 0
|
||||
const meta = this.selected
|
||||
if (Array.isArray(meta) === true) {
|
||||
for (const ele of meta) {
|
||||
if (ele.type === 'folder') {
|
||||
await this.getAllChildrenByParent(ele.id)
|
||||
} else {
|
||||
this.downloadIDList.push(ele.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
const connectCheck = await api.connection.check()
|
||||
if (connectCheck.status === 200) {
|
||||
this.$refs.download_ref.count = 0
|
||||
this.$refs.download_ref.fileNums = this.downloadIDList.length
|
||||
this.$refs.download_ref.metaListNew.push(...this.downloadIDList)
|
||||
} else {
|
||||
this.$refs.download_offline_ref.count = 0
|
||||
this.$refs.download_offline_ref.fileNums = this.downloadIDList.length
|
||||
this.$refs.download_offline_ref.metaListNew.push(...this.downloadIDList)
|
||||
}
|
||||
},
|
||||
newDownload: async function (data) {
|
||||
const connectCheck = await api.connection.check()
|
||||
if (connectCheck.status === 200) {
|
||||
this.$refs.download_ref.fileNums = 1
|
||||
this.$refs.download_ref.metaListNew.push(data.id)
|
||||
} else {
|
||||
this.$refs.download_offline_ref.fileNums = 1
|
||||
this.$refs.download_offline_ref.metaListNew.push(data.id)
|
||||
}
|
||||
},
|
||||
deleteSelected: async function () {
|
||||
for (let i = 0; i < this.selected.length; i++) {
|
||||
const meta = this.selected[i]
|
||||
this.fillDeleteInfo(meta)
|
||||
await this.deleteSingleFileByDeleteInfo()
|
||||
if (this.deleteInfo.metaID === undefined) {
|
||||
await this.deleteFolder(this.deleteInfo.folderID)
|
||||
} else {
|
||||
await this.deleteSingleFileByDeleteInfo()
|
||||
}
|
||||
this.showToast(`deleted ${this.deleteInfo.name}`, {
|
||||
position: 'bottom-right',
|
||||
})
|
||||
}
|
||||
const tmpCurrentPage = this.$refs.datatable_ref.currentPage
|
||||
await this.refreshPage()
|
||||
// filter the checked files
|
||||
this.fileLists = this.fileLists.filter((file) => { return file.checked === false })
|
||||
await this.$refs.datatable_ref.inputPage(1)
|
||||
await this.$refs.datatable_ref.inputPage(tmpCurrentPage)
|
||||
},
|
||||
downloadCsv: async function (meta) {
|
||||
@@ -718,20 +922,26 @@ export default {
|
||||
}
|
||||
},
|
||||
downloadExcel: async function (meta) {
|
||||
this.downloadIDList.length = 0
|
||||
const href = location.href.split('/')[2]
|
||||
const connectCheck = await api.connection.check()
|
||||
if (meta.device.library_name.indexOf('Elite') >= 0) {
|
||||
if (connectCheck.status === 200) {
|
||||
window.open('http://' + href + '/#/download/online/excel/' + meta.id)
|
||||
} else {
|
||||
window.open('http://' + href + '/#/download/offline/excel/' + meta.id)
|
||||
}
|
||||
} else if (meta.device.library_name.indexOf('Neulive') >= 0) {
|
||||
if (connectCheck.status === 200) {
|
||||
window.open('http://' + href + '/#/download/online/csv-edf/' + meta.id)
|
||||
} else {
|
||||
window.open('http://' + href + '/#/download/offline/csv-edf/' + meta.id)
|
||||
let metaID = ''
|
||||
if (Array.isArray(meta) === true) {
|
||||
for (const ele of meta) {
|
||||
if (ele.type === 'folder') {
|
||||
await this.getAllChildrenByParent(ele.id)
|
||||
} else {
|
||||
this.downloadIDList.push(ele.id)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.downloadIDList.push(meta.id)
|
||||
}
|
||||
metaID = this.downloadIDList.join('-')
|
||||
if (connectCheck.status === 200) {
|
||||
window.open('http://' + href + '/#/download/online/excel/' + metaID)
|
||||
} else {
|
||||
window.open('http://' + href + '/#/download/offline/excel/' + metaID)
|
||||
}
|
||||
},
|
||||
downloadSdCard: async function (meta) {
|
||||
@@ -792,8 +1002,16 @@ export default {
|
||||
const controllerList = await api.controller.getAll()
|
||||
this.controllerList = controllerList.data
|
||||
this.getSDuuidList()
|
||||
window.addEventListener('keypress', (e) => {
|
||||
this.keyboardEvent = e
|
||||
})
|
||||
},
|
||||
destroyed () {
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.text-not-select {
|
||||
user-select: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
<template>
|
||||
<va-modal
|
||||
class="flex sm12 xl12 md12 xs12"
|
||||
v-model="showModal"
|
||||
size="small"
|
||||
:title="'MOVE'"
|
||||
:okText=" $t('modal.confirm') "
|
||||
@ok="moveFolder()"
|
||||
@cancel="cancel()"
|
||||
>
|
||||
<div class="row flex sm12 xl12 md12 xs12">
|
||||
<va-select
|
||||
v-model="destination"
|
||||
:options="option"
|
||||
class="va-select-without-margin"
|
||||
searchable
|
||||
/>
|
||||
</div>
|
||||
</va-modal>
|
||||
</template>
|
||||
<script>
|
||||
import api from '@/data/api/index'
|
||||
|
||||
export default {
|
||||
name: 'aaa',
|
||||
data: () => {
|
||||
return {
|
||||
showModal: false,
|
||||
option: [],
|
||||
destination: '',
|
||||
selected: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
cancel: function () {
|
||||
this.destination = ''
|
||||
this.selected = []
|
||||
},
|
||||
refreshCollection: async function () {
|
||||
await this.getAllCollection()
|
||||
},
|
||||
moveFolder: async function () {
|
||||
for (const e of this.selected) {
|
||||
if (e.type === 'folder') {
|
||||
await api.collection.update(e.id, {
|
||||
parent: {
|
||||
folder: [this.destination.id],
|
||||
},
|
||||
})
|
||||
}
|
||||
if (e.type === undefined) {
|
||||
await api.meta.update(e.id, {
|
||||
parent: {
|
||||
folder: [this.destination.id],
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
this.cancel()
|
||||
this.$emit('refreshPage')
|
||||
},
|
||||
getAllCollection: async function () {
|
||||
// get all collections by api
|
||||
const collectionResponse = await api.collection.getAll()
|
||||
// filter the root folder & select folder itself
|
||||
const allCollection = collectionResponse.data.filter((ele) => {
|
||||
return ele.name !== 'root' && this.selected.findIndex(v => v.id === ele.id && v.type === 'folder') === -1
|
||||
})
|
||||
// create a new list of collection contain text for display
|
||||
const newCollection = allCollection.map((ele) => {
|
||||
let parentName = ''
|
||||
// if has parent
|
||||
if (Object.keys(ele.parent).length > 0) {
|
||||
// get parent name
|
||||
for (const id of ele.parent.folder) {
|
||||
const parent = allCollection.find((v) => {
|
||||
return v.id === id
|
||||
})
|
||||
if (parent) {
|
||||
parentName = parent.name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if parent name is admin then the name is remain origin
|
||||
if (ele.name === 'admin' || parentName === 'admin') {
|
||||
ele.text = ele.name
|
||||
} else {
|
||||
// if not the name contain it's parent
|
||||
ele.text = parentName + ' / ' + ele.name
|
||||
}
|
||||
return ele
|
||||
})
|
||||
this.option = newCollection
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style></style>
|
||||
@@ -15,6 +15,7 @@
|
||||
:mask-color="'rgba(0, 0, 0, 0)'"
|
||||
:visible.sync="taskViewPanel.show"
|
||||
:title="(taskViewPanel.type === 1) ? 'Device' : (taskViewPanel.type === 3) ? 'Condition' : (taskViewPanel.type === 4) ? 'Parameter' : ''"
|
||||
@closed="onClosing"
|
||||
resizable
|
||||
>
|
||||
<project-task/>
|
||||
@@ -100,6 +101,9 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
onClosing: async function () {
|
||||
await this.saveProject(this.getSelectProject)
|
||||
},
|
||||
pageToast: function (mes) {
|
||||
this.showToast(
|
||||
mes,
|
||||
@@ -163,14 +167,6 @@ export default {
|
||||
},
|
||||
saveProject: async function (project) {
|
||||
this.updateProject({ project: project, api: this.API })
|
||||
this.showToast(
|
||||
'project update finish',
|
||||
{
|
||||
icon: 'fa-bell',
|
||||
position: 'bottom-right',
|
||||
duration: 5000,
|
||||
},
|
||||
)
|
||||
},
|
||||
detect: async function (device) {
|
||||
this.mqttPub(taskInfo.getTaskInfo().controllerID + '_user', JSON.stringify({
|
||||
|
||||
@@ -40,13 +40,20 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
configList () {
|
||||
if (this.filterText === '') return this.projectConfigList
|
||||
return this.projectConfigList.filter(ele => ele.name.includes(this.filterText))
|
||||
const projectList = this.projectConfigList
|
||||
projectList.sort((a, b) => {
|
||||
const date1 = new Date(a.created_at).getTime()
|
||||
const date2 = new Date(b.created_at).getTime()
|
||||
return date2 - date1
|
||||
})
|
||||
if (this.filterText === '') return projectList
|
||||
return projectList.filter(ele => ele.name.includes(this.filterText))
|
||||
},
|
||||
|
||||
...mapFields('project', [
|
||||
'projectConfigList',
|
||||
'projectSelectIndex',
|
||||
'projectTableSelectIndex',
|
||||
]),
|
||||
},
|
||||
data () {
|
||||
@@ -83,6 +90,7 @@ export default {
|
||||
select: function (index) {
|
||||
this.selectProjectIndex = index
|
||||
this.selectDeleteIndex = -1
|
||||
this.projectTableSelectIndex = -1
|
||||
this.selectProject({ index: index })
|
||||
},
|
||||
|
||||
|
||||
@@ -61,7 +61,10 @@ export default {
|
||||
},
|
||||
|
||||
taskDevice () {
|
||||
return this.getSelectTask.device
|
||||
if (this.getSelectTask.device) {
|
||||
return this.getSelectTask.device
|
||||
}
|
||||
return null
|
||||
},
|
||||
...mapGetters('project', [
|
||||
types.project.getSelect,
|
||||
|
||||
@@ -67,7 +67,8 @@ export default {
|
||||
condition.select = !condition.select
|
||||
},
|
||||
setParameter: function (name, value) {
|
||||
this.parameter = Object.assign({}, this.parameter)
|
||||
// this.parameter = Object.assign({}, this.parameter)
|
||||
this.parameter[name] = value
|
||||
|
||||
if (this.parameterUUID === '') {
|
||||
this.parameterUUID = this.GLOBAL.getUUID()
|
||||
@@ -106,7 +107,7 @@ export default {
|
||||
this.parameterUUID = Object.keys(parameterSet)[0]
|
||||
const param = Object.values(parameterSet)[0]
|
||||
const modeOption = this.$refs.device_parameter_ref.workingModeOptions.find(ele => ele.id === param.MODE)
|
||||
this.$refs.device_parameter_ref.workingModeSelectChange(modeOption)
|
||||
this.$refs.device_parameter_ref.workingModeSelectChange(modeOption, false)
|
||||
this.parameter = Object.assign(this.parameter, Object.values(parameterSet)[0])
|
||||
} else {
|
||||
const defaultMode = this.config.MODE_OPTIONS.find(ele => ele.description === 'Idle')
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</div>
|
||||
<div v-else>
|
||||
<project-menu @detect="detect" @save_project="save"/>
|
||||
<project-table/>
|
||||
<project-table @save="save"/>
|
||||
<div align="right" v-if="lockMode === false">
|
||||
<button class="project-start-btn" @click="start">
|
||||
<div>
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<template>
|
||||
<div>
|
||||
<project-device @showDeviceModal="showDeviceModal" @save="saveProject"></project-device>
|
||||
<div class="flex d-flex sm12 xs12 md6 xl4 px-0">
|
||||
<add-task/>
|
||||
<add-task @save="saveProject"/>
|
||||
<div>
|
||||
<button class="add-cycle-btn" @click="showCycleModal">
|
||||
<div class="add-cycle-text">
|
||||
@@ -10,23 +11,28 @@
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<button class="copy-project-btn" @click="copyTask({ project: getSelectProject, index: projectTableSelectIndex})">
|
||||
<button class="copy-project-btn" @click="() => {
|
||||
copyTask({ project: getSelectProject, index: projectTableSelectIndex})
|
||||
saveProject()
|
||||
}">
|
||||
<img class="img-vertical-center" src="@/assets/img/project/copy.svg">
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<button class="copy-project-btn" @click="saveProject">
|
||||
<button class="copy-project-btn" @click="saveProject(true)">
|
||||
<img class="img-vertical-center" src="@/assets/img/project/save.svg">
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<button class="copy-project-btn" @click="deleteTask({ project: getSelectProject, index: projectTableSelectIndex})">
|
||||
<button class="copy-project-btn" @click="() => {
|
||||
deleteTask({ project: getSelectProject, index: projectTableSelectIndex})
|
||||
saveProject()
|
||||
}">
|
||||
<img class="img-vertical-center" src="@/assets/img/project/delete.svg">
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<project-device @showDeviceModal="showDeviceModal"></project-device>
|
||||
<new-device-modal ref="device_modal_ref" @detect="detect"></new-device-modal>
|
||||
<new-device-modal ref="device_modal_ref" @detect="detect" @save="saveProject"></new-device-modal>
|
||||
<cycle-modal ref="cycle_modal_ref" @createCycle="createCycle"></cycle-modal>
|
||||
</div>
|
||||
</template>
|
||||
@@ -82,7 +88,17 @@ export default {
|
||||
this.$refs.cycle_modal_ref.show()
|
||||
this.$refs.cycle_modal_ref.reset()
|
||||
},
|
||||
saveProject: function () {
|
||||
saveProject: function (showMessage = false) {
|
||||
if (showMessage === true) {
|
||||
this.showToast(
|
||||
'project update finish',
|
||||
{
|
||||
icon: 'fa-bell',
|
||||
position: 'bottom-right',
|
||||
duration: 5000,
|
||||
},
|
||||
)
|
||||
}
|
||||
this.$emit('save_project', this.getSelectProject)
|
||||
},
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<template>
|
||||
<div>
|
||||
<button class="add-task-btn" @click="createTask">
|
||||
<button class="add-task-btn" @click="() => {
|
||||
createTask()
|
||||
save()
|
||||
}">
|
||||
<div class="add-task-text">
|
||||
<p>Add Task</p>
|
||||
</div>
|
||||
@@ -22,13 +25,12 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
save: function () {
|
||||
this.$emit('save')
|
||||
},
|
||||
...mapActions('project',
|
||||
[
|
||||
types.task.init,
|
||||
types.task.create,
|
||||
types.task.save,
|
||||
types.task.delete,
|
||||
types.task.select,
|
||||
],
|
||||
),
|
||||
},
|
||||
|
||||
@@ -135,7 +135,6 @@ export default {
|
||||
this.showModal = false
|
||||
},
|
||||
createCycle: async function () {
|
||||
this.showModal = false
|
||||
const project = this.getSelectProject
|
||||
if (Object.keys(this.cycleInfo).length === 0) {
|
||||
this.$emit('createCycle', this.task)
|
||||
@@ -182,7 +181,8 @@ export default {
|
||||
await this.swapTask({ project: project, originIndex: originEndIndex, newIndex: newEndIndex + 1 })
|
||||
}
|
||||
}
|
||||
|
||||
this.$emit('save')
|
||||
this.showModal = false
|
||||
return true
|
||||
},
|
||||
removeCycle: async function () {
|
||||
@@ -199,6 +199,7 @@ export default {
|
||||
const originEndIndex = await this.getIndexTask({ project: project, uuid: this.cycleInfo.range[1] })
|
||||
await this.deleteTask({ project: project, index: originEndIndex })
|
||||
|
||||
this.$emit('save')
|
||||
this.showModal = false
|
||||
return true
|
||||
},
|
||||
|
||||
@@ -101,10 +101,12 @@ export default {
|
||||
if (this.deviceList[this.deviceSelect]) {
|
||||
this.device.pair = this.deviceList[this.deviceSelect].macAddress
|
||||
}
|
||||
this.$emit('save')
|
||||
this.hide()
|
||||
},
|
||||
removeDevice: function () {
|
||||
this.deleteDeviceProject({ deviceKey: this.key })
|
||||
this.$emit('save')
|
||||
this.hide()
|
||||
},
|
||||
getDeviceList: async function (device) {
|
||||
|
||||
@@ -92,6 +92,7 @@ export default {
|
||||
pairStatus: 1,
|
||||
order: this.getDeviceMaxOrderProject,
|
||||
})
|
||||
this.$emit('save')
|
||||
return true
|
||||
},
|
||||
clickShowDevice: async function (library) {
|
||||
@@ -103,6 +104,7 @@ export default {
|
||||
pairStatus: 0,
|
||||
order: this.getDeviceMaxOrderProject,
|
||||
})
|
||||
this.$emit('save')
|
||||
return false
|
||||
},
|
||||
cancelSelectDevice: function () {
|
||||
@@ -113,6 +115,7 @@ export default {
|
||||
},
|
||||
deleteDevice: function (deviceIndex) {
|
||||
this.deleteDeviceProject({ index: deviceIndex })
|
||||
this.$emit('save')
|
||||
},
|
||||
handleMove (e) {
|
||||
const { index, futureIndex } = e.draggedContext
|
||||
@@ -131,6 +134,7 @@ export default {
|
||||
deviceList[keyOld][key] = deviceListTemp[this.futureIndex][1][key]
|
||||
deviceList[keyNew][key] = deviceListTemp[this.index][1][key]
|
||||
}
|
||||
this.$emit('save')
|
||||
},
|
||||
...mapActions('project',
|
||||
[
|
||||
|
||||
@@ -15,7 +15,10 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<!-- <tbody> -->
|
||||
<vuedraggable :disabled="lockMode === true || inputMode === true" class="draggable" :list="getSelectProject.task" @end="rearrangeTask({ project: getSelectProject })" tag="tbody" animation="500">
|
||||
<vuedraggable :disabled="lockMode === true || inputMode === true" class="draggable" :list="getSelectProject.task" @end="()=> {
|
||||
rearrangeTask({ project: getSelectProject })
|
||||
saveProject()
|
||||
}" tag="tbody" animation="500">
|
||||
<template class="item" v-for="(task, taskIndex) in getSelectProject.task">
|
||||
<tr
|
||||
v-if="task.type === 'cycle'"
|
||||
@@ -254,7 +257,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<cycle-modal ref="cycle_modal_ref"></cycle-modal>
|
||||
<cycle-modal ref="cycle_modal_ref" @save="saveProject"></cycle-modal>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -360,6 +363,7 @@ export default {
|
||||
if (a === undefined) return
|
||||
newTaskList.filter(ele => ele != null)
|
||||
this.rearrangeTask({ project: this.getSelectProject })
|
||||
this.saveProject()
|
||||
},
|
||||
swapTask: function (taskIndex, upDown) {
|
||||
taskIndex = parseInt(taskIndex)
|
||||
@@ -373,11 +377,13 @@ export default {
|
||||
this.getSelectProject.task.splice(taskIndex + 1, 1, a)
|
||||
}
|
||||
this.rearrangeTask({ project: this.getSelectProject })
|
||||
this.saveProject()
|
||||
},
|
||||
delSelected: function () {
|
||||
for (const indexSelected of this.tableColumn.checked) {
|
||||
this.deleteTask({ project: this.getSelectProject, index: indexSelected })
|
||||
}
|
||||
this.saveProject()
|
||||
},
|
||||
delAction: function (task, actionKey, conditionKey) {
|
||||
const _action = JSON.parse(JSON.stringify(task.action))
|
||||
@@ -388,6 +394,12 @@ export default {
|
||||
|
||||
task.action = _action
|
||||
task.condition = _condition
|
||||
|
||||
this.saveProject()
|
||||
},
|
||||
saveProject: function () {
|
||||
console.log('saveProject')
|
||||
this.$emit('save', this.getSelectProject)
|
||||
},
|
||||
trigger_button: function (projectID) {
|
||||
console.log('project', projectID)
|
||||
@@ -410,6 +422,8 @@ export default {
|
||||
this.inputMode = false
|
||||
this.tableColumn[tag] = -1
|
||||
}
|
||||
|
||||
this.saveProject()
|
||||
},
|
||||
switchCycle: function (tag, index, projectID, task) {
|
||||
this.switchInput(tag, index)
|
||||
@@ -422,6 +436,7 @@ export default {
|
||||
index: cycleInfo[0],
|
||||
content: { id: this.inputSaved },
|
||||
}))
|
||||
this.$emit('save', this.getSelectProject)
|
||||
},
|
||||
selectAll: function (selectedArray) {
|
||||
const totalRange = [...Array(this.getSelectProject.task.length).keys()].map(idx => String(idx))
|
||||
|
||||
@@ -130,17 +130,51 @@ export default {
|
||||
if (device === undefined) return
|
||||
return device.configuration.MODE
|
||||
},
|
||||
getChannelConfiguration: function () {
|
||||
const device = this.deviceListNew.find(ele => String(ele.memory_board) === String(this.chartData[this.chartID].mappingID))
|
||||
if (device === undefined) return
|
||||
return configTable.getChannelConfig(device.configuration._LIBRARY_, device.configuration.MODE)
|
||||
},
|
||||
// set a new display tool
|
||||
setRealTime: function (plotIndex, curveIndex) {
|
||||
// construct realTime object, i.e., record the coressponding value and unit
|
||||
// the formate imitates the data.gridSource
|
||||
const channelInfo = this.getChannelConfiguration()
|
||||
if (this.data !== undefined && this.data.gridSource !== undefined) {
|
||||
const x = this.data.gridSource[plotIndex][curveIndex].xSource
|
||||
const y = this.data.gridSource[plotIndex][curveIndex].ySource
|
||||
let _xPhysicsQuantity = this.data.gridSource[plotIndex][curveIndex].name.split('_')[0].split('-').at(-1)
|
||||
let _yPhysicsQuantity = this.data.gridSource[plotIndex][curveIndex].name.split('_')[1].split('-').at(-1)
|
||||
if (!_xPhysicsQuantity.includes('ZReal') && !_xPhysicsQuantity.includes('ZImag')) {
|
||||
_xPhysicsQuantity = _xPhysicsQuantity.substring(0, 1)
|
||||
} else {
|
||||
_xPhysicsQuantity = _xPhysicsQuantity.substring(0, 5)
|
||||
}
|
||||
if (!_yPhysicsQuantity.includes('ZReal') && !_yPhysicsQuantity.includes('ZImag')) {
|
||||
_yPhysicsQuantity = _yPhysicsQuantity.substring(0, 1)
|
||||
} else {
|
||||
_yPhysicsQuantity = _yPhysicsQuantity.substring(0, 5)
|
||||
}
|
||||
// console.log('2', _xPhysicsQuantity, _yPhysicsQuantity)
|
||||
// Potential
|
||||
if (_xPhysicsQuantity === 'P') _xPhysicsQuantity = 'V'
|
||||
if (_yPhysicsQuantity === 'P') _yPhysicsQuantity = 'V'
|
||||
const [_xAxis, _yAxis] = this.chartRouter.getChartTable(_xPhysicsQuantity, _yPhysicsQuantity)
|
||||
// console.log('2', _xPhysicsQuantity, _yPhysicsQuantity)
|
||||
let [_xAxis, _yAxis] = this.chartRouter.getChartTable(_xPhysicsQuantity, _yPhysicsQuantity)
|
||||
if (typeof _xAxis !== 'object') {
|
||||
if (x.name === 'Time') {
|
||||
_xAxis = { default: channelInfo.time }
|
||||
} else {
|
||||
_xAxis = { default: channelInfo[x.channel - 1] }
|
||||
}
|
||||
}
|
||||
if (typeof _yAxis !== 'object') {
|
||||
if (y.name === 'Time') {
|
||||
_yAxis = { default: channelInfo.time }
|
||||
} else {
|
||||
_yAxis = { default: channelInfo[y.channel - 1] }
|
||||
}
|
||||
}
|
||||
const _realTime = JSON.parse(JSON.stringify(this.realTime))
|
||||
const _newCurve = {}
|
||||
// set name, sourceIndex in data.series
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
/>
|
||||
</div>
|
||||
<!-- ZM15-PulseSensingMode -->
|
||||
<div v-else-if="library && library.includes('EDC') && parameter.MODE === 14">
|
||||
<div v-else-if="library && (library.includes('EDC') || library.includes('BAT')) && parameter.MODE === 14">
|
||||
<EliteParameterRecordingElitePulseSensing
|
||||
:parameter="parameter"
|
||||
:device="device"
|
||||
@@ -59,7 +59,7 @@
|
||||
/>
|
||||
</div>
|
||||
<!-- ZM15-DPVMode -->
|
||||
<div v-else-if="library && library.includes('EDC') && parameter.MODE === 15">
|
||||
<div v-else-if="library && (library.includes('EDC') || library.includes('BAT')) && parameter.MODE === 15">
|
||||
<EliteParameterRecordingEliteDPV
|
||||
:parameter="parameter"
|
||||
:device="device"
|
||||
@@ -70,7 +70,7 @@
|
||||
/>
|
||||
</div>
|
||||
<!-- ZM15-OtherModes -->
|
||||
<div v-else-if="library && library.includes('EDC')">
|
||||
<div v-else-if="library && (library.includes('EDC') || library.includes('BAT'))">
|
||||
<va-tree-category
|
||||
v-for="name in parameterArrayInMode"
|
||||
:key="name"
|
||||
@@ -257,16 +257,18 @@ export default {
|
||||
},
|
||||
refresh () {
|
||||
},
|
||||
workingModeSelectChange (val) {
|
||||
if (val === undefined) return
|
||||
workingModeSelectChange (val, reset = true) {
|
||||
if (val === undefined || this.parameter.MODE === undefined) return
|
||||
this.workingModeSelect = val
|
||||
// console.log('workingModeSelectChange', this.workingModeSelect, this.parameter.MODE)
|
||||
|
||||
if (this.workingModeSelect.id !== this.parameter.MODE) {
|
||||
this.parameterChange('MODE', this.workingModeSelect.id)
|
||||
if (this.resetParameterModeChange === true) {
|
||||
for (const parameter of this.parameterTable.MODE[this.workingModeSelect.id].parameter) {
|
||||
this.$emit('setParameter', parameter, this.parameterTable[parameter].defaultValue)
|
||||
if (reset === true) {
|
||||
for (const parameter of this.parameterTable.MODE[this.workingModeSelect.id].parameter) {
|
||||
this.$emit('setParameter', parameter, this.parameterTable[parameter].defaultValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -520,7 +520,7 @@ const EliteZM15 = {
|
||||
return parseInt((parseFloat(val) - 25000) / 5) / scale
|
||||
},
|
||||
},
|
||||
VOLT_VSCAN: {
|
||||
CA_VOLT: {
|
||||
type: 'number',
|
||||
showName: 'Volt (v.s. ref)',
|
||||
componentType: 'input-range',
|
||||
|
||||
@@ -93,16 +93,20 @@ const EliteEIS = {
|
||||
{ value: 1, label: '2' },
|
||||
{ value: 2, label: '3' },
|
||||
{ value: 3, label: '4' },
|
||||
{ value: 4, label: 'Auto' },
|
||||
{ value: 4, label: '5' },
|
||||
{ value: 5, label: '6' },
|
||||
{ value: 6, label: '7' },
|
||||
{ value: 7, label: '8' },
|
||||
{ value: 8, label: 'Auto' },
|
||||
],
|
||||
range: ['1', '2', '3', '4', 'Auto'],
|
||||
defaultValue: 4,
|
||||
range: ['1', '2', '3', '4', '5', '6', '7', '8', 'Auto'],
|
||||
defaultValue: 8,
|
||||
outputRawData: (val) => {
|
||||
const numArr = ['1', '2', '3', '4', 'Auto']
|
||||
const numArr = ['1', '2', '3', '4', '5', '6', '7', '8', 'Auto']
|
||||
return numArr.indexOf(val.toString())
|
||||
},
|
||||
outputReadabilityData: (idx) => {
|
||||
const numArr = ['1', '2', '3', '4', 'Auto']
|
||||
const numArr = ['1', '2', '3', '4', '5', '6', '7', '8', 'Auto']
|
||||
return numArr[parseInt(idx)]
|
||||
},
|
||||
},
|
||||
@@ -158,7 +162,7 @@ const EliteEIS = {
|
||||
outputReadabilityData: (val, scale = 1) => {
|
||||
return Math.round(parseInt(val) / 2047 * 800) / scale
|
||||
},
|
||||
defaultValue: 25,
|
||||
defaultValue: 26,
|
||||
defaultUnit: 'mV',
|
||||
downloadUnit: 'mV',
|
||||
unit: {
|
||||
@@ -289,7 +293,7 @@ const EliteEIS = {
|
||||
outputReadabilityData: (val, scale = 1) => {
|
||||
return Math.round(parseInt(val) / 2047 * 800) / scale
|
||||
},
|
||||
defaultValue: 25,
|
||||
defaultValue: 26,
|
||||
defaultUnit: 'mV',
|
||||
downloadUnit: 'mV',
|
||||
unit: {
|
||||
|
||||
@@ -33,14 +33,15 @@ const serialNumberMappingTable = {
|
||||
},
|
||||
3: {
|
||||
1: {
|
||||
0: EliteEDC, // BAT1.0
|
||||
0: EliteEDC, // BAT0.1
|
||||
1: EliteEDC, // BAT1.0
|
||||
},
|
||||
},
|
||||
4: {
|
||||
1: {
|
||||
0: EliteEIS, // EIS1.0
|
||||
1: EliteEIS, // EIS1.1
|
||||
2: EliteEIS, // EIS1.1mini
|
||||
2: EliteEIS, // EIS mini1.0
|
||||
},
|
||||
},
|
||||
5: {
|
||||
|
||||
@@ -23,7 +23,12 @@ export const file = {
|
||||
item.checked = false
|
||||
item.hovered = false
|
||||
})
|
||||
_fileList.push(...mes.data)
|
||||
const data = mes.data.sort((a, b) => {
|
||||
const date1 = new Date(a.created_at).getTime()
|
||||
const date2 = new Date(b.created_at).getTime()
|
||||
return date2 - date1
|
||||
})
|
||||
_fileList.push(...data)
|
||||
},
|
||||
getFileList: () => {
|
||||
return _fileList
|
||||
|
||||
@@ -50,6 +50,7 @@ const projectActs = {
|
||||
const response = await payload.api.project.create(project)
|
||||
// align project id with column id
|
||||
project.id = response.data.id
|
||||
project.created_at = response.data.created_at
|
||||
|
||||
state.projectConfigList.push(project)
|
||||
},
|
||||
@@ -113,9 +114,13 @@ const projectActs = {
|
||||
copyProject.uuid = uuidv4()
|
||||
// create project need to remove
|
||||
delete copyProject.id
|
||||
delete copyProject.created_at
|
||||
delete copyProject.updated_at
|
||||
|
||||
const response = await api.project.create(copyProject)
|
||||
copyProject.id = response.data.id
|
||||
copyProject.created_at = response.data.created_at
|
||||
copyProject.updated_at = response.data.updated_at
|
||||
state.projectList.push(copyProject)
|
||||
},
|
||||
|
||||
|
||||
@@ -401,6 +401,7 @@ const chartActs = {
|
||||
|
||||
// register series into grid
|
||||
const _axisList = []
|
||||
const sourceArray = []
|
||||
|
||||
if (formula == null) {
|
||||
sourceList.forEach((source, index) => {
|
||||
@@ -408,6 +409,7 @@ const chartActs = {
|
||||
if (index !== 0) {
|
||||
_axis = 'Y'
|
||||
}
|
||||
sourceArray.push(source)
|
||||
switch (source.name) {
|
||||
case 'Time':
|
||||
_axisList.push(_axis + ' AXIS = TIME')
|
||||
@@ -469,6 +471,8 @@ const chartActs = {
|
||||
name: legendName,
|
||||
xAxis: _axisList[0],
|
||||
yAxis: _axisList[1],
|
||||
xSource: sourceArray[0],
|
||||
ySource: sourceArray[1],
|
||||
}
|
||||
if (state.chartData[chartID].gridSource[gridIndex] == null) {
|
||||
state.chartData[chartID].gridSource[gridIndex] = []
|
||||
@@ -1237,7 +1241,7 @@ function getLegendName (sourceList, formulaID, deviceList) {
|
||||
// eslint-disable-next-line no-case-declarations
|
||||
channelName = getConfigChannel(device.library_name, device.configuration.MODE, source.channel - 1)
|
||||
if (!channelName) break
|
||||
legendName += 'E' + source.id + '-' + channelName.name[0]
|
||||
legendName += 'E' + source.id + '-' + channelName.name.replace('_', '')
|
||||
break
|
||||
case 'EliteEIS':
|
||||
// eslint-disable-next-line no-case-declarations
|
||||
@@ -1250,7 +1254,7 @@ function getLegendName (sourceList, formulaID, deviceList) {
|
||||
legendName += 'E' + source.id + '-' + channelName.name.split('_').join('')
|
||||
break
|
||||
}
|
||||
legendName += 'E' + source.id + '-' + channelName.name[0]
|
||||
legendName += 'E' + source.id + '-' + channelName.name.replace('_', '')
|
||||
break
|
||||
default:
|
||||
legendName += 'D' + source.id + 'CH' + source.channel
|
||||
|
||||
Reference in New Issue
Block a user