nyjy.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="140px">
  4. <el-form-item label="NCBI基因组序列编号" prop="assemblyAccession">
  5. <!-- <el-input
  6. v-model="queryParams.assemblyAccession"
  7. placeholder="请输入NCBI基因组序列编号"
  8. clearable
  9. @keyup.enter.native="handleQuery"
  10. /> -->
  11. <!-- 修改为支持远程搜索的选择器 -->
  12. <el-select
  13. v-model="queryParams.assemblyAccession"
  14. filterable
  15. remote
  16. reserve-keyword
  17. placeholder="请输入NCBI基因组序列编号"
  18. :remote-method="queryAssemblyAccession"
  19. :loading="assemblyAccessionLoading"
  20. style="width: 200px"
  21. >
  22. <el-option
  23. v-for="item in assemblyAccessionOptions"
  24. :key="item.id"
  25. :label="item.assemblyAccession"
  26. :value="item.assemblyAccession"
  27. >
  28. </el-option>
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item label="病原体名称" prop="organismName">
  32. <!-- <el-input
  33. v-model="queryParams.organismName"
  34. placeholder="请输入病原体名称"
  35. clearable
  36. @keyup.enter.native="handleQuery"
  37. /> -->
  38. <!-- 修改为支持远程搜索的选择器 -->
  39. <el-select
  40. v-model="queryParams.organismName"
  41. filterable
  42. remote
  43. reserve-keyword
  44. placeholder="请输入病原体名称"
  45. :remote-method="queryOrganismName"
  46. :loading="organismNameLoading"
  47. style="width: 200px"
  48. >
  49. <el-option
  50. v-for="item in organismNameOptions"
  51. :key="item.id"
  52. :label="item.asmName"
  53. :value="item.asmName"
  54. >
  55. </el-option>
  56. </el-select>
  57. </el-form-item>
  58. <el-form-item label="病原类型" prop="group">
  59. <el-input
  60. v-model="queryParams.group"
  61. placeholder="请输入病原类型"
  62. clearable
  63. @keyup.enter.native="handleQuery"
  64. />
  65. </el-form-item>
  66. <el-form-item label="子类标签" prop="group1">
  67. <el-input
  68. v-model="queryParams.group1"
  69. placeholder="请输入子类标签"
  70. clearable
  71. @keyup.enter.native="handleQuery"
  72. />
  73. </el-form-item>
  74. <el-form-item label="中文注释" prop="defined">
  75. <el-input
  76. v-model="queryParams.defined"
  77. placeholder="请输入中文注释"
  78. clearable
  79. @keyup.enter.native="handleQuery"
  80. />
  81. </el-form-item>
  82. <el-form-item label="耐药药品" prop="nyjy">
  83. <el-input
  84. v-model="queryParams.nyjy"
  85. placeholder="请输入耐药药品"
  86. clearable
  87. @keyup.enter.native="handleQuery"
  88. />
  89. </el-form-item>
  90. <el-form-item>
  91. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  92. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  93. </el-form-item>
  94. </el-form>
  95. <el-row :gutter="10" class="mb8">
  96. <el-col :span="1.5">
  97. <el-button
  98. type="primary"
  99. plain
  100. icon="el-icon-plus"
  101. size="mini"
  102. @click="handleAdd"
  103. >新增</el-button>
  104. </el-col>
  105. <el-col :span="1.5">
  106. <el-button
  107. type="warning"
  108. plain
  109. icon="el-icon-upload"
  110. size="mini"
  111. @click="$refs.upload_file.click()"
  112. >导入</el-button>
  113. </el-col>
  114. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  115. </el-row>
  116. <el-table v-loading="loading" :data="dataBaseList" >
  117. <el-table-column label="NCBI基因组序列编号" align="center" prop="assemblyAccession" width="100"/>
  118. <el-table-column label="病原体名称" align="center" prop="organismName" width="150"/>
  119. <el-table-column label="病原类型" align="center" prop="group" />
  120. <el-table-column label="子类标签" align="center" prop="group1" />
  121. <el-table-column label="中文注释" align="center" prop="defined" width="500" />
  122. <el-table-column label="解释的来源" align="center" prop="definedSource" width="200" />
  123. <el-table-column label="耐药药品" align="center" prop="nyjy" />
  124. <!-- <el-table-column label="参考基因组类型" align="center" prop="refseqCategory" />
  125. <el-table-column label="分类号" align="center" prop="taxid" />
  126. <el-table-column label="种分类号" align="center" prop="speciesTaxid" />
  127. <el-table-column label="亚种名称" align="center" prop="infraspecificName"/>
  128. <el-table-column label="分类类型" align="center" prop="isolate" />
  129. <el-table-column label="拼装级别" align="center" prop="assemblyLevel" />
  130. <el-table-column label="基因组级别" align="center" prop="genomeRep" />
  131. <el-table-column label="seqRelDate" align="center" prop="seqRelDate" />
  132. <el-table-column label="ASM编号" align="center" prop="asmName" />
  133. <el-table-column label="gbrs_paired_asm" align="center" prop="gbrsPairedAsm" />
  134. <el-table-column label="paired_asm_comp" align="center" prop="pairedAsmComp" />
  135. <el-table-column label="ftp_path" align="center" prop="ftpPath" />
  136. <el-table-column label="excluded_from_refseq" align="center" prop="excludedFromRefseq" />
  137. <el-table-column label="装配类型" align="center" prop="assemblyType" />
  138. <el-table-column label="基因组大小" align="center" prop="genomeSize" />
  139. <el-table-column label="基因组大小(无缺口)" align="center" prop="genomeSizeUngapped" />
  140. <el-table-column label="GC比例" align="center" prop="gcPercent" />
  141. <el-table-column label="replicon_count" align="center" prop="repliconCount" />
  142. <el-table-column label="scaffold_count" align="center" prop="scaffoldCount" />
  143. <el-table-column label="contig_count" align="center" prop="contigCount" />
  144. <el-table-column label="总基因数" align="center" prop="totalGeneCount" />
  145. <el-table-column label="翻译蛋白基因数" align="center" prop="proteinCodingGeneCount" />
  146. <el-table-column label="非编码基因数" align="center" prop="nonCodingGeneCount" />
  147. <el-table-column label="毒力基因" align="center" prop="dljy" />
  148. <el-table-column label="毒力基因注释" align="center" prop="dljyExpress" />
  149. <el-table-column label="毒力基因注释来源" align="center" prop="dljySource" /> -->
  150. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
  151. <template slot-scope="scope">
  152. <el-button
  153. size="mini"
  154. type="text"
  155. @click="handleUpdate(scope.row)"
  156. v-hasPermi="['data:dataReportByt:edit']"
  157. >编辑</el-button>
  158. <el-button
  159. size="mini"
  160. type="text"
  161. @click="handleDelete(scope.row)"
  162. v-hasPermi="['data:dataBase:remove']"
  163. >删除</el-button>
  164. </template>
  165. </el-table-column>
  166. </el-table>
  167. <pagination
  168. v-show="total>0"
  169. :total="total"
  170. :page.sync="queryParams.pageNum"
  171. :limit.sync="queryParams.pageSize"
  172. @pagination="getList"
  173. />
  174. <!-- 添加或修改病原体管理对话框 -->
  175. <!-- 添加或修改病原体管理对话框 -->
  176. <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
  177. <el-form ref="form" :model="form" :rules="rules" label-width="140px">
  178. <el-form-item label="NCBI基因组序列编号" prop="assemblyAccession">
  179. <!-- <el-input v-model="form.assemblyAccession" :disabled="disabledAssemblyAccession" placeholder="请输入NCBI基因组序列编号" /> -->
  180. <!-- 修改为支持远程搜索的选择器 -->
  181. <el-select
  182. v-model="form.assemblyAccession"
  183. filterable
  184. remote
  185. reserve-keyword
  186. placeholder="请输入NCBI基因组序列编号"
  187. :remote-method="queryAssemblyAccession"
  188. :loading="assemblyAccessionLoading"
  189. style="width: 100%"
  190. >
  191. <el-option
  192. v-for="item in assemblyAccessionOptions"
  193. :key="item.id"
  194. :label="item.assemblyAccession"
  195. :value="item.assemblyAccession"
  196. >
  197. </el-option>
  198. </el-select>
  199. </el-form-item>
  200. <el-form-item label="病原体名称" prop="organismName">
  201. <!-- <el-input v-model="form.organismName" placeholder="请输入病原体名称" /> -->
  202. <!-- 修改为支持远程搜索的选择器 -->
  203. <el-select
  204. v-model="form.organismName"
  205. filterable
  206. remote
  207. reserve-keyword
  208. placeholder="请输入病原体名称"
  209. :remote-method="queryOrganismName"
  210. :loading="organismNameLoading"
  211. style="width: 100%"
  212. >
  213. <el-option
  214. v-for="item in organismNameOptions"
  215. :key="item.id"
  216. :label="item.asmName"
  217. :value="item.asmName"
  218. >
  219. </el-option>
  220. </el-select>
  221. </el-form-item>
  222. <el-form-item label="病原类型" prop="group">
  223. <el-input v-model="form.group" placeholder="请输入病原类型" />
  224. </el-form-item>
  225. <el-form-item label="子类标签" prop="group1">
  226. <el-input v-model="form.group1" placeholder="请输入子类标签" />
  227. </el-form-item>
  228. <el-form-item label="中文注释" prop="defined">
  229. <el-input type="textarea" v-model="form.defined" placeholder="请输入中文注释" />
  230. </el-form-item>
  231. <el-form-item label="解释的来源" prop="definedSource">
  232. <el-input v-model="form.definedSource" placeholder="请输入解释的来源" />
  233. </el-form-item>
  234. <el-form-item label="参考基因组类型" prop="refseqCategory">
  235. <el-input v-model="form.refseqCategory" placeholder="请输入参考基因组类型" />
  236. </el-form-item>
  237. <el-form-item label="分类号" prop="taxid">
  238. <el-input v-model="form.taxid" placeholder="请输入分类号" />
  239. </el-form-item>
  240. <el-form-item label="种分类号" prop="speciesTaxid">
  241. <el-input v-model="form.speciesTaxid" placeholder="请输入种分类号" />
  242. </el-form-item>
  243. <el-form-item label="亚种名称" prop="infraspecificName">
  244. <el-input v-model="form.infraspecificName" placeholder="请输入亚种名称" />
  245. </el-form-item>
  246. <el-form-item label="分类类型" prop="isolate">
  247. <el-input v-model="form.isolate" placeholder="请输入分类类型" />
  248. </el-form-item>
  249. <el-form-item label="拼装级别" prop="assemblyLevel">
  250. <el-input v-model="form.assemblyLevel" placeholder="请输入拼装级别" />
  251. </el-form-item>
  252. <el-form-item label="基因组级别" prop="genomeRep">
  253. <el-input v-model="form.genomeRep" placeholder="请输入基因组级别" />
  254. </el-form-item>
  255. <el-form-item label="seq_rel_date" prop="seqRelDate">
  256. <el-input v-model="form.seqRelDate" placeholder="请输入seq_rel_date" />
  257. </el-form-item>
  258. <el-form-item label="ASM编号" prop="asmName">
  259. <el-input v-model="form.asmName" placeholder="请输入ASM编号" />
  260. </el-form-item>
  261. <el-form-item label="gbrs_paired_asm" prop="gbrs_paired_asm">
  262. <el-input v-model="form.gbrs_paired_asm" placeholder="请输入gbrs_paired_asm" />
  263. </el-form-item>
  264. <el-form-item label="paired_asm_comp" prop="paired_asm_comp">
  265. <el-input v-model="form.paired_asm_comp" placeholder="请输入paired_asm_comp" />
  266. </el-form-item>
  267. <el-form-item label="ftp_path" prop="ftp_path">
  268. <el-input v-model="form.ftp_path" placeholder="请输入ftp_path" />
  269. </el-form-item>
  270. <el-form-item label="excluded_from_refseq" prop="excluded_from_refseq">
  271. <el-input v-model="form.excluded_from_refseq" placeholder="请输入excluded_from_refseq" />
  272. </el-form-item>
  273. <el-form-item label="装配类型" prop="assemblyType">
  274. <el-input v-model="form.assemblyType" placeholder="请输入装配类型" />
  275. </el-form-item>
  276. <el-form-item label="基因组大小" prop="genomeSize">
  277. <el-input v-model="form.genomeSize" placeholder="请输入基因组大小" />
  278. </el-form-item>
  279. <el-form-item label="基因组大小(无缺口)" prop="genomeSizeUngapped">
  280. <el-input v-model="form.genomeSizeUngapped" placeholder="请输入基因组大小(无缺口)" />
  281. </el-form-item>
  282. <el-form-item label="GC比例" prop="gcPercent">
  283. <el-input v-model="form.gcPercent" placeholder="请输入GC比例" />
  284. </el-form-item>
  285. <el-form-item label="replicon_count" prop="replicon_count">
  286. <el-input v-model="form.replicon_count" placeholder="请输入replicon_count" />
  287. </el-form-item>
  288. <el-form-item label="scaffold_count" prop="scaffold_count">
  289. <el-input v-model="form.scaffold_count" placeholder="请输入scaffold_count" />
  290. </el-form-item>
  291. <el-form-item label="contig_count" prop="contig_count">
  292. <el-input v-model="form.contig_count" placeholder="请输入contig_count" />
  293. </el-form-item>
  294. <el-form-item label="总基因数" prop="totalGeneCount">
  295. <el-input v-model="form.totalGeneCount" placeholder="请输入总基因数" />
  296. </el-form-item>
  297. <el-form-item label="翻译蛋白基因数" prop="proteinCodingGeneCount">
  298. <el-input v-model="form.proteinCodingGeneCount" placeholder="请输入翻译蛋白基因数" />
  299. </el-form-item>
  300. <el-form-item label="非编码基因数" prop="nonCodingGeneCount">
  301. <el-input v-model="form.nonCodingGeneCount" placeholder="请输入非编码基因数" />
  302. </el-form-item>
  303. <el-form-item label="耐药药品" prop="nyjy">
  304. <el-input type="textarea" v-model="form.nyjy" placeholder="请输入耐药药品" />
  305. </el-form-item>
  306. </el-form>
  307. <div slot="footer" class="dialog-footer">
  308. <el-button type="primary" @click="submitForm">确 定</el-button>
  309. <el-button @click="cancel">取 消</el-button>
  310. </div>
  311. </el-dialog>
  312. <!-- 上传文件 -->
  313. <input hidden type="file" ref="upload_file" accept=".xls,.xlsx" class="upload_file" @change="readExcel($event)" />
  314. </div>
  315. </template>
  316. <script>
  317. import { listDataBase, getDataBase, delDataBase, addDataBase, updateDataBase,importDataBase,getAssemblyAccessionList } from "@/api/data/dataBase"
  318. import * as XLSX from "xlsx"
  319. export default {
  320. name: "DataBase",
  321. data() {
  322. return {
  323. // 遮罩层
  324. loading: true,
  325. // 选中数组
  326. ids: [],
  327. // 非单个禁用
  328. single: true,
  329. // 非多个禁用
  330. multiple: true,
  331. // 显示搜索条件
  332. showSearch: true,
  333. // 总条数
  334. total: 0,
  335. // 病原体管理表格数据
  336. dataBaseList: [],
  337. // 弹出层标题
  338. title: "",
  339. // 是否显示弹出层
  340. open: false,
  341. // 查询参数
  342. queryParams: {
  343. pageNum: 1,
  344. pageSize: 10,
  345. type:3,
  346. assemblyAccession: null,
  347. organismName: null,
  348. group: null,
  349. group1: null,
  350. defined: null,
  351. nyjy:null
  352. },
  353. // 表单参数
  354. form: {},
  355. // 表单校验
  356. rules: {
  357. },
  358. upload_file: "",
  359. lists: [],
  360. disabledAssemblyAccession:false,
  361. assemblyAccessionOptions: [],
  362. assemblyAccessionLoading: false,
  363. organismNameOptions: [],
  364. organismNameLoading: false,
  365. }
  366. },
  367. created() {
  368. this.getList()
  369. },
  370. methods: {
  371. // 查询NCBI基因组序列编号
  372. queryAssemblyAccession(query) {
  373. if (query) {
  374. this.assemblyAccessionLoading = true
  375. getAssemblyAccessionList(query).then(response => {
  376. this.assemblyAccessionOptions = response.data
  377. this.assemblyAccessionLoading = false
  378. })
  379. } else {
  380. this.assemblyAccessionOptions = []
  381. }
  382. },
  383. // 查询病原体名称
  384. queryOrganismName(query) {
  385. if (query) {
  386. this.organismNameLoading = true
  387. getAssemblyAccessionList(query).then(response => {
  388. this.organismNameOptions = response.data
  389. this.organismNameLoading = false
  390. })
  391. } else {
  392. this.organismNameOptions = []
  393. }
  394. },
  395. // 读取Excel文件
  396. readExcel(e) {
  397. console.log("读取Excel文件", e);
  398. console.log("读取Excel文件11", XLSX);
  399. // 读取表格文件
  400. let that = this;
  401. const files = e.target.files;
  402. if (files.length <= 0) {
  403. return false;
  404. } else if (!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())) {
  405. this.$message({
  406. message: "上传格式不正确,请上传xls或者xlsx格式",
  407. type: "warning",
  408. });
  409. return false;
  410. } else {
  411. this.uploadFile(files[0]);
  412. // 更新获取文件名
  413. // that.upload_file = files[0].name;
  414. }
  415. // const fileReader = new FileReader();
  416. // fileReader.onload = (ev) => {
  417. // try {
  418. // const data = ev.target.result;
  419. // const workbook = XLSX.read(data, {
  420. // type: "binary",
  421. // });
  422. // const wsname = workbook.SheetNames[0]; //取第一张表
  423. // console.log(XLSX);
  424. // console.log(wsname);
  425. // console.log(workbook);
  426. // const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]); //生成json表格内容
  427. // that.lists = [];
  428. // console.log(ws);
  429. // } catch (e) {
  430. // return false;
  431. // }
  432. // };
  433. // fileReader.readAsBinaryString(files[0]);
  434. },
  435. uploadFile(file) {
  436. console.log("上传文件", file);
  437. // 创建FormData对象
  438. const formData = new FormData(); // 创建FormData对象
  439. formData.append('file', file); // 将文件添加到FormData对象中,
  440. importDataBase(formData).then(response => {
  441. this.$modal.msgSuccess("导入成功")
  442. this.getList()
  443. })
  444. },
  445. /** 查询病原体管理列表 */
  446. getList() {
  447. this.loading = true
  448. listDataBase(this.queryParams).then(response => {
  449. this.dataBaseList = response.rows
  450. this.total = response.total
  451. this.loading = false
  452. })
  453. },
  454. // 取消按钮
  455. cancel() {
  456. this.open = false
  457. this.reset()
  458. },
  459. // 表单重置
  460. reset() {
  461. this.form = {
  462. assemblyAccession: null,
  463. refseqCategory: null,
  464. taxid: null,
  465. speciesTaxid: null,
  466. organismName: null,
  467. infraspecificName: null,
  468. isolate: null,
  469. assemblyLevel: null,
  470. genomeRep: null,
  471. seqRelDate: null,
  472. asmName: null,
  473. gbrsPairedAsm: null,
  474. pairedAsmComp: null,
  475. ftpPath: null,
  476. excludedFromRefseq: null,
  477. assemblyType: null,
  478. group: null,
  479. genomeSize: null,
  480. genomeSizeUngapped: null,
  481. gcPercent: null,
  482. repliconCount: null,
  483. scaffoldCount: null,
  484. contigCount: null,
  485. totalGeneCount: null,
  486. proteinCodingGeneCount: null,
  487. nonCodingGeneCount: null,
  488. nameCn: null,
  489. defined: null,
  490. seqSource: null,
  491. express: null,
  492. filePath: null,
  493. nyjy: null,
  494. dljy: null,
  495. dljyExpress: null,
  496. createBy: null,
  497. createTime: null,
  498. updateBy: null,
  499. updateTime: null,
  500. remark: null
  501. }
  502. this.resetForm("form")
  503. },
  504. /** 搜索按钮操作 */
  505. handleQuery() {
  506. this.queryParams.pageNum = 1
  507. this.getList()
  508. },
  509. /** 重置按钮操作 */
  510. resetQuery() {
  511. this.resetForm("queryForm")
  512. this.handleQuery()
  513. },
  514. // 多选框选中数据
  515. handleSelectionChange(selection) {
  516. this.ids = selection.map(item => item.assemblyAccession)
  517. this.single = selection.length!==1
  518. this.multiple = !selection.length
  519. },
  520. /** 删除按钮操作 */
  521. handleDelete(row) {
  522. const ids = row.assemblyAccession || this.ids
  523. this.$modal.confirm('是否确认删除病原体管理编号为"' + ids + '"的数据项?').then(function() {
  524. return delDataBase(ids)
  525. }).then(() => {
  526. this.getList()
  527. this.$modal.msgSuccess("删除成功")
  528. }).catch(() => {})
  529. },
  530. /** 新增按钮操作 */
  531. handleAdd() {
  532. this.reset()
  533. this.open = true
  534. this.disabledAssemblyAccession = false
  535. this.title = "添加病原体信息"
  536. },
  537. /** 修改按钮操作 */
  538. handleUpdate(row) {
  539. this.reset()
  540. const id = row.assemblyAccession
  541. this.disabledAssemblyAccession = true;
  542. getDataBase(id).then(response => {
  543. this.form = response.data
  544. this.open = true
  545. this.title = "修改病原体信息"
  546. })
  547. },
  548. /** 提交按钮 */
  549. submitForm() {
  550. this.$refs["form"].validate(valid => {
  551. if (valid) {
  552. if (this.form.assemblyAccession != null) {
  553. updateDataBase(this.form).then(response => {
  554. this.$modal.msgSuccess("修改成功")
  555. this.open = false
  556. this.getList()
  557. })
  558. } else {
  559. addDataBase(this.form).then(response => {
  560. this.$modal.msgSuccess("新增成功")
  561. this.open = false
  562. this.getList()
  563. })
  564. }
  565. }
  566. })
  567. },
  568. }
  569. }
  570. </script>