allen 2 anni fa
parent
commit
1bf9aa733d

+ 2 - 2
.env.development

@@ -1,10 +1,10 @@
 # 页面标题
-VUE_APP_TITLE = 知识图谱系统
+VUE_APP_TITLE = 故障智能分析与维护决策系统
 
 # 开发环境配置
 ENV = 'development'
 
-# 知识图谱系统/开发环境
+# 开发环境
 VUE_APP_BASE_API = '/dev-api'
 
 # 路由懒加载

+ 2 - 2
.env.production

@@ -1,8 +1,8 @@
 # 页面标题
-VUE_APP_TITLE = 知识图谱系统
+VUE_APP_TITLE = 故障智能分析与维护决策系统
 
 # 生产环境配置
 ENV = 'production'
 
-# 知识图谱系统/生产环境
+# 生产环境
 VUE_APP_BASE_API = '/prod-api'

+ 2 - 2
.env.staging

@@ -1,10 +1,10 @@
 # 页面标题
-VUE_APP_TITLE = 知识图谱系统
+VUE_APP_TITLE = 故障智能分析与维护决策系统
 
 NODE_ENV = production
 
 # 测试环境配置
 ENV = 'staging'
 
-# 知识图谱系统/测试环境
+# 测试环境
 VUE_APP_BASE_API = '/stage-api'

+ 2 - 2
package.json

@@ -1,8 +1,8 @@
 {
   "name": "kgraph",
   "version": "3.8.4",
-  "description": "知识图谱系统",
-  "author": "知识图谱",
+  "description": "故障智能分析与维护决策系统",
+  "author": "Allen",
   "license": "MIT",
   "scripts": {
     "dev": "vue-cli-service serve",

+ 3 - 3
public/LanguageManager.js

@@ -4,15 +4,15 @@
 // 用户权限(当前使用系统的用户)['开发用-DEFAULT_LANG_TYPE', '数据管理员-ADMIN_LANG_TYPE', '厂家用户-FACTORY_LANG_TYPE', '部队用户-ARM_LANG_TYPE']
 window.USER_ROLE = "DEFAULT_LANG_TYPE"
 window.PROJECT_NAME = {
-  "base": "知识图谱数据管理子系统",
-  "bf": "基础数据管理与维护"
+  "base": "故障智能分析与维护决策系统",
+  "bf": "故障智能分析与维护决策系统"
 }
 window.USER_ROLE_LANGUAGE = {
   /**
    * 默认的显示
    * */
   DEFAULT_LANG_TYPE: {
-    PROJECT_NAME: '知识图谱数据管理子系统',
+    PROJECT_NAME: '故障智能分析与维护决策系统',
     PROJECT_SUB_NAME: 'Knowledge Graph',
     PROJECT_DESCRIPTION: '知识图谱数据管理子系统主要为用户提供资源采集与管理工具,\n' +
       '                        并能多维度对资源进行各类分析与展示,支持装备资源数据的管理,\n' +

+ 36 - 1
src/api/showInfo/breakdown.js

@@ -43,6 +43,7 @@ export function delBreakdown(id) {
   })
 }
 
+// 获取每月故障数
 export function getBreakDownCountByMonth() {
   return request({
     url: '/showInfo/breakdown/getBreakDownCountByMonth',
@@ -50,6 +51,7 @@ export function getBreakDownCountByMonth() {
   })
 }
 
+// 根据月份获取飞机型号故障数
 export function getAirplaneModelCountByMonth(date) {
   return request({
     url: `/showInfo/breakdown/getAirplaneModelCountByMonth/${date}`,
@@ -57,7 +59,7 @@ export function getAirplaneModelCountByMonth(date) {
   })
 }
 
-
+// 根据月份获取专业故障数
 export function getMajorCountByMonth(date) {
   return request({
     url: `/showInfo/breakdown/getMajorCountByMonth/${date}`,
@@ -65,3 +67,36 @@ export function getMajorCountByMonth(date) {
   })
 }
 
+// 获取所有飞机状态
+export function getAircraftStatus(params) {
+  return request({
+    url: `/showInfo/breakdown/getAircraftStatus`,
+    method: 'get',
+    params
+  })
+}
+
+// 获取本月飞机状态
+export function getAircraftStatusCurrentMonth() {
+  return request({
+    url: `/showInfo/breakdown/getAircraftStatusCurrentMonth`,
+    method: 'get'
+  })
+}
+
+// 获取飞机故障状态详细信息
+export function getBreakdownInfoByAirNumber(airNumber) {
+  return request({
+    url: `/showInfo/breakdown/getBreakdownInfoByAirNumber/${airNumber}`,
+    method: 'get'
+  })
+}
+
+// 获取故障
+export function getBreakdownSchedule(query) {
+  return request({
+    url: `/showInfo/breakdown/getBreakdownSchedule`,
+    method: 'get',
+    params: query,
+  })
+}

+ 13 - 0
src/assets/styles/ruoyi.scss

@@ -316,3 +316,16 @@
 .el-table__expand-icon {
 	color: #bfcbd9;
 }
+
+.el-card {
+	color: #bfcbd9;
+	background-color: transparent;
+}
+
+.el-table tr {
+	background-color: transparent
+}
+
+.el-table th.el-table__cell {
+	background-color: transparent
+}

+ 2 - 1
src/components/Echarts/graph.vue

@@ -15,6 +15,7 @@ export default {
     chartList: {
       handler(val) {
         this.formatData(val || [], true);
+        this.initCharts();
       },
     },
   },
@@ -96,7 +97,7 @@ export default {
             edgeSymbol: ["", "arrow"],
             force: {
               edgeLength: 150,
-               repulsion: 500,
+              repulsion: 500,
             },
             roam: true,
             draggable: true, //每个节点的拖拉

+ 2 - 2
src/components/TopNav/index.vue

@@ -5,10 +5,10 @@
     @select="handleSelect"
     active-text-color="#409EFF"
   >
-    <el-menu-item :style="{'--theme': theme}" index="/search"
+    <!-- <el-menu-item :style="{'--theme': theme}" index="/search"
         ><svg-icon icon-class="nested" />
       检索中心
-    </el-menu-item>
+    </el-menu-item> -->
     <!-- <el-menu-item :style="{'--theme': theme}" index="/knowledge"
         ><svg-icon icon-class="dashboard" />
       知识图谱

+ 1 - 1
src/layout/components/Sidebar/Logo.vue

@@ -35,7 +35,7 @@ export default {
   },
   data() {
     return {
-      title: '知识图谱系统',
+      title: '故障智能分析与维护决策系统',
       logo: logoImg
     }
   }

+ 158 - 469
src/views/index.vue

@@ -5,506 +5,186 @@
         <el-card>
           <el-form ref="form" :model="form" label-width="80px" style="margin-left: 20%;margin-top: 20px;" @submit.native.prevent>
             <el-form-item label="机号">
-              <el-input v-model="searchNum" style=" width: 50%;" placeholder="请输入内容" @keyup.enter.native="search" @clear="search" clearable> </el-input>
+              <el-input v-model="form.searchNum" style=" width: 50%;" placeholder="请输入内容" @keyup.enter.native="search" @clear="search" clearable> </el-input>
               <el-button type="primary" icon="el-icon-search" @click="search"></el-button>
             </el-form-item>
             <span></span>
           </el-form>
-          <el-row style="margin: 20px;">
-            <el-col :span="4" v-for="(items,indexs) in numList" :key="items.id" @click.native="showDrawer(items)">
-              <div shadow="hover" @click="showDrawer(items)" class="card">
+          <el-row style="margin: 20px;" v-loading="loadingAircraftStatus">
+            <el-col :span="4" v-for="(item) in airCraftList" :key="item.airNumber" @click.native="showDetails(item.airNumber)">
+              <div shadow="hover" class="card">
                 <span style="font-size: 25px;display: block; color: wheat">机号</span>
-                <span class="span1" :style="{color: items.color1}">{{items.num}}</span>
-                <span style="color: wheat">状态:<span :style="{color: items.color2}">{{items.name}}</span></span>
+                <span class="span1" :style="{color: item.color1}">{{item.airNumber}}</span>
+                <span style="color: wheat">状态:
+                  <span v-if="item.cnt == 0" style="color: green">健康</span>
+                  <span v-else style="color: red">故障</span>
+                </span>
               </div>
             </el-col>
           </el-row>
+          <pagination
+            v-show="airCraftTotal>0"
+            :total="airCraftTotal"
+            :page.sync="form.pageNum"
+            :limit.sync="form.pageSize"
+            @pagination="search"
+            :page-sizes="[24, 36, 48, 60]"
+          />
         </el-card>
       </el-col>
-    <el-col :span="12" class="card-box">
-    <el-row>
-      <el-card>
-        <div slot="header" style="color:#bfcbd9"><span>CPU</span></div>
-        <div class="el-table el-table--enable-row-hover el-table--medium">
-          <table cellspacing="0" style="width: 100%;">
-            <thead>
-            <tr>
-              <th class="el-table__cell is-leaf"><div class="cell">属性</div></th>
-              <th class="el-table__cell is-leaf"><div class="cell">值</div></th>
-            </tr>
-            </thead>
-            <tbody>
-            <tr>
-              <td class="el-table__cell is-leaf"><div class="cell">核心数</div></td>
-              <td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.cpuNum }}</div></td>
-            </tr>
-            <tr>
-              <td class="el-table__cell is-leaf"><div class="cell">用户使用率</div></td>
-              <td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.used }}%</div></td>
-            </tr>
-            <tr>
-              <td class="el-table__cell is-leaf"><div class="cell">系统使用率</div></td>
-              <td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.sys }}%</div></td>
-            </tr>
-            <tr>
-              <td class="el-table__cell is-leaf"><div class="cell">当前空闲率</div></td>
-              <td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.free }}%</div></td>
-            </tr>
-            </tbody>
-          </table>
-        </div>
-      </el-card>
-    </el-row>
-      <el-row>
-        <el-card>
-          <div slot="header">
-            <span>内存信息</span>
-          </div>
-          <div class="el-table el-table--enable-row-hover el-table--medium">
-            <div ref="usedmemory" style="height: 280px" />
-          </div>
-        </el-card>
-      </el-row>
-    </el-col>
-    </el-row>
-
-
-    <el-dialog title="提示" :visible.sync="dialogVisible" width="50%" :before-close="handleClose" center>
-      <div>
-        <el-form ref="form" :model="form">
-          <el-form-item label="机号">
-            <!-- <el-input v-model="form.num" style=" width: 90%;" placeholder="请输入内容"> </el-input> -->
-            {{ form.number }}
-          </el-form-item>
-        </el-form>
-        <el-row :gutter='24'>
-          <el-col :span='20'>
-            <div class="demo-image__preview">
-              <!-- <el-image style="width: 540px; height: 160px" :src="url">
-              </el-image> -->
-               <img src="../assets/knowledge/1.jpg" style="width: 540px; height: 160px">
-            </div>
-          </el-col>
-          <el-col :span='4'>
-            <h2>机号:{{ form.number }}</h2>
-            <h2>机型:02</h2>
-            <h2>隶属:03</h2>
-          </el-col>
-        </el-row>
-        <el-row :gutter='24' style="text-align: center;">
-          <el-col :span='12'>
-            <h2>当月故障发生数量:20</h2>
-          </el-col>
-          <el-col :span='12'>
-            <h2>当月故障完结数量:20</h2>
-          </el-col>
-        </el-row>
-        <div v-for="item in  list" :key='item.id'>
-          <el-row :gutter='24'>
-            <el-col :span='8' style='text-align: right;' @click.native="getDra(item.id,item.name)">
-              <h2 @click="drawer = false">{{item.name}}</h2>
-            </el-col>
-            <el-col :span='8'>
-              <el-progress :text-inside="true" :stroke-width="26" :percentage="item.per" style="margin-top: 20px;"
-                :color='item.color'>
-              </el-progress>
-            </el-col>
-            <el-col :span='8' style="text-align: center;">
-              <el-checkbox v-model="item.checked" style="margin-top: 20px;">预警</el-checkbox>
-            </el-col>
-          </el-row>
-        </div>
-        <el-row :gutter='24'>
-          <el-col :span="24" style="text-align: center;">
-            <h2>当月故障记录</h2>
-          </el-col>
+      <el-col :span="12" class="card-box">
+        <el-row v-loading="loadingBreakdownList">
+          <BreakdownSchedule :breakdownList="breakdownList"></BreakdownSchedule>
         </el-row>
-        <el-table :data="tableData" border style="width: 100%">
-          <el-table-column fixed prop="date" label="序号" width='100' align='center'>
-          </el-table-column>
-          <el-table-column prop="name" label="案例名" align='center'>
-          </el-table-column>
-          <el-table-column prop="province" label="平台" align='center'>
-          </el-table-column>
-          <el-table-column fixed="right" label="结果" width="200" align='center'>
-            <template slot-scope="scope">
-              <el-button type="primary" round>浏览</el-button>
-              <el-button type="danger" round>删除</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-    </el-dialog>
 
-    <el-drawer :title="name" :visible.sync="drawer" :direction="direction" :before-close="handleClose1" size='50%'>
-      <div>
-        <el-form ref="form" :model="form">
-          <el-form-item label="机号" style="margin-left: 15px;">
-            <el-input v-model="form.name2" style=" width: 90%;" placeholder="请输入内容"> </el-input>
-            <el-button type="primary" icon="el-icon-search"></el-button>
-          </el-form-item>
-        </el-form>
-        <el-row :gutter='24'>
-          <el-col :span='12'>
-            <div class="demo-image__preview">
-              <!-- <el-image style="width: 540px; height: 160px" :src="url">
-              </el-image> -->
-              <img src="../assets/knowledge/1.jpg" style="width: 540px; height: 160px">
-            </div>
-          </el-col>
-          <el-col :span='12'>
-            <h2>机号:1</h2>
-            <h2>机型:2</h2>
-            <h2>隶属:3</h2>
-          </el-col>
-        </el-row>
-        <el-row :gutter='24' style="text-align: center;">
-          <el-col :span='12'>
-            <h2>当月故障发生数量:20</h2>
-          </el-col>
-          <el-col :span='12'>
-            <h2>当月故障完结数量:20</h2>
-          </el-col>
+        <el-row>
+          <el-card style="margin-top: 10px;">
+            <!-- <el-row style="text-align: center;">
+              <el-col :span="8" >
+                  当月故障飞机数
+              </el-col>
+              <el-col :span="8">
+                当月故障维修完成数
+              </el-col>
+              <el-col :span="8">
+                可出动飞机数
+              </el-col>
+            </el-row> -->
+            <el-row v-loading="loadingAircraftStatusCurrentMonth">
+              <el-col :span="8">
+                <div shadow="always" style="background-color:rgba(255,0,0,0.5); text-align: center; margin-left:12px;padding: 0px; border:1px solid #e6ebf5">
+                  <span style="font-size:1.5rem">当月故障飞机数</span>
+                  <br>
+                  <span style="font-size:3rem">{{ aircraftStatusCurrentMonth.breakdownNumber }}</span>
+                </div>
+              </el-col>
+              <el-col :span="8">
+                <div shadow="always" style="background-color:rgba(0,255,0,0.5); text-align: center; margin-left:12px;padding: 0px; border:1px solid #e6ebf5">
+                  <span style="font-size:1.5rem">当月故障维修完成数</span>
+                  <br>
+                  <span style="font-size:3rem">{{ aircraftStatusCurrentMonth.repairedNumber }}</span>
+                </div>
+              </el-col>
+              <el-col :span="8">
+                <div shadow="always" style="background-color:rgba(0,0,255,0.5); text-align: center; margin-left:12px;margin-right:12px;padding: 0px; border:1px solid #e6ebf5">
+                  <span style="font-size:1.5rem">可出动飞机数</span>
+                  <br>
+                  <span style="font-size:3rem">{{ aircraftStatusCurrentMonth.availableNumber }}</span>
+                </div>
+              </el-col>
+            </el-row>
+          </el-card>
         </el-row>
-        <el-row :gutter='24'>
-          <div id="chart"></div>
+        <el-row v-loading="loadingDetails">
+          <el-card style="margin-top: 10px; font-size:2rem">
+            <el-row>飞机状态详细信息</el-row>
+            <el-row>
+              机号:{{ aircraftDetial.airNumber }}
+            </el-row>
+            <el-row>
+              故障系统:{{ aircraftDetial.systems? aircraftDetial.systems:'无'}}
+            </el-row>
+            <el-row>
+              维修完成度:
+              <!-- <el-progress :text-inside="true" :stroke-width="22" :percentage="aircraftDetial.breakdownCount === 0 ? 100: aircraftDetial.repairRate" status="warning"></el-progress> 
+              <el-progress type="circle" :percentage="100" status="success"></el-progress> -->
+              {{ aircraftDetial.breakdownCount === 0 ? 100: aircraftDetial.repairRate }} %
+            </el-row>
+          </el-card>
         </el-row>
-      </div>
-    </el-drawer>
+      </el-col>
+    </el-row>
   </div>
 </template>
 
 <script>
-  import echarts from "echarts";
-  import { getServer } from "@/api/monitor/server";
-  import { getCache } from "@/api/monitor/cache";
+  // import echarts from "echarts";
+  import { getAircraftStatus, getAircraftStatusCurrentMonth, getBreakdownInfoByAirNumber, getBreakdownSchedule } from '@/api/showInfo/breakdown'
+  import BreakdownSchedule from "@/views/index/breakdownSchedule"
   export default {
+    components: { BreakdownSchedule },
     data() {
       return {
-        dialogVisible: false,
-        drawer: false,
-        name: '',
-        direction: 'rtl',
-        searchNum: '',
-        server: [],
-        // 统计命令信息
-        // commandstats: null,
-        // 使用内存
-        usedmemory: null,
-        // cache信息
-        cache: [],
-        form: {
-          number: '',
-          name: '',
-          name1: '',
-          name2: ''
+        form:{
+          searchNum: "",
+          pageNum: 1,
+          pageSize: 24,
         },
-        list: [{
-            id: 1,
-            name: '飞控系统健康状况',
-            per: 70,
-            color: '#f56c6c',
-            checked: 0
-          },
-          {
-            id: 2,
-            name: '航电系统健康状况',
-            per: 60,
-            color: '#e6a23c',
-            checked: 0
-          },
-          {
-            id: 3,
-            name: '机械系统健康状况',
-            per: 50,
-            color: '#5cb87a',
-            checked: 0
-          },
-          {
-            id: 4,
-            name: '火控系统健康状况',
-            per: 40,
-            color: '#1989fa',
-            checked: 0
-          },
-        ],
-        tableData: [{
-            date: '1',
-            name: 'admin',
-            province: '专业',
-          },
-          {
-            date: '2',
-            name: 'admin',
-            province: '专业',
-          },
-          {
-            date: '3',
-            name: 'admin',
-            province: '专业',
-          },
-        ],
-        mockList: [{
-            id: 1,
-            num: '01',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 2,
-            num: '02',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 3,
-            num: '03',
-            name: '故障',
-            color1: 'red',
-            color2: 'red',
-          },
-          {
-            id: 4,
-            num: '04',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 5,
-            num: '05',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 6,
-            num: '06',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 7,
-            num: '07',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 8,
-            num: '08',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 9,
-            num: '09',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 10,
-            num: '10',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 11,
-            num: '11',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 12,
-            num: '12',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 13,
-            num: '13',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 14,
-            num: '14',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 15,
-            num: '15',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 16,
-            num: '16',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 17,
-            num: '17',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 18,
-            num: '18',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 19,
-            num: '19',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 20,
-            num: '20',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 21,
-            num: '21',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 22,
-            num: '22',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 23,
-            num: '23',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          },
-          {
-            id: 24,
-            num: '24',
-            name: '健康',
-            color1: 'green',
-            color2: 'green',
-          }
-        ],
-        numList: []
+        airCraftTotal:0,
+        airCraftList:[],
+        aircraftStatusCurrentMonth: {
+          breakdownNumber:"-",
+          repairedNumber:"-",
+          availableNumber:"-",
+        },
+        aircraftDetial: {
+          airNumber: "-",
+          systems: "-",
+          repairRate: "-",
+          breakdownCount: "-",
+        },
+        breakdownList: [],
+        queryBreakdownParams: {
+          pageNum: 1,
+          pageSize: 10,
+        },
+        breakdownTotal:0,
+        loadingAircraftStatus: false,
+        loadingAircraftStatusCurrentMonth: false,
+        loadingDetails: false,
+        loadingBreakdownList: false,
       }
     },
     created() {
-      this.search();
-      this.getList();
-      this.getCache();
+      this.search()
+      this.getAircraftStatusCurrentMonth()
+      this.getBreakdownSchedule()
     },
     methods: {
-      getList() {
-        getServer().then(response => {
-          this.server = response.data;
-        });
-      },
-      /** 查缓存询信息 */
-      getCache() {
-        getCache().then((response) => {
-          this.cache = response.data;
-          // this.commandstats = echarts.init(this.$refs.commandstats, "macarons");
-          // this.commandstats.setOption({
-          //   tooltip: {
-          //     trigger: "item",
-          //     formatter: "{a} <br/>{b} : {c} ({d}%)",
-          //   },
-          //   series: [
-          //     {
-          //       name: "命令",
-          //       type: "pie",
-          //       roseType: "radius",
-          //       radius: [15, 95],
-          //       center: ["50%", "38%"],
-          //       data: response.data.commandStats,
-          //       animationEasing: "cubicInOut",
-          //       animationDuration: 1000,
-          //     }
-          //   ]
-          // });
-          this.usedmemory = echarts.init(this.$refs.usedmemory, "macarons");
-          this.usedmemory.setOption({
-            tooltip: {
-              formatter: "{b} <br/>{a} : " + this.cache.info.used_memory_human,
-            },
-            series: [
-              {
-                name: "峰值",
-                type: "gauge",
-                min: 0,
-                max: 1000,
-                detail: {
-                  formatter: this.cache.info.used_memory_human,
-                },
-                data: [
-                  {
-                    value: parseFloat(this.cache.info.used_memory_human),
-                    name: "内存消耗",
-                  }
-                ]
-              }
-            ]
-          });
-        });
-      },
-
-      getPopup(e) {
-        this.dialogVisible = true
-      },
-      getDra(e, name) {
-        this.drawer = true
-        this.name = name + '介绍'
-      },
-      handleClose(done) {
-        this.dialogVisible = false
+      search(){
+        this.loadingAircraftStatus = true
+        getAircraftStatus(this.form).then(resp => {
+          console.info("getAircraftStatus",resp)
+          this.airCraftList = resp.rows;
+          this.airCraftTotal = resp.total;
+          this.loadingAircraftStatus = false;
+        })
       },
-      handleClose1(done) {
-        this.drawer = false
+      getAircraftStatusCurrentMonth(){
+        this.loadingAircraftStatusCurrentMonth = true;
+        getAircraftStatusCurrentMonth().then(resp => {
+          this.aircraftStatusCurrentMonth = {
+            breakdownNumber: resp.data.breakdownNumber,
+            repairedNumber: resp.data.breakdownNumber - resp.data.repairingNumber,
+            availableNumber: resp.data.availableNumber,
+          }
+          this.loadingAircraftStatusCurrentMonth = false
+        })
       },
-      showDrawer(item){
-        this.dialogVisible = true
-        this.form.number = item.num
+      showDetails(airNumber){
+        this.loadingDetails = true
+        getBreakdownInfoByAirNumber(airNumber).then(resp => {
+          this.aircraftDetial = {
+            airNumber: resp.data.airNumber,
+            systems: resp.data.systems,
+            repairRate: Math.round(resp.data.repairingCount * 100 / resp.data.breakdownCount),
+            breakdownCount: resp.data.breakdownCount
+          }
+          this.loadingDetails = false
+        })
       },
-      search(){
-        if(!this.searchNum){
-          this.numList = this.mockList
-        }else{
-          let list = [];
-          for(let item of this.mockList){
-            if(item.num == this.searchNum){
-              list.push(item)
-            }
+      getBreakdownSchedule(){
+        this.loadingBreakdownList = true;
+        getBreakdownSchedule(this.queryBreakdownParams).then(resp => {
+          let rows = resp.rows
+          for(let row of rows){
+            row.countDown = 30-Math.round((new Date()- new Date(row.discoveryDate))/24/60/60/1000)
           }
-          this.numList = list;
-        }
+          this.breakdownList = resp.rows;
+          console.info(this.breakdownList);
+          this.breakdownTotal = resp.total;
+          this.loadingBreakdownList = false;
+        })
       }
     }
   }
@@ -541,4 +221,13 @@
     background-repeat: no-repeat;
     background-size: 100% 100%;
   }
+
+  /* .el-table tr {
+    background-color: transparent
+  } */
+
+  .el-card__body {
+    padding: 0px;
+  }
+
 </style>

+ 62 - 0
src/views/index/breakdownSchedule.vue

@@ -0,0 +1,62 @@
+<template>
+    <el-card>
+        <el-row>故障进度</el-row>
+        <el-table :data="visibleItems" style="background-color: transparent">
+            <el-table-column label="机号" align="center" prop="airNumber" />
+            <el-table-column label="机型" align="center" prop="airplaneModel" />
+            <el-table-column label="专业" align="center" prop="major" />
+            <el-table-column label="发现日期" align="center" prop="discoveryDate" />
+            <el-table-column label="倒计时时间" align="center" prop="countDown">
+                <template slot-scope="scope">
+                    <span v-if="!scope.row ||scope.row.countDown > 15" style="color:green"> {{ scope.row ? scope.row.countDown : '' }} </span>
+                    <span v-else-if="scope.row.countDown < 0" style="color:red"> {{ scope.row.countDown }} </span>
+                    <span v-else style="color:yellow"> {{ scope.row.countDown }} </span>
+                </template>
+            </el-table-column>
+        </el-table>
+    </el-card>
+</template>
+  
+<script>
+export default {
+    name: "BreakdownSchedule",
+  props: {
+    breakdownList: {
+      type: Array,
+      required: true,
+    },
+  },
+    data() {
+        return {
+            startIndex: 0,
+            numItems: 3,
+        }
+    },
+    computed: {
+        visibleItems() {
+            let v = [];
+            let itemsLength = this.breakdownList.length
+            for (let i = 0; i < this.numItems; i++) {
+                if ((i + this.startIndex) < itemsLength) {
+                    v.push(this.breakdownList[i + this.startIndex])
+                } else {
+                    v.push(this.breakdownList[i + this.startIndex - itemsLength])
+                }
+            }
+            return v
+
+        }
+    },
+    mounted() {
+        this.interval = setInterval(() => {
+            this.startIndex++
+            if (this.startIndex >= this.breakdownList.length) {
+                this.startIndex = 0
+            }
+        }, 3000)
+    },
+    beforeDestroy() {
+        clearInterval(this.interval)
+    }
+}
+</script>

+ 38 - 116
src/views/knowledge/search/index.vue

@@ -7,7 +7,7 @@
       :inline="true"
       label-width="68px"
     >
-      <el-form-item prop="firstName">
+      <el-form-item label="故障1" prop="firstName" >
         <el-input
           v-model="queryParams.firstName"
           placeholder="请输入"
@@ -15,7 +15,7 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item prop="secondName">
+      <el-form-item label="故障2" prop="secondName">
         <el-input
           v-model="queryParams.secondName"
           placeholder="请输入"
@@ -23,22 +23,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item prop="length">
-        <!-- <el-input
-          v-model="queryParams.length"
-          placeholder="请输入"
-          clearable
-          @keyup.enter.native="handleQuery"
-        /> -->
-        <el-select v-model="queryParams.length" placeholder="请选择任务状态">
-          <el-option
-            v-for="dict in dict.type.graph_search_length"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
           >搜索</el-button
@@ -46,47 +30,18 @@
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
-    <Chart
-      ref="chart"
-      @changeRoot="redrawChart"
-      @c_click="getInfoTooltip"
-      :isShowChart="true"
-      :enable="true"
-      @reloadChart="reloadChart"
-      :showRelKey="true"
-      :nodes="nodes"
-      :links="links"
-      :isEntChart="true"
-      :contextMenu="['delete']"
-      :isShowContextMenu="true"
-      @delete="delNode"
-    />
+    <Graph ref="charts" :chartList="chartData" />
   </div>
 </template>
 
 <script>
-import Chart from "@/views/knowledge/common/chart";
+import Graph from "@/components/Echarts/graph";
 import { getGraphByEntiry } from "@/api/knowledge/search";
 
-// 获取路径参数
-function getQueryVariable(variable) {
-	let url = window.location.hash
-	let index = url.indexOf('?')
-	var query = url.substring(index + 1, url.length)
-	var vars = query.split('&')
-	for (var i = 0; i < vars.length; i++) {
-		var pair = vars[i].split('=')
-		if (pair[0] == variable) {
-			return pair[1]
-		}
-	}
-	return ''
-}
-
 export default {
   name: "GranphSearch",
   dicts: ["graph_search_length"],
-  components: { Chart },
+  components: { Graph },
   data() {
     return {
       queryParams: {
@@ -94,81 +49,48 @@ export default {
         secondName: "",
         length: "0",
       },
-      nodes: [],
-      links: [],
-      spinning : false,
-      tooltip: { entId: false, relID: false }, // 点击的实体或关系的悬浮层
-      chartType: true,
+      chartData: {
+        seriesData:[],
+        linksData:[],
+      },
     };
   },
   methods: {
     handleQuery() {
-      this.redrawChart()
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-    },
-    /**
-     * 点击搜索重新绘图
-     * @params id 选中的实力的ID
-     * */
-    redrawChart() {
-      this.spinning = true;
-      getGraphByEntiry(this.queryParams).then((resp) => {
-        let respData = resp.data
-        this.rootId = 1;
-        this.tooltip.entId = false;
-        this.tooltip.relID = false;
-        this.nodes = respData.data;
-        this.links = respData.links;
-        this.$refs.chart.reDraw(1, respData.data, respData.links);
-        this.spinning = false;
-      });
-    },
-    /**
-     * 获取实体或关系的悬浮框
-     * @params event:zoomchart返回的event,args:zoomchart返回的变量,包含了当前点击的实体或关系的数据
-     * */
-    getInfoTooltip(event, args) {
-      const vm = this;
-      this.$set(this.tooltip, "x", event.pageX + "px");
-      this.$set(this.tooltip, "y", event.pageY + "px");
-      if (args.clickNode) {
-        vm.tooltip.entId = args.clickNode.data.entId;
-        vm.tooltip.relID = false;
-      } else if (args.clickLink) {
-        vm.tooltip.entId = false;
-        vm.tooltip.relID = args.clickLink.data.relID;
-      } else {
-        vm.tooltip.entId = false;
-        vm.tooltip.relID = false;
-      }
-    },
-    reloadChart(nodes, links) {
-      const id = getQueryVariable("entId");
-      this.$refs.chart.drawChart(id, nodes, links);
-    },
-    // 选中一个图谱节点后的回调,排除
-    delNode(item) {
-      if (item[0].id == this.rootId) {
-        this.$message.info("中心点不能删除");
-        return;
-      }
-      if (this.delEntIds.length > 0) {
-        this.delEntIds.forEach((v, i) => {
-          if (v.id !== item[0].id) {
-            this.delEntIds.push(item[0]);
-          }
-        });
-      } else {
-        this.delEntIds.push(item[0]);
+      if(this.queryParams.firstName == this.queryParams.secondName){
+        this.$message.error('不能查询自己的关联');
+        return
       }
       getGraphByEntiry(this.queryParams).then((resp) => {
         let respData = resp.data
-        this.$refs.chart.reDraw(1, respData.data, respData.links);
+        let seriesData = []
+        let linksData = []
+        for(let item of respData.data){
+          seriesData.push(
+            {name: item.name}
+          )
+        }
+        for(let link of respData.links){
+          linksData.push(
+            {
+              source: link.fromName,
+              target: link.toName,
+              label: {
+                show: true, // 是否显示line的文字
+                formatter: link.name // line的文字
+              },
+            }
+          )
+        }
+        this.chartData = {
+          seriesData,
+          linksData,
+        }       
       });
     },
+    resetQuery() {
+      this.resetForm("queryForm");
+    },
   },
 };
 </script>

+ 31 - 0
src/views/knowledge/test/index pdf.vue

@@ -0,0 +1,31 @@
+<template>
+    <div>
+        <pdf-preview v-if="srcPrint != ''" ref="pdfSearch" :src="srcPrint" @printAlert="printAlert"></pdf-preview>
+    </div>
+</template>
+   
+<script>
+import PdfPreview from 'vue-pdf';
+export default {
+    components: {
+        PdfPreview,
+    },
+    data() {
+        return {
+            srcPrint: 'http://localhost:11082/upload/uploadManage/download?filePath=/profile/upload/2023/04/10/example_20230410144414A001.pdf'
+        }
+    },
+    mounted() {
+        //打开pdf预览窗口
+        this.$refs.pdfSearch.handleOpen();
+    },
+    methods: {
+        printAlert() {//pdf预览窗口点击关闭
+            this.$message.success("打印窗口关闭~");
+        }
+    }
+}
+
+</script>
+   
+<style></style>

+ 42 - 17
src/views/knowledge/test/index.vue

@@ -1,31 +1,56 @@
 <template>
     <div>
-        <pdf-preview v-if="srcPrint != ''" ref="pdfSearch" :src="srcPrint" @printAlert="printAlert"></pdf-preview>
+        <ul ref="list"  style="color:#fff">
+            <li v-for="item in visibleItems" :key="item.id">{{ item.text }}</li>
+        </ul>
     </div>
 </template>
-   
+  
 <script>
-import PdfPreview from 'vue-pdf';
 export default {
-    components: {
-        PdfPreview,
-    },
     data() {
         return {
-            srcPrint: 'http://localhost:11082/upload/uploadManage/download?filePath=/profile/upload/2023/04/10/example_20230410144414A001.pdf'
+            items: [
+                { id: 1, text: 'Item 1' },
+                { id: 2, text: 'Item 2' },
+                { id: 3, text: 'Item 3' },
+                { id: 4, text: 'Item 4' },
+                { id: 5, text: 'Item 5' },
+                { id: 6, text: 'Item 6' },
+                { id: 7, text: 'Item 7' },
+                { id: 8, text: 'Item 8' },
+                { id: 9, text: 'Item 9' },
+                { id: 10, text: 'Item 10' }
+            ],
+            startIndex: 0,
+            numItems: 5,
+        }
+    },
+    computed: {
+        visibleItems() {
+            let v = [];
+            let itemsLength = this.items.length
+            for(let i = 0; i < this.numItems; i++) {
+                if((i+this.startIndex) < itemsLength){
+                    v.push(this.items[i+this.startIndex])
+                } else {
+                    v.push(this.items[i+this.startIndex-itemsLength])
+                }
+            }
+            return v
+            
         }
     },
     mounted() {
-        //打开pdf预览窗口
-        this.$refs.pdfSearch.handleOpen();
+        this.interval = setInterval(() => {
+            this.startIndex++
+            if(this.startIndex >= this.items.length){
+                this.startIndex = 0
+            }
+        }, 3000)
     },
-    methods: {
-        printAlert() {//pdf预览窗口点击关闭
-            this.$message.success("打印窗口关闭~");
-        }
+    beforeDestroy() {
+        clearInterval(this.interval)
     }
 }
-
-</script>
-   
-<style></style>
+</script>

+ 7 - 9
src/views/ledger/airModel/index.vue

@@ -1,10 +1,10 @@
 <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="机号" prop="airNumber">
+      <el-form-item label="机号" prop="airNumber">
         <el-input
           v-model="queryParams.airNumber"
-          placeholder="请输入机号"
+          placeholder="请输入机号"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -96,7 +96,7 @@
     <el-table v-loading="loading" :data="airModelList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="序号" align="center" prop="id" />
-      <el-table-column label="机号" align="center" prop="airNumber" />
+      <el-table-column label="机号" align="center" prop="airNumber" />
       <el-table-column label="型号" align="center" prop="modelNumber" />
       <el-table-column label="编号" align="center" prop="serial" />
       <el-table-column label="出厂日期" align="center" prop="productionDate" width="180">
@@ -124,7 +124,7 @@
         </template>
       </el-table-column>
     </el-table>
-    
+
     <pagination
       v-show="total>0"
       :total="total"
@@ -136,12 +136,9 @@
     <!-- 添加或修改机型信息对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="机号" prop="airNumber">
-          <el-input v-model="form.airNumber" placeholder="请输入机号" />
+        <el-form-item label="机号" prop="airNumber">
+          <el-input v-model="form.airNumber" placeholder="请输入机号" />
         </el-form-item>
-        <!-- <el-form-item label="型号id" prop="modelComponentId">
-          <el-input v-model="form.modelComponentId" placeholder="请输入型号id" />
-        </el-form-item> -->
         <el-form-item label="型号" prop="modelNumber">
           <el-input v-model="form.modelNumber" placeholder="请输入型号" />
         </el-form-item>
@@ -198,6 +195,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
         airNumber: null,
+        modelComponentId: null,
         modelNumber: null,
         serial: null,
         productionDate: null,

+ 16 - 12
src/views/ledger/airPart/index.vue

@@ -1,18 +1,18 @@
 <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="型号id" prop="modelComponentId">
+      <el-form-item label="型号" prop="modelNumber">
         <el-input
-          v-model="queryParams.modelComponentId"
-          placeholder="请输入型号id"
+          v-model="queryParams.modelNumber"
+          placeholder="请输入型号"
           clearable
           @keyup.enter.native="handleQuery"
         />
-      </el-form-item> -->
-      <el-form-item label="型号" prop="modelNumber">
+      </el-form-item>
+      <el-form-item label="机号" prop="airNumber">
         <el-input
-          v-model="queryParams.modelNumber"
-          placeholder="请输入号"
+          v-model="queryParams.airNumber"
+          placeholder="请输入号"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -104,8 +104,8 @@
     <el-table v-loading="loading" :data="airPartList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="序号" align="center" prop="id" />
-      <!-- <el-table-column label="型号id" align="center" prop="modelComponentId" /> -->
       <el-table-column label="型号" align="center" prop="modelNumber" />
+      <el-table-column label="机号" align="center" prop="airNumber" />
       <el-table-column label="编号" align="center" prop="serial" />
       <el-table-column label="出厂日期" align="center" prop="productionDate" width="180">
         <template slot-scope="scope">
@@ -133,7 +133,7 @@
         </template>
       </el-table-column>
     </el-table>
-    
+
     <pagination
       v-show="total>0"
       :total="total"
@@ -145,12 +145,12 @@
     <!-- 添加或修改部件基本信息对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <!-- <el-form-item label="型号id" prop="modelComponentId">
-          <el-input v-model="form.modelComponentId" placeholder="请输入型号id" />
-        </el-form-item> -->
         <el-form-item label="型号" prop="modelNumber">
           <el-input v-model="form.modelNumber" placeholder="请输入型号" />
         </el-form-item>
+        <el-form-item label="机号" prop="airNumber">
+          <el-input v-model="form.airNumber" placeholder="请输入机号" />
+        </el-form-item>
         <el-form-item label="编号" prop="serial">
           <el-input v-model="form.serial" placeholder="请输入编号" />
         </el-form-item>
@@ -208,6 +208,8 @@ export default {
         pageSize: 10,
         modelComponentId: null,
         modelNumber: null,
+        airModelId: null,
+        airNumber: null,
         serial: null,
         productionDate: null,
         manufacturerInfo: null,
@@ -244,6 +246,8 @@ export default {
         id: null,
         modelComponentId: null,
         modelNumber: null,
+        airModelId: null,
+        airNumber: null,
         serial: null,
         productionDate: null,
         manufacturerInfo: null,

+ 18 - 4
src/views/ledger/airSystem/index.vue

@@ -9,6 +9,14 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="机号" prop="airNumber">
+        <el-input
+          v-model="queryParams.airNumber"
+          placeholder="请输入机号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item label="编号" prop="serial">
         <el-input
           v-model="queryParams.serial"
@@ -97,6 +105,7 @@
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="序号" align="center" prop="id" />
       <el-table-column label="型号" align="center" prop="modelNumber" />
+      <el-table-column label="机号" align="center" prop="airNumber" />
       <el-table-column label="编号" align="center" prop="serial" />
       <el-table-column label="出厂日期" align="center" prop="productionDate" width="180">
         <template slot-scope="scope">
@@ -124,7 +133,7 @@
         </template>
       </el-table-column>
     </el-table>
-    
+
     <pagination
       v-show="total>0"
       :total="total"
@@ -136,12 +145,12 @@
     <!-- 添加或修改系统基本信息对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <!-- <el-form-item label="型号id" prop="modelComponentId">
-          <el-input v-model="form.modelComponentId" placeholder="请输入型号id" />
-        </el-form-item> -->
         <el-form-item label="型号" prop="modelNumber">
           <el-input v-model="form.modelNumber" placeholder="请输入型号" />
         </el-form-item>
+        <el-form-item label="机号" prop="airNumber">
+          <el-input v-model="form.airNumber" placeholder="请输入机号" />
+        </el-form-item>
         <el-form-item label="编号" prop="serial">
           <el-input v-model="form.serial" placeholder="请输入编号" />
         </el-form-item>
@@ -197,7 +206,10 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
+        modelComponentId: null,
         modelNumber: null,
+        airModelId: null,
+        airNumber: null,
         serial: null,
         productionDate: null,
         manufacturerInfo: null,
@@ -234,6 +246,8 @@ export default {
         id: null,
         modelComponentId: null,
         modelNumber: null,
+        airModelId: null,
+        airNumber: null,
         serial: null,
         productionDate: null,
         manufacturerInfo: null,

+ 16 - 12
src/views/ledger/baseSubsystem/index.vue

@@ -1,18 +1,18 @@
 <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="型号id" prop="modelComponentId">
+      <el-form-item label="型号" prop="modelNumber">
         <el-input
-          v-model="queryParams.modelComponentId"
-          placeholder="请输入型号id"
+          v-model="queryParams.modelNumber"
+          placeholder="请输入型号"
           clearable
           @keyup.enter.native="handleQuery"
         />
-      </el-form-item> -->
-      <el-form-item label="型号" prop="modelNumber">
+      </el-form-item>
+      <el-form-item label="机号" prop="airNumber">
         <el-input
-          v-model="queryParams.modelNumber"
-          placeholder="请输入号"
+          v-model="queryParams.airNumber"
+          placeholder="请输入号"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -104,8 +104,8 @@
     <el-table v-loading="loading" :data="baseSubsystemList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="序号" align="center" prop="id" />
-      <!-- <el-table-column label="型号id" align="center" prop="modelComponentId" /> -->
       <el-table-column label="型号" align="center" prop="modelNumber" />
+      <el-table-column label="机号" align="center" prop="airNumber" />
       <el-table-column label="编号" align="center" prop="serial" />
       <el-table-column label="出厂日期" align="center" prop="productionDate" width="180">
         <template slot-scope="scope">
@@ -133,7 +133,7 @@
         </template>
       </el-table-column>
     </el-table>
-    
+
     <pagination
       v-show="total>0"
       :total="total"
@@ -145,12 +145,12 @@
     <!-- 添加或修改分系统基本信息对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <!-- <el-form-item label="型号id" prop="modelComponentId">
-          <el-input v-model="form.modelComponentId" placeholder="请输入型号id" />
-        </el-form-item> -->
         <el-form-item label="型号" prop="modelNumber">
           <el-input v-model="form.modelNumber" placeholder="请输入型号" />
         </el-form-item>
+        <el-form-item label="机号" prop="airNumber">
+          <el-input v-model="form.airNumber" placeholder="请输入机号" />
+        </el-form-item>
         <el-form-item label="编号" prop="serial">
           <el-input v-model="form.serial" placeholder="请输入编号" />
         </el-form-item>
@@ -208,6 +208,8 @@ export default {
         pageSize: 10,
         modelComponentId: null,
         modelNumber: null,
+        airModelId: null,
+        airNumber: null,
         serial: null,
         productionDate: null,
         manufacturerInfo: null,
@@ -244,6 +246,8 @@ export default {
         id: null,
         modelComponentId: null,
         modelNumber: null,
+        airModelId: null,
+        airNumber: null,
         serial: null,
         productionDate: null,
         manufacturerInfo: null,

+ 18 - 4
src/views/ledger/partRecord/index.vue

@@ -1,6 +1,14 @@
 <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="机号" prop="airNumber">
+        <el-input
+          v-model="queryParams.airNumber"
+          placeholder="请输入机号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item label="型号" prop="modelNumber">
         <el-input
           v-model="queryParams.modelNumber"
@@ -112,6 +120,7 @@
     <el-table v-loading="loading" :data="partRecordList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="序号" align="center" prop="id" />
+      <el-table-column label="机号" align="center" prop="airNumber" />
       <el-table-column label="型号" align="center" prop="modelNumber" />
       <el-table-column label="编号" align="center" prop="serial" />
       <el-table-column label="出厂日期" align="center" prop="productionDate" width="180">
@@ -150,7 +159,7 @@
         </template>
       </el-table-column>
     </el-table>
-    
+
     <pagination
       v-show="total>0"
       :total="total"
@@ -162,9 +171,9 @@
     <!-- 添加或修改部件履历对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <!-- <el-form-item label="部件id" prop="airPartId">
-          <el-input v-model="form.airPartId" placeholder="请输入部件id" />
-        </el-form-item> -->
+        <el-form-item label="机号" prop="airNumber">
+          <el-input v-model="form.airNumber" placeholder="请输入机号" />
+        </el-form-item>
         <el-form-item label="型号" prop="modelNumber">
           <el-input v-model="form.modelNumber" placeholder="请输入型号" />
         </el-form-item>
@@ -239,6 +248,9 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
+        airPartId: null,
+        airModelId: null,
+        airNumber: null,
         modelNumber: null,
         serial: null,
         productionDate: null,
@@ -277,6 +289,8 @@ export default {
       this.form = {
         id: null,
         airPartId: null,
+        airModelId: null,
+        airNumber: null,
         modelNumber: null,
         serial: null,
         productionDate: null,

+ 18 - 4
src/views/ledger/subsystemRecord/index.vue

@@ -1,6 +1,14 @@
 <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="机号" prop="airNumber">
+        <el-input
+          v-model="queryParams.airNumber"
+          placeholder="请输入机号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item label="型号" prop="modelNumber">
         <el-input
           v-model="queryParams.modelNumber"
@@ -112,6 +120,7 @@
     <el-table v-loading="loading" :data="subsystemRecordList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="序号" align="center" prop="id" />
+      <el-table-column label="机号" align="center" prop="airNumber" />
       <el-table-column label="型号" align="center" prop="modelNumber" />
       <el-table-column label="编号" align="center" prop="serial" />
       <el-table-column label="出厂日期" align="center" prop="productionDate" width="180">
@@ -150,7 +159,7 @@
         </template>
       </el-table-column>
     </el-table>
-    
+
     <pagination
       v-show="total>0"
       :total="total"
@@ -162,9 +171,9 @@
     <!-- 添加或修改分系统履历对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <!-- <el-form-item label="子系统id" prop="airSubsystemId">
-          <el-input v-model="form.airSubsystemId" placeholder="请输入子系统id" />
-        </el-form-item> -->
+        <el-form-item label="机号" prop="airNumber">
+          <el-input v-model="form.airNumber" placeholder="请输入机号" />
+        </el-form-item>
         <el-form-item label="型号" prop="modelNumber">
           <el-input v-model="form.modelNumber" placeholder="请输入型号" />
         </el-form-item>
@@ -239,6 +248,9 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
+        airSubsystemId: null,
+        airModelId: null,
+        airNumber: null,
         modelNumber: null,
         serial: null,
         productionDate: null,
@@ -277,6 +289,8 @@ export default {
       this.form = {
         id: null,
         airSubsystemId: null,
+        airModelId: null,
+        airNumber: null,
         modelNumber: null,
         serial: null,
         productionDate: null,

+ 18 - 4
src/views/ledger/systemRecord/index.vue

@@ -9,6 +9,14 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="机号" prop="airNumber">
+        <el-input
+          v-model="queryParams.airNumber"
+          placeholder="请输入机号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item label="编号" prop="serial">
         <el-input
           v-model="queryParams.serial"
@@ -113,6 +121,7 @@
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="序号" align="center" prop="id" />
       <el-table-column label="型号" align="center" prop="modelNumber" />
+      <el-table-column label="机号" align="center" prop="airNumber" />
       <el-table-column label="编号" align="center" prop="serial" />
       <el-table-column label="出厂日期" align="center" prop="productionDate" width="180">
         <template slot-scope="scope">
@@ -150,7 +159,7 @@
         </template>
       </el-table-column>
     </el-table>
-    
+
     <pagination
       v-show="total>0"
       :total="total"
@@ -162,12 +171,12 @@
     <!-- 添加或修改系统履历对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <!-- <el-form-item label="系统id" prop="airSystemId">
-          <el-input v-model="form.airSystemId" placeholder="请输入系统id" />
-        </el-form-item> -->
         <el-form-item label="型号" prop="modelNumber">
           <el-input v-model="form.modelNumber" placeholder="请输入型号" />
         </el-form-item>
+        <el-form-item label="机号" prop="airNumber">
+          <el-input v-model="form.airNumber" placeholder="请输入机号" />
+        </el-form-item>
         <el-form-item label="编号" prop="serial">
           <el-input v-model="form.serial" placeholder="请输入编号" />
         </el-form-item>
@@ -239,7 +248,10 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
+        airSystemId: null,
         modelNumber: null,
+        airModelId: null,
+        airNumber: null,
         serial: null,
         productionDate: null,
         version: null,
@@ -278,6 +290,8 @@ export default {
         id: null,
         airSystemId: null,
         modelNumber: null,
+        airModelId: null,
+        airNumber: null,
         serial: null,
         productionDate: null,
         version: null,

+ 1 - 1
src/views/login.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="login">
     <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
-      <h3 class="title">知识图谱系统</h3>
+      <h3 class="title">故障智能分析与维护决策系统</h3>
       <el-form-item prop="username">
         <el-input
           v-model="loginForm.username"

+ 1 - 1
src/views/register.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="register">
     <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
-      <h3 class="title">知识图谱系统</h3>
+      <h3 class="title">故障智能分析与维护决策系统</h3>
       <el-form-item prop="username">
         <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
           <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />

+ 15 - 0
src/views/searchV2/breakdown/base.vue

@@ -0,0 +1,15 @@
+<template>
+    <div class="app-container">
+        <el-tabs v-model="activeName" @tab-click="handleClick">
+            <el-tab-pane label="用户管理" name="first">故障查询</el-tab-pane>
+            <el-tab-pane label="配置管理" name="second">关键词查询</el-tab-pane>
+            <el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>
+            <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane>
+        </el-tabs>
+    </div>
+</template>
+<script>
+export default {
+    
+}
+</script>

+ 91 - 20
src/views/searchV2/breakdown/index.vue

@@ -1,26 +1,97 @@
 <template>
     <div class="app-container">
-        <el-row class="margin20">
-            <el-col :span="6"><div>搜索</div></el-col>
-            <el-col :span="12">
-                    <el-input v-model="keyword" placeholder="搜索关键字" suffix-icon="el-icon-search"
-                        @keyup.enter.native="search"></el-input>
-            </el-col>
-        </el-row>
+      <el-form
+        :model="queryParams"
+        ref="queryForm"
+        size="small"
+        :inline="true"
+        label-width="68px"
+      >
+        <el-form-item label="故障1" prop="firstName" >
+          <el-input
+            v-model="queryParams.firstName"
+            placeholder="请输入"
+            clearable
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item label="故障2" prop="secondName">
+          <el-input
+            v-model="queryParams.secondName"
+            placeholder="请输入"
+            clearable
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
+            >搜索</el-button
+          >
+          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        </el-form-item>
+      </el-form>
+      <Graph ref="charts" :chartList="chartData" />
     </div>
-</template>
-<script>
-export default {
+  </template>
+  
+  <script>
+  import Graph from "@/components/Echarts/graph";
+  import { getGraphByEntiry } from "@/api/knowledge/search";
+  
+  export default {
+    name: "GranphSearch",
+    dicts: ["graph_search_length"],
+    components: { Graph },
     data() {
-        return {
-            keyword: '',
-        }
-    },
-    methods:{
-        search() {
-            console.log(`搜索关键字:${this.keyword}`);
-            // 在此处编写搜索逻辑
+      return {
+        queryParams: {
+          firstName: "",
+          secondName: "",
+          length: "0",
+        },
+        chartData: {
+          seriesData:[],
+          linksData:[],
         },
+      };
+    },
+    methods: {
+      handleQuery() {
+        if(this.queryParams.firstName == this.queryParams.secondName){
+          this.$message.error('不能查询自己的关联');
+          return
+        }
+        getGraphByEntiry(this.queryParams).then((resp) => {
+          let respData = resp.data
+          let seriesData = []
+          let linksData = []
+          for(let item of respData.data){
+            seriesData.push(
+              {name: item.name}
+            )
+          }
+          for(let link of respData.links){
+            linksData.push(
+              {
+                source: link.fromName,
+                target: link.toName,
+                label: {
+                  show: true, // 是否显示line的文字
+                  formatter: link.name // line的文字
+                },
+              }
+            )
+          }
+          this.chartData = {
+            seriesData,
+            linksData,
+          }       
+        });
+      },
+      resetQuery() {
+        this.resetForm("queryForm");
+      },
     },
-}
-</script>
+  };
+  </script>
+  

+ 133 - 28
src/views/showInfo/breakdown/index.vue

@@ -145,6 +145,14 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="修复日期" prop="repairedDate">
+        <el-date-picker clearable
+          v-model="queryParams.repairedDate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择修复日期">
+        </el-date-picker>
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -264,30 +272,52 @@
     />
 
     <!-- 添加或修改故障信息对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="1200px"  append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="110px">
-        <el-form-item label="战区" prop="warZone">
-          <el-input v-model="form.warZone" placeholder="请输入战区" />
-        </el-form-item>
-        <el-form-item label="大练基地" prop="base">
-          <el-input v-model="form.base" placeholder="请输入大练基地" />
-        </el-form-item>
-        <el-form-item label="师" prop="division">
-          <el-input v-model="form.division" placeholder="请输入师" />
-        </el-form-item>
-        <el-form-item label="旅团" prop="brigade">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="战区" prop="warZone">
+              <el-input v-model="form.warZone" placeholder="请输入战区" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="大练基地" prop="base">
+              <el-input v-model="form.base" placeholder="请输入大练基地" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="师" prop="division">
+            <el-input v-model="form.division" placeholder="请输入师" />
+          </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="旅团" prop="brigade">
           <el-input v-model="form.brigade" placeholder="请输入旅团" />
         </el-form-item>
-        <el-form-item label="机型" prop="airplaneModel">
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="机型" prop="airplaneModel">
           <el-input v-model="form.airplaneModel" placeholder="请输入机型" />
         </el-form-item>
-        <el-form-item label="机号" prop="airNumber">
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="机号" prop="airNumber">
           <el-input v-model="form.airNumber" placeholder="请输入机号" />
         </el-form-item>
-        <el-form-item label="发现时机" prop="discoveryTiming">
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="发现时机" prop="discoveryTiming">
           <el-input v-model="form.discoveryTiming" placeholder="请输入发现时机" />
         </el-form-item>
-        <el-form-item label="发现日期" prop="discoveryDate">
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="发现日期" prop="discoveryDate">
           <el-date-picker clearable
             v-model="form.discoveryDate"
             type="date"
@@ -295,36 +325,110 @@
             placeholder="请选择发现日期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="专业" prop="major">
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="专业" prop="major">
           <el-input v-model="form.major" placeholder="请输入专业" />
         </el-form-item>
-        <el-form-item label="故障描述" prop="describe">
-          <el-input v-model="form.describe" placeholder="请输入故障描述" />
+          </el-col>
+          <el-col :span="12">
+
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="故障原因" prop="reason">
+          <el-input v-model="form.reason" placeholder="请输入故障原因" type="textarea"/>
         </el-form-item>
-        <el-form-item label="故障原因" prop="reason">
-          <el-input v-model="form.reason" placeholder="请输入故障原因" />
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="故障描述" prop="describe">
+          <el-input v-model="form.describe" placeholder="请输入故障描述" type="textarea"/>
         </el-form-item>
-        <el-form-item label="故障件名称" prop="breakdownUnitName">
+
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="故障件名称" prop="breakdownUnitName">
           <el-input v-model="form.breakdownUnitName" placeholder="请输入故障件名称" />
         </el-form-item>
-        <el-form-item label="故障件号码" prop="breakdownUnitNumber">
+           
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="故障件号码" prop="breakdownUnitNumber">
           <el-input v-model="form.breakdownUnitNumber" placeholder="请输入故障件号码" />
         </el-form-item>
-        <el-form-item label="故障件所属系统" prop="unitSystem">
+            
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="故障件所属系统" prop="unitSystem">
           <el-input v-model="form.unitSystem" placeholder="请输入故障件所属系统" />
         </el-form-item>
-        <el-form-item label="故障后果" prop="consequence">
+            
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="故障后果" prop="consequence">
           <el-input v-model="form.consequence" placeholder="请输入故障后果" />
         </el-form-item>
-        <el-form-item label="故换件名称" prop="replaceUnitName">
+            
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="故换件名称" prop="replaceUnitName">
           <el-input v-model="form.replaceUnitName" placeholder="请输入故换件名称" />
         </el-form-item>
-        <el-form-item label="故换件号码" prop="replaceUnitNumber">
+            
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="故换件号码" prop="replaceUnitNumber">
           <el-input v-model="form.replaceUnitNumber" placeholder="请输入故换件号码" />
         </el-form-item>
-        <el-form-item label="排除方法" prop="method">
-          <el-input v-model="form.method" placeholder="请输入排除方法" />
+            
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="排除方法" prop="method">
+          <el-input v-model="form.method" placeholder="请输入排除方法" type="textarea"/>
+        </el-form-item>
+            
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="修复日期" prop="repairedDate">
+          <el-date-picker clearable
+            v-model="form.repairedDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择修复日期">
+          </el-date-picker>
         </el-form-item>
+          </el-col>
+        </el-row>
+
+
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -488,6 +592,7 @@ export default {
         replaceUnitType: null,
         replaceUnitNumber: null,
         method: null,
+        repairedDate: null,
         createBy: null,
         createTime: null,
         updateBy: null,

+ 1 - 1
vue.config.js

@@ -7,7 +7,7 @@ function resolve(dir) {
 
 const CompressionPlugin = require('compression-webpack-plugin')
 
-const name = process.env.VUE_APP_TITLE || '知识图谱系统' // 网页标题
+const name = process.env.VUE_APP_TITLE || '故障智能分析与维护决策系统' // 网页标题
 
 const port = process.env.port || process.env.npm_config_port || 80 // 端口