From 401ed176c9f1bdd97ccdf827d9454b11a3891f79 Mon Sep 17 00:00:00 2001 From: zhongshujie <2862698242@qq.com> Date: 星期五, 08 八月 2025 23:10:50 +0800 Subject: [PATCH] 8.8 初始版本 --- src/views/searchList/index.vue | 97 +++++++++++++++++++++++++++++++++--------------- 1 files changed, 67 insertions(+), 30 deletions(-) diff --git a/src/views/searchList/index.vue b/src/views/searchList/index.vue index 90767f4..d68f8fc 100644 --- a/src/views/searchList/index.vue +++ b/src/views/searchList/index.vue @@ -4,23 +4,26 @@ <div class="search-input"> <div class="searchInputBox"> <input v-model="pageData.searchText" type="text" placeholder="" /> + <el-icon v-if="pageData.searchText != ''" class="clear-icon" @click="clearInput"> + <CloseBold /> + </el-icon> <el-button color="#16569C" :icon="Search" class="search-btn" round @click="getList(pageData.searchText)" style=""></el-button> </div> </div> - <div class="search-list"> + <div class="search-list" v-loading="pageData.loading"> <div class="search-result"> {{ t('message.searchResult') }} ({{ pageData.list.length }}) </div> <div class="search-item" v-for="(item, index) in pageData.list" :key="index" @click="goPage(item)"> <div class="search-item-name">{{ item.name }}</div> <div class="search-item-synonyms"> - <span>{{ t('message.synonyms') }}:</span>{{ item.synonyms }} + <span>{{ t('message.synonyms') }}:</span>{{ item.Synonyms }} </div> <div class="search-item-box"> <div class="box-left"> <div class="box-left-item"> - <span>{{ t('message.ID') }}:</span>{{ item.ID }} + <span>{{ t('message.ID') }}:</span>{{ item.id }} </div> <div class="box-left-MolecularFormula"> <span>{{ t('message.MolecularFormula') }}:</span> @@ -29,8 +32,9 @@ <div class="box-left-item"> <span>{{ t('message.MolecularWeight') }}:</span>{{ item.MolecularWeight }} </div> - <div class="box-left-item"> - <span>{{ t('message.Smiles') }}:</span>{{ item.Smiles }} + <div class="box-left-MolecularFormula"> + <span>{{ t('message.Smiles') }}:</span> + <div v-html="item.SMILES"></div> </div> <div class="box-left-item"> <span>{{ t('message.XLogP3') }}:</span>{{ item.XLogP3 }} @@ -47,14 +51,15 @@ </div> </div> <div class="box-right"> - <div> + <div v-if="item.img2D"> <img :src="item.img2D" alt="" /> <div>2D</div> </div> - <div> - <img :src="item.img3D" alt="" /> + <div v-if="item.iframeSrc"> + <iframe class="iframe" :src="item.iframeSrc" frameborder="0"></iframe> <div>3D</div> </div> + <el-empty class="empty" image-size="100" v-if="!item.img2D || !item.iframeSrc"></el-empty> </div> </div> </div> @@ -64,7 +69,7 @@ </template> <script setup lang="ts"> -import { inject, reactive, onMounted } from 'vue' +import { ref, inject, reactive, onMounted } from 'vue' import { Search } from '@element-plus/icons-vue' import type { searchList } from '@/types/searchlist' import { useI18n } from 'vue-i18n' @@ -74,30 +79,34 @@ import img2D from '../../assets/images/serachList/2D.png' import img3D from '../../assets/images/serachList/3D.png' import MG from '@/assets/js/middleGround/WebMiddleGroundApi.js' +import type { id } from 'element-plus/es/locales.mjs' const config: any = inject('config') const pageData = reactive<searchList>({ searchText: '', - list: [ - { - name: 'Aspirin', - FormalCharge: - '9999999999999999999999999999999999999999999999999999999999999999999999989999999999999999999999999999999999999999999', - img2D: img2D, - img3D: img3D, - }, - ], + list: [], + loading: false }) +const isInitialized = ref(false); + onMounted(() => { - pageData.searchText = router.currentRoute.value.query.searchText + if (!isInitialized.value && router.currentRoute.value.query.searchText) { + pageData.searchText = router.currentRoute.value.query.searchText; + isInitialized.value = true; + } getList(pageData.searchText) }) +const clearInput = () => { + pageData.searchText = '' +} + const getList = (txt: any) => { + pageData.list = [] const searchData = { 'Name*': pageData.searchText } - console.log(searchData); + pageData.loading = true MG.resource.getItem({ path: config.refCodes.BioChargeMap, queryType: '*', @@ -114,10 +123,9 @@ LinkOrder: 'Desc', }, fields: { - ID: '', Synonyms: [], MolecularWeight: [], - SMILE: [], + SMILES: [], XLogP3: [], HydrogenBondDonorCount: [], HydrogenBondAcceptorCount: [], @@ -133,16 +141,25 @@ } }).then((res: any) => { if (res.datas.length > 0) { + res.datas.forEach((item: any) => { - // item.SynonymsLine = item.Synonyms.join(';') + if (item.id == 874053) { + item.img2D = img2D + item.iframeSrc = "http://182.92.203.7:3007/showModel/?name=" + 'Conformer3D_COMPOUND_CID_2244' + } + }) - pageData.list = res.datas + + + pageData.list = res.datas.reverse() } + pageData.loading = false }) } const goPage = (item: any) => { - router.push(pathData.detailsPage) + const query = { id: item.id } + router.push({ path: pathData.detailsPage, query }) } </script> @@ -184,10 +201,18 @@ outline: none; } + .clear-icon { + color: #212121; + font-size: 18px !important; + margin-right: 5px; + cursor: pointer; + } + .search-btn { height: 100%; width: 7.1%; border-radius: 60px; + font-size: 28px !important; } } @@ -208,12 +233,11 @@ border-radius: 10px 10px 10px 10px; padding: 17px 27px; margin-bottom: 24px; + border: 1px solid #ebebeb; &:hover { cursor: pointer; - border: 2px solid; - border-image: linear-gradient(90deg, rgba(0, 108, 182, 1), rgba(1, 100, 76, 1)) 2 2; - border-radius: 10px 10px 10px 10px; + border: 1px solid rgba(1, 100, 76, 1); } .search-item-name { @@ -259,8 +283,10 @@ .box-left-MolecularFormula { display: flex; + padding-bottom: 12px; div { + color: #000; font-size: 13px; } } @@ -294,9 +320,9 @@ .box-right { width: 35%; - padding: 30px 48px; + padding: 30px 10px; display: flex; - align-items: center; + align-items: end; justify-content: space-between; img { @@ -311,6 +337,17 @@ } + + .empty { + width: 30%; + margin: 0 auto; + --el-empty-padding: 0px 0 !important; + } +} + +.iframe { + width: 220px; + margin-bottom: 20px; } .fl { -- Gitblit v1.9.1