Rmengdi hace 7 meses
padre
commit
8b49fe8764

+ 27 - 0
src/api/als/oss.js

@@ -0,0 +1,27 @@
+import { get, deletes } from '@/http/index'
+/**
+ * @name 查询OSS对象存储列表
+ * @param query 参数
+ * @returns 返回列表
+ */
+export const listOssApi = async (query) => {
+  return await get('/als/resource/oss/list', query, { loading: false })
+}
+
+/**
+ * @name 查询OSS对象基于id串
+ * @param ossId ossId
+ * @returns returns
+ */
+export const getListByIdsApi = async (ossIds) => {
+  return await get(`/als/resource/oss/listByIds/${ossIds}`)
+}
+
+/**
+ * @name 删除OSS对象存储
+ * @param ossId ossId
+ * @returns returns
+ */
+export const delOssApi = async (ossId) => {
+  return await deletes(`/als/resource/oss/${ossId}`)
+}

+ 26 - 0
src/api/als/smTask.js

@@ -0,0 +1,26 @@
+import { get, put, post, deletes } from '@/http/index'
+
+// 查询定检任务列表
+export const getSmTask = async (data) => {
+  return await get('/als/smTask/list', data)
+}
+
+// 新增定检任务
+export const addSmTask = async (data) => {
+  return await post('/als/smTask', data)
+}
+
+// 修改定检任务
+export const updateSmTask = async (data) => {
+  return await put('/als/smTask', data)
+}
+
+// 删除定检任务
+export const removeSmTask = async (id) => {
+  return await deletes('/als/smTask/' + id)
+}
+
+//  获取机种和机型树
+export const getAircaftTypeAndModelTree = async (data) => {
+  return await get('/basicdata/aircaftCatalog/getAircaftTypeAndModelTree', data)
+}

+ 0 - 26
src/api/als/smask.js

@@ -1,26 +0,0 @@
-import { get, put, post, deletes } from '@/http/index'
-
-// 查询定检任务列表
-export const getSmask = async (data) => {
-  return await get('/als/smask/list', data)
-}
-
-// 新增定检任务
-export const addSmask = async (data) => {
-  return await post('/als/smask', data)
-}
-
-// 修改定检任务
-export const updateSmask = async (data) => {
-  return await put('/als/smask', data)
-}
-
-// 删除定检任务
-export const removeSmask = async (id) => {
-  return await deletes('/als/smask/' + id)
-}
-
-//  获取机种和机型树
-export const getAircaftTypeAndModelTree = async (data) => {
-  return await get('/basicdata/aircaftCatalog/getAircaftTypeAndModelTree', data)
-}

+ 49 - 11
src/router/modules/als/dataManage.js

@@ -58,10 +58,48 @@ export const trainingData = {
     }
   ]
 }
-export const maintainRecord = {
+// export const maintainRecord = {
+//   path: '/dataManage',
+//   redirect: '/dataManage/maintainRecord',
+//   name: 'MaintainRecord',
+//   component: Layout,
+//   meta: {
+//     title: '业务数据管理',
+//     icon: 'el-icon-s-platform'
+//   },
+//   children: [
+//     {
+//       path: '/dataManage/maintainRecord',
+//       component: () => import('@/views/als/maintainRecord/index.vue'),
+//       meta: {
+//         title: '维护记录'
+//       }
+//     }
+//   ]
+// }
+// export const maintenanceRecord = {
+//   path: '/dataManage',
+//   redirect: '/dataManage/maintenanceRecord',
+//   name: 'MaintenanceRecord',
+//   component: Layout,
+//   meta: {
+//     title: '业务数据管理',
+//     icon: 'el-icon-s-platform'
+//   },
+//   children: [
+//     {
+//       path: '/dataManage/maintenanceRecord',
+//       component: () => import('@/views/als/maintenanceRecord/index.vue'),
+//       meta: {
+//         title: '维修记录'
+//       }
+//     }
+//   ]
+// }
+export const maintenanceask = {
   path: '/dataManage',
-  redirect: '/dataManage/maintainRecord',
-  name: 'MaintainRecord',
+  redirect: '/dataManage/maintenanceask',
+  name: 'MaintenanceRecord',
   component: Layout,
   meta: {
     title: '业务数据管理',
@@ -69,17 +107,17 @@ export const maintainRecord = {
   },
   children: [
     {
-      path: '/dataManage/maintainRecord',
-      component: () => import('@/views/als/maintainRecord/index.vue'),
+      path: '/dataManage/maintenanceask',
+      component: () => import('@/views/als/maintenanceask/index.vue'),
       meta: {
-        title: '维护记录'
+        title: '维修任务'
       }
     }
   ]
 }
-export const maintenanceRecord = {
+export const smTask = {
   path: '/dataManage',
-  redirect: '/dataManage/maintenanceRecord',
+  redirect: '/dataManage/smTask',
   name: 'MaintenanceRecord',
   component: Layout,
   meta: {
@@ -88,10 +126,10 @@ export const maintenanceRecord = {
   },
   children: [
     {
-      path: '/dataManage/maintenanceRecord',
-      component: () => import('@/views/als/maintenanceRecord/index.vue'),
+      path: '/dataManage/smTask',
+      component: () => import('@/views/als/smTask/index.vue'),
       meta: {
-        title: '维修记录'
+        title: '定检任务'
       }
     }
   ]

+ 2 - 2
src/views/als/MDCData/index.vue

@@ -44,10 +44,10 @@
             <el-input v-model="form.sortieNo" placeholder="请输入架次号" />
           </el-form-item>
           <el-form-item label="飞行日期" prop="flightDate">
-            <el-date-picker v-model="form.flightDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择飞行日期"> </el-date-picker>
+            <el-date-picker v-model="form.flightDate" type="date" value-format="yyyy-MM-dd" placement="bottom-start" placeholder="请选择飞行日期"> </el-date-picker>
           </el-form-item>
           <el-form-item label="数据导入" prop="ossId">
-            <FileUpload :fileSize="500" :fileType="['xls', 'xlsx']" />
+            <FileUpload v-model="form.ossId" :limit="1" :fileSize="500" :fileType="['xls', 'xlsx']" />
           </el-form-item>
         </el-form>
 

+ 27 - 12
src/views/als/components/FileUpload/index.vue

@@ -32,8 +32,8 @@
     <!-- 文件列表 -->
     <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
       <li :key="file.url" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList">
-        <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank">
-          <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
+        <el-link :href="`${file.url}`" :underline="false" target="_blank">
+          <span class="el-icon-document"> {{ file.fileName }} </span>
         </el-link>
         <div class="ele-upload-list__item-content-action">
           <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
@@ -46,6 +46,7 @@
 <script>
 import { getToken } from '@/utils/auth'
 import { getItem } from '@/utils/index'
+import { getListByIdsApi, delOssApi } from '@/api/als/oss'
 
 export default {
   name: 'FileUpload',
@@ -76,8 +77,10 @@ export default {
     return {
       number: 0,
       uploadList: [],
-      baseUrl: '/api',
-      uploadFileUrl: '/api' + '/common/upload', // 上传文件服务器地址
+      baseUrl: '/als',
+      uploadFileUrl: '/als/common/upload',
+      // baseUrl: '/api',
+      // uploadFileUrl: '/api' + '/common/upload', // 上传文件服务器地址
       // headers: {
       //   Authorization: 'Bearer ' + getToken()
       // },
@@ -88,16 +91,26 @@ export default {
   },
   watch: {
     value: {
-      handler(val) {
+      async handler(val) {
         if (val) {
           let temp = 1
           // 首先将值转为数组
-          const list = Array.isArray(val) ? val : this.value.split(',')
+          let list = []
+          if (Array.isArray(val)) {
+            list = val
+          } else {
+            const res = await getListByIdsApi(val)
+            list = res.data.map((oss) => {
+              return {
+                fileName: oss.originalName,
+                url: oss.url,
+                ossId: oss.ossId
+              }
+            })
+          }
           // 然后将数组转为对象数组
           this.fileList = list.map((item) => {
-            if (typeof item === 'string') {
-              item = { name: item, url: item }
-            }
+            item = { fileName: item.fileName, url: item.url, ossId: item.ossId }
             item.uid = item.uid || new Date().getTime() + temp++
             return item
           })
@@ -170,7 +183,7 @@ export default {
     // 上传成功回调
     handleUploadSuccess(res, file) {
       if (res.code === 200) {
-        this.uploadList.push({ name: res.fileName, url: res.fileName })
+        this.uploadList.push({ fileName: res.data.fileName, url: res.data.url, ossId: res.data.ossId })
         this.uploadedSuccessfully()
       } else {
         this.number--
@@ -185,8 +198,10 @@ export default {
     },
     // 删除文件
     handleDelete(index) {
+      let ossId = this.fileList[index].ossId
+      delOssApi(ossId)
       this.fileList.splice(index, 1)
-      this.$emit('input', this.listToString(this.fileList))
+      this.$emit('input', this.fileList)
     },
     // 上传结束处理
     uploadedSuccessfully() {
@@ -194,7 +209,7 @@ export default {
         this.fileList = this.fileList.concat(this.uploadList)
         this.uploadList = []
         this.number = 0
-        this.$emit('input', this.listToString(this.fileList))
+        this.$emit('input', this.fileList[this.number].ossId)
         this.loading.close()
       }
     },

+ 101 - 23
src/views/als/faultCase/index.vue

@@ -34,15 +34,13 @@
           <el-form-item label="故障名称" prop="faultName">
             <el-input v-model="form.faultName" placeholder="请输入故障名称" />
           </el-form-item>
-          <el-form-item label="故障文件" prop="ossId">
-            <FileUpload :fileSize="500" :fileType="['xls', 'xlsx']" />
-          </el-form-item>
+
           <el-form-item label="故障日期" prop="faultDate">
-            <el-date-picker v-model="form.faultDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择故障日期"> </el-date-picker>
+            <el-date-picker v-model="form.faultDate" type="date" value-format="yyyy-MM-dd" placement="bottom-start" placeholder="请选择故障日期"> </el-date-picker>
           </el-form-item>
           <el-form-item label="所属系统" prop="systemItem">
             <el-select v-model="form.systemItem" placeholder="请选择所属系统">
-              <el-option v-for="item in systemItemList" :key="item.id" :label="item.label" :value="item.id"> </el-option>
+              <el-option v-for="item in systemItemList" :key="item.id" :label="item.label" :value="item.label"> </el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="专业" prop="specialty">
@@ -53,26 +51,29 @@
           </el-form-item>
           <el-form-item label="故障性质" prop="level">
             <el-select v-model="form.level" placeholder="请输入故障性质">
-              <el-option v-for="item in levelList" :key="item.id" :label="item.label" :value="item.id"> </el-option>
+              <el-option v-for="item in levelList" :key="item.id" :label="item.label" :value="item.label"> </el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="故障现象" prop="symptoms">
-            <el-input v-model="form.symptoms" placeholder="请输入故障现象" />
+            <el-input type="textarea" :rows="2" v-model="form.symptoms" placeholder="请输入故障现象" />
           </el-form-item>
           <el-form-item label="排除方法" prop="methodRectification">
             <el-input v-model="form.methodRectification" placeholder="请输入排除方法" />
           </el-form-item>
           <el-form-item label="故障原因分类" label-width="100px" prop="faultCauseType">
             <el-select v-model="form.faultCauseType" placeholder="请输入故障原因分类">
-              <el-option v-for="item in faultCauseTypeList" :key="item.id" :label="item.label" :value="item.id"> </el-option>
+              <el-option v-for="item in faultCauseTypeList" :key="item.id" :label="item.label" :value="item.label"> </el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="故障原因" prop="faultCause">
             <el-input v-model="form.faultCause" placeholder="请输入故障原因" />
           </el-form-item>
-          <el-form-item label="备注" prop="remarks">
-            <el-input v-model="form.remarks" placeholder="请输入备注" />
+          <el-form-item label="故障文件" prop="ossId">
+            <FileUpload v-model="form.ossId" :limit="1" :fileSize="500" :fileType="['xls', 'xlsx']" />
           </el-form-item>
+          <!-- <el-form-item label="备注" prop="remarks">
+            <el-input v-model="form.remarks" placeholder="请输入备注" />
+          </el-form-item> -->
         </el-form>
 
         <span slot="footer" class="dialog-footer">
@@ -80,6 +81,27 @@
           <el-button type="primary" @click="submit">确 定</el-button>
         </span>
       </el-dialog>
+
+      <el-dialog title="故障案例详情" :visible.sync="detailVisible" width="1000px" :show-close="false">
+        <el-descriptions border>
+          <el-descriptions-item label="飞机型号">{{ detailAircraftType }}</el-descriptions-item>
+          <el-descriptions-item label="飞机编号">{{ detailAircraftCode }}</el-descriptions-item>
+          <el-descriptions-item label="故障名称">{{ form.faultName }}</el-descriptions-item>
+          <el-descriptions-item label="故障日期">{{ form.faultDate }}</el-descriptions-item>
+          <el-descriptions-item label="故障现象">{{ form.symptoms }}</el-descriptions-item>
+          <el-descriptions-item label="所属系统">{{ form.systemItem }}</el-descriptions-item>
+          <el-descriptions-item label="专业">{{ form.specialty }}</el-descriptions-item>
+          <el-descriptions-item label="故障位置">{{ form.location }}</el-descriptions-item>
+          <el-descriptions-item label="排除方法">{{ form.methodRectification }}</el-descriptions-item>
+          <el-descriptions-item :span="1" label="故障原因分类">{{ form.faultCauseType }}</el-descriptions-item>
+          <el-descriptions-item :span="2" label="故障性质">{{ form.level }}</el-descriptions-item>
+          <el-descriptions-item :span="3" label="故障原因">{{ form.faultCause }}</el-descriptions-item>
+          <el-descriptions-item label="故障文件">{{ detailOssId }}</el-descriptions-item>
+        </el-descriptions>
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="detailVisible = false">确 定</el-button>
+        </span>
+      </el-dialog>
     </div>
   </div>
 </template>
@@ -87,8 +109,9 @@
 <script>
 import { getFaultCase, addFaultCase, updateFaultCase, removeFaultCase } from '@/api/als/faultCase'
 import { getAircaftCatalogTree, getAircaftTypeAndModelTree } from '@/api/als/sideTree'
-import { getAircaftCatalogAll } from '@/api/als/aircraft'
+import { getAircaftModelAll, getAircaftCatalogAll } from '@/api/als/aircraft'
 import { deepClone, debounce } from '@/utils/index'
+import { getListByIdsApi } from '@/api/als/oss'
 export default {
   name: 'FaultCase',
   components: {},
@@ -97,6 +120,7 @@ export default {
     return {
       dialogTitle: '新增',
       dialogVisible: false,
+      detailVisible: false,
       keyWordData: '',
       aircaftModelIdList: [],
       currentNodeKey: null,
@@ -120,11 +144,27 @@ export default {
         { prop: 'id', label: '编号' },
         {
           prop: 'aircraftType',
-          label: '机型'
+          label: '机型',
+          render: (h, params) => {
+            const matchedItem = this.aircaftModelAll.find((item) => params.row.aircraftType === item.aircaftModelId)
+            if (matchedItem) {
+              return h('span', matchedItem.aircaftModelName)
+            } else {
+              return h('span', {}, '')
+            }
+          }
         },
         {
           prop: 'aircraftCode',
-          label: '飞机编号'
+          label: '飞机编号',
+          render: (h, params) => {
+            const matchedItem = this.aircaftCatalogAll.find((item) => params.row.aircraftCode.trim() === item.aircaftCatalogId.trim())
+            if (matchedItem) {
+              return h('span', matchedItem.aircaftCatalogCode)
+            } else {
+              return h('span', {}, '')
+            }
+          }
         },
         {
           prop: 'faultName',
@@ -148,13 +188,22 @@ export default {
         },
         {
           prop: 'ossId',
-          label: '文件'
+          label: '文件编号'
         },
         {
           button: true,
           label: '操作',
           width: '240px',
           group: [
+            {
+              name: '查看',
+              type: 'text',
+              round: false,
+              plain: false,
+              onClick: (row, index, scope) => {
+                this.checkDetails(row)
+              }
+            },
             {
               name: '编辑',
               type: 'text',
@@ -219,6 +268,7 @@ export default {
         updateTime: ''
       },
       debounceFn: debounce(this.fetch, 500),
+      aircaftModelAll: [],
       aircaftCatalogAll: [],
       systemItemList: [{ id: 1, label: '特设' }],
       levelList: [
@@ -232,7 +282,10 @@ export default {
         { id: 3, label: '使用维护' },
         { id: 4, label: '成品维护' },
         { id: 5, label: '其他原因' }
-      ]
+      ],
+      detailAircraftType: '',
+      detailAircraftCode: '',
+      detailOssId: ''
     }
   },
   watch: {
@@ -248,13 +301,20 @@ export default {
     async getAircaftCatalogTreeAPI(params) {
       const { data } = await getAircaftTypeAndModelTree(params)
       this.menuTreeData = data
+      const getAircaftModelAllParams = {
+        aircaftTypeCode: '',
+        aircaftTypeId: '',
+        queryParam: ''
+      }
+      const { data: data1 } = await getAircaftModelAll(getAircaftModelAllParams)
+      this.aircaftModelAll = data1
       if (data.length) {
         this.currentNodeKey = data[0].id
         this.currentNode = data[0]
-        this.aircaftModelIdList = this.getTreeLeafData(data[0]?.children)
-          .map((e) => e.id)
-          .toString()
-        this.getFaultCaseAPI({ aircraftType: this.aircaftModelIdList })
+        // this.aircaftModelIdList = this.getTreeLeafData(data[0]?.children)
+        //   .map((e) => e.id)
+        //   .toString()
+        // this.getFaultCaseAPI({ aircraftId: this.aircaftModelIdList })
       }
     },
 
@@ -336,9 +396,12 @@ export default {
 
     async treeNodeClick(data) {
       this.$refs.table.clearSelection()
-      this.currentNodeKey = data.id
+      this.currentNodeKey = this.form.aircraftType = data.id
       this.currentNode = data
-      this.getFaultCaseAPI({ aircraftType: this.aircaftModelIdList })
+      this.aircaftModelIdList = this.getTreeLeafData(data.children.length ? data.children : [data])
+        .map((e) => e.id)
+        .toString()
+      this.getFaultCaseAPI({ aircraftType: this.currentNode.id })
       const getAircaftCatalogAllParams = {
         keyWord: '',
         aircaftModelIdList: [this.currentNodeKey]
@@ -350,7 +413,7 @@ export default {
     openDialog() {
       this.dialogTitle = '新增'
       this.dialogVisible = true
-      this.form.aircraftType = this.currentNode.label
+      this.form.aircraftType = this.currentNode.id
     },
 
     handleClose() {
@@ -399,7 +462,7 @@ export default {
     },
 
     remove(row) {
-      this.$confirm('是否删除该机种', '提示', {
+      this.$confirm('是否删除该数据', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
@@ -408,6 +471,21 @@ export default {
           this.removeFaultCaseAPI(row.map((e) => e.id))
         })
         .catch(() => {})
+    },
+
+    async checkDetails(row) {
+      this.form = deepClone(row)
+      const aircraftTypeItem = this.aircaftModelAll.find((item) => row.aircraftType === item.aircaftModelId)
+      const aircraftCodeItem = this.aircaftCatalogAll.find((item) => row.aircraftCode === item.aircaftCatalogId)
+      if (row.ossId) {
+        const res = await getListByIdsApi(row.ossId)
+        this.detailOssId = res.data[0].originalName
+      } else {
+        this.detailOssId = row.ossId
+      }
+      this.detailAircraftType = aircraftTypeItem.aircaftModelName
+      this.detailAircraftCode = aircraftCodeItem.aircaftCatalogCode
+      this.detailVisible = true
     }
   }
 }

+ 2 - 0
src/views/als/flightData/index.vue

@@ -322,6 +322,8 @@ export default {
       this.form.aircaftModel = this.currentNode.parentId
     },
 
+    checkDetails(row) {},
+
     handleClose() {
       this.dialogVisible = false
       this.form = {

+ 160 - 66
src/views/als/maintenanceask/index.vue

@@ -6,7 +6,7 @@
     <div class="view-dataSpecies-right">
       <div class="view-dataType-title">
         <div class="view-dataType-title-btn">
-          <el-button type="success" @click="openDialog()" :disabled="currentNode && currentNode.type == 0">新增</el-button>
+          <el-button type="success" @click="openDialog()" :disabled="!(currentNode.type == 1 && currentNode.children.length == 0)">新增</el-button>
           <el-button type="warning" @click="remove(tableCheckItems)" :disabled="tableCheckItems.length == 0">删除</el-button>
           <el-button type="primary">导入模板</el-button>
           <el-button type="primary">导出模板</el-button>
@@ -23,29 +23,44 @@
       <!-- 添加或修改维修任务对话框 -->
       <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="600px" :before-close="handleClose">
         <el-form ref="form" :model="form" label-width="80px">
-          <el-form-item label="架次号" prop="sortieNo">
-            <el-input v-model="form.sortieNo" placeholder="请输入架次号" />
+          <el-form-item label="机型" prop="aircraftType">
+            <el-select v-model="form.aircraftType" placeholder="请选择机型">
+              <el-option v-for="item in aircaftModelAll" :key="item.aircaftModelId" :label="item.aircaftModelName" :value="item.aircaftModelId"> </el-option>
+            </el-select>
           </el-form-item>
-          <el-form-item label="机号" prop="aircraftId">
-            <el-input v-model="form.aircraftId" placeholder="请输入机号" />
+          <el-form-item label="机号" prop="aircraftCode">
+            <el-select v-model="form.aircraftCode" placeholder="请选择编目">
+              <el-option v-for="item in aircaftCatalogAll" :key="item.aircaftCatalogId" :label="item.aircaftCatalogCode" :value="item.aircaftCatalogId"> </el-option>
+            </el-select>
           </el-form-item>
-          <el-form-item label="所属系统" prop="systemName">
-            <el-input v-model="form.systemName" placeholder="请输入所属系统" />
+          <el-form-item label="数据来源" prop="dataType">
+            <el-select v-model="form.dataType" placeholder="请输入数据来源">
+              <el-option v-for="item in dataTypeList" :key="item.id" :label="item.label" :value="item.label"> </el-option>
+            </el-select>
+            <!-- <el-input v-model="form.dataType" placeholder="请输入所属系统" /> -->
           </el-form-item>
-          <el-form-item label="单位" prop="unitName">
-            <el-input v-model="form.unitName" placeholder="请输入单位" />
+          <el-form-item label="故障代码" prop="faultCode">
+            <el-input v-model="form.faultCode" placeholder="请输入故障代码" />
           </el-form-item>
-          <el-form-item label="处理人" prop="operator">
-            <el-input v-model="form.operator" placeholder="请输入处理人" />
+          <el-form-item label="故障描述" prop="faultDescription">
+            <el-input v-model="form.faultDescription" placeholder="请输入故障描述" />
           </el-form-item>
-          <el-form-item label="故障部件" prop="faultPart">
-            <el-input v-model="form.faultPart" placeholder="请输入故障部件" />
+          <el-form-item label="故障位置" prop="location">
+            <el-input v-model="form.location" placeholder="请输入故障位置" />
           </el-form-item>
-          <el-form-item label="维修建议" prop="proposal">
-            <el-input v-model="form.proposal" placeholder="请输入维修建议" />
+          <el-form-item label="故障等级" prop="level">
+            <el-select v-model="form.level" placeholder="请输入故障等级">
+              <el-option v-for="item in levelList" :key="item.id" :label="item.label" :value="item.label"> </el-option>
+            </el-select>
           </el-form-item>
-          <el-form-item label="维修时间" prop="handlerDate">
-            <el-date-picker clearable v-model="form.handlerDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择维修时间"> </el-date-picker>
+          <!-- <el-form-item label="故障发生时间" prop="flightDate">
+            <el-date-picker v-model="form.flightDate" type="date" value-format="yyyy-MM-dd" placement="bottom-start" placeholder="请选择故障发生时间"> </el-date-picker>
+          </el-form-item> -->
+          <el-form-item label="故障现象" prop="symptoms">
+            <el-input v-model="form.symptoms" placeholder="请输入故障现象" />
+          </el-form-item>
+          <el-form-item label="故障原因" prop="faultCause">
+            <el-input type="textarea" :rows="2" v-model="form.faultCause" placeholder="请输入故障原因" />
           </el-form-item>
         </el-form>
 
@@ -54,12 +69,31 @@
           <el-button type="primary" @click="submit">确 定</el-button>
         </span>
       </el-dialog>
+      <el-dialog title="任务分配" :visible.sync="detailVisible" width="1000px" :show-close="false">
+        <el-descriptions size="medium" border>
+          <el-descriptions-item label="机型">{{ detailAircraftType }}</el-descriptions-item>
+          <el-descriptions-item label="机号">{{ detailAircraftCode }}</el-descriptions-item>
+          <el-descriptions-item label="数据来源">{{ form.dataType }}</el-descriptions-item>
+          <el-descriptions-item label="故障代码">{{ form.faultCode }}</el-descriptions-item>
+          <el-descriptions-item label="故障描述">{{ form.faultDescription }}</el-descriptions-item>
+          <el-descriptions-item label="故障位置">{{ form.location }}</el-descriptions-item>
+          <el-descriptions-item :span="1" label="故障等级">{{ form.level }}</el-descriptions-item>
+          <el-descriptions-item :span="2" label="故障现象">{{ form.symptoms }}</el-descriptions-item>
+          <el-descriptions-item :span="3" label="故障原因">{{ form.faultCause }}</el-descriptions-item>
+        </el-descriptions>
+
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="detailVisible = false">确 定</el-button>
+        </span>
+      </el-dialog>
     </div>
   </div>
 </template>
 
 <script>
-import { getMaintenanceask, getAircaftTypeAndModelTree, addMaintenanceask, updateMaintenanceask, removeMaintenanceask } from '@/api/als/maintenanceask'
+import { getMaintenanceask, addMaintenanceask, updateMaintenanceask, removeMaintenanceask } from '@/api/als/maintenanceask'
+import { getAircaftTypeAndModelTree } from '@/api/als/sideTree'
+import { getAircaftModelAll, getAircaftCatalogAll } from '@/api/als/aircraft'
 import { deepClone, debounce } from '@/utils/index'
 export default {
   name: 'Maintenanceask',
@@ -69,10 +103,11 @@ export default {
     return {
       dialogTitle: '新增',
       dialogVisible: false,
+      detailVisible: false,
       keyWord: '',
       aircaftModelIdList: [],
-      currentNodeKey: null,
-      currentNode: null,
+      currentNodeKey: '',
+      currentNode: {},
       menuTreeData: [],
       treeObj: {
         title: '所属机种',
@@ -91,40 +126,51 @@ export default {
       columns: [
         { prop: 'id', label: '编号' },
         {
-          prop: 'sortieNo',
-          label: '架次号'
-        },
-        {
-          prop: 'aircraftId',
-          label: '机号'
-        },
-        {
-          prop: 'systemName',
-          label: '所属系统'
-        },
-        {
-          prop: 'unitName',
-          label: '单位'
+          prop: 'aircraftType',
+          label: '机型',
+          render: (h, params) => {
+            const matchedItem = this.aircaftModelAll.find((item) => params.row.aircraftType === item.aircaftModelId)
+            if (matchedItem) {
+              return h('span', matchedItem.aircaftModelName)
+            } else {
+              return h('span', {}, '')
+            }
+          }
         },
         {
-          prop: 'operator',
-          label: '处理人'
+          prop: 'aircraftCode',
+          label: '机号',
+          render: (h, params) => {
+            const matchedItem = this.aircaftCatalogAll.find((item) => params.row.aircraftCode.trim() === item.aircaftCatalogId.trim())
+            if (matchedItem) {
+              return h('span', matchedItem.aircaftCatalogCode)
+            } else {
+              return h('span', {}, '')
+            }
+          }
         },
         {
-          prop: 'faultPart',
-          label: '故障部件'
+          prop: 'faultDescription',
+          label: '故障描述'
         },
         {
-          prop: 'proposal',
-          label: '维修建议'
+          prop: 'dataType',
+          label: '数据来源'
         },
         {
-          prop: 'handlerDate',
-          label: '维修时间'
+          prop: 'createTime',
+          label: '创建时间'
         },
         {
           prop: 'status',
-          label: '状态'
+          label: '状态',
+          render: (h, params) => {
+            if (params.row.status == 0) {
+              return h('span', { class: 'warning-state' }, '未分配')
+            } else {
+              return h('span', { class: 'success-state' }, '已分配')
+            }
+          }
         },
         {
           button: true,
@@ -137,7 +183,16 @@ export default {
               round: false,
               plain: false,
               onClick: (row, index, scope) => {
-                _this.handUpdate(row)
+                this.handUpdate(row)
+              }
+            },
+            {
+              name: '查看',
+              type: 'text',
+              round: false,
+              plain: false,
+              onClick: (row, index, scope) => {
+                this.checkDetails(row)
               }
             },
             {
@@ -146,7 +201,7 @@ export default {
               round: false,
               plain: false,
               onClick: (row, index, scope) => {
-                _this.remove([row])
+                this.remove([row])
               }
             }
           ]
@@ -188,7 +243,21 @@ export default {
         updateBy: '',
         updateTime: ''
       },
-      debounceFn: debounce(this.fetch, 500)
+      debounceFn: debounce(this.fetch, 500),
+      aircaftModelAll: [],
+      aircaftCatalogAll: [],
+      dataTypeList: [
+        { id: 1, label: '维修决策' },
+        { id: 2, label: '定检任务' },
+        { id: 3, label: '需要确认' }
+      ],
+      levelList: [
+        { id: 1, label: '一般故障' },
+        { id: 2, label: '较大故障' },
+        { id: 3, label: '重大故障' }
+      ],
+      detailAircraftType: '',
+      detailAircraftCode: ''
     }
   },
   watch: {
@@ -204,18 +273,27 @@ export default {
     async getAircaftTypeAndModelTreeAPI(params) {
       const { data } = await getAircaftTypeAndModelTree(params)
       this.menuTreeData = data
+      const getAircaftModelAllParams = {
+        aircaftTypeCode: '',
+        aircaftTypeId: '',
+        queryParam: ''
+      }
+      const { data: data1 } = await getAircaftModelAll(getAircaftModelAllParams)
+      this.aircaftModelAll = data1
       if (data.length) {
-        this.currentNodeKey = data[0].value
+        this.currentNodeKey = data[0].id
         this.currentNode = data[0]
-        this.aircaftModelIdList = this.getTreeLeafData(data[0]?.children).map((e) => e.id)
-        this.getMaintenanceaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+        this.aircaftModelIdList = this.getTreeLeafData(data[0]?.children)
+          .map((e) => e.id)
+          .toString()
+        this.getMaintenanceaskAPI({ aircraftType: this.aircaftModelIdList })
       }
     },
 
     async removeMaintenanceaskAPI(params) {
       try {
-        const { success } = await removeMaintenanceask(params)
-        if (success) {
+        const { code } = await removeMaintenanceask(params)
+        if (code == 200) {
           this.$message({
             type: 'success',
             message: '操作成功!'
@@ -248,59 +326,67 @@ export default {
       const { pageSize, pageIndex } = this.tableRequset
       const {
         data: { list, totalCount }
-      } = await getMaintenanceask({ pageSize, pageIndex, keyWord, ...params })
+      } = await getMaintenanceask({ pageSize, pageIndex, ...params })
       this.tableData = list
       this.tableRequset.total = totalCount
     },
 
     fetch() {
-      this.getMaintenanceaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+      this.getMaintenanceaskAPI({ aircraftType: this.aircaftModelIdList })
     },
 
     searchClick() {
-      this.getMaintenanceaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+      this.getMaintenanceaskAPI({ aircraftType: this.aircaftModelIdList })
     },
 
     async addMaintenanceaskAPI() {
       try {
         delete this.form.aircaftModelName
-        const { success } = await addMaintenanceask({ ...this.form })
-        if (success) {
+        const { code } = await addMaintenanceask({ ...this.form })
+        if (code == 200) {
           this.$message({
             type: 'success',
             message: '操作成功!'
           })
-          this.getMaintenanceaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+          this.getMaintenanceaskAPI({ aircraftType: this.aircaftModelIdList })
         }
       } catch (error) {}
     },
 
     async updateMaintenanceaskAPI() {
       try {
-        const { success } = await updateMaintenanceask({ ...this.form })
-        if (success) {
+        const { code } = await updateMaintenanceask({ ...this.form })
+        if (code == 200) {
           this.$message({
             type: 'success',
             message: '操作成功!'
           })
-          this.getMaintenanceaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+          this.getMaintenanceaskAPI({ aircraftType: this.aircaftModelIdList })
         }
       } catch (error) {}
     },
 
-    treeNodeClick(data) {
+    async treeNodeClick(data) {
       this.$refs.table.clearSelection()
-      this.currentNodeKey = data.id
+      this.currentNodeKey = this.form.aircraftType = data.id
       this.currentNode = data
-      this.aircaftModelIdList = this.getTreeLeafData(data.children.length ? data.children : [data]).map((e) => e.id)
-      this.getMaintenanceaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+      this.aircaftModelIdList = this.getTreeLeafData(data.children.length ? data.children : [data])
+        .map((e) => e.id)
+        .toString()
+      this.getMaintenanceaskAPI({ aircraftType: this.aircaftModelIdList })
+      const getAircaftCatalogAllParams = {
+        keyWord: '',
+        aircaftModelIdList: [this.currentNodeKey]
+      }
+      const { data: data2 } = await getAircaftCatalogAll(getAircaftCatalogAllParams)
+      this.aircaftCatalogAll = data2
     },
 
     openDialog() {
       this.dialogTitle = '新增'
       this.dialogVisible = true
-      this.form.aircaftModelName = this.currentNode.label
-      this.form.aircaftModelId = this.currentNode.id
+      this.form.aircraftType = this.currentNode.id
+      this.form.status = 0
     },
 
     handleClose() {
@@ -359,6 +445,14 @@ export default {
           this.removeMaintenanceaskAPI(row.map((e) => e.id))
         })
         .catch(() => {})
+    },
+    async checkDetails(row) {
+      this.form = deepClone(row)
+      const aircraftTypeItem = this.aircaftModelAll.find((item) => row.aircraftType === item.aircaftModelId)
+      const aircraftCodeItem = this.aircaftCatalogAll.find((item) => row.aircraftCode === item.aircaftCatalogId)
+      this.detailAircraftType = aircraftTypeItem.aircaftModelName
+      this.detailAircraftCode = aircraftCodeItem.aircaftCatalogCode
+      this.detailVisible = true
     }
   }
 }

+ 21 - 20
src/views/als/smask/index.vue → src/views/als/smTask/index.vue

@@ -80,10 +80,10 @@
 </template>
 
 <script>
-import { getSmask, getAircaftTypeAndModelTree, addSmask, updateSmask, removeSmask } from '@/api/als/smask'
+import { getSmTask, getAircaftTypeAndModelTree, addSmTask, updateSmTask, removeSmTask } from '@/api/als/smTask'
 import { deepClone, debounce } from '@/utils/index'
 export default {
-  name: 'Smask',
+  name: 'SmTask',
   components: {},
   data() {
     // 这里存放数据
@@ -264,19 +264,19 @@ export default {
         this.currentNodeKey = data[0].value
         this.currentNode = data[0]
         this.aircaftModelIdList = this.getTreeLeafData(data[0]?.children).map((e) => e.id)
-        this.getSmaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+        this.getSmTaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
       }
     },
 
-    async removeSmaskAPI(params) {
+    async removeSmTaskAPI(params) {
       try {
-        const { success } = await removeSmask(params)
+        const { success } = await removeSmTask(params)
         if (success) {
           this.$message({
             type: 'success',
             message: '操作成功!'
           })
-          await this.getSmaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+          await this.getSmTaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
           this.handleClose()
         }
       } catch (error) {}
@@ -298,48 +298,48 @@ export default {
       return newArr
     },
 
-    async getSmaskAPI(params) {
+    async getSmTaskAPI(params) {
       if (this.$refs.table) this.$refs.table.clearSelection()
       const { keyWord } = this
       const { pageSize, pageIndex } = this.tableRequset
       const {
         data: { list, totalCount }
-      } = await getSmask({ pageSize, pageIndex, keyWord, ...params })
+      } = await getSmTask({ pageSize, pageIndex, keyWord, ...params })
       this.tableData = list
       this.tableRequset.total = totalCount
     },
 
     fetch() {
-      this.getSmaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+      this.getSmTaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
     },
 
     searchClick() {
-      this.getSmaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+      this.getSmTaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
     },
 
-    async addSmaskAPI() {
+    async addSmTaskAPI() {
       try {
         delete this.form.aircaftModelName
-        const { success } = await addSmask({ ...this.form })
+        const { success } = await addSmTask({ ...this.form })
         if (success) {
           this.$message({
             type: 'success',
             message: '操作成功!'
           })
-          this.getSmaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+          this.getSmTaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
         }
       } catch (error) {}
     },
 
-    async updateSmaskAPI() {
+    async updateSmTaskAPI() {
       try {
-        const { success } = await updateSmask({ ...this.form })
+        const { success } = await updateSmTask({ ...this.form })
         if (success) {
           this.$message({
             type: 'success',
             message: '操作成功!'
           })
-          this.getSmaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+          this.getSmTaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
         }
       } catch (error) {}
     },
@@ -349,7 +349,7 @@ export default {
       this.currentNodeKey = data.id
       this.currentNode = data
       this.aircaftModelIdList = this.getTreeLeafData(data.children.length ? data.children : [data]).map((e) => e.id)
-      this.getSmaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
+      this.getSmTaskAPI({ aircaftModelIdList: this.aircaftModelIdList })
     },
 
     openDialog() {
@@ -398,11 +398,11 @@ export default {
     submit() {
       switch (this.dialogTitle) {
         case '编辑':
-          this.updateSmaskAPI()
+          this.updateSmTaskAPI()
           this.handleClose()
           break
         case '新增':
-          this.addSmaskAPI()
+          this.addSmTaskAPI()
           this.handleClose()
           break
       }
@@ -419,7 +419,7 @@ export default {
         type: 'warning'
       })
         .then(() => {
-          this.removeSmaskAPI(row.map((e) => e.id))
+          this.removeSmTaskAPI(row.map((e) => e.id))
         })
         .catch(() => {})
     }
@@ -430,3 +430,4 @@ export default {
 <style lang="scss" scoped>
 @import '../index.scss';
 </style>
+@/api/als/smTask