AnalysisSystemForRadionucli.../src/views/spectrumAnalysis/components/Modals/SampleInfomationModal.vue
renpy 6ba65075be Merge branch 'feature/spectrum-analysis' of http://git.hivekion.com:3000/xiaoguangbin/AnalysisSystemForRadionuclide_vue into feature-analysis-RLR-renpy
# Conflicts:
#	src/views/spectrumAnalysis/components/Modals/ArrRrrModal.vue
#	src/views/spectrumAnalysis/components/Modals/DataProcessingLogModal.vue
#	src/views/spectrumAnalysis/components/Modals/NuclideActivityAndMDCModal.vue
#	src/views/spectrumAnalysis/components/Modals/QcResultsModal.vue
#	src/views/spectrumAnalysis/components/Modals/RLRModal/index.vue
#	src/views/spectrumAnalysis/components/Modals/SampleInfomationModal.vue
#	src/views/spectrumAnalysis/components/PeakInfomation.vue
2023-09-07 19:49:40 +08:00

177 lines
4.2 KiB
Vue

<template>
<custom-modal v-model="visible" :width="750" title="Sample Infomation">
<a-spin :spinning="isLoading">
<div class="sample-infomation">
<a-form-model :labelCol="{ style: { width: '150px', textAlign: 'left' } }">
<a-row>
<a-col :span="12" v-for="(item, index) in columns" :key="index">
<a-form-model-item :label="item.title">
{{ data[item.key] }}
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</div>
</a-spin>
<div slot="custom-footer" style="text-align: center;">
<a-space :size="20">
<a-button type="primary" @click="handleExportToExcel">Export to Excel</a-button>
<a-button @click="visible = false">Close</a-button>
</a-space>
</div>
</custom-modal>
</template>
<script>
import { getAction, getFileAction } from '@/api/manage'
import ModalMixin from '@/mixins/ModalMixin'
import { saveAs } from 'file-saver';
import SampleDataMixin from '../../SampleDataMixin'
const columns = [
{
title: 'Station Id',
key: 'stationId'
},
{
title: 'Detector Id',
key: 'detectorId'
},
{
title: 'Sample Id',
key: 'sampleId'
},
{
title: 'Sample Geometry',
key: 'sampleGeometry'
},
{
title: 'Sample Quantity',
key: 'sampleQuantity'
},
{
title: 'Sample Type',
key: 'sampleType'
},
{
title: 'Collection Start',
key: 'collectStart'
},
{
title: 'Sampling Time',
key: 'samplingTime'
},
{
title: 'Collection Stop',
key: 'collectStop'
},
{
title: 'Decay Time',
key: 'decayTime'
},
{
title: 'Acquisition Start',
key: 'acquisitionStart'
},
{
title: 'Acquisition Time',
key: 'acquisitionTime'
},
{
title: 'Acquisition Stop',
key: 'acquisitionStop'
},
{
title: 'Avg Flow Rate',
key: 'avgFlowRate'
}
]
export default {
mixins: [ModalMixin, SampleDataMixin],
data() {
this.columns = columns
return {
isLoading: false,
data: {},
fileName: ''
}
},
methods: {
async getInfo() {
try {
this.isLoading = true
const { sampleId, inputFileName: fileName } = this.sampleData
const { success, result, message } = await getAction('/gamma/sampleInformation', {
sampleId,
fileName
})
if (success) {
result.sampleId = sampleId
this.data = result
} else {
this.$message.error(message)
}
} catch (error) {
console.error(error)
} finally {
this.isLoading = false
}
},
beforeModalOpen() {
this.data = {}
this.getInfo()
},
// 导出到Excel
handleExportToExcel() {
this.fileName = ""
const { sampleId, inputFileName: fileName } = this.sampleData
if (Object.keys(this.data).length > 0) {
let _this = this
this.$confirm({
title: 'Please enter file name',
content: h => <a-input v-model={_this.fileName} />,
okText: 'Cancle',
cancelText: 'Save',
okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
onOk() {
console.log('Cancel');
},
onCancel() {
if (_this.fileName) {
let params = {
sampleId,
fileName
}
getFileAction('/gamma/exportSampleInformation', params).then(res => {
if (res.code && res.code == 500) {
this.$message.warning("This operation fails. Contact your system administrator")
} else {
const blob = new Blob([res], { type: "application/vnd.ms-excel" })
saveAs(blob, `${_this.fileName}`)
}
})
}
},
});
} else {
this.$message.warning("No downloadable data")
}
}
}
}
</script>
<style lang="less" scoped>
.sample-infomation {
background-color: #143644;
padding: 20px;
.ant-form-item {
margin-bottom: 0;
}
}
</style>