瀏覽代碼

合并武汉代码

Rmengdi 6 月之前
父節點
當前提交
9c6d8e1867
共有 63 個文件被更改,包括 1664 次插入807 次删除
  1. 10 0
      src/api/carrierStandard/carrierSailingMaterialConsumeRecord.js
  2. 9 0
      src/api/carrierStandard/carrierSailingMaterialConsumeRegularities.js
  3. 5 0
      src/api/system/user.js
  4. 10 0
      src/api/task/carrierFlightMission.js
  5. 1 1
      src/assets/font/demo_index.html
  6. 1 1
      src/components/AddUserDialog/index.js
  7. 7 1
      src/components/CrudDialog/index.vue
  8. 1 1
      src/components/FittingsModal/index.js
  9. 29 2
      src/components/TagsView/index.vue
  10. 6 15
      src/components/TagsView/scrollPane.vue
  11. 9 2
      src/components/aviationMaterialsModal/index.js
  12. 31 0
      src/layout/components/NavBar/MenuItem.vue
  13. 24 0
      src/layout/components/NavBar/index.scss
  14. 11 1
      src/layout/components/NavBar/index.vue
  15. 15 76
      src/layout/components/NavBar/menu.vue
  16. 20 15
      src/pemission.js
  17. 306 334
      src/router/modules/carrierStandard.js
  18. 39 0
      src/router/modules/faultDiagnosis.js
  19. 30 0
      src/router/modules/faultStatistics.js
  20. 39 0
      src/router/modules/lifePrediction.js
  21. 39 0
      src/router/modules/maintenanceDecision.js
  22. 347 142
      src/router/modules/system.js
  23. 89 0
      src/router/modules/systemTest.js
  24. 68 0
      src/router/modules/test.js
  25. 89 34
      src/router/private-routes.js
  26. 1 7
      src/router/public-routes.js
  27. 2 1
      src/store/getters.js
  28. 21 2
      src/store/modules/permission.js
  29. 25 1
      src/utils/route.js
  30. 9 11
      src/views/als/faultDiagnosis/index.vue
  31. 1 1
      src/views/basicData/dataAircraftCataloging/index.js
  32. 1 1
      src/views/basicData/dataAircraftCataloging/index.vue
  33. 3 0
      src/views/basicData/dataEnvironment/src/regularitiesChoose.vue
  34. 4 0
      src/views/basicData/dataSailingMaterialPrice/index.js
  35. 2 1
      src/views/carrierStandard/carrierAllAudit/index.vue
  36. 1 1
      src/views/carrierStandard/carrierComputationalModel/index.vue
  37. 1 1
      src/views/carrierStandard/carrierListExecutionRegistration/components/look/index.js
  38. 1 1
      src/views/carrierStandard/carrierListExecutionRegistration/components/registering/index.js
  39. 10 10
      src/views/carrierStandard/carrierListMachineryPreparation/components/compile/index.vue
  40. 1 1
      src/views/carrierStandard/carrierSailingMaterialConsumeRecord/index.js
  41. 1 17
      src/views/carrierStandard/carrierSailingMaterialConsumeRecord/index.vue
  42. 13 2
      src/views/carrierStandard/carrierSailingMaterialConsumeRecord/outboundRecord.vue
  43. 12 2
      src/views/carrierStandard/carrierSailingMaterialConsumeRecord/warehousingRecord.vue
  44. 69 0
      src/views/carrierStandard/carrierSailingMaterialConsumeRegularities/components/importDialog/index.vue
  45. 54 18
      src/views/carrierStandard/carrierSailingMaterialConsumeRegularities/index.vue
  46. 17 1
      src/views/carrierStandard/carrierUseRegistration/components/sailingMaterial/index.vue
  47. 3 3
      src/views/carrierStandard/safeguardCost/index.js
  48. 10 18
      src/views/carrierStandard/safeguardCost/index.vue
  49. 11 7
      src/views/carrierStandard/safeguardCost/priceList.js
  50. 9 17
      src/views/carrierStandard/safeguardCost/priceList.vue
  51. 1 1
      src/views/login/index.vue
  52. 1 1
      src/views/statisticalAnalysis/statisticalAnalysisSailingMaterialSpareParts/index.vue
  53. 2 2
      src/views/system/dept/index.js
  54. 13 13
      src/views/system/dept/index.vue
  55. 1 1
      src/views/system/role/index.js
  56. 9 12
      src/views/system/role/index.vue
  57. 17 6
      src/views/system/systemBackup/index.vue
  58. 4 3
      src/views/system/systemDataDictionary/data.vue
  59. 14 5
      src/views/system/user/index.js
  60. 24 2
      src/views/system/user/index.vue
  61. 2 2
      src/views/task/carrierFlightMission/components/aircraft/index.vue
  62. 2 0
      src/views/task/carrierFlightMission/index.js
  63. 57 10
      src/views/task/carrierFlightMission/index.vue

+ 10 - 0
src/api/carrierStandard/carrierSailingMaterialConsumeRecord.js

@@ -51,3 +51,13 @@ export const handMatching = async (data) => {
 export const sumCalculate = async (data) => {
   return await get('/carryingtask/overyearAvmatConsume/sumCalculate', data)
 }
+
+//导出出库记录
+export const exportOutboundRecordExcel = async (data) => {
+  window.open(process.env.VUE_APP_BASE_API + `/carryingtask/overyearAvmatConsume/exportOutboundRecordExcel?queryParam=${data.queryParam}&consumeDataId=${data.consumeDataId}`)
+}
+
+//导出入库记录
+export const exportWarehousingRecordExcel = async (data) => {
+  window.open(process.env.VUE_APP_BASE_API + `/carryingtask/overyearAvmatConsume/exportWarehousingRecordExcel?queryParam=${data.queryParam}&consumeDataId=${data.consumeDataId}`)
+}

+ 9 - 0
src/api/carrierStandard/carrierSailingMaterialConsumeRegularities.js

@@ -15,3 +15,12 @@ export const updateAvmatConsumeRule = async (data) => {
 export const removeAvmatConsumeRule = async (data) => {
   return await post('/carryingtask/avmatConsumeRule/removeAvmatConsumeRule', data)
 }
+
+//下载模板
+export const downLoadFile = async (data) => {
+  window.open(process.env.VUE_APP_BASE_API + '/carryingtask/avmatConsumeRule/downLoadFile')
+}
+//导出
+export const exportExcel = async (data) => {
+  window.open(process.env.VUE_APP_BASE_API + `/carryingtask/avmatConsumeRule/exportExcel?avmatCategoriesId=${data.avmatCategoriesId}&avmatCategoriesName=${data.avmatCategoriesName}&avmatCategoriesCode=${data.avmatCategoriesCode}`)
+}

+ 5 - 0
src/api/system/user.js

@@ -44,3 +44,8 @@ export const optionselect = async (query) => {
 export const authRole = async (query) => {
   return await post('/system/user/authRole', query)
 }
+
+// 重置密码
+export const resetBtn = async (query) => {
+  return await post('/system/user/resetPwd', query)
+}

+ 10 - 0
src/api/task/carrierFlightMission.js

@@ -105,3 +105,13 @@ export const socialSecurityDetailsPage = async (data) => {
 export const generatePriceList = async (data) => {
   return await post('/safeguard/socialSecurityDetails/generatePriceList', data)
 }
+
+//导出年度社会化保障参考数据
+export const exportSocialSecurityExcel = async (data) => {
+  window.open(process.env.VUE_APP_BASE_API + `/safeguard/socialSecurity/exportExcel?keyword=${data.keyword}`)
+}
+
+//导出年度社会化保障参考价格清单数据
+export const exportSocialSecurityDetailsExcel = async (data) => {
+  window.open(process.env.VUE_APP_BASE_API + `/safeguard/socialSecurityDetails/exportExcel?socialSecurityId=${data.socialSecurityId}&avmatCategoriesId=${data.avmatCategoriesId}`)
+}

+ 1 - 1
src/assets/font/demo_index.html

@@ -36,7 +36,7 @@
 </head>
 <body>
   <div class="main">
-    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">
+    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 综合看板" target="_blank">
       <img width="200" src="https://img.alicdn.com/imgextra/i3/O1CN01Mn65HV1FfSEzR6DKv_!!6000000000514-55-tps-228-59.svg">
       
     </a></h1>

+ 1 - 1
src/components/AddUserDialog/index.js

@@ -11,7 +11,7 @@ export const columns = (_this) => {
     },
     {
       prop: 'deptName',
-      label: '所属部门'
+      label: '所属机构'
     },
     {
       prop: 'majorName',

+ 7 - 1
src/components/CrudDialog/index.vue

@@ -9,7 +9,13 @@
               <el-col v-bind="item.colLayout || { span: 12 }">
                 <el-form-item :label="item.label" :prop="item.key" class="form-item" :style="itemStyle" v-if="!item.isHidden">
                   <template v-if="item.type === 'input'">
-                    <el-input v-model="formData[`${item.key}`]" :placeholder="item.placeHolder ? item.placeHolder : `请输入${item.label}`" v-bind="item.inputOptions" :disabled="item.disabled"></el-input>
+                    <el-input
+                      v-model="formData[`${item.key}`]"
+                      :placeholder="item.placeHolder ? item.placeHolder : `请输入${item.label}`"
+                      v-bind="item.inputOptions"
+                      :disabled="item.disabled"
+                      :show-password="item.showPassword ? item.showPassword : false"
+                    ></el-input>
                   </template>
 
                   <template v-if="item.type === 'inputNumber'">

+ 1 - 1
src/components/FittingsModal/index.js

@@ -19,7 +19,7 @@ export const columns = (_this) => [
 
   {
     prop: 'mechanician',
-    label: '机械师'
+    label: '驾驶员'
   },
   {
     button: true,

+ 29 - 2
src/components/TagsView/index.vue

@@ -1,8 +1,18 @@
 <template>
   <div class="tags-view">
-    <ScrollPane>
+    <ScrollPane ref="ScrollPane">
       <transition-group name="drag" class="list" tag="div">
-        <div class="tags-view-tp" v-for="(item, index) in $store.getters.tagsViewList" :key="item.fullPath" @drop="drop($event, index)" @dragover="dragover($event, index)" @dragstart="dragstart(index)" :draggable="item.fullPath !== '/home'">
+        <div
+          ref="tag"
+          class="tags-view-tp"
+          v-for="(item, index) in $store.getters.tagsViewList"
+          :key="item.fullPath"
+          :to="item.path"
+          @drop="drop($event, index)"
+          @dragover="dragover($event, index)"
+          @dragstart="dragstart(index)"
+          :draggable="item.fullPath !== '/home'"
+        >
           <el-tooltip v-if="item.meta.title.length > 10" class="item" effect="dark" :content="item.meta.title" placement="top-start">
             <!-- '/home'页不允许拖拽 -->
             <div @click.self="to(item.fullPath)" @contextmenu.prevent="openmenu($event, index)" class="tags-view-item" :class="isActive(item) ? 'active' : ''">
@@ -78,9 +88,11 @@ export default {
       this.conTextMenStyle.left = x + 'px'
       this.conTextMenStyle.top = y + 'px'
     },
+
     openVisibles() {
       this.visible = !this.visible
     },
+
     to(path) {
       this.$router.push(path)
     },
@@ -97,11 +109,26 @@ export default {
         this.dragIndex = index
       }
     },
+
     dragover(e, index) {
       e.preventDefault()
+    },
+
+    moveTo() {
+      const tags = this.$refs.tag
+      this.$nextTick(() => {
+        for (const tag of tags) {
+          if (tag.getAttribute('to') === this.$route.path) {
+            this.$refs.ScrollPane.moveToTarget(tag)
+          }
+        }
+      })
     }
   },
   watch: {
+    $route() {
+      this.moveTo()
+    },
     // 当tag 操作拦打开 给body添加 关闭操作拦事件 当tag 操作拦关闭 给body移除 关闭操作拦事件
     visible(val) {
       if (val) {

+ 6 - 15
src/components/TagsView/scrollPane.vue

@@ -44,32 +44,23 @@ export default {
       const $containerWidth = $container.offsetWidth
       const $scrollWrapper = this.scrollWrapper
       const tagList = this.$parent.$refs.tag
-
       let firstTag = null
       let lastTag = null
-
       // 找到第一个标签和最后一个标签
       if (tagList.length > 0) {
         firstTag = tagList[0]
         lastTag = tagList[tagList.length - 1]
       }
-
       if (firstTag === currentTag) {
         $scrollWrapper.scrollLeft = 0
       } else if (lastTag === currentTag) {
-        $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth
+        $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth + currentTag.offsetWidth
       } else {
-        // 找到preTag和nextag
-        const currentIndex = tagList.findIndex((item) => item === currentTag)
-        const prevTag = tagList[currentIndex - 1]
-        const nextTag = tagList[currentIndex + 1]
-
-        // 标签的offsetLeft在nextag之后
-        const afterNextTagOffsetLeft = nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing
-
-        // 标签的offsetLeft在prevTag之前g
-        const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing
-
+        const currentTagIndex = tagList.findIndex((e) => e === currentTag)
+        const prevTag = tagList[currentTagIndex - 1]
+        const nextTag = tagList[currentTagIndex + 1]
+        const afterNextTagOffsetLeft = nextTag.offsetLeft + nextTag.offsetWidth + tagAndTagSpacing
+        const beforePrevTagOffsetLeft = prevTag.offsetLeft - tagAndTagSpacing
         if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) {
           $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth
         } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {

+ 9 - 2
src/components/aviationMaterialsModal/index.js

@@ -27,15 +27,22 @@ export const dialogColumns = (_this) => [
     prop: 'avmatCatalogCode',
     label: '航材编号'
   },
+  {
+    prop: 'specification',
+    label: '规格型号'
+  },
+  {
+    prop: 'unit',
+    label: '计量单位'
+  },
   {
     prop: 'avmatCategoriesName',
     label: '航材分类'
   },
-
   {
     button: true,
     label: '操作',
-    width: '240px',
+    width: '100px',
     group: [
       {
         name: '选择',

+ 31 - 0
src/layout/components/NavBar/MenuItem.vue

@@ -0,0 +1,31 @@
+<template>
+  <div v-if="item.meta && !item.meta.navHide">
+    <el-menu-item popper-class="nav-bar-menu-submenu-open" v-if="!item.children || item.children.length == 0" :index="item.path">
+      <i :class="item.meta.icon"></i>
+      {{ item.meta.title }}
+    </el-menu-item>
+
+    <el-submenu v-else popper-class="nav-bar-menu-submenu-open" :show-timeout="100" :hide-timeoutt="100" :index="item.path" popper-append-to-body>
+      <template slot="title">
+        <i :class="item.meta.icon"></i>
+        {{ item.meta.title }}
+      </template>
+      <menu-item v-for="child in item.children" :key="child.path" :item="child"></menu-item>
+    </el-submenu>
+  </div>
+</template>
+<script>
+export default {
+  name: 'MenuItem',
+  props: {
+    item: {
+      type: Object,
+      required: true
+    }
+  },
+  data() {
+    return {}
+  },
+  methods: {}
+}
+</script>

+ 24 - 0
src/layout/components/NavBar/index.scss

@@ -360,3 +360,27 @@
 .el-dropdown-menu__item:not(.is-disabled):hover {
   background-color: #072a36 !important;
 }
+
+//  nav menus 下面
+
+.nav-bar-menu .el-menu--horizontal .el-menu-item {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 130px;
+  height: 50px;
+  line-height: 50px;
+  color: #fff;
+  background-color: transparent;
+}
+
+.nav-bar-menu .el-menu--horizontal .el-submenu .el-submenu__title {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 130px;
+  height: 50px;
+  line-height: 50px;
+  color: #fff;
+  background-color: transparent;
+}

+ 11 - 1
src/layout/components/NavBar/index.vue

@@ -6,7 +6,7 @@
     </div>
     <div class="nav-bar-logo-bg"></div>
     <div class="nav-bar-menu">
-      <Menu />
+      <Menu :tree-data="newRoute" />
       <User />
     </div>
   </div>
@@ -16,12 +16,22 @@
 import Menu from './menu.vue'
 import User from './user.vue'
 import logo from '@/assets/images/logo.png'
+import { buildTreeData, navMenus } from '@/router/private-routes'
 export default {
   name: 'NavBar',
   components: {
     Menu,
     User
   },
+  computed: {
+    mainMenu() {
+      return this.$router.getRoutes()
+    },
+    newRoute() {
+      return this.$store.getters.navMenus
+    }
+  },
+
   data: function () {
     return {
       logo

+ 15 - 76
src/layout/components/NavBar/menu.vue

@@ -1,87 +1,20 @@
 <template>
-  <el-menu :collapse-transition="false" :default-active="activeIndex2" mode="horizontal" @select="handleSelect">
-    <template v-for="(item, index) in newRoute">
-      <template v-if="index <= visibleNumber">
-        <el-menu-item popper-class="nav-bar-menu-submenu-open" v-if="!item.children.length" :index="item.path" :key="index">
-          <i :class="item.meta.icon"></i>
-          {{ item.meta.title }}
-        </el-menu-item>
-        <el-menu-item popper-class="nav-bar-menu-submenu-open" v-else-if="item.children.length > 0 && item.children.every((i) => i.meta.hide)" :index="item.path" :key="index">
-          <i :class="item.meta.icon"></i>
-          {{ item.meta.title }}
-        </el-menu-item>
-        <el-submenu v-else popper-class="nav-bar-menu-submenu-open" :show-timeout="100" :hide-timeoutt="100" :key="index" :index="item.path">
-          <template slot="title">
-            <i :class="item.meta.icon"></i>
-            {{ item.meta.title }}
-          </template>
-          <template v-for="(items, n) in item.children">
-            <el-menu-item v-if="!items.meta.hide" :open="index.toString() + '-' + n.toString()" :key="n" :index="items.path">
-              <i v-if="items.meta.icon" :class="items.meta.icon"></i>
-              {{ items.meta.title }}
-            </el-menu-item>
-          </template>
-        </el-submenu>
-      </template>
-    </template>
-    <el-submenu v-if="newRoute.length > visibleNumber" index="more" popper-class="nav-bar-menu-submenu-open">
-      <template slot="title">更多菜单</template>
-      <template v-for="(item, index) in newRoute">
-        <template v-if="index > visibleNumber">
-          <el-menu-item popper-class="nav-bar-menu-submenu-open" v-if="!item.children.length" :index="item.path" :key="index">
-            <i :class="item.meta.icon"></i>
-            {{ item.meta.title }}
-          </el-menu-item>
-          <el-menu-item popper-class="nav-bar-menu-submenu-open" v-else-if="item.children.length > 0 && item.children.every((i) => i.meta.hide)" :index="item.path" :key="index">
-            <i :class="item.meta.icon"></i>
-            {{ item.meta.title }}
-          </el-menu-item>
-          <el-submenu v-else popper-class="nav-bar-menu-submenu-open" :show-timeout="100" :hide-timeoutt="100" :key="index" :index="item.path">
-            <template slot="title">
-              <i :class="item.meta.icon"></i>
-              {{ item.meta.title }}
-            </template>
-            <template v-for="(items, n) in item.children">
-              <el-menu-item v-if="!items.meta.hide" :open="index.toString() + '-' + n.toString()" :key="n" :index="items.path">
-                <i v-if="items.meta.icon" :class="items.meta.icon"></i>
-                {{ items.meta.title }}
-              </el-menu-item>
-            </template>
-          </el-submenu>
-        </template>
-      </template>
-    </el-submenu>
+  <el-menu class="el-menu-demo" mode="horizontal" @select="handleSelect">
+    <menu-item v-for="item in treeData" :key="item.path" :item="item"></menu-item>
   </el-menu>
 </template>
 
 <script>
-import { filterRoutes, generteMenus, changeSortMenus } from '@/utils/route'
-
+import MenuItem from './MenuItem.vue'
 export default {
   name: 'Menu',
-  computed: {
-    mainMenu() {
-      return this.$router.getRoutes()
-    },
-    newRoute() {
-      const froutes = filterRoutes(this.mainMenu)
-      return changeSortMenus(generteMenus(froutes))
-    }
+  components: {
+    MenuItem
   },
-
-  data() {
-    return {
-      activeIndex2: '0',
-      // 顶部栏初始数
-      visibleNumber: 4
-    }
-  },
-  mounted() {
-    this.activeIndex2 = this.$route.path
-  },
-  watch: {
-    $route() {
-      this.activeIndex2 = this.$route.path
+  props: {
+    treeData: {
+      type: Array,
+      default: () => []
     }
   },
   methods: {
@@ -91,3 +24,9 @@ export default {
   }
 }
 </script>
+<style></style>
+<style lang="scss" scoped>
+.el-menu-demo {
+  display: flex;
+}
+</style>

+ 20 - 15
src/pemission.js

@@ -2,8 +2,8 @@ import router from './router'
 import store from './store'
 import { getItem } from '@/utils/index'
 import { TOKEN } from '@/utils/constant'
-import { getMenusData, flatMenus } from '@/utils/route'
-import { privateRoutes } from '@/router/private-routes'
+import { filterPermissionsRoutes, flattenedRoutes, buildTreeData } from '@/router/private-routes'
+import Layout from '@/layout/index.vue'
 
 // 白名单
 const whiteList = ['/login']
@@ -18,24 +18,29 @@ router.beforeEach(async (to, from, next) => {
     if (to.path === '/login') {
       next('/')
     } else {
-      // console.log(store.getters.hasUserInfo)
-      // 判断用户资料是否存在 如果不存才 则需要获取用户信息
-
       if (!store.getters.hasUserInfo) {
-        // todo: 做权限的时候解开
-        // 拿到后台返回的权限列表
         const { permissions } = await store.dispatch('user/getUserInfo')
+        const fRoutes = await filterPermissionsRoutes(flattenedRoutes, permissions)
 
-        // 这里是在做排序
-        const allMenus = flatMenus(getMenusData()) // Array.from(new Set())
-        const orderPermissions = allMenus.filter((item) => permissions.includes(item))
-        // 通过比对路由 动态添加
-        const filterRoutes = await store.dispatch('permission/filterRoutes', orderPermissions)
-
-        filterRoutes.forEach((item) => {
-          router.addRoute(item)
+        fRoutes.forEach(async (item) => {
+          await router.addRoute(item)
         })
 
+        const navMenus = fRoutes.map(({ name, meta, path }) => ({ name, meta, path, children: [] }))
+        store.dispatch('permission/setNavMenus', buildTreeData(navMenus))
+
+        await router.addRoute({
+          path: '/*',
+          name: 'Layout',
+          component: Layout,
+          children: [
+            {
+              path: '/*',
+              name: 'redirect',
+              component: () => import('@/views/err-page/404.vue')
+            }
+          ]
+        })
         return next(to.path)
         next({ ...to, replace: true })
       }

+ 306 - 334
src/router/modules/carrierStandard.js

@@ -1,359 +1,331 @@
 import Layout from '@/layout/index.vue'
-
 /**
  *
+ * CarrierFlightMission                      飞行任务管理
  * carrierListMachineryPreparation           携行清单机务编修
  * carrierAllAudit                           机务清单总体审核
  * carrierListShipping                       携行清单航材编修
  * carrierListExecutionRegistration          任务执行情况登记
  * useRegistration                           携行航材使用登记
- * carrierComputationalModel                 携行计算模型管理
- * carrierComputationalModelVersion          携行计算模型版本管理
- * carrierSailingMaterialConsumeRegularities 航材消耗规律管理
- * carrierSailingMaterialConsumeRecord       航材历年消耗管理
  * safeguardCost                             社会化保障参考
- *
+ * safeguardCost                             社会化保障参考
  */
 
-//携行清单机务编修
-export const carrierListMachineryPreparation = {
-  path: '/carrierStandard',
-  redirect: '/carrierStandard/carrierListMachineryPreparation',
-  component: Layout,
-  name: 'CarrierListMachineryPreparation',
-  meta: {
-    title: '航材管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 9,
-  children: [
-    {
-      path: '/carrierStandard/carrierListMachineryPreparation',
-      component: () => import('@/views/carrierStandard/carrierListMachineryPreparation/index.vue'),
-      meta: {
-        title: '携行清单机务编修'
-      },
-      sort: 1
+export default [
+  {
+    name: 'CarrierStandard',
+    path: '/carrierStandard',
+    redirect: '/carrierStandard/',
+    component: Layout,
+    meta: {
+      title: '携行规划',
+      icon: 'el-icon-s-platform'
     },
-    {
-      path: '/carrierStandard/carrierListMachineryPreparation/compile/:id',
-      component: () => import('@/views/carrierStandard/carrierListMachineryPreparation/components/compile/index.vue'),
-      meta: {
-        title: '携行清单机务编修-编修',
-        hide: true
-      }
-    },
-    {
-      path: '/carrierStandard/carrierListMachineryPreparation/look/:id',
-      component: () => import('@/views/carrierStandard/carrierListMachineryPreparation/components/look/index.vue'),
-      meta: {
-        title: '携行清单机务编修-查看详情',
-        hide: true
-      }
-    }
-  ]
-}
-
-//机务清单总体审核
-export const carrierAllAudit = {
-  path: '/carrierStandard',
-  redirect: '/carrierStandard/carrierListMachineryPreparation',
-  component: Layout,
-  name: 'CarrierAllAudit',
-  meta: {
-    title: '航材管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 9,
-  children: [
-    {
-      path: '/carrierStandard/carrierAllAudit',
-      component: () => import('@/views/carrierStandard/carrierAllAudit/index.vue'),
-      meta: {
-        title: '机务清单总体审核'
+    children: [
+      /**
+       * ----------------------------飞行任务管理-----------------------------
+       */
+      {
+        name: 'CarrierFlightMission',
+        path: '/task/carrierFlightMission',
+        component: () => import('@/views/task/carrierFlightMission/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          title: '飞行任务管理'
+        }
       },
-      sort: 2
-    },
-    {
-      path: '/carrierStandard/carrierAllAudit/look/:id',
-      component: () => import('@/views/carrierStandard/carrierAllAudit/components/carrierAllAuditLook/index.vue'),
-      meta: {
-        title: '机务清单总体审核-查看详情',
-        hide: true
-      }
-    }
-  ]
-}
-
-//携行清单航材编修
-export const carrierListShipping = {
-  path: '/carrierStandard',
-  redirect: '/carrierStandard/carrierListMachineryPreparation',
-  component: Layout,
-  name: 'CarrierListShipping',
-  meta: {
-    title: '航材管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 9,
-  children: [
-    {
-      path: '/carrierStandard/carrierListShipping',
-      component: () => import('@/views/carrierStandard/carrierListShipping/index.vue'),
-      meta: {
-        title: '携行清单航材编修'
+      {
+        name: 'CarrierFlightMission',
+        path: '/task/carrierFlightMission/compile',
+        component: () => import('@/views/task/carrierFlightMission/components/compile/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '飞行任务管理-任务编制'
+        }
       },
-      sort: 3
-    },
-    {
-      path: '/carrierStandard/carrierListShipping/compile/:id',
-      component: () => import('@/views/carrierStandard/carrierListShipping/components/compile/index.vue'),
-      meta: {
-        title: '携行清单航材编修-编修',
-        hide: true
-      }
-    },
-    {
-      path: '/carrierStandard/carrierListShipping/look/:id',
-      component: () => import('@/views/carrierStandard/carrierListShipping/components/look/index.vue'),
-      meta: {
-        title: '携行清单航材编修-详情',
-        hide: true
-      }
-    }
-  ]
-}
-
-//任务执行情况登记
-export const carrierListExecutionRegistration = {
-  path: '/carrierStandard',
-  redirect: '/carrierStandard/carrierListMachineryPreparation',
-  component: Layout,
-  name: 'CarrierListExecutionRegistration',
-  meta: {
-    title: '航材管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 10,
-  children: [
-    {
-      path: '/carrierStandard/carrierListExecutionRegistration',
-      component: () => import('@/views/carrierStandard/carrierListExecutionRegistration/index.vue'),
-      meta: {
-        title: '任务执行情况登记'
+      {
+        name: 'CarrierFlightMission',
+        path: '/task/carrierFlightMission/aircraft/:id/:status',
+        component: () => import('@/views/task/carrierFlightMission/components/aircraft/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '飞行任务管理-任务飞机'
+        }
       },
-      sort: 5
-    },
-    {
-      path: '/carrierStandard/carrierListExecutionRegistration/aerospaceSpareParts',
-      component: () => import('@/views/carrierStandard/carrierListExecutionRegistration/components/aerospaceSpareParts/index.vue'),
-      meta: {
-        title: '携行清单执行登记-航材',
-        hide: true
-      }
-    },
-    {
-      path: '/carrierStandard/carrierListExecutionRegistration/missionPlane',
-      component: () => import('@/views/carrierStandard/carrierListExecutionRegistration/components/missionPlane/index.vue'),
-      meta: {
-        title: '携行清单执行登记-任务飞机',
-        hide: true
-      }
-    },
-    {
-      path: '/carrierStandard/carrierListExecutionRegistration/compile',
-      component: () => import('@/views/carrierStandard/carrierListExecutionRegistrationCompile/index.vue'),
-      meta: {
-        title: '携行清单执行登记-编修',
-        hide: true
-      }
-    },
-    {
-      path: '/carrierStandard/carrierListExecutionRegistration/registering/:taskId',
-      component: () => import('@/views/carrierStandard/carrierListExecutionRegistration/components/registering/index.vue'),
-      meta: {
-        title: '任务执行情况登记-登记',
-        hide: true
-      }
-    },
-    {
-      path: '/carrierStandard/carrierListExecutionRegistration/look/:taskId',
-      component: () => import('@/views/carrierStandard/carrierListExecutionRegistration/components/look/index.vue'),
-      meta: {
-        title: '任务执行情况登记-查看详情',
-        hide: true
-      }
-    }
-    //
-  ]
-}
-
-//携行航材使用登记
-export const useRegistration = {
-  path: '/carrierStandard',
-  redirect: '/carrierStandard/carrierListMachineryPreparation',
-  component: Layout,
-  name: 'UseRegistration',
-  meta: {
-    title: '航材管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 9,
-  children: [
-    {
-      path: '/carrierStandard/carrierUseRegistration',
-      component: () => import('@/views/carrierStandard/carrierUseRegistration/index.vue'),
-      meta: {
-        title: '携行航材使用登记'
+      {
+        name: 'CarrierFlightMission',
+        path: '/task/carrierFlightMission/aerospaceSpareParts',
+        component: () => import('@/views/task/carrierFlightMission/components/aerospaceSpareParts/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '飞行任务管理-航材'
+        }
+      },
+      {
+        name: 'CarrierFlightMission',
+        path: '/task/carrierFlightMission/missionPlane',
+        component: () => import('@/views/task/carrierFlightMission/components/missionPlane/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '飞行任务管理-任务飞机'
+        }
+      },
+      /**
+       * ----------------------------携行清单机务编修-----------------------------
+       */
+      {
+        name: 'CarrierListMachineryPreparation',
+        path: '/carrierStandard/carrierListMachineryPreparation',
+        component: () => import('@/views/carrierStandard/carrierListMachineryPreparation/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          title: '携行清单机务编修'
+        }
+      },
+      {
+        name: 'CarrierListMachineryPreparation',
+        path: '/carrierStandard/carrierListMachineryPreparation/compile/:id',
+        component: () => import('@/views/carrierStandard/carrierListMachineryPreparation/components/compile/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '携行清单机务编修-编修'
+        }
+      },
+      {
+        name: 'CarrierListMachineryPreparation',
+        path: '/carrierStandard/carrierListMachineryPreparation/look/:id',
+        component: () => import('@/views/carrierStandard/carrierListMachineryPreparation/components/look/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '携行清单机务编修-查看详情'
+        }
+      },
+      /**
+       * ----------------------------机务清单总体审核-----------------------------
+       */
+      {
+        name: 'CarrierAllAudit',
+        path: '/carrierStandard/carrierAllAudit',
+        component: () => import('@/views/carrierStandard/carrierAllAudit/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          title: '机务清单总体审核'
+        }
+      },
+      {
+        name: 'CarrierAllAudit',
+        path: '/carrierStandard/carrierAllAudit/look/:id',
+        component: () => import('@/views/carrierStandard/carrierAllAudit/components/carrierAllAuditLook/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '机务清单总体审核-查看详情'
+        }
+      },
+      /**
+       * ----------------------------携行清单航材编修-----------------------------
+       */
+      {
+        name: 'CarrierListShipping',
+        path: '/carrierStandard/carrierListShipping',
+        component: () => import('@/views/carrierStandard/carrierListShipping/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          title: '携行清单航材编修'
+        }
+      },
+      {
+        name: 'CarrierListShipping',
+        path: '/carrierStandard/carrierListShipping/compile/:id',
+        component: () => import('@/views/carrierStandard/carrierListShipping/components/compile/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '携行清单航材编修-编修'
+        }
+      },
+      {
+        name: 'CarrierListShipping',
+        path: '/carrierStandard/carrierListShipping/look/:id',
+        component: () => import('@/views/carrierStandard/carrierListShipping/components/look/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '携行清单航材编修-详情'
+        }
       },
-      sort: 5
-    },
-    {
-      path: '/carrierStandard/carrierSailingMaterial/:id',
-      component: () => import('@/views/carrierStandard/carrierUseRegistration/components/sailingMaterial/index.vue'),
-      meta: {
-        title: '携行航材使用登记-航材',
-        hide: true
-      }
-    },
-    {
-      path: '/carrierStandard/carrierUseRegistration/look/:id',
-      component: () => import('@/views/carrierStandard/carrierUseRegistration/components/look/index.vue'),
-      meta: {
-        title: '携行航材使用登记-查看详情',
-        hide: true
-      }
-    }
-  ]
-}
 
-//携行计算模型管理
-export const carrierComputationalModel = {
-  path: '/carrierStandard',
-  redirect: '/carrierStandard/carrierListMachineryPreparation',
-  component: Layout,
-  name: 'CarrierComputationalModel',
-  meta: {
-    title: '航材管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 9,
-  children: [
-    {
-      path: '/carrierStandard/carrierComputationalModel',
-      component: () => import('@/views/carrierStandard/carrierComputationalModel/index.vue'),
-      meta: {
-        title: '携行计算模型管理'
+      /**
+       * ----------------------------任务执行情况登记-----------------------------
+       */
+      {
+        name: 'CarrierListExecutionRegistration',
+        path: '/carrierStandard/carrierListExecutionRegistration',
+        component: () => import('@/views/carrierStandard/carrierListExecutionRegistration/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          title: '任务执行情况登记'
+        }
+      },
+      {
+        name: 'CarrierListExecutionRegistration',
+        path: '/carrierStandard/carrierListExecutionRegistration/aerospaceSpareParts',
+        component: () => import('@/views/carrierStandard/carrierListExecutionRegistration/components/aerospaceSpareParts/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '携行清单执行登记-航材'
+        }
+      },
+      {
+        name: 'CarrierListExecutionRegistration',
+        path: '/carrierStandard/carrierListExecutionRegistration/missionPlane',
+        component: () => import('@/views/carrierStandard/carrierListExecutionRegistration/components/missionPlane/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '携行清单执行登记-任务飞机'
+        }
+      },
+      {
+        name: 'CarrierListExecutionRegistration',
+        path: '/carrierStandard/carrierListExecutionRegistration/compile',
+        component: () => import('@/views/carrierStandard/carrierListExecutionRegistrationCompile/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '携行清单执行登记-编修'
+        }
+      },
+      {
+        name: 'CarrierListExecutionRegistration',
+        path: '/carrierStandard/carrierListExecutionRegistration/registering/:taskId',
+        component: () => import('@/views/carrierStandard/carrierListExecutionRegistration/components/registering/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '任务执行情况登记-登记'
+        }
+      },
+      {
+        name: 'CarrierListExecutionRegistration',
+        path: '/carrierStandard/carrierListExecutionRegistration/look/:taskId',
+        component: () => import('@/views/carrierStandard/carrierListExecutionRegistration/components/look/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '任务执行情况登记-查看详情'
+        }
       },
-      sort: 6
-    }
-  ]
-}
 
-//航材消耗规律管理
-export const carrierSailingMaterialConsumeRegularities = {
-  path: '/carrierStandard',
-  redirect: '/carrierStandard/carrierListMachineryPreparation',
-  component: Layout,
-  name: 'CarrierSailingMaterialConsumeRegularities',
-  meta: {
-    title: '航材管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 9,
-  children: [
-    {
-      path: '/carrierStandard/carrierSailingMaterialConsumeRegularities',
-      component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRegularities/index.vue'),
-      meta: {
-        title: '航材消耗规律管理'
+      /**
+       * ----------------------------携行航材使用登记-----------------------------
+       */
+      {
+        name: 'carrierUseRegistration',
+        path: '/carrierStandard/carrierUseRegistration',
+        component: () => import('@/views/carrierStandard/carrierUseRegistration/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          title: '携行航材使用登记'
+        }
+      },
+      {
+        name: 'carrierUseRegistration',
+        path: '/carrierStandard/carrierSailingMaterial/:id',
+        component: () => import('@/views/carrierStandard/carrierUseRegistration/components/sailingMaterial/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '携行航材使用登记-航材'
+        }
+      },
+      {
+        name: 'carrierUseRegistration',
+        path: '/carrierStandard/carrierUseRegistration/look/:id',
+        component: () => import('@/views/carrierStandard/carrierUseRegistration/components/look/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '携行航材使用登记-查看详情'
+        }
       },
-      sort: 7
-    }
-  ]
-}
 
-//历年航材消耗数据
-export const carrierSailingMaterialConsumeRecord = {
-  path: '/carrierStandard',
-  redirect: '/carrierStandard/carrierListMachineryPreparation',
-  component: Layout,
-  name: 'CarrierSailingMaterialConsumeRecord',
-  meta: {
-    title: '航材管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 9,
-  children: [
-    {
-      path: '/carrierStandard/carrierSailingMaterialConsumeRecord',
-      component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRecord/index.vue'),
-      meta: {
-        title: '历年航材消耗数据'
+      /**
+       * ----------------------------社会化保障参考-----------------------------
+       */
+      {
+        name: 'SafeguardCost',
+        path: '/carrierStandard/safeguardCost',
+        component: () => import('@/views/carrierStandard/safeguardCost/index.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          title: '社会化保障参考'
+        }
+      },
+      {
+        name: 'SafeguardCost',
+        path: '/carrierStandard/safeguardCost/:id',
+        component: () => import('@/views/carrierStandard/safeguardCost/priceList.vue'),
+        meta: {
+          parent: 'CarrierStandard',
+          roleMenuHide: true,
+          navHide: true,
+          title: '社会化保障参考-价格清单'
+        }
       },
-      sort: 8
-    },
-    // {
-    //   path: '/carrierStandard/carrierSailingMaterialConsumeRecord',
-    //   component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRecord/annualManagement.vue'),
-    //   meta: {
-    //     title: '历年航材消耗数据-年度管理'
-    //   }
-    // },
-    {
-      path: '/carrierStandard/carrierSailingMaterialConsumeRecord/outboundRecord/:consumeDataId',
-      component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRecord/outboundRecord.vue'),
-      meta: {
-        title: '历年航材消耗数据-出库记录',
-        hide: true
-      }
-    },
-    {
-      path: '/carrierStandard/carrierSailingMaterialConsumeRecord/warehousingRecord/:consumeDataId',
-      component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRecord/warehousingRecord.vue'),
-      meta: {
-        title: '历年航材消耗数据-入库记录',
-        hide: true
-      }
-    },
-    {
-      path: '/carrierStandard/carrierSailingMaterialConsumeRecord/summarizedCalculation/:consumeDataId',
-      component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRecord/summarizedCalculation.vue'),
-      meta: {
-        title: '历年航材消耗数据-汇总计算',
-        hide: true
-      }
-    }
-  ]
-}
 
-//社会化保障参考
-export const safeguardCost = {
-  path: '/carrierStandard',
-  redirect: '/carrierStandard/carrierListMachineryPreparation',
-  component: Layout,
-  name: 'SafeguardCost',
-  meta: {
-    title: '航材管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 9,
-  children: [
-    {
-      path: '/carrierStandard/safeguardCost',
-      component: () => import('@/views/carrierStandard/safeguardCost/index.vue'),
-      meta: {
-        title: '社会化保障参考'
+      /**
+       * ----------------------------携行航材指标分析-----------------------------
+       */
+      {
+        name: 'StatisticalAnalysis',
+        path: '/statisticalAnalysis',
+        meta: {
+          parent: 'CarrierStandard',
+          title: '携行航材指标分析'
+        }
       },
-      sort: 9
-    },
-    {
-      path: '/carrierStandard/safeguardCost/:id',
-      component: () => import('@/views/carrierStandard/safeguardCost/priceList.vue'),
-      meta: {
-        title: '社会化保障参考-价格清单',
-        hide: true
+      {
+        name: 'statisticalAnalysisSailingMaterialSpareParts',
+        path: '/statisticalAnalysis/statisticalAnalysisSailingMaterialSpareParts',
+        component: () => import('@/views/statisticalAnalysis/statisticalAnalysisSailingMaterialSpareParts/index.vue'),
+        meta: {
+          parent: 'StatisticalAnalysis',
+          title: '军事指标'
+        }
+      },
+      {
+        name: 'statisticalAnalysisSafeguardSynthesize',
+        path: '/statisticalAnalysis/statisticalAnalysisSafeguardSynthesize',
+        component: () => import('@/views/statisticalAnalysis/statisticalAnalysisSafeguardSynthesize/index.vue'),
+        meta: {
+          parent: 'StatisticalAnalysis',
+          title: '经济指标'
+        }
       }
-    }
-  ]
-}
+    ]
+  }
+]

+ 39 - 0
src/router/modules/faultDiagnosis.js

@@ -0,0 +1,39 @@
+import Layout from '@/layout/index.vue'
+/**
+ *
+ * FalseAlarm               虚警抑制
+ * FaultDiagnosis           智能故障诊断
+ */
+
+export default [
+  {
+    name: 'FaultManage',
+    path: '/faultManage',
+    redirect: '/faultManage/',
+    component: Layout,
+    meta: {
+      title: '故障诊断',
+      icon: 'el-icon-s-platform'
+    },
+    children: [
+      {
+        name: 'FalseAlarm',
+        path: '/qualityManage/falseAlarm',
+        component: () => import('@/views/als/falseAlarm/index.vue'),
+        meta: {
+          parent: 'FaultManage',
+          title: '虚警抑制'
+        }
+      },
+      {
+        name: 'FaultDiagnosis',
+        path: '/qualityManage/faultDiagnosis',
+        component: () => import('@/views/als/faultDiagnosis/index.vue'),
+        meta: {
+          parent: 'FaultManage',
+          title: '智能故障诊断'
+        }
+      }
+    ]
+  }
+]

+ 30 - 0
src/router/modules/faultStatistics.js

@@ -0,0 +1,30 @@
+import Layout from '@/layout/index.vue'
+/**
+ *
+ * FalseAlarm               故障统计
+ */
+
+export default [
+  {
+    name: 'FaultStatistics',
+    path: '/als/',
+    redirect: '/als/falseAlarm',
+    component: Layout,
+    meta: {
+      title: '故障统计'
+    },
+    children: [
+      {
+        name: 'FaultStatistics',
+        path: '/als/falseAlarm',
+        component: () => import('@/views/als/falseAlarm/index.vue'),
+        meta: {
+          roleMenuHide: true,
+          parent: 'FaultStatistics',
+          title: '故障统计',
+          icon: 'el-icon-s-platform'
+        }
+      }
+    ]
+  }
+]

+ 39 - 0
src/router/modules/lifePrediction.js

@@ -0,0 +1,39 @@
+import Layout from '@/layout/index.vue'
+/**
+ *
+ * FalseAlarm               有寿件管理
+ * FaultDiagnosis           退化分析
+ */
+
+export default [
+  {
+    name: 'LifeManage',
+    path: '/lifeManage',
+    redirect: '/lifeManage/',
+    component: Layout,
+    meta: {
+      title: '寿命预测',
+      icon: 'el-icon-s-platform'
+    },
+    children: [
+      {
+        name: 'FalseAlarm',
+        path: '/qualityManage/falseAlarm',
+        component: () => import('@/views/als/falseAlarm/index.vue'),
+        meta: {
+          parent: 'LifeManage',
+          title: '有寿件管理'
+        }
+      },
+      {
+        name: 'FaultDiagnosis',
+        path: '/qualityManage/faultDiagnosis',
+        component: () => import('@/views/als/lifePrediction/index.vue'),
+        meta: {
+          parent: 'LifeManage',
+          title: '退化分析'
+        }
+      }
+    ]
+  }
+]

+ 39 - 0
src/router/modules/maintenanceDecision.js

@@ -0,0 +1,39 @@
+import Layout from '@/layout/index.vue'
+/**
+ *
+ * FalseAlarm               有寿件管理
+ * FaultDiagnosis           退化分析
+ */
+
+export default [
+  {
+    name: 'MaintenanceDecision',
+    path: '/maintenanceDecision',
+    redirect: '/maintenanceDecision/',
+    component: Layout,
+    meta: {
+      title: '维修决策',
+      icon: 'el-icon-s-platform'
+    },
+    children: [
+      {
+        name: 'FalseAlarm',
+        path: '/qualityManage/falseAlarm',
+        component: () => import('@/views/als/falseAlarm/index.vue'),
+        meta: {
+          parent: 'MaintenanceDecision',
+          title: '故障字典'
+        }
+      },
+      {
+        name: 'IntelligentDecision',
+        path: '/qualityManage/maintenanceDecision',
+        component: () => import('@/views/als/maintenanceDecision/index.vue'),
+        meta: {
+          parent: 'MaintenanceDecision',
+          title: '智能辅助决策'
+        }
+      }
+    ]
+  }
+]

+ 347 - 142
src/router/modules/system.js

@@ -1,149 +1,354 @@
 import Layout from '@/layout/index.vue'
 /**
  *
- * systemUser                   用户管理
- * systemRole                   角色管理
- * systemJurisdiction           权限管理
- * systemDataDictionary         数据字典
- * systemLog                    日志信息
+ * ModelManage                  模型管理
+ * BasicData                    基础数据管理
+ * SystemConfig                 系统设置
  */
 
-export const systemUser = {
-  path: '/system',
-  redirect: '/system/program',
-  component: Layout,
-  name: 'SystemUser',
-  meta: {
-    title: '系统管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 11,
-  children: [
-    {
-      path: '/system/user',
-      component: () => import('@/views/system/user/index.vue'),
-      meta: {
-        title: '用户管理'
-      },
-      sort: 1
-    }
-  ]
-}
-
-export const systemDept = {
-  path: '/system',
-  redirect: '/system/program',
-  component: Layout,
-  name: 'SystemDept',
-  meta: {
-    title: '系统管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 11,
-  children: [
-    {
-      path: '/system/dept',
-      component: () => import('@/views/system/dept/index.vue'),
-      meta: {
-        title: '部门管理'
-      },
-      sort: 2
-    }
-  ]
-}
-
-export const systemLog = {
-  path: '/system',
-  redirect: '/system/program',
-  component: Layout,
-  name: 'SystemLog',
-  meta: {
-    title: '系统管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 11,
-  children: [
-    {
-      path: '/system/systemLog',
-      component: () => import('@/views/system/systemLog/index.vue'),
-      meta: {
-        title: '日志信息'
-      },
-      sort: 3
-    }
-  ]
-}
-
-export const systemDataDictionary = {
-  path: '/system',
-  redirect: '/system/program',
-  component: Layout,
-  name: 'SystemDataDictionary',
-  meta: {
-    title: '系统管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 11,
-  children: [
-    {
-      path: '/system/systemDataDictionary',
-      component: () => import('@/views/system/systemDataDictionary/index.vue'),
-      meta: {
-        title: '数据字典'
-      },
-      sort: 4
+export default [
+  {
+    name: 'System',
+    path: '/system',
+    redirect: '/system/',
+    component: Layout,
+    meta: {
+      title: '系统管理',
+      icon: 'el-icon-s-platform'
     },
-    {
-      path: '/system/systemDataDictionary/:dictId',
-      component: () => import('@/views/system/systemDataDictionary/data.vue'),
-      meta: {
-        title: '字典数据',
-        hide: true
-      }
-    }
-  ]
-}
-
-export const systemRole = {
-  path: '/system',
-  redirect: '/system/program',
-  component: Layout,
-  name: 'SystemRole',
-  meta: {
-    title: '系统管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 11,
-  children: [
-    {
-      path: '/system/role',
-      component: () => import('@/views/system/role/index.vue'),
-      meta: {
-        title: '角色管理'
-      },
-      sort: 5
-    }
-  ]
-}
+    children: [
+      /**
+       * ----------------------------模型管理-----------------------------
+       */
+      {
+        name: 'ModelManage',
+        path: '/modelManage',
+        meta: {
+          parent: 'System',
+          title: '模型管理'
+        }
+      },
+      {
+        name: 'AgloManage',
+        path: '/agloManage',
+        component: () => import('@/views/als/model/index.vue'),
+        meta: {
+          parent: 'ModelManage',
+          title: '机务算法模型管理'
+        }
+      },
+      {
+        name: 'CarrierComputationalModel',
+        path: '/carrierStandard/carrierComputationalModel',
+        component: () => import('@/views/carrierStandard/carrierComputationalModel/index.vue'),
+        meta: {
+          parent: 'ModelManage',
+          title: '航材计算模型管理'
+        }
+      },
+      /**
+       * ----------------------------基础数据-----------------------------
+       */
+      {
+        name: 'BasicData',
+        path: '/basicData',
+        meta: {
+          parent: 'System',
+          title: '基础数据'
+        }
+      },
+      {
+        name: 'DataType',
+        path: '/basicData/dataType',
+        component: () => import('@/views/basicData/dataType/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '机种管理'
+        }
+      },
+      {
+        name: 'DataSpecies',
+        path: '/basicData/dataSpecies',
+        component: () => import('@/views/basicData/dataSpecies/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '机型管理'
+        }
+      },
+      {
+        name: 'AirConfiguration',
+        path: '/dataManage/airConfiguration',
+        component: () => import('@/views/als/airConfiguration/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '构型管理'
+        }
+      },
+      {
+        name: 'DataAircraftCataloging',
+        path: '/basicData/dataAircraftCataloging',
+        component: () => import('@/views/basicData/dataAircraftCataloging/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '飞机编目管理'
+        }
+      },
+      {
+        name: 'AirInstall',
+        path: '/dataManage/airInstall',
+        component: () => import('@/views/als/airInstall/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '装机管理'
+        }
+      },
+      {
+        name: 'DataSailingMaterialClassification',
+        path: '/basicData/dataSailingMaterialClassification',
+        component: () => import('@/views/basicData/dataSailingMaterialClassification/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '航材分类管理'
+        }
+      },
+      {
+        name: 'DataSailingMaterialMaterialCoding',
+        path: '/basicData/dataSailingMaterialMaterialCoding',
+        component: () => import('@/views/basicData/dataSailingMaterialMaterialCoding/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '航材物资编目-机务'
+        }
+      },
+      {
+        name: 'DataSailingMaterialMaterialCodingAviation',
+        path: '/basicData/dataSailingMaterialMaterialCodingAviation',
+        component: () => import('@/views/basicData/dataSailingMaterialMaterialCodingAviation/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '航材物资编目-航材'
+        }
+      },
+      {
+        name: 'DataSailingMaterialPrice',
+        path: '/basicData/dataSailingMaterialPrice',
+        component: () => import('@/views/basicData/dataSailingMaterialPrice/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '航材价格管理'
+        }
+      },
+      /**
+       * ----------------------------基础数据(环境因子管理)-----------------------------
+       */
+      {
+        name: 'DataEnvironment',
+        path: '/basicData/dataEnvironment',
+        component: () => import('@/views/basicData/dataEnvironment/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '环境因子管理'
+        }
+      },
+      {
+        name: 'DataEnvironment',
+        path: '/basicData/dataEnvironment/:id/:name/:value',
+        component: () => import('@/views/basicData/dataEnvironment/suitableSpareParts.vue'),
+        meta: {
+          parent: 'System',
+          roleMenuHide: true,
+          navHide: true,
+          title: '环境因子管理-适用航材'
+        }
+      },
+      /**
+       * ----------------------------基础数据(航材消耗规律管理)-----------------------------
+       */
+      {
+        name: 'CarrierSailingMaterialConsumeRegularities',
+        path: '/carrierStandard/carrierSailingMaterialConsumeRegularities',
+        component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRegularities/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '航材消耗规律管理'
+        }
+      },
+      /**
+       * ----------------------------基础数据(历年航材消耗数据)-----------------------------
+       */
+      {
+        name: 'CarrierSailingMaterialConsumeRecord',
+        path: '/carrierStandard/carrierSailingMaterialConsumeRecord',
+        component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRecord/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '历年航材消耗数据'
+        }
+      },
+      {
+        name: 'CarrierSailingMaterialConsumeRecord',
+        path: '/carrierStandard/carrierSailingMaterialConsumeRecord/outboundRecord/:consumeDataId',
+        component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRecord/outboundRecord.vue'),
+        meta: {
+          parent: 'System',
+          roleMenuHide: true,
+          navHide: true,
+          title: '历年航材消耗数据-出库记录'
+        }
+      },
+      {
+        name: 'CarrierSailingMaterialConsumeRecord',
+        path: '/carrierStandard/carrierSailingMaterialConsumeRecord/warehousingRecord/:consumeDataId',
+        component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRecord/warehousingRecord.vue'),
+        meta: {
+          parent: 'System',
+          roleMenuHide: true,
+          navHide: true,
+          title: '历年航材消耗数据-入库记录'
+        }
+      },
+      {
+        name: 'CarrierSailingMaterialConsumeRecord',
+        path: '/carrierStandard/carrierSailingMaterialConsumeRecord/summarizedCalculation/:consumeDataId',
+        component: () => import('@/views/carrierStandard/carrierSailingMaterialConsumeRecord/summarizedCalculation.vue'),
+        meta: {
+          parent: 'System',
+          roleMenuHide: true,
+          navHide: true,
+          title: '历年航材消耗数据-汇总计算'
+        }
+      },
+      {
+        name: 'FlightData',
+        path: '/dataManage/flightData',
+        component: () => import('@/views/als/flightData/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '飞参数据'
+        }
+      },
+      {
+        name: 'MDCData',
+        path: '/dataManage/MDCData',
+        component: () => import('@/views/als/MDCData/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '判故逻辑管理'
+        }
+      },
+      {
+        name: 'TrainingData',
+        path: '/dataManage/trainingData',
+        component: () => import('@/views/als/trainingData/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '故障数据统计'
+        }
+      },
+      /**
+       * ----------------------------基础数据(定检任务)-----------------------------
+       */
+      {
+        name: 'SmTask',
+        path: '/dataManage/smTask',
+        component: () => import('@/views/als/smTask/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '定检任务'
+        }
+      },
+      {
+        name: 'SmTask',
+        path: '/dataManage/smTask/SMTaskDetails',
+        component: () => import('@/views/als/smTask/SMTaskDetails.vue'),
+        meta: {
+          parent: 'System',
+          roleMenuHide: true,
+          navHide: true,
+          title: '任务分配',
+          hide: true
+        }
+      },
+      /**
+       * ----------------------------基础数据(数据字典)-----------------------------
+       */
+      {
+        name: 'SystemDataDictionary',
+        path: '/system/systemDataDictionary',
+        component: () => import('@/views/system/systemDataDictionary/index.vue'),
+        meta: {
+          parent: 'BasicData',
+          title: '数据字典'
+        }
+      },
+      {
+        name: 'SystemDataDictionary',
+        path: '/system/systemDataDictionary/:dictId',
+        component: () => import('@/views/system/systemDataDictionary/data.vue'),
+        meta: {
+          parent: 'System',
+          roleMenuHide: true,
+          navHide: true,
+          title: '字典数据'
+        }
+      },
 
-export const systemBackup = {
-  path: '/system',
-  redirect: '/system/program',
-  component: Layout,
-  name: 'SystemBackup',
-  meta: {
-    title: '系统管理',
-    icon: 'el-icon-s-platform'
-  },
-  sort: 11,
-  children: [
-    {
-      path: '/system/systemBackup',
-      component: () => import('@/views/system/systemBackup/index.vue'),
-      meta: {
-        title: '系统备份'
-      },
-      sort: 6
-    }
-  ]
-}
+      /**
+       * ----------------------------系统设置-----------------------------
+       */
+      {
+        name: 'SystemConfig',
+        path: '/systemConfig',
+        meta: {
+          parent: 'System',
+          title: '系统设置'
+        }
+      },
+      {
+        name: 'SystemDept',
+        path: '/system/dept',
+        component: () => import('@/views/system/dept/index.vue'),
+        meta: {
+          parent: 'SystemConfig',
+          title: '组织机构管理'
+        }
+      },
+      {
+        name: 'SystemUser',
+        path: '/system/user',
+        component: () => import('@/views/system/user/index.vue'),
+        meta: {
+          parent: 'SystemConfig',
+          title: '用户管理'
+        }
+      },
+      {
+        name: 'SystemRole',
+        path: '/system/role',
+        component: () => import('@/views/system/role/index.vue'),
+        meta: {
+          parent: 'SystemConfig',
+          title: '角色管理'
+        }
+      },
+      {
+        name: 'SystemLog',
+        path: '/system/systemLog',
+        component: () => import('@/views/system/systemLog/index.vue'),
+        meta: {
+          parent: 'SystemConfig',
+          title: '日志信息'
+        }
+      },
+      {
+        name: 'SystemBackup',
+        path: '/system/systemBackup',
+        component: () => import('@/views/system/systemBackup/index.vue'),
+        meta: {
+          parent: 'SystemConfig',
+          title: '系统备份'
+        }
+      }
+    ]
+  }
+]

+ 89 - 0
src/router/modules/systemTest.js

@@ -0,0 +1,89 @@
+import Layout from '@/layout/index.vue'
+/**
+ *
+ * systemUser                   用户管理
+ * systemRole                   角色管理
+ * systemJurisdiction           权限管理
+ * systemDataDictionary         数据字典
+ * systemLog                    日志信息
+ */
+
+export default [
+  {
+    name: 'System',
+    path: '/system',
+    redirect: '/system/',
+    component: Layout,
+    meta: {
+      title: '系统管理',
+      icon: 'el-icon-s-platform'
+    },
+    children: [
+      {
+        path: '/system/user',
+        name: 'SystemUser',
+        component: () => import('@/views/system/user/index.vue'),
+        meta: {
+          parent: 'System',
+          title: '用户管理'
+        }
+      },
+      {
+        path: '/system/dept',
+        name: 'SystemDept',
+        component: () => import('@/views/system/dept/index.vue'),
+        meta: {
+          parent: 'System',
+          title: '组织机构管理'
+        }
+      },
+      {
+        path: '/system/systemLog',
+        name: 'SystemLog',
+        component: () => import('@/views/system/systemLog/index.vue'),
+        meta: {
+          parent: 'System',
+          title: '日志信息'
+        }
+      },
+      {
+        name: 'SystemDataDictionary',
+        path: '/system/systemDataDictionary',
+        component: () => import('@/views/system/systemDataDictionary/index.vue'),
+        meta: {
+          parent: 'System',
+          title: '数据字典'
+        }
+      },
+      {
+        name: 'SystemDataDictionary',
+        path: '/system/systemDataDictionary/:dictId',
+        component: () => import('@/views/system/systemDataDictionary/data.vue'),
+        meta: {
+          parent: 'System',
+          roleMenuHide: true,
+          navHide: true,
+          title: '数据字典'
+        }
+      },
+      {
+        name: 'SystemRole',
+        path: '/system/role',
+        component: () => import('@/views/system/role/index.vue'),
+        meta: {
+          parent: 'System',
+          title: '角色管理'
+        }
+      },
+      {
+        name: 'SystemBackup',
+        path: '/system/systemBackup',
+        component: () => import('@/views/system/systemBackup/index.vue'),
+        meta: {
+          parent: 'System',
+          title: '系统备份'
+        }
+      }
+    ]
+  }
+]

+ 68 - 0
src/router/modules/test.js

@@ -0,0 +1,68 @@
+import Layout from '@/layout/index.vue'
+
+//示例
+export default [
+  {
+    name: 'Task',
+    path: '/task',
+    component: Layout,
+    meta: {
+      title: '质量管理',
+      icon: 'el-icon-s-platform'
+    },
+    children: [
+      {
+        path: '/task/1',
+        name: 'SJDR',
+        meta: {
+          parent: 'Task',
+          title: '数据导入'
+        }
+      },
+      {
+        path: '/task/1/1',
+        name: 'sjdr1',
+        meta: {
+          parent: 'SJDR',
+          title: '数据导1入1'
+        }
+      },
+      {
+        path: '/task/1/1/1',
+        name: 'sjdr2',
+        component: () => import('@/views/system/user/index.vue'),
+        meta: {
+          parent: 'sjdr1',
+          title: '数据导2入2'
+        }
+      },
+      {
+        path: '/task/1/1/2',
+        name: 'sjdr3',
+        component: () => import('@/views/system/user/index.vue'),
+        meta: {
+          parent: 'sjdr1',
+          title: '数据导2入3'
+        }
+      },
+      {
+        path: '/task/1/2',
+        name: 'FLYCan1',
+        meta: {
+          parent: 'Task',
+          title: 'MDC数据'
+        },
+        children: []
+      }
+      // {
+      //   path: '/task/1/3',
+      //   name: 'FLYCan2',
+      //   meta: {
+      //     parent: 'Task',
+      //     title: '警告列表'
+      //   },
+      //   children: []
+      // }
+    ]
+  }
+]

+ 89 - 34
src/router/private-routes.js

@@ -1,41 +1,96 @@
 import Layout from '@/layout/index.vue'
-//  这里举例说明 系统管理菜单路由 写法 详见 `/modules/system.js`
-//  目前暂时只支持二级路由 没有三级路由
 
-// 任务管理
-import * as task from './modules/task'
+//故障诊断
+import faultDiagnosis from './modules/faultDiagnosis'
+//寿命预测
+import lifePrediction from './modules/lifePrediction'
+//维修决策
+import maintenanceDecision from './modules/maintenanceDecision'
+//故障统计
 
-// 航材管理
-import * as carrierStandard from './modules/carrierStandard'
+import faultStatistics from './modules/faultStatistics'
+//携行规划
+import carrierStandard from './modules/carrierStandard'
+// 系统
+import system from './modules/system'
 
-// 基础数据
-import * as basicData from './modules/basicData'
-// 数据管理
-import * as dataManage from './modules/als/dataManage'
-import * as agloManage from './modules/als/agloManage'
-import * as intelligentQA from './modules/als/intelligentQA'
-import * as knowledgeGraph from './modules/als/knowledgeGraph'
-import * as qualityManage from './modules/als/qualityManage'
+export const privateRoutes = [
+  {
+    path: '/home',
+    name: 'Home',
+    meta: {
+      title: '综合看板',
+      icon: 'el-icon-s-home'
+    }
+  },
+  ...faultDiagnosis,
+  ...lifePrediction,
+  ...maintenanceDecision,
+  ...faultStatistics,
+  ...carrierStandard,
+  ...system
+]
 
-// // 统计分析
-// import * as statisticalAnalysis from './modules/statisticalAnalysis'
+export const flattenedRoutes = flattenedData(privateRoutes)
 
-//  用户管理 角色管理 权限管理  日志管理 系统配置
-import * as system from './modules/system'
-const allRouter = [dataManage, agloManage, knowledgeGraph, intelligentQA, qualityManage, task, carrierStandard, basicData, system]
+export function buildTreeData(routes) {
+  const flatRoutes = []
+  const nodeMap = []
+  const res = []
+  function flattened(routes, res = []) {
+    routes.forEach((r) => {
+      const { name, meta, path, children } = r
+      flatRoutes.push({ name, meta, path })
+      if (children && children.length > 0) {
+        flattened(r.children, res)
+      }
+    })
+  }
+  flattened(routes)
 
-// 私有路由表
-export const privateRoutes = [
-  // carrierListMachineryPreparation,
-  // carrierAllAudit,
-  // carrierListShipping,
-  // carrierListExecutionRegistration,
-  // useRegistration,
-  // carrierComputationalModel,
-  // carrierSailingMaterialConsumeRegularities,
-  // carrierSailingMaterialConsumeRecord
-  // safeguardCost
-]
-allRouter.forEach((i) => {
-  privateRoutes.push(...Object.values(i))
-})
+  flatRoutes.forEach((r) => {
+    const node = { ...r, children: [] }
+    nodeMap[r.name] = node
+    const parentName = r.meta?.parent
+    if (parentName) {
+      const parentNode = nodeMap[parentName]
+      if (parentNode) {
+        parentNode.children.push(node)
+      }
+    } else {
+      res.push(node)
+    }
+  })
+  return res
+}
+
+// 过滤出权限可用routes
+export function filterPermissionsRoutes(routes, p) {
+  return routes.filter((r) => {
+    if (p.includes(r.name)) {
+      if (r.children) {
+        r.children = filterPermissionsRoutes(r.children, p)
+      }
+      return true
+    }
+    if (r.children) {
+      const filterC = filterPermissionsRoutes(r.children, p)
+      if (filterC.length > 0) {
+        r.children = filterC
+        return true
+      }
+    }
+    return false
+  })
+}
+
+// tree to 扁平化
+export function flattenedData(routes, res = []) {
+  routes.forEach((r) => {
+    res.push({ ...r })
+    if (r.children?.length) {
+      flattenedData(r.children, res)
+    }
+  })
+  return res
+}

+ 1 - 7
src/router/public-routes.js

@@ -19,16 +19,10 @@ export const publicRoutes = [
         name: 'Home',
         component: () => import('@/views/home/index.vue'),
         meta: {
-          title: '首页',
+          title: '综合看板',
           icon: 'el-icon-s-home'
         }
       },
-      // 404
-      {
-        path: '/404',
-        name: 'redirect',
-        component: () => import('@/views/err-page/404.vue')
-      },
       // 401
       {
         path: '/401',

+ 2 - 1
src/store/getters.js

@@ -5,7 +5,8 @@ const getters = {
   },
   tagsViewList: (state) => state.app.tagsViewList,
   userInfo: (state) => state.user.userInfo,
-  getterstheme: (state) => state.settings.theme
+  getterstheme: (state) => state.settings.theme,
+  navMenus: (state) => state.permission.navMenus
 }
 
 export default getters

+ 21 - 2
src/store/modules/permission.js

@@ -4,12 +4,17 @@ export default {
   namespaced: true,
   state: {
     //   路由表: 初始时所拥有的路由表
-    routes: publicRoutes
+    routes: publicRoutes,
+    navMenus: []
   },
   mutations: {
     //   增加路由的方法
     setRoutes(state, newRoutes) {
       state.routes = [...publicRoutes, ...newRoutes]
+    },
+
+    setNavMenus(state, data) {
+      state.navMenus = data
     }
   },
   actions: {
@@ -29,9 +34,23 @@ export default {
         path: '/:catchAll(.*)',
         redirect: '/404'
       })
-
       context.commit('setRoutes', routes)
       return routes
+    },
+
+    setNavMenus(context, data) {
+      context.commit('setNavMenus', [
+        {
+          path: '/home',
+          name: 'Home',
+          // children: [],
+          meta: {
+            title: '综合看板',
+            icon: 'el-icon-s-home'
+          }
+        },
+        ...data
+      ])
     }
   }
 }

+ 25 - 1
src/utils/route.js

@@ -1,5 +1,5 @@
 import { isNull } from './index'
-import { privateRoutes } from '@/router/private-routes'
+import { privateRoutes, flattenedRoutes } from '@/router/private-routes'
 
 /**
  * 所有子集路由
@@ -117,6 +117,30 @@ export const getMenusData = () => {
   return result
 }
 
+// 过滤
+export function whitelistFilter(arr, w) {
+  return arr.filter((e) => !w.includes(e.name))
+}
+
+export const transformTreeData = (routes, res = []) => {
+  routes.forEach((item, i) => {
+    if (item.meta && item.meta.roleMenuHide) return
+    const node = {
+      id: item.name,
+      label: item.meta.title,
+      children: []
+    }
+    if (item.children && item.children.length) {
+      const children = transformTreeData(item.children)
+      if (children && children.length) {
+        node.children = children
+      }
+    }
+    res.push(node)
+  })
+  return res
+}
+
 export const flatMenus = (router) => {
   const arr = []
   router.sort((a, b) => a.sort - b.sort)

+ 9 - 11
src/views/als/faultDiagnosis/index.vue

@@ -350,6 +350,7 @@ export default {
     faultExecute(row) {
       this.dialogTitle = '选择诊断部件'
       this.form = deepClone(row)
+      this.currentSortieNo = row.sortieNo
       const item = this.aircaftCatalogAll.find((item) => item.aircaftCatalogId === this.form.aircraftId)
       // this.form.aircraftType = item.aircraftType
       this.getAirConfigurationAPI({ aircraftType: item.aircaftModelId })
@@ -403,15 +404,11 @@ export default {
 
       let myTimer = setInterval(() => {
         if (this.percentage < 100) {
-          this.percentage += 1
-        } else {
-          clearInterval(myTimer)
-          this.$message({
-            type: 'error',
-            message: '执行有误'
-          })
-          this.progressVisible = false
-          this.percentage = 0
+          if (this.percentage === 99) {
+            this.percentage = 99
+          } else {
+            this.percentage += 1
+          }
         }
       }, 30)
 
@@ -424,12 +421,13 @@ export default {
             type: 'success',
             message: '执行成功!'
           })
-          this.handleClose()
+
           const result = res.data
           this.$alert(`故障诊断结果为:${result}`, '故障诊断结果', {
             confirmButtonText: '确定'
           })
-          this.getFaultDiagnosisAPI({ aircraftId: this.aircaftModelIdList })
+          this.getFaultDiagnosisAPI({ sortieNo: this.currentSortieNo })
+          this.handleClose()
         }
       } catch (error) {
         clearInterval(myTimer)

+ 1 - 1
src/views/basicData/dataAircraftCataloging/index.js

@@ -11,7 +11,7 @@ export const columns = (_this) => [
   },
   {
     prop: 'mechanician',
-    label: '机械师'
+    label: '驾驶员'
   },
 
   {

+ 1 - 1
src/views/basicData/dataAircraftCataloging/index.vue

@@ -31,7 +31,7 @@
           <el-form-item label="飞机编号">
             <el-input v-model="form.aircaftCatalogCode"></el-input>
           </el-form-item>
-          <el-form-item label="机械师">
+          <el-form-item label="驾驶员">
             <el-input v-model="form.mechanician"></el-input>
           </el-form-item>
           <el-form-item label="所属机型">

+ 3 - 0
src/views/basicData/dataEnvironment/src/regularitiesChoose.vue

@@ -10,6 +10,9 @@
         <el-form-item label="航材编码">
           <el-input v-model="activeRow.avmatCatalogCode" disabled></el-input>
         </el-form-item>
+        <el-form-item label="规格型号">
+          <el-input v-model="activeRow.specification" disabled></el-input>
+        </el-form-item>
         <el-form-item label="所属分类">
           <el-input v-model="activeRow.avmatCategoriesName" disabled></el-input>
         </el-form-item>

+ 4 - 0
src/views/basicData/dataSailingMaterialPrice/index.js

@@ -19,6 +19,10 @@ export const columns = (_this) => [
     prop: 'avmatCatalogCode',
     label: '航材编码'
   },
+  {
+    prop: 'specification',
+    label: '规格型号'
+  },
   {
     prop: 'avmatCategoriesName',
     label: '所属分类'

+ 2 - 1
src/views/carrierStandard/carrierAllAudit/index.vue

@@ -102,7 +102,8 @@ export default {
         .catch(() => {})
     },
     look(row) {
-      this.$router.push(`/carrierStandard/carrierAllAudit/look/${row.taskId}`)
+      //   this.$router.push(`/carrierStandard/carrierAllAudit/look/${row.taskId}`)
+      this.$router.push(`/carrierStandard/carrierListMachineryPreparation/look/${row.taskId}`)
     }
   }
 }

+ 1 - 1
src/views/carrierStandard/carrierComputationalModel/index.vue

@@ -4,7 +4,7 @@
       <div class="view-carrierComputationalModel-btn">
         <el-button type="success" @click="addDialog()">新增</el-button>
         <el-button :disabled="multipleSelection.length == 0" type="warning" @click="allRmove()">删除</el-button>
-        <el-button type="primary">导出</el-button>
+        <!-- <el-button type="primary">导出</el-button> -->
         <el-button :disabled="multipleSelection.length == 0" type="primary" @click="publish()">发布</el-button>
       </div>
       <div class="view-carrierComputationalModel-search">

+ 1 - 1
src/views/carrierStandard/carrierListExecutionRegistration/components/look/index.js

@@ -13,7 +13,7 @@ export const columns = (_this) => [
   },
   {
     prop: 'mechanician',
-    label: '机械师'
+    label: '驾驶员'
   },
   {
     prop: 'planFlyDuration',

+ 1 - 1
src/views/carrierStandard/carrierListExecutionRegistration/components/registering/index.js

@@ -13,7 +13,7 @@ export const columns = (_this) => [
   },
   {
     prop: 'mechanician',
-    label: '机械师'
+    label: '驾驶员'
   },
   {
     prop: 'planFlyDuration',

+ 10 - 10
src/views/carrierStandard/carrierListMachineryPreparation/components/compile/index.vue

@@ -24,19 +24,19 @@
 
       <div class="view-AerospaceCompileLineList-right-table">
         <el-table :data="tableData" border style="width: 100%" height="calc(100vh - 420px)">
-          <el-table-column prop="avmatCatalogCode" label="航材编码">
+          <el-table-column prop="avmatCatalogCode" label="航材编码" width="150px">
             <template slot-scope="scope">
               <i class="el-icon-edit cell-edit" @click="sparePartsCodingClick(scope.$index, scope.row)"></i>
               <span>{{ scope.row.avmatCatalogCode }}</span>
             </template>
           </el-table-column>
-          <el-table-column prop="avmatCatalogName" label="航材名称" align="center"> </el-table-column>
-          <el-table-column prop="specification" label="航材型号" align="center"> </el-table-column>
-          <el-table-column prop="mappingCode" label="映射编号" align="center"> </el-table-column>
-          <el-table-column prop="avmatCategoriesName" label="航材分类" align="center"> </el-table-column>
+          <el-table-column prop="avmatCatalogName" label="航材名称" align="center" width="150px"> </el-table-column>
+          <el-table-column prop="specification" label="航材型号" align="center" width="150px"> </el-table-column>
+          <el-table-column prop="mappingCode" label="映射编号" align="center" width="150px"> </el-table-column>
+          <el-table-column prop="avmatCategoriesName" label="航材分类" align="center" width="120px"> </el-table-column>
           <el-table-column prop="unit" label="计量单位" align="center"> </el-table-column>
-          <el-table-column prop="aircaftCatalogCode" label="指向飞机" align="center"> </el-table-column>
-          <el-table-column prop="carryQuantity" label="携带数量" align="center">
+          <el-table-column prop="aircaftCatalogCode" label="指向飞机" align="center" width="150px"> </el-table-column>
+          <el-table-column prop="carryQuantity" label="携带数量" align="center" width="90px">
             <template slot-scope="scope">
               <template v-if="scope.row.carryQuantity.value || scope.row.carryQuantity.value == ''">
                 <el-input @blur="carryQuantityBlur(scope.$index, scope.row)" type="text" v-model="scope.row.carryQuantity.value" />
@@ -47,11 +47,11 @@
               </template>
             </template>
           </el-table-column>
-          <el-table-column prop="purchasePrice" label="单价/万元" align="center"> </el-table-column>
+          <el-table-column prop="purchasePrice" label="单价/万元" align="center" width="120px"> </el-table-column>
           <el-table-column prop="createBy" label="创建人" align="center"> </el-table-column>
           <!-- <el-table-column prop="amount" label="金额/元" align="center"> </el-table-column> -->
-          <el-table-column prop="updateTime" label="更新时间" align="center"> </el-table-column>
-          <el-table-column label="操作" align="center">
+          <el-table-column prop="updateTime" label="更新时间" align="center" width="110px"> </el-table-column>
+          <el-table-column label="操作" align="center" width="150px">
             <template slot-scope="scope">
               <el-button @click="handleRemoveClick(scope.$index, scope.row)" type="text" size="small">删除</el-button>
               <el-button :disabled="!!scope.row.mappingCode" @click="handleUpdateMapClick(scope.$index, scope.row)" type="text" size="small">映射编码</el-button>

+ 1 - 1
src/views/carrierStandard/carrierSailingMaterialConsumeRecord/index.js

@@ -8,7 +8,7 @@ export const modalConfig = (_this) => ({
   labelWidth: '140px',
   itemStyle: { padding: '10px' },
   width: '600px', // 弹框宽度
-  rules: { deptName: [{ required: true, message: '请输入部门名称', trigger: 'blur' }] }
+  rules: { deptName: [{ required: true, message: '请输入机构名称', trigger: 'blur' }] }
 })
 
 /**

+ 1 - 17
src/views/carrierStandard/carrierSailingMaterialConsumeRecord/index.vue

@@ -4,10 +4,9 @@
       <div class="common-box-button">
         <el-button type="success" @click="handleAdd">新增</el-button>
         <el-button type="warning" @click="handleDelete(removeArr)" :disabled="removeArr.length == 0">删除</el-button>
-        <el-button type="primary" @click="handleExport('导出')">导出</el-button>
       </div>
       <div class="common-box-search">
-        <el-input placeholder="请输入分类名称、编号" v-model="queryParam" class="input-with-select" @keyup.enter.native="fetchTableData">
+        <el-input placeholder="请输入年份" v-model="queryParam" class="input-with-select" @keyup.enter.native="fetchTableData">
           <el-button slot="append" icon="el-icon-search" @click="fetchTableData"></el-button>
         </el-input>
       </div>
@@ -119,21 +118,6 @@ export default {
       this.removeArr = data
     },
 
-    handleExport(type) {
-      // let msg = ''
-      // type == '下载模板' ? (msg = '是否确认下载该模板') : (msg = `是否${type}该航材`)
-      // this.$confirm(msg, '提示', {
-      //   confirmButtonText: '确定',
-      //   cancelButtonText: '取消',
-      //   type: 'warning'
-      // })
-      //   .then(() => {
-      //     getImportModel(0)
-      //   })
-      //   .catch(() => {})
-      // this.fetchTableData()
-    },
-
     async addTableRow(params) {
       try {
         const { success } = await addOveryearAvmatConsume(params)

+ 13 - 2
src/views/carrierStandard/carrierSailingMaterialConsumeRecord/outboundRecord.vue

@@ -4,11 +4,12 @@
       <div class="common-box-button">
         <el-button type="primary" @click="handleExport('是否下载模板', 0)">下载模板</el-button>
         <el-button type="primary" @click="upload">导入</el-button>
+        <el-button type="primary" :disabled="tableData.length == 0" @click="allExport">导出</el-button>
         <el-button type="warning" @click="handleDelete(removeArr)" :disabled="removeArr.length == 0">删除</el-button>
         <el-button type="primary" @click="matching('auto')">自动匹配</el-button>
       </div>
       <div class="common-box-search">
-        <el-input placeholder="请输入分类名称、编号" v-model="queryParam" class="input-with-select" @keyup.enter.native="fetchTableData">
+        <el-input placeholder="请输入名称、编号" v-model="queryParam" class="input-with-select" @keyup.enter.native="fetchTableData">
           <el-button slot="append" icon="el-icon-search" @click="fetchTableData"></el-button>
         </el-input>
       </div>
@@ -22,7 +23,7 @@
 <script>
 import MappingCoding from './mappingCoding/index.vue'
 import { columns, options } from './outboundRecord'
-import { autoMatching, handMatching, getOutBoundRecord, removeOutBoundRecord, getImportModel } from '@/api/carrierStandard/carrierSailingMaterialConsumeRecord'
+import { autoMatching, handMatching, getOutBoundRecord, removeOutBoundRecord, getImportModel, exportOutboundRecordExcel } from '@/api/carrierStandard/carrierSailingMaterialConsumeRecord'
 export default {
   components: { MappingCoding },
   name: 'OutboundRecord',
@@ -177,6 +178,16 @@ export default {
           })
         })
         .catch(() => {})
+    },
+
+    //导出全部
+    async allExport() {
+      const { consumeDataId } = this.$route.params
+      let params = {
+        consumeDataId,
+        queryParam: this.queryParam
+      }
+      await exportOutboundRecordExcel(params)
     }
   }
 }

+ 12 - 2
src/views/carrierStandard/carrierSailingMaterialConsumeRecord/warehousingRecord.vue

@@ -4,11 +4,12 @@
       <div class="common-box-button">
         <el-button type="primary" @click="handleExport('是否下载模板', 0)">下载模板</el-button>
         <el-button type="primary" @click="upload">导入</el-button>
+        <el-button type="primary" :disabled="tableData.length == 0" @click="allExport">导出</el-button>
         <el-button type="warning" @click="handleDelete(removeArr)" :disabled="removeArr.length == 0">删除</el-button>
         <el-button type="primary" @click="matching('auto')">自动匹配</el-button>
       </div>
       <div class="common-box-search">
-        <el-input placeholder="请输入分类名称、编号" v-model="queryParam" class="input-with-select" @keyup.enter.native="fetchTableData">
+        <el-input placeholder="请输入名称、编号" v-model="queryParam" class="input-with-select" @keyup.enter.native="fetchTableData">
           <el-button slot="append" icon="el-icon-search" @click="fetchTableData"></el-button>
         </el-input>
       </div>
@@ -22,7 +23,7 @@
 <script>
 import MappingCoding from './mappingCoding/index.vue'
 import { columns, options } from './warehousingRecord'
-import { autoMatching, handMatching, getWarehousingRecord, removeWarehousingRecord, getImportModel } from '@/api/carrierStandard/carrierSailingMaterialConsumeRecord'
+import { autoMatching, handMatching, getWarehousingRecord, removeWarehousingRecord, getImportModel, exportWarehousingRecordExcel } from '@/api/carrierStandard/carrierSailingMaterialConsumeRecord'
 
 export default {
   name: 'WarehousingRecord',
@@ -175,6 +176,15 @@ export default {
           })
         })
         .catch(() => {})
+    },
+    //导出全部
+    async allExport() {
+      const { consumeDataId } = this.$route.params
+      let params = {
+        consumeDataId,
+        queryParam: this.queryParam
+      }
+      await exportWarehousingRecordExcel(params)
     }
   }
 }

+ 69 - 0
src/views/carrierStandard/carrierSailingMaterialConsumeRegularities/components/importDialog/index.vue

@@ -0,0 +1,69 @@
+<template>
+  <el-dialog :title="dialogtitle" :visible.sync="dialogVisible" width="500px" :before-close="handleClose" center>
+    <div class="upload">
+      <div class="upload-left">导入文件</div>
+      <el-upload class="upload-right" ref="upload" accept=".xls,.xlsx" :action="fileApi" :file-list="fileList" :data="fileData" :auto-upload="false" :on-success="onSuccess" :limit="1">
+        <el-button slot="trigger" style="margin-right: 30px" size="small" type="primary">选择文件</el-button>
+        <el-button size="small" type="success" @click="submitUpload">导入数据</el-button>
+        <div slot="tip" class="el-upload__tip" style="margin-left: 10px; margin-top: 10px; font-size: 14px">只能导入 xls / xlsx 文件</div>
+      </el-upload>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { useMessage } from '@/utils/element-ui'
+export default {
+  data() {
+    return {
+      dialogtitle: '导入航材MTBF数据',
+      dialogVisible: false,
+      fileApi: process.env.VUE_APP_BASE_API + '/carryingtask/avmatConsumeRule/importExcel',
+      fileList: [],
+      fileData: {
+        userName: ''
+      }
+    }
+  },
+  methods: {
+    triggerDialog(data) {
+      this.dialogVisible = true
+    },
+
+    handleClose() {
+      this.dialogVisible = false
+    },
+
+    // 上传
+    submitUpload() {
+      const userInfo = this.$store.state.user.userInfo.user
+      this.fileData.userName = userInfo.userName
+      this.$refs.upload.submit()
+    },
+
+    // 上传完成后
+    onSuccess(result) {
+      this.$refs.upload.clearFiles()
+      this.fileList = []
+      const { msg, code } = result
+      useMessage(code == 200 ? 'success' : 'warning', msg, 2000)
+      if (code !== 200) return
+      this.handleClose()
+      this.$emit('submitCallBack')
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.el-dialog__wrapper {
+  width: 100%;
+}
+.upload {
+  height: 106px;
+  padding-top: 30px;
+  display: flex;
+  &-left {
+    margin-right: 40px;
+  }
+}
+</style>

+ 54 - 18
src/views/carrierStandard/carrierSailingMaterialConsumeRegularities/index.vue

@@ -8,8 +8,14 @@
         <div class="common-box-button">
           <el-button type="success" @click="openDialog">新增</el-button>
           <el-button type="warning" @click="handleDelete(removeArr)" :disabled="removeArr.length == 0">删除</el-button>
-          <!-- <el-button type="primary" @click="handleExport('导入')">导入模板</el-button>
-          <el-button type="primary" @click="handleExport('导出')">导出模板</el-button> -->
+          <el-dropdown split-button type="primary" style="margin-left: 10px" trigger="click" @command="handleExport">
+            更多
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item command="importOperation">导入</el-dropdown-item>
+              <el-dropdown-item command="allExport" :disabled="tableData.length == 0">导出</el-dropdown-item>
+              <el-dropdown-item command="downloadTemplate">下载数据模板</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
         </div>
         <div class="common-box-search">
           <el-input placeholder="航材名称" v-model="avmatCategoriesName" class="input-with-select">
@@ -20,6 +26,8 @@
       <LTable ref="table" @selection-change="selection" :defaultFetch="false" :columns="columns" :dataSource="tableData" :dictData="dictData" :options="options" :fetch="fetchTableData" :pagination="tableRequset"></LTable>
     </div>
     <RegularitiesChoose ref="RegularitiesChoose" :monadOptions="dictData.life_unit" @handleRegularities="handleRegularities" />
+    <!-- 导入 -->
+    <ImportDialog ref="ImportDialog" @submitCallBack="ImportDialogCallBack" />
   </div>
 </template>
 
@@ -29,10 +37,12 @@ import { defaultProps, columns, options } from './index'
 import { compareObj, debounce } from '@/utils/index'
 import { getDict } from '@/api/dict'
 import { getAvmatCategoriesTree } from '@/api/basicData/dataSpecies'
-import { getAvmatConsumeRule, addAvmatConsumeRuleVo, updateAvmatConsumeRule, removeAvmatConsumeRule } from '@/api/carrierStandard/carrierSailingMaterialConsumeRegularities'
+import { getAvmatConsumeRule, addAvmatConsumeRuleVo, updateAvmatConsumeRule, removeAvmatConsumeRule, downLoadFile, exportExcel } from '@/api/carrierStandard/carrierSailingMaterialConsumeRegularities'
+import ImportDialog from './components/importDialog/index.vue'
+
 export default {
   name: 'carrierSailingMaterialConsumeRegularities',
-  components: { RegularitiesChoose },
+  components: { RegularitiesChoose, ImportDialog },
   data() {
     // 这里存放数据
     return {
@@ -196,21 +206,47 @@ export default {
         .catch(() => {})
     },
 
+    // handleExport(type) {
+    //   let msg = ''
+    //   type == '下载模板' ? (msg = '是否确认下载该模板') : (msg = `是否${type}该航材`)
+    //   this.$confirm(msg, '提示', {
+    //     confirmButtonText: '确定',
+    //     cancelButtonText: '取消',
+    //     type: 'warning'
+    //   })
+    //     .then(() => {
+    //       this.$message({
+    //         type: 'success',
+    //         message: '操作成功!'
+    //       })
+    //     })
+    //     .catch(() => {})
+    // },
+    //更多按钮
     handleExport(type) {
-      let msg = ''
-      type == '下载模板' ? (msg = '是否确认下载该模板') : (msg = `是否${type}该航材`)
-      this.$confirm(msg, '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      })
-        .then(() => {
-          this.$message({
-            type: 'success',
-            message: '操作成功!'
-          })
-        })
-        .catch(() => {})
+      this[type]()
+    },
+    //导入
+    importOperation() {
+      this.$refs.ImportDialog.triggerDialog()
+    },
+    //导入回写
+    ImportDialogCallBack() {
+      this.fetchTableData()
+    },
+
+    //导出全部
+    async allExport() {
+      let params = {
+        avmatCategoriesId: this.avmatCategoriesId,
+        avmatCategoriesName: this.avmatCategoriesName,
+        avmatCategoriesCode: this.currentNodeKey
+      }
+      await exportExcel(params)
+    },
+    //下载模板
+    async downloadTemplate() {
+      await downLoadFile()
     }
   }
 }

+ 17 - 1
src/views/carrierStandard/carrierUseRegistration/components/sailingMaterial/index.vue

@@ -54,6 +54,17 @@
               </template>
             </template>
           </el-table-column>
+          <el-table-column prop="usedNum" label="已使用总数量" align="center">
+            <template slot-scope="scope">
+              <template v-if="scope.row.usedNum.value || scope.row.usedNum.value == ''">
+                <el-input @blur="cellBlue(scope.$index, scope.row, 'usedNum')" type="text" v-model="scope.row.usedNum.value" />
+              </template>
+              <template v-else>
+                <i @click="editCell(scope.$index, scope.row, 'usedNum')" class="el-icon-edit cell-edit"></i>
+                <span>{{ scope.row.usedNum }}</span>
+              </template>
+            </template>
+          </el-table-column>
           <el-table-column label="操作" align="center" width="160px">
             <template slot-scope="scope">
               <el-button @click="handleRemoveClick(scope.$index, scope.row)" type="text" size="small">删除</el-button>
@@ -133,6 +144,7 @@ export default {
         data.list.forEach((item) => {
           item.applyForNum = item.applyForNum ? item.applyForNum : ''
           item.stockRemovalNum = item.stockRemovalNum ? item.stockRemovalNum : ''
+          item.usedNum = item.usedNum ? item.usedNum : ''
         })
         this.tableData = data.list
         this.pagination.total = data.totalCount
@@ -156,6 +168,7 @@ export default {
         avmatCatalogName: '',
         avmatCatalogCode: '',
         avmatCategoriesName: '',
+        specification: '',
         carryQuantity: '',
         purchasePrice: '',
         carryQuantity: 0,
@@ -167,6 +180,9 @@ export default {
         stockRemovalNum: {
           value: ''
         },
+        usedNum: {
+          value: ''
+        },
         taskId: this.$route.params.id,
         taskStatic: 0
       }
@@ -222,7 +238,7 @@ export default {
     async save() {
       for (let index = 0; index < this.tableData.length; index++) {
         const element = this.tableData[index]
-        if (element.applyForNum == '' || element.stockRemovalNum == '') {
+        if (element.applyForNum == '' || element.stockRemovalNum == '' || element.usedNum == '') {
           useMessage('error', `第${index + 1}行数据没有填写完整`, 1000)
           return
         }

+ 3 - 3
src/views/carrierStandard/safeguardCost/index.js

@@ -71,15 +71,15 @@ export const columns = (_this) => [
   },
   {
     prop: 'yearTotalPrice',
-    label: '总价'
+    label: '总价(万元)'
   },
   {
     prop: 'unitPrice',
-    label: '单架飞机保障价格'
+    label: '单架飞机保障价格(万元)'
   },
   {
     prop: 'perHourUnitPrice',
-    label: '单架飞机/小时保障价格'
+    label: '单架飞机/小时保障价格(万元)'
   },
 
   {

+ 10 - 18
src/views/carrierStandard/safeguardCost/index.vue

@@ -5,7 +5,7 @@
       <div class="view-common-header-left">
         <el-button type="success" @click="handleAdd">新增</el-button>
         <el-button type="warning" @click="handleDelete">删除</el-button>
-        <el-button type="primary" @click="handleExport('导出')">导出</el-button>
+        <el-button type="primary" :disabled="tableData.length == 0" @click="allExport">导出</el-button>
       </div>
       <div class="view-common-header-right">
         <el-input @keyup.enter.native="fetchTableData('search')" placeholder="请输入内容" v-model="searchValue" class="input-select">
@@ -21,7 +21,7 @@
 <script>
 import { compareObj } from '@/utils/index'
 import { columns, options, modalConfig, data } from './index'
-import { socialSecurityPage, socialSecurityAdd, socialSecurityEdit, socialSecurityRemove } from '@/api/task/carrierFlightMission'
+import { socialSecurityPage, socialSecurityAdd, socialSecurityEdit, socialSecurityRemove, exportSocialSecurityExcel } from '@/api/task/carrierFlightMission'
 
 export default {
   name: 'AnnualGuarantee',
@@ -131,22 +131,7 @@ export default {
         this.removeArr.push(item.socialSecurityId)
       })
     },
-    handleExport(type) {
-      let msg = ''
-      type == '下载模板' ? (msg = '是否确认下载该模板') : (msg = `是否${type}该航材`)
-      this.$confirm(msg, '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      })
-        .then(() => {
-          this.$message({
-            type: 'success',
-            message: '操作成功!'
-          })
-        })
-        .catch(() => {})
-    },
+
     async crudDialogSubmit(data) {
       const { dialogData, type } = data
       if (type == 'update') {
@@ -162,6 +147,13 @@ export default {
     },
     handPriceList(row) {
       this.$router.push(`/carrierStandard/safeguardCost/${row.socialSecurityId}`)
+    },
+    //导出全部
+    async allExport() {
+      let params = {
+        keyword: this.searchValue
+      }
+      await exportSocialSecurityExcel(params)
     }
   }
 }

+ 11 - 7
src/views/carrierStandard/safeguardCost/priceList.js

@@ -18,6 +18,10 @@ export const columns = (_this) => [
     prop: 'avmatCatalogName',
     label: '航材名称'
   },
+  {
+    prop: 'specification',
+    label: '规格型号'
+  },
   {
     prop: 'avmatCatalogCode',
     label: '航材编号'
@@ -28,31 +32,31 @@ export const columns = (_this) => [
   },
   {
     prop: 'newProductAmount',
-    label: '新品数量/个'
+    label: '新品数量'
   },
   {
     prop: 'newProductPrice',
-    label: '新品单价/万元'
+    label: '新品单价(万元)'
   },
   {
     prop: 'newProductTotalPrice',
-    label: '新品总价/万元'
+    label: '新品总价(万元)'
   },
   {
     prop: 'repairItemsAmount',
-    label: '维修品数量/个'
+    label: '维修品数量'
   },
   {
     prop: 'repairItemsPrice',
-    label: '维修品单价/万元'
+    label: '维修品单价(万元)'
   },
   {
     prop: 'repairItemsTotalPrice',
-    label: '维修品总价/万元'
+    label: '维修品总价(万元)'
   },
   {
     prop: 'totalPrice',
-    label: '总价/万元'
+    label: '总价(万元)'
   }
 
   // ,

+ 9 - 17
src/views/carrierStandard/safeguardCost/priceList.vue

@@ -6,7 +6,7 @@
     <div class="view-priceList-right">
       <div style="margin-bottom: 10px">
         <el-button type="warning" @click="handleCreate">生成</el-button>
-        <el-button type="primary" @click="handleExport('导出')">导出</el-button>
+        <el-button type="primary" :disabled="tableData.length == 0" @click="allExport">导出</el-button>
       </div>
 
       <LTable ref="table" :defaultFetch="false" :columns="columns" :dataSource="tableData" :options="options" :fetch="fetchTableData" :pagination="pagination"></LTable>
@@ -17,7 +17,7 @@
 <script>
 import { columns, data, options, dialogTreeObj } from './priceList'
 import { roleAvmatCategoriesTree, getAvmatCatalog } from '@/api/carrierStandard/carrierListMachineryPreparation'
-import { socialSecurityDetailsPage, generatePriceList } from '@/api/task/carrierFlightMission'
+import { socialSecurityDetailsPage, generatePriceList, exportSocialSecurityDetailsExcel } from '@/api/task/carrierFlightMission'
 
 export default {
   name: 'PriceList',
@@ -92,21 +92,13 @@ export default {
         })
         .catch(() => {})
     },
-    handleExport(type) {
-      let msg = ''
-      type == '下载模板' ? (msg = '是否确认下载该模板') : type == '生成' ? (msg = '将根据历年平均飞行时长的消耗品数量与维修品数量,预测今年计划飞行时长所需要的价格清单') : (msg = `是否${type}该数据`)
-      this.$confirm(msg, '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      })
-        .then(() => {
-          this.$message({
-            type: 'success',
-            message: '操作成功!'
-          })
-        })
-        .catch(() => {})
+    //导出全部
+    async allExport() {
+      let params = {
+        socialSecurityId: this.$route.params.id,
+        avmatCategoriesId: this.dialogCurrentNodeKey
+      }
+      await exportSocialSecurityDetailsExcel(params)
     }
   }
 }

+ 1 - 1
src/views/login/index.vue

@@ -81,7 +81,7 @@ export default {
     }
   },
   beforeDestroy() {
-    //登录成功去首页 设置tags
+    //登录成功去综合看板 设置tags
     const { fullPath, meta, name, params, path, query } = this.$route
     this.$store.commit('app/addTagsViewList', {
       fullPath,

+ 1 - 1
src/views/statisticalAnalysis/statisticalAnalysisSailingMaterialSpareParts/index.vue

@@ -2,7 +2,7 @@
   <div class="view-statisticalAnalysisSailingMaterialSpareParts">
     <el-row>
       <el-col :span="12" style="margin-bottom: 15px">
-        <Card title="经济指标分析">
+        <Card title="历年任务">
           <template slot="content">
             <LTable ref="table" :defaultFetch="true" :columns="columns" :dataSource="tableData" :options="options" :fetch="fetchTableData" @handleRowClick="handleRowClick" class="tabl-box" />
           </template>

+ 2 - 2
src/views/system/dept/index.js

@@ -1,6 +1,6 @@
 export const rules = {
-  parentId: [{ required: true, message: '上级部门不能为空', trigger: 'blur' }],
-  deptName: [{ required: true, message: '部门名称不能为空', trigger: 'blur' }],
+  parentId: [{ required: true, message: '上级机构不能为空', trigger: 'blur' }],
+  deptName: [{ required: true, message: '机构名称不能为空', trigger: 'blur' }],
   orderNum: [{ required: true, message: '显示排序不能为空', trigger: 'blur' }],
   email: [
     {

+ 13 - 13
src/views/system/dept/index.vue

@@ -6,13 +6,13 @@
           <el-button type="success" class="btn" @click="handleAdd">新增</el-button>
         </el-col>
         <el-col :span="12" class="flex flex-end flex-middle">
-          <span class="view-dept-status-label">部门状态:</span>
-          <el-select @change="handleQuery" v-model="queryParams.status" placeholder="部门状态" clearable>
+          <span class="view-dept-status-label">状态:</span>
+          <el-select @change="handleQuery" v-model="queryParams.status" placeholder="组织机构状态" clearable>
             <el-option label="正常" value="0" />
             <el-option label="停用" value="1" />
           </el-select>
           <div class="flex-1 ml-15">
-            <el-input slot="append" v-model="queryParams.deptName" placeholder="请输入部门名称" @keyup.enter.native="handleQuery">
+            <el-input slot="append" v-model="queryParams.deptName" placeholder="请输入组织机构名称" @keyup.enter.native="handleQuery">
               <el-button slot="append" icon="el-icon-search" @click="handleQuery"></el-button>
             </el-input>
           </div>
@@ -21,7 +21,7 @@
     </el-form>
 
     <el-table class="mt-20" :data="deptList" height="calc(100vh - 240px)" row-key="deptId" :default-expand-all="isExpandAll" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
-      <el-table-column prop="deptName" label="部门名称"></el-table-column>
+      <el-table-column prop="deptName" label="组织机构名称"></el-table-column>
       <el-table-column prop="orderNum" label="排序" width="200" align="center"></el-table-column>
       <el-table-column prop="status" label="状态" width="100" align="center">
         <template slot-scope="scope">
@@ -44,19 +44,19 @@
     </el-table>
 
     <!-- 添加或修改部门对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="110px">
         <el-row>
           <el-col :span="24" v-if="form.parentId !== 0">
-            <el-form-item label="上级部门" prop="parentId">
-              <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级部门" />
+            <el-form-item label="上级组织机构" prop="parentId">
+              <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级组织机构" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="部门名称" prop="deptName">
-              <el-input v-model="form.deptName" placeholder="请输入部门名称" />
+            <el-form-item label="组织机构名称" prop="deptName">
+              <el-input v-model="form.deptName" placeholder="请输入组织机构名称" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -84,7 +84,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="部门状态">
+            <el-form-item label="组织机构状态">
               <el-radio-group v-model="form.status">
                 <el-radio label="0">正常</el-radio>
                 <el-radio label="1">停用</el-radio>
@@ -196,7 +196,7 @@ export default {
         this.form.parentId = row.deptId
       }
       this.open = true
-      this.title = '添加部门'
+      this.title = '添加组织机构'
       listDept().then((response) => {
         this.deptOptions = handleTree(response.data, 'deptId')
       })
@@ -208,7 +208,7 @@ export default {
       getDept(row.deptId).then((response) => {
         this.form = response.data
         this.open = true
-        this.title = '修改部门'
+        this.title = '修改组织机构'
         listDeptExcludeChild(row.deptId).then((response) => {
           this.deptOptions = handleTree(response.data, 'deptId')
           if (this.deptOptions.length == 0) {

+ 1 - 1
src/views/system/role/index.js

@@ -104,7 +104,7 @@ export const rightColumns = (_this) => {
     },
     {
       prop: 'deptName',
-      label: '所属部门'
+      label: '所属组织机构'
     },
     {
       prop: 'majorName',

+ 9 - 12
src/views/system/role/index.vue

@@ -11,8 +11,8 @@
       <div class="right-title">{{ rightrolename }}</div>
       <div class="right-table">
         <div class="right-table-btn">
-          <el-button type="success" @click="adduserechodata">添加</el-button>
-          <el-button type="warning" @click="deletuser">删除</el-button>
+          <el-button type="success" @click="adduserechodata">新增用户</el-button>
+          <el-button type="warning" @click="deletuser">删除用户</el-button>
         </div>
         <LTable :fetch="initGetlistByRoleId" class="rightTable" @select-all="selectAll" @selection-change="selection" :pagination="pagination" :dataSource="rightTableData" ref="Rtable" :options="rightOptions" :columns="rightColumns"></LTable>
       </div>
@@ -61,7 +61,9 @@ import { useMessage } from '@/utils/element-ui'
 import { roleList, addRole, addEdit, menuList, roleDelete, listByRoleId, userList, cancelAll, selectAll, roleAuthMenu } from '@/api/system/role'
 import { Addrolerules, options, columns, rightOptions, rightColumns } from './index'
 import { deepClone } from '@/utils/index'
-import { getMenusData } from '@/utils/route'
+import { transformTreeData, whitelistFilter } from '@/utils/route'
+import { buildTreeData, privateRoutes } from '@/router/private-routes'
+
 export default {
   name: 'Role',
   components: {},
@@ -73,7 +75,7 @@ export default {
       rightColumns: rightColumns(this),
       roleCheckedItem: '',
       menuDialog: false,
-      menutreedata: getMenusData(),
+      menutreedata: transformTreeData(buildTreeData(whitelistFilter(privateRoutes, ['Home']))),
       checkedArr: [],
       defaultProps: {
         children: 'children',
@@ -207,15 +209,10 @@ export default {
     // 配置菜单弹框确认按钮
     async menuConfirm() {
       const arr = this.$refs.treeref.getCheckedNodes()
-      const result = arr.map((item) => {
-        if (!item.children) {
-          return item.id
-        }
-      })
-      const orderResult = result.filter((item) => item !== undefined)
+      const result = arr.filter((e) => e.id).map((e) => e.id)
       let params = {
         roleId: this.roleCheckedItem.roleId,
-        menuKeyList: orderResult
+        menuKeyList: result
       }
       await roleAuthMenu(params)
       this.getRoleList('created')
@@ -234,7 +231,7 @@ export default {
     },
 
     tablerow(row) {
-      this.rightrolename = row.roleName + '列表'
+      this.rightrolename = row.roleName + '的用户列表'
       this.activeRow = row
       this.pagination.pageIndex = 1
       this.getlistByRoleId(row.roleId)

+ 17 - 6
src/views/system/systemBackup/index.vue

@@ -15,8 +15,19 @@
         >备份</el-button
       >
       <el-button type="primary" @click="getBackupSet">备份设置</el-button>
-      <el-button type="primary" @click="importBackup">数据同步</el-button>
       <el-button
+        type="warning"
+        @click="
+          confirmation(
+            {
+              msg: '导入的备份文件将全部覆盖本系统数据, 是否继续?'
+            },
+            () => importBackup()
+          )
+        "
+        >数据同步</el-button
+      >
+      <!-- <el-button
         type="warning"
         @click="
           confirmation(
@@ -28,8 +39,8 @@
         "
         :disabled="initloading"
         >系统初始化</el-button
-      >
-      <el-button type="primary" @click="importOperation">导入</el-button>
+      > -->
+      <el-button type="primary" @click="importOperation">导入训练集数据</el-button>
     </div>
     <LTable ref="table" :defaultFetch="false" :columns="columns" :dataSource="tableData" :options="options" :fetch="fetchTableData" :pagination="pagination" class="systemBackup-table"> </LTable>
     <el-dialog title="备份设置" :visible.sync="dialogVisible" width="400px" :before-close="cancel">
@@ -127,7 +138,7 @@ export default {
           type: 'success',
           message: msg
         })
-        this.$alert(msg + '跳转至首页', '提示', {
+        this.$alert(msg + '跳转至综合看板', '提示', {
           confirmButtonText: '确定',
           callback: (action) => {
             this.$store.dispatch('user/loginOut')
@@ -157,7 +168,7 @@ export default {
           this.fetchTableData()
           this.$message({
             type: 'success',
-            message: '删除成功!'
+            message: '备份成功!'
           })
           this.fetchTableData()
         }
@@ -246,7 +257,7 @@ export default {
         await recover({ sysBackupId: row.sysBackupId })
         this.$message({
           type: 'success',
-          message: '恢复成功! 跳转至首页'
+          message: '恢复成功! 跳转登录页面'
         })
         setTimeout(() => {
           this.fullscreenLoading = false

+ 4 - 3
src/views/system/systemDataDictionary/data.vue

@@ -30,9 +30,9 @@
       <el-col :span="1.5">
         <el-button type="warning" size="mini" :disabled="multiple" @click="handleRemove">删除</el-button>
       </el-col>
-      <el-col :span="1.5">
+      <!-- <el-col :span="1.5">
         <el-button type="primary" size="mini" :loading="exportLoading" @click="handleExport">导出</el-button>
-      </el-col>
+      </el-col> -->
       <!-- <right-toolbar :show-search.sync="showSearch" @queryTable="getList" /> -->
     </el-row>
 
@@ -130,7 +130,7 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        dictName: undefined,
+        dictLabel: undefined,
         dictType: undefined,
         status: undefined
       },
@@ -295,6 +295,7 @@ export default {
       })
         .then(() => {
           this.exportLoading = true
+          debugger
           return exportData(queryParams)
         })
         .then((response) => {

+ 14 - 5
src/views/system/user/index.js

@@ -23,7 +23,7 @@ export const columns = (_this) => {
     },
     {
       prop: 'deptName',
-      label: '所属部门'
+      label: '所属机构'
     },
     {
       prop: 'majorName',
@@ -64,7 +64,7 @@ export const columns = (_this) => {
     {
       button: true,
       label: '操作',
-      width: '300px',
+      width: '350px',
       group: [
         {
           name: '编辑',
@@ -106,6 +106,15 @@ export const columns = (_this) => {
             _this.handRemove(row)
           }
         },
+        {
+          name: '重置密码',
+          type: 'text',
+          round: false,
+          plain: false,
+          onClick: (row, index, scope) => {
+            _this.resetPwd(row.userId)
+          }
+        },
         {
           name: '角色分配',
           type: 'text',
@@ -133,12 +142,12 @@ export const options = {
 export const modalConfig = (_this) => ({
   formItems: [
     { key: 'nickName', type: 'input', label: '用户名称', placeHolder: '请输入用户名称' },
-    { key: 'userName', type: 'input', label: '登录账号', placeHolder: '请输入登录账号' },
+    { key: 'userName', type: 'input', label: '登录账号', placeHolder: '请输入登录账号', showPassword: true },
     {
       key: 'deptId',
       keyLabel: 'deptName',
       type: 'treeSelect',
-      label: '所属部门',
+      label: '所属机构',
       valueOptions: _this.valueOptions,
       defaultProps: defaultProps,
       colLayout: { span: 12 }
@@ -181,7 +190,7 @@ export const modalConfig = (_this) => ({
   rules: {
     nickName: [{ required: true, message: '请输入用户名称', trigger: 'blur' }],
     userName: [{ required: true, message: '请输入登录账号', trigger: 'blur' }],
-    deptId: [{ required: true, message: '请选择所属部门', trigger: 'blur' }],
+    deptId: [{ required: true, message: '请选择所属机构', trigger: 'blur' }],
     majorId: [{ required: true, message: '请选择所属专业', trigger: 'blur' }],
     sex: [{ required: true, message: '请选择性别', trigger: 'blur' }]
   }

+ 24 - 2
src/views/system/user/index.vue

@@ -10,7 +10,7 @@
       <el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
       <el-col :span="6">
         <div class="grid-content bg-purple">
-          <el-input placeholder="请输入用户名/登录账号/所属部门" v-model="keyword" class="input-with-select">
+          <el-input placeholder="请输入用户名/登录账号/所属机构" v-model="keyword" class="input-with-select">
             <el-button slot="append" icon="el-icon-search" @click="findUser"></el-button>
           </el-input>
         </div>
@@ -29,7 +29,7 @@
 
 <script>
 import RoleDialog from './roleDialog.vue'
-import { userList, addUser, deleteUser, changeStatus, deptTree, userUpdate } from '@/api/system/user'
+import { userList, addUser, deleteUser, changeStatus, deptTree, userUpdate, resetBtn } from '@/api/system/user'
 import { getAvmatCategoriesTree } from '@/api/basicData/dataSailingMaterialClassification'
 import { columns, options, modalConfig } from './index'
 import { useMessage } from '@/utils/element-ui'
@@ -186,6 +186,28 @@ export default {
         .catch(() => {})
     },
 
+    // 重置密码
+    resetPwd(selectRow) {
+      this.$confirm('是否重置选中用户密码', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      })
+        .then(async () => {
+          const { code } = await resetBtn({ userId: selectRow })
+          debugger
+          if (code == 200) {
+            this.getUserList()
+            this.$refs.Ltable.clearSelection()
+            this.$message({
+              type: 'success',
+              message: '操作成功!'
+            })
+          }
+        })
+        .catch(() => {})
+    },
+
     async deleteBtn() {
       this.$confirm('是否确认删除选中数据', '提示', {
         confirmButtonText: '确定',

+ 2 - 2
src/views/task/carrierFlightMission/components/aircraft/index.vue

@@ -18,9 +18,8 @@
           </template>
         </el-table-column>
         <el-table-column prop="aircaftModelName" label="机型" align="center"> </el-table-column>
-        <el-table-column prop="createBy" label="创建人" align="center"> </el-table-column>
         <el-table-column prop="aircaftTypeName" label="机种" align="center"> </el-table-column>
-        <el-table-column prop="mechanician" label="机械师" align="center"> </el-table-column>
+        <el-table-column prop="mechanician" label="驾驶员" align="center"> </el-table-column>
         <el-table-column prop="planFlyDuration" label="计划飞行时长/小时" align="center">
           <template slot-scope="scope">
             <template v-if="scope.row.planFlyDuration.value || scope.row.planFlyDuration.value == ''">
@@ -32,6 +31,7 @@
             </template>
           </template>
         </el-table-column>
+        <el-table-column prop="createBy" label="创建人" align="center"> </el-table-column>
         <el-table-column prop="updateTime" label="更新时间" align="center"> </el-table-column>
         <el-table-column label="操作" width="100">
           <template slot-scope="scope">

+ 2 - 0
src/views/task/carrierFlightMission/index.js

@@ -87,6 +87,8 @@ export const columns = (_this) => [
         type: 'text',
         round: false,
         plain: false,
+        statusKey: 'status',
+        unDisableKey: '1',
         onClick: (row, index, scope) => {
           _this.edit(row)
         }

+ 57 - 10
src/views/task/carrierFlightMission/index.vue

@@ -4,7 +4,8 @@
       <div class="view-carrierFlightMission-FlightMission-btn-box">
         <el-button type="success" @click="addDialog()">新增任务</el-button>
         <el-button type="success" @click="addChildDialog()">新增子任务</el-button>
-        <el-button :disabled="!removeArr.length" type="warning" @click="selectRemove">删除</el-button>
+        <el-button :disabled="!removeRow.length" type="warning" @click="selectRemove">删除</el-button>
+        <el-button :disabled="removeRow.length != 1" type="primary" @click="editTask">修改</el-button>
         <el-dropdown split-button type="primary" style="margin-left: 10px" trigger="click" @command="handleExport">
           更多
           <el-dropdown-menu slot="dropdown">
@@ -61,7 +62,7 @@ export default {
         searchValue: ''
       },
       modalConfig: modalConfig(this),
-      removeArr: [],
+      removeRow: [],
       currentRow: []
     }
   },
@@ -83,14 +84,14 @@ export default {
     },
 
     addChildDialog() {
-      if (this.removeArr.length != 1) {
+      if (this.removeRow.length != 1) {
         this.$message({
           type: 'warning',
           message: '请选择一个待提交的主任务!'
         })
         return
       }
-      this.currentRow = this.tableData.find((row) => row.taskId == this.removeArr)
+      this.currentRow = this.removeRow[0]
       if (this.currentRow == undefined || this.currentRow.status != '1') {
         this.$message({
           type: 'warning',
@@ -152,7 +153,35 @@ export default {
       }
       this.$refs.NewDialogRef.open(config)
     },
+    //编辑
+    editTask() {
+      let row = this.removeRow[0]
+      if (row.status != '1') {
+        this.$message({
+          type: 'warning',
+          message: '请选择一个待提交的任务!'
+        })
+        return
+      }
+
+      this.queryFlyTaskMain()
+      this.getTEnvFactorDict()
 
+      const newRow = deepClone(row)
+      const tiemArr = newRow.taskTime.split('/')
+      newRow.taskTime = tiemArr
+      let config = {
+        type: 'upDate',
+        dataShow: newRow,
+        title: '编辑任务'
+      }
+      if (newRow.parentId == null || newRow.parentId == '') {
+        this.modalConfig.formItems[0].isHidden = true
+      } else {
+        this.modalConfig.formItems[0].isHidden = false
+      }
+      this.$refs.NewDialogRef.open(config)
+    },
     toCompile(row) {
       this.$router.push('/task/carrierFlightMission/compile')
       // this.dialogTitle = '编辑'
@@ -189,13 +218,31 @@ export default {
         .catch(() => {})
     },
     selectRemove() {
+      const removeArr = []
+      if (this.removeRow.length > 0) {
+        let shouldBreak = false
+        this.removeRow.forEach((item) => {
+          removeArr.push(item.taskId)
+          if (item.status != '1') {
+            shouldBreak = true
+          }
+        })
+
+        if (shouldBreak) {
+          this.$message({
+            type: 'warning',
+            message: '请选择一个待提交的任务!'
+          })
+          return
+        }
+      }
       this.$confirm('是否删除该任务', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
       })
         .then(async () => {
-          const { code } = await removeFlyTask(this.removeArr)
+          const { code } = await removeFlyTask(removeArr)
           if (code == 200) {
             this.$message({
               type: 'success',
@@ -263,20 +310,20 @@ export default {
     },
     // 全选
     selectAll(data) {
-      this.removeArr = []
+      this.removeRow = []
       if (data.length > 0) {
         data.forEach((item) => {
-          this.removeArr.push(item.taskId)
+          this.removeRow.push(item)
         })
       } else {
-        this.removeArr = []
+        this.removeRow = []
       }
     },
     // 单选
     selection(data) {
-      this.removeArr = []
+      this.removeRow = []
       data.forEach((item) => {
-        this.removeArr.push(item.taskId)
+        this.removeRow.push(item)
       })
     },
     async fetchTableData(search) {