|
@@ -1,7 +1,7 @@
|
|
|
<template>
|
|
|
<div class="app-container">
|
|
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
|
|
- <el-form-item label="NCBI基因组序列编号" prop="assemblyAccession">
|
|
|
+ <el-form-item label="NCBI基因组序列编号" prop="assemblyAccession" label-width="200">
|
|
|
<el-input
|
|
|
v-model="queryParams.assemblyAccession"
|
|
|
placeholder="请输入NCBI基因组序列编号"
|
|
@@ -9,7 +9,7 @@
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="病原体名称" prop="name">
|
|
|
+ <el-form-item label="病原体名称" prop="name" label-width="120">
|
|
|
<el-input
|
|
|
v-model="queryParams.name"
|
|
|
placeholder="请输入病原体名称"
|
|
@@ -26,21 +26,32 @@
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="区域编号" prop="areaId">
|
|
|
- <el-input
|
|
|
+ <el-cascader
|
|
|
v-model="queryParams.areaId"
|
|
|
- placeholder="请输入区域编号"
|
|
|
- clearable
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- />
|
|
|
+ :options="areaOptions"
|
|
|
+ :props="{
|
|
|
+ value: 'areaId',
|
|
|
+ label: 'areaName',
|
|
|
+ children: 'children',
|
|
|
+ // checkStrictly: true,
|
|
|
+ emitPath: false,
|
|
|
+ expandTrigger: 'click',
|
|
|
+ checkDescendants: false,
|
|
|
+ clickTrigger: 'select'
|
|
|
+ }"
|
|
|
+ @change="handleAreaChange"
|
|
|
+ placeholder="请选择区域编号"
|
|
|
+ >
|
|
|
+ </el-cascader>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="区域名称" prop="areaName">
|
|
|
+ <!-- <el-form-item label="区域名称" prop="areaName">
|
|
|
<el-input
|
|
|
v-model="queryParams.areaName"
|
|
|
placeholder="请输入区域名称"
|
|
|
clearable
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
/>
|
|
|
- </el-form-item>
|
|
|
+ </el-form-item> -->
|
|
|
<el-form-item label="数量" prop="num">
|
|
|
<el-input
|
|
|
v-model="queryParams.num"
|
|
@@ -135,7 +146,7 @@
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
-
|
|
|
+
|
|
|
<pagination
|
|
|
v-show="total>0"
|
|
|
:total="total"
|
|
@@ -162,11 +173,26 @@
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="区域编号" prop="areaId">
|
|
|
- <el-input v-model="form.areaId" placeholder="请输入区域编号" />
|
|
|
+ <el-cascader
|
|
|
+ v-model="form.areaId"
|
|
|
+ :options="areaOptions"
|
|
|
+ :props="{
|
|
|
+ value: 'areaId',
|
|
|
+ label: 'areaName',
|
|
|
+ children: 'children',
|
|
|
+ // checkStrictly: true,
|
|
|
+ emitPath: false,
|
|
|
+ expandTrigger: 'click',
|
|
|
+ checkDescendants: false,
|
|
|
+ clickTrigger: 'select'
|
|
|
+ }"
|
|
|
+ @change="handleAreaChange"
|
|
|
+ placeholder="请选择区域编号"
|
|
|
+ />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="区域名称" prop="areaName">
|
|
|
+ <!-- <el-form-item label="区域名称" prop="areaName">
|
|
|
<el-input v-model="form.areaName" placeholder="请输入区域名称" />
|
|
|
- </el-form-item>
|
|
|
+ </el-form-item> -->
|
|
|
<el-form-item label="数量" prop="num">
|
|
|
<el-input v-model="form.num" placeholder="请输入数量" />
|
|
|
</el-form-item>
|
|
@@ -183,7 +209,7 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { listDataReportByt, getDataReportByt, delDataReportByt, addDataReportByt, updateDataReportByt } from "@/api/data/dataReportByt"
|
|
|
+import { listDataReportByt, getDataReportByt, delDataReportByt, addDataReportByt, updateDataReportByt, getAllAreaData } from "@/api/data/dataReportByt"
|
|
|
|
|
|
export default {
|
|
|
name: "DataReportByt",
|
|
@@ -223,13 +249,111 @@ export default {
|
|
|
form: {},
|
|
|
// 表单校验
|
|
|
rules: {
|
|
|
- }
|
|
|
+ },
|
|
|
+ areaList:[],
|
|
|
+ // 级联选择器选项
|
|
|
+ areaOptions: [],
|
|
|
+ // 级联选择器加载状态
|
|
|
+ areaLoading: false,
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
this.getList()
|
|
|
+ this.getAllAreaList()
|
|
|
},
|
|
|
methods: {
|
|
|
+ // 查询所有区域编号
|
|
|
+ async getAllAreaList() {
|
|
|
+ try {
|
|
|
+ const res = await getAllAreaData(0)
|
|
|
+ // 并发请求每个父节点的子节点数据
|
|
|
+ const areaOptions = await Promise.all(
|
|
|
+ res.data.map(async (item) => {
|
|
|
+ const childRes = await getAllAreaData(item.areaId)
|
|
|
+ return {
|
|
|
+ areaId: item.areaId,
|
|
|
+ areaName: item.areaName,
|
|
|
+ // 根据子节点数据长度判断是否有子节点
|
|
|
+ children:[...childRes.data]
|
|
|
+ }
|
|
|
+ })
|
|
|
+ )
|
|
|
+ this.areaOptions = areaOptions
|
|
|
+ console.log('this.areaName',this.areaOptions)
|
|
|
+ // this.areaOptions = await this.getChildren(res.data)
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取区域数据失败:', error)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // // 递归获取子节点
|
|
|
+ // async getChildren(areas) {
|
|
|
+ // const result = []
|
|
|
+ // for (const area of areas) {
|
|
|
+ // const childRes = await getAllAreaData(area.areaId)
|
|
|
+ // const children = await this.getChildren(childRes.data)
|
|
|
+ // result.push({
|
|
|
+ // areaId: area.areaId,
|
|
|
+ // areaName: area.areaName,
|
|
|
+ // children: children.length > 0 ? children : null
|
|
|
+ // })
|
|
|
+ // }
|
|
|
+ // return result
|
|
|
+ // },
|
|
|
+ /** 懒加载子节点 */
|
|
|
+ async loadAreaChildren(node, resolve) {
|
|
|
+ if (!node.data) return
|
|
|
+ if (node.parent) return resolve([])
|
|
|
+ console.log('node',node)
|
|
|
+ const parentId = node.data.areaId
|
|
|
+ try {
|
|
|
+ const res = await getAllAreaData(parentId)
|
|
|
+ const children = res.data.map(item => ({
|
|
|
+ areaId: item.areaId,
|
|
|
+ areaName: item.areaName,
|
|
|
+ // 子节点没有下级,设置为 false
|
|
|
+ hasChildren: false,
|
|
|
+ children:[]
|
|
|
+ }))
|
|
|
+ resolve(children)
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取子区域数据失败:', error)
|
|
|
+ resolve([])
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /** 处理区域选择事件 */
|
|
|
+ handleAreaChange(value) {
|
|
|
+ const selectedNode = this.getAreaByValue([value])
|
|
|
+ console.log('selectedNode',selectedNode)
|
|
|
+ if (selectedNode) {
|
|
|
+ // 确保选择的是子节点
|
|
|
+ if (this.$refs.form) {
|
|
|
+ this.form.areaId = value
|
|
|
+ this.form.areaName = selectedNode.areaName
|
|
|
+ }
|
|
|
+ if (this.$refs.queryForm) {
|
|
|
+ this.queryParams.areaId = value
|
|
|
+ this.queryParams.areaName = selectedNode.areaName
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /** 根据值获取区域信息 */
|
|
|
+ getAreaByValue(value) {
|
|
|
+ function findArea(options, value) {
|
|
|
+ for (const option of options) {
|
|
|
+ if (option.areaId === value[0]) {
|
|
|
+ return option
|
|
|
+ }
|
|
|
+ if (option.children) {
|
|
|
+ const result = findArea(option.children, value)
|
|
|
+ if (result) {
|
|
|
+ return result
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null
|
|
|
+ }
|
|
|
+ return findArea(this.areaOptions, value)
|
|
|
+ },
|
|
|
/** 查询病原体历史统计列表 */
|
|
|
getList() {
|
|
|
this.loading = true
|