視頻

vue+python 中藥可視化架構前後端分離帶數據庫echarts可視化、Flask

1 系統簡介

系統簡介:本框架是一個基於Vue+Flask+ECharts+MySQL構建的中醫熱性藥知識圖譜可視化系統,旨在為用户提供中醫藥材和方劑的知識查詢與可視化分析服務。環境的核心功能包括:首頁,展示系統概覽及熱性藥材的知識點圖譜;藥材搜索與介紹模塊,支持用户查詢中醫熱性藥材的詳細信息;方劑搜索與構成查看模塊,提供熱性方劑的組成成分及其藥理作用;功效關鍵詞提取與分析模塊,通過自然語言處理科技提取關鍵詞並生成可視化分析圖表;以及用户管理模塊,包含登錄、註冊、修改個人信息、頭像及密碼等能力,確保用户體驗的安全性和個性化需求。

2 功能設計

框架採用B/S(瀏覽器/服務器)架構模式,前端基於Vue.js框架,結合Vuex進行狀態管理,Vue Router實現路由導航,ECharts負責數據可視化圖表的渲染。前端憑藉RESTful API與Flask後端交互,後端負責業務邏輯處理,同時利用MySQL數據庫進行數據存儲,包括中醫熱性藥材、方劑、功效關鍵詞等相關信息的持久化管理。此外,框架還集成了數據爬蟲模塊,用於抓取並處理中醫藥相關數據,清洗後導入數據庫,為框架提供數據承受。

2.1系統架構圖

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_搜索

2.2 功能模塊圖

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_搜索_02

3 功能展示

3.1 登錄 & 註冊

登錄註冊做的是一個可以切換的登錄註冊界面,點擊去登錄後者去註冊可以切換,背景是一個視頻,循環播放。

登錄需要驗證用户名和密碼是否正確,如果不正確會有錯誤提示

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_搜索_03


註冊需要驗證用户名是否存在,如果錯誤會有提示。

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_數據_04

3.2 主頁

主頁的佈局採用了左側是菜單,右側是運行面板的佈局方法,右側的上方還有用户的頭像和退出按鈕,如果是新註冊用户,沒有頭像,這邊則不顯示,需要在個人設置中上傳了頭像之後就會顯示。

3.3 藥材搜索 & 藥材詳情

藥材搜索:

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_Vue_05


藥材詳情

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_數據_06

3.4 方劑搜索 & 構成查看

方劑搜索:

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_數據_07


Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_Vue_08


方劑的構成,組成成分:

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_搜索_09

3.5 數據大屏可視化

數據大屏可視化含有了

藥材的類型和藥味的分析:

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_搜索_10


類型和藥味的排名:

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_Vue_11

3.6 關鍵詞分析 & 關鍵詞提取

關鍵詞提取:

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_Vue_12


關鍵詞分析:

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_搜索_13

3.7 個人設置

個人設置方面包含了用户信息修改、密碼修改功能。

用户信息修改中可以上傳頭像,完成用户的頭像個性化設置,也可以修改用户其他信息。

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_搜索_14


修改密碼應該輸入用户舊密碼和新密碼,驗證舊密碼成功後,就可以完成密碼修改。

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_Vue_15

4程序代碼

4.1 代碼説明

代碼介紹:該特性旨在構建一箇中醫熱性藥物的可視化界面,基於Vue框架和ECharts圖表庫。界面將展示中醫藥物的熱性分佈,用户可以通過地圖、柱狀圖等方式查看藥物的熱性分佈情況。界面支持藥物信息的篩選、查看詳情以及交互式的數據探索。

4.2 流程圖

Flask 和 Vue.js 開發及整合部署實例 - YanbinQ的個人空間 -_數據_16

4.3 代碼實例

<template>
  <div class="app-container">
    <div class="filter-container">
      <el-select v-model="selectValue" placeholder="請選擇">
        <el-option label="全部" value="all"></el-option>
          <el-option label="高熱" value="high"></el-option>
            <el-option label="中熱" value="medium"></el-option>
              <el-option label="微熱" value="low"></el-option>
                </el-select>
                  </div>
                    <div id="chart" style="width: 100%; height: 600px;"></div>
                      <div class="table-container">
                        <el-table :data="medicineList" stripe>
                          <el-table-column prop="name" label="藥物名稱"></el-table-column>
                            <el-table-column prop="properties" label="性味"></el-table-column>
                              <el-table-column prop="effects" label="功效"></el-table-column>
                                </el-table>
                                  </div>
                                    </div>
                                      </template>
                                        <script>
                                          import echarts from 'echarts'
                                          import 'echarts/map/js/china.js'
                                          export default {
                                          data() {
                                          return {
                                          chart: null,
                                          selectValue: 'all',
                                          medicineList: [
                                          {
                                          name: '藥物A',
                                          properties: '辛、温',
                                          effects: '温中散寒'
                                          },
                                          // ... more data
                                          ]
                                          }
                                          },
                                          mounted() {
                                          this.initChart()
                                          },
                                          methods: {
                                          initChart() {
                                          this.chart = echarts.init(document.getElementById('chart'))
                                          const option = {
                                          title: {
                                          text: '中醫藥熱性分佈圖'
                                          },
                                          toolbox: {
                                          feature: {
                                          saveAsImage: {}
                                          }
                                          },
                                          series: [
                                          {
                                          type: 'map',
                                          mapType: 'china',
                                          data: []
                                          }
                                          ]
                                          }
                                          this.chart.setOption(option)
                                          }
                                          }
                                          }
                                          </script>
                                            <style>
                                              .app-container {
                                              padding: 20px;
                                              }
                                              .filter-container {
                                              margin-bottom: 20px;
                                              }
                                              .table-container {
                                              margin-top: 20px;
                                              }
                                              </style>