AnalysisSystemForRadionucli.../src/views/spectrumAnalysis/components/Modals/ArrRrrModal.vue

128 lines
3.3 KiB
Vue
Raw Normal View History

<template>
<custom-modal v-model="visible" :width="1200" :title="type == 1 || type == 3 ? 'ARR' : 'RRR'">
<a-spin :spinning="isLoading">
<pre>{{ content }}</pre>
</a-spin>
2023-09-27 14:53:17 +08:00
<div slot="custom-footer" style="text-align: center">
<a-space :size="20">
<a-button type="primary" @click="handleOk">Export</a-button>
<a-button @click="visible = false">Cancel</a-button>
</a-space>
</div>
</custom-modal>
</template>
<script>
import ModalMixin from '@/mixins/ModalMixin'
2023-09-27 14:53:17 +08:00
import { getAction, postAction } from '../../../../api/manage'
import { saveAs } from 'file-saver'
import SampleDataMixin from '../../SampleDataMixin'
export default {
mixins: [ModalMixin, SampleDataMixin],
props: {
type: {
2023-09-27 14:53:17 +08:00
type: Number,
},
extraData: {
type: Object,
2023-09-27 14:53:17 +08:00
default: () => ({}),
},
},
data() {
return {
content: '',
isLoading: true,
2023-09-27 14:53:17 +08:00
fileName: '',
}
},
methods: {
async getContent() {
let url = ''
switch (this.type) {
case 1:
url = '/gamma/viewARR'
break
case 2:
url = '/gamma/viewRRR'
break
case 3:
url = '/spectrumAnalysis/viewARR'
break
case 4:
url = '/spectrumAnalysis/viewRRR'
break
}
try {
this.content = ''
this.isLoading = true
const { sampleId, inputFileName: fileName } = this.sampleData
2023-09-27 14:53:17 +08:00
const method = this.type == 4? postAction : getAction
const res = await method(url, {
sampleId,
fileName,
2023-09-27 14:53:17 +08:00
...this.extraData,
})
2023-09-27 14:53:17 +08:00
if (typeof res == 'string') {
this.content = res
} else {
2023-09-27 14:53:17 +08:00
const { success, result, message } = res
if (success) {
this.content = result
} else {
this.$message.error(message)
}
}
} catch (error) {
console.error(error)
} finally {
this.isLoading = false
}
},
beforeModalOpen() {
this.getContent()
},
handleOk() {
2023-09-27 14:53:17 +08:00
this.fileName = ''
if (this.content) {
2023-09-27 14:53:17 +08:00
let strData = new Blob([this.content], { type: 'text/plain;charset=utf-8' })
// if (this.type == 1 || this.type == 3) {
// saveAs(strData, `${this.type == 1 ?'Gamma-':'Beta-'} ARR.txt`)
// } else {
// saveAs(strData, `${this.type == 2 ?'Gamma-':'Beta-'} RRR.txt`)
// }
let _this = this
this.$confirm({
title: 'Please enter file name',
2023-09-27 14:53:17 +08:00
content: (h) => <a-input v-model={_this.fileName} />,
okText: 'Cancle',
cancelText: 'Save',
2023-09-27 14:53:17 +08:00
okButtonProps: { style: { backgroundColor: '#b98326', color: '#fff', borderColor: 'transparent' } },
cancelButtonProps: { style: { color: '#fff', backgroundColor: '#31aab0', borderColor: 'transparent' } },
onOk() {
2023-09-27 14:53:17 +08:00
console.log('Cancel')
},
onCancel() {
if (_this.fileName) {
saveAs(strData, `${_this.fileName}.txt`)
}
},
2023-09-27 14:53:17 +08:00
})
} else {
2023-09-27 14:53:17 +08:00
this.$message.warning('No data can be saved!')
}
2023-09-27 14:53:17 +08:00
},
},
}
</script>
<style lang="less" scoped>
pre {
height: calc(100vh - 350px);
padding: 5px;
overflow: auto;
background-color: #285367;
}
</style>