添加 ARR 和 RRR 模块,完成详情页的预览,下载功能

This commit is contained in:
renpy 2023-07-13 11:15:02 +08:00 committed by orgin
parent 47ecbd5e8c
commit a77bb2ee5b
3 changed files with 695 additions and 0 deletions

View File

@ -0,0 +1,280 @@
<template>
<div style="height: 100%;">
<a-card v-if="!isFileDetail" :bordered="false" style="margin-left: 20px">
<search-form :items="formItems" v-model="queryParam" @search="searchQueryData">
<a-space style="float: right" class="btn-group" slot="additional">
<a-button @click="handleEdit" type="primary">
<img class="icon-edit" src="@/assets/images/global/edit.png" alt="" />
Excel
</a-button>
</a-space>
</search-form>
<custom-table
size="middle"
rowKey="sampleId"
:columns="columns"
:list="dataSource"
:pagination="ipagination"
:loading="loading"
@change="handleTableChange"
@detail="handleDetail"
>
<template slot="index" slot-scope="{ index }">
{{ index + 1 }}
</template>
</custom-table>
</a-card>
<FileDetail v-if="isFileDetail" type="arr" :sampleId="currSampleId" @back="handleBack"></FileDetail>
</div>
</template>
<script>
const columns = [
{
title: 'NO',
align: 'left',
scopedSlots: {
customRender: 'index',
},
customHeaderCell: () => {
return {
style: {
'padding-left': '26px !important',
},
}
},
customCell: () => {
return {
style: {
'padding-left': '26px !important',
},
}
},
},
{
title: 'STATION',
align: 'left',
dataIndex: 'stationName',
},
{
title: 'START TIME',
align: 'left',
dataIndex: 'collectStart',
},
{
title: 'END TIME',
align: 'left',
dataIndex: 'collectStop',
},
{
title: 'SID',
align: 'left',
dataIndex: 'sampleId',
}
]
import { compareDate } from "../../commom"
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { getAction } from '../../../../api/manage'
import dateFormat from '../../../../components/jeecg/JEasyCron/format-date'
import FileDetail from "../fileDetail.vue"
export default {
name: 'menuTree',
mixins: [JeecgListMixin],
components: {
FileDetail,
},
data() {
return {
isImmediate:true,
columns,
queryParam: {
startTime: dateFormat(new Date(), 'yyyy-MM-dd'),
endTime: dateFormat(new Date(), 'yyyy-MM-dd'),
stationIds: []
},
url: {
list: '/radionuclide/findAutoPage',
delete: '/gardsSampleData/deleteById',
findStationList: '/webStatistics/findStationList',
findParticulatePage: '/jeecg-web-statistics/webStatistics/findParticulatePage',
},
stationList: [],
dataSource: [],
strIds: "",
allChecked: false,
isFileDetail: false,
currSampleId:""
}
},
created() {
this.queryParam.startTime = this.getBeforeDate(9)
this.findStationList()
},
methods: {
handleBack(flag) {
this.isFileDetail = flag
},
handleDetail(record) {
this.currSampleId = record.sampleId
},
searchQueryData() {
let days = compareDate(this.queryParam.startTime, this.queryParam.endTime)
if (days <= 10) {
this.isImmediate = false
// this.queryParam = {
// startTime: "2023-01-01",
// endTime: "2023-07-10",
// stationIds: [209, 210]
// }
let params = {
...this.queryParam,
pageNo: 1,
pageSize: 10
}
getAction(this.url.list, params).then((res) => {
if (res.success) {
this.ipagination.current = res.result.current
this.ipagination.pageSize = res.result.size
this.ipagination.total = res.result.total
this.dataSource = res.result.records
}
})
} else {
this.$message.info("Maximum timespan duration is 10 days. Please, change start or end date.")
}
},
findStationList() {
getAction(this.url.findStationList, { menuName: '' }).then((res) => {
if (res.result.length>0) {
this.stationList = res.result.map((res) => ({ label: res.stationCode, value: res.stationId }))
//
this.queryParam.stationIds = this.stationList.map(item => item.value)
this.allChecked = true
this.searchQueryData()
} else {
this.stationList=[]
}
})
},
handleSelectChange(val) {
console.log(val);
let length = this.stationList.length
if (val.length === length) {
this.allChecked = true
} else {
this.allChecked = false
}
},
handleSelectChangeAll(val) {
this.allChecked = val
if (val) {
this.queryParam.stationIds = this.stationList.map(item => item.value)
} else {
this.queryParam.stationIds =[]
}
},
getBeforeDate(n){
var n = n;
var d = new Date();
var year = d.getFullYear();
var mon=d.getMonth()+1;
var day=d.getDate();
if(day <= n){
if(mon>1) {
mon=mon-1;
} else {
year = year-1;
mon = 12;
}
}
d.setDate(d.getDate()-n);
year = d.getFullYear();
mon=d.getMonth()+1;
day=d.getDate();
var s = year+"-"+(mon<10?('0'+mon):mon)+"-"+(day<10?('0'+day):day);
return s;
}
},
computed: {
formItems() {
return [
{
type: 'a-input',
label: '',
name: 'search',
props: {
placeholder: 'search...',
style: {
width: '166px',
},
},
style: {
width: 'auto',
},
},
{
type: 'custom-all-select',
label: 'Stations',
name: 'stationIds',
props: {
allChecked:this.allChecked,
placeholder: 'select stations',
mode: 'multiple',
maxTagCount: 1,
options: [
...this.stationList,
],
style: {
width: '200px',
},
},
on: {
change: this.handleSelectChange,
changeAll: this.handleSelectChangeAll
},
style: {
width: 'auto',
},
},
{
label: 'Start date',
type: 'custom-date-picker',
name: 'startTime',
props: {
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
style: {
minWidth: 'auto',
width: '200px',
},
},
style: {
width: 'auto',
},
},
{
label: 'End date',
type: 'custom-date-picker',
name: 'endTime',
props: {
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
style: {
minWidth: 'auto',
width: '200px',
},
},
style: {
width: 'auto',
},
},
]
},
},
}
</script>
<style lang="less" scoped>
.icon-edit{
margin-right: 10px;
}
</style>

View File

@ -0,0 +1,135 @@
<template>
<a-card :bordered="false" style="margin-left: 20px;height: 100%;">
<div class="detail-top">
<div class="top-back" @click="handleback">
<img class="icon-back" src="../../../assets/images/web-statistics/return.png" alt="">
<span style="margin-left: 10px;">return</span>
</div>
<div class="top-actions">
<div class="right-btn">
<img class="icon-download" src="../../../assets/images/web-statistics/download.png" alt="">
<span style="margin-left: 10px;">
<a :href="fileSrc" :download="type" target="_blank" rel="noopener noreferrer">
TXT
</a>
</span>
</div>
<div class="right-btn">
<img class="icon-view" src="../../../assets/images/web-statistics/view.png" alt="">
<span style="margin-left: 10px;">
<a :href="fileSrc" target="_blank" rel="noopener noreferrer">
View Report
</a>
</span>
</div>
</div>
</div>
<div class="file-content">
<pre>{{ fileText }}</pre>
</div>
</a-card>
</template>
<script>
import { getAction } from '../../../api/manage'
export default {
props: {
type: {
type: String,
default:""
},
sampleId: {
type: String,
default:""
}
},
data() {
return {
fileText: "",
fileSrc:""
}
},
mounted () {
this.getFildBlob();
},
methods: {
handleback() {
this.$emit("back",false)
},
getFildBlob() {
let _this = this
let params = {
type: this.type,
sampleId: this.sampleId,
// type: "rrr",
// sampleId:"1523651"
}
getAction("/radionuclide/reportContent", params).then((res) => {
const blob = new Blob([res], { type: 'text/plain' })
_this.fileSrc = window.URL.createObjectURL(blob)
var reader = new FileReader();
reader.readAsText(blob);
reader.onload = function(){
//
_this.fileText = reader.result
}
})
}
},
}
</script>
<style lang="less" scoped>
.detail-top{
width: 100%;
height: 50px;
padding: 0 10px;
background-color: rgba(12, 235, 201, 0.05);
border-top: 1px solid rgba(12, 235, 201, 0.3);
border-bottom: 1px solid rgba(12, 235, 201, 0.3);
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
.top-back{
font-family: MicrosoftYaHei;
font-size: 16px;
font-weight: normal;
font-stretch: normal;
letter-spacing: 0px;
color: #69a19f;
cursor: pointer;
.icon-back{
width: 28px;
height: 24px;
}
}
.top-actions{
.right-btn{
display: inline-block;
height: 32px;
line-height: 32px;
padding: 0 12px;
margin-left: 20px;
background-color: #1397a3;
.icon-download{
width: 16px;
height: 19px;
}
.icon-view{
width: 15px;
height: 16px;
}
a{
color: white;
}
}
}
}
.file-content{
height: calc(100% - 66px);
border: 1px solid #1397a3;
overflow: auto;
padding: 15px;
}
</style>

View File

@ -0,0 +1,280 @@
<template>
<div style="height: 100%;">
<a-card v-if="!isFileDetail" :bordered="false" style="margin-left: 20px">
<search-form :items="formItems" v-model="queryParam" @search="searchQueryData">
<a-space style="float: right" class="btn-group" slot="additional">
<a-button @click="handleEdit" type="primary">
<img class="icon-edit" src="@/assets/images/global/edit.png" alt="" />
Excel
</a-button>
</a-space>
</search-form>
<custom-table
size="middle"
rowKey="sampleId"
:columns="columns"
:list="dataSource"
:pagination="ipagination"
:loading="loading"
@change="handleTableChange"
@detail="handleDetail"
>
<template slot="index" slot-scope="{ index }">
{{ index + 1 }}
</template>
</custom-table>
</a-card>
<FileDetail v-if="isFileDetail" type="rrr" :sampleId="currSampleId" @back="handleBack"></FileDetail>
</div>
</template>
<script>
const columns = [
{
title: 'NO',
align: 'left',
scopedSlots: {
customRender: 'index',
},
customHeaderCell: () => {
return {
style: {
'padding-left': '26px !important',
},
}
},
customCell: () => {
return {
style: {
'padding-left': '26px !important',
},
}
},
},
{
title: 'STATION',
align: 'left',
dataIndex: 'stationName',
},
{
title: 'START TIME',
align: 'left',
dataIndex: 'collectStart',
},
{
title: 'END TIME',
align: 'left',
dataIndex: 'collectStop',
},
{
title: 'SID',
align: 'left',
dataIndex: 'sampleId',
}
]
import { compareDate } from "../../commom"
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { getAction } from '../../../../api/manage'
import dateFormat from '../../../../components/jeecg/JEasyCron/format-date'
import FileDetail from "../fileDetail.vue"
export default {
name: 'menuTree',
mixins: [JeecgListMixin],
components: {
FileDetail,
},
data() {
return {
isImmediate:true,
columns,
queryParam: {
startTime: dateFormat(new Date(), 'yyyy-MM-dd'),
endTime: dateFormat(new Date(), 'yyyy-MM-dd'),
stationIds: []
},
url: {
list: '/radionuclide/findReviewedPage',
delete: '/gardsSampleData/deleteById',
findStationList: '/webStatistics/findStationList',
findParticulatePage: '/jeecg-web-statistics/webStatistics/findParticulatePage',
},
stationList: [],
dataSource: [],
strIds: "",
allChecked: false,
isFileDetail: false,
currSampleId:""
}
},
created() {
this.queryParam.startTime = this.getBeforeDate(9)
this.findStationList()
},
methods: {
handleBack(flag) {
this.isFileDetail = flag
},
handleDetail(record) {
this.currSampleId = record.sampleId
},
searchQueryData() {
let days = compareDate(this.queryParam.startTime, this.queryParam.endTime)
if (days <= 10) {
this.isImmediate = false
// this.queryParam = {
// startTime: "2023-01-01",
// endTime: "2023-07-10",
// stationIds: [209, 210]
// }
let params = {
...this.queryParam,
pageNo: 1,
pageSize: 10
}
getAction(this.url.list, params).then((res) => {
if (res.success) {
this.ipagination.current = res.result.current
this.ipagination.pageSize = res.result.size
this.ipagination.total = res.result.total
this.dataSource = res.result.records
}
})
} else {
this.$message.info("Maximum timespan duration is 10 days. Please, change start or end date.")
}
},
findStationList() {
getAction(this.url.findStationList, { menuName: '' }).then((res) => {
if (res.result.length>0) {
this.stationList = res.result.map((res) => ({ label: res.stationCode, value: res.stationId }))
//
this.queryParam.stationIds = this.stationList.map(item => item.value)
this.allChecked = true
this.searchQueryData()
} else {
this.stationList=[]
}
})
},
handleSelectChange(val) {
console.log(val);
let length = this.stationList.length
if (val.length === length) {
this.allChecked = true
} else {
this.allChecked = false
}
},
handleSelectChangeAll(val) {
this.allChecked = val
if (val) {
this.queryParam.stationIds = this.stationList.map(item => item.value)
} else {
this.queryParam.stationIds =[]
}
},
getBeforeDate(n){
var n = n;
var d = new Date();
var year = d.getFullYear();
var mon=d.getMonth()+1;
var day=d.getDate();
if(day <= n){
if(mon>1) {
mon=mon-1;
} else {
year = year-1;
mon = 12;
}
}
d.setDate(d.getDate()-n);
year = d.getFullYear();
mon=d.getMonth()+1;
day=d.getDate();
var s = year+"-"+(mon<10?('0'+mon):mon)+"-"+(day<10?('0'+day):day);
return s;
}
},
computed: {
formItems() {
return [
{
type: 'a-input',
label: '',
name: 'search',
props: {
placeholder: 'search...',
style: {
width: '166px',
},
},
style: {
width: 'auto',
},
},
{
type: 'custom-all-select',
label: 'Stations',
name: 'stationIds',
props: {
allChecked:this.allChecked,
placeholder: 'select stations',
mode: 'multiple',
maxTagCount: 1,
options: [
...this.stationList,
],
style: {
width: '200px',
},
},
on: {
change: this.handleSelectChange,
changeAll: this.handleSelectChangeAll
},
style: {
width: 'auto',
},
},
{
label: 'Start date',
type: 'custom-date-picker',
name: 'startTime',
props: {
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
style: {
minWidth: 'auto',
width: '200px',
},
},
style: {
width: 'auto',
},
},
{
label: 'End date',
type: 'custom-date-picker',
name: 'endTime',
props: {
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
style: {
minWidth: 'auto',
width: '200px',
},
},
style: {
width: 'auto',
},
},
]
},
},
}
</script>
<style lang="less" scoped>
.icon-edit{
margin-right: 10px;
}
</style>