Jelajahi Sumber

版本日历

qinqiao_v@didichuxing.com 5 tahun lalu
induk
melakukan
75d8446484
5 mengubah file dengan 1287 tambahan dan 610 penghapusan
  1. 2 0
      package.json
  2. 68 0
      src/api/versionsCalendar.js
  3. 7 7
      src/main.js
  4. 672 603
      src/router/index.js
  5. 538 0
      src/views/projectManage/taskList/versionsCalendar.vue

+ 2 - 0
package.json

@@ -15,6 +15,8 @@
     "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml"
   },
   "dependencies": {
+    "@fullcalendar/core": "^4.3.1",
+    "@fullcalendar/daygrid": "^4.3.0",
     "animate.css": "^3.7.2",
     "axios": "0.18.0",
     "dayjs": "^1.8.17",

+ 68 - 0
src/api/versionsCalendar.js

@@ -0,0 +1,68 @@
+import request from '@/utils/request'
+import { TeamManagement } from '@/apiConfig/api'
+
+// 列表
+export function getEvent(id) {
+  return request({
+    url: TeamManagement + `/VersionSchedule/listByVersionId?id=` + id,
+    method: 'get'
+  })
+}
+// 获取客户端
+export function showAppClientEnum() {
+  return request({
+    url: TeamManagement + `/config/showAppClientEnum`,
+    method: 'get'
+  })
+}
+// 首页获取排期
+export function listByVersionType(type) {
+  return request({
+    url: TeamManagement + `/VersionSchedule/listByVersionTypeV2?type=` + type,
+    method: 'get'
+  })
+}
+
+// 新增版本
+export function createVersion(data) {
+  return request({
+    url: TeamManagement + `/Version/create`,
+    method: 'post',
+    data
+  })
+}
+// 根据端类型获取所有版本
+export function listByType(data) {
+  return request({
+    url: TeamManagement + `/Version/listByType`,
+    method: 'post',
+    data
+  })
+}
+
+// 删除版本
+export function deleteVersion(id, data) {
+  return request({
+    url: TeamManagement + `/Version/delete?id=` + id,
+    method: 'post',
+    data
+  })
+}
+
+// 新增事件
+export function createEvent(data) {
+  return request({
+    url: TeamManagement + `/VersionSchedule/create`,
+    method: 'post',
+    data
+  })
+}
+
+// 删除事件
+export function deleteEvent(id, data) {
+  return request({
+    url: TeamManagement + `/VersionSchedule/delete?id=` + id,
+    method: 'post',
+    data
+  })
+}

+ 7 - 7
src/main.js

@@ -20,13 +20,13 @@ Vue.use(htmlToPdf)
 import animated from 'animate.css'
 Vue.use(animated)
 /**
- * If you don't want to use mock-server
- * you want to use MockJs for mock api
- * you can execute: mockXHR()
- *
- * Currently MockJs will be used in the production environment,
- * please remove it before going online! ! !
- */
+   * If you don't want to use mock-server
+   * you want to use MockJs for mock api
+   * you can execute: mockXHR()
+   *
+   * Currently MockJs will be used in the production environment,
+   * please remove it before going online! ! !
+   */
 import { mockXHR } from '../mock'
 if (process.env.NODE_ENV === 'production') {
   mockXHR()

+ 672 - 603
src/router/index.js

@@ -1,4 +1,3 @@
-
 import Vue from 'vue'
 import Router from 'vue-router'
 
@@ -34,661 +33,731 @@ import Home from '@/views/home/index'
  * a base page that does not have permission requirements
  * all roles can be accessed
  */
-export const constantRoutes = [
+export const constantRoutes = [{
+  path: '/login',
+  component: () =>
+      import('@/views/login/index'),
+  hidden: true
+},
+
+{
+  path: '/404',
+  component: () =>
+      import('@/views/404'),
+  hidden: true
+},
+
+{
+  path: '/',
+  component: Home,
+  hidden: true
+},
+
+{
+  path: '/home',
+  component: Home,
+  name: '首页',
+  hidden: true
+},
+
+// {
+//   path: '/home',
+//   component: Layout,
+//   redirect: '/dashboard',
+//   children: [{
+//     path: 'dashboard',
+//     name: 'Dashboard',
+//     component: () => import('@/views/dashboard/index'),
+//     meta: { title: 'Dashboard', icon: 'dashboard' }
+//   }]
+// },
+{
+  path: '/Platform',
+  component: Layout,
+  redirect: '/Platform/useCasePage',
+  name: '质惠平台',
+  meta: { title: '质惠平台', icon: '质惠平台' },
+  children: [{
+    path: '/Platform/projectManage',
+    name: '项目管理',
+    component: () =>
+          import('@/views/projectManage/projectList/testa'),
+    redirect: '/Platform/projectManage/projectList/projectIndex',
+    meta: { title: '项目管理' },
+    children: [{
+      path: 'projectIndex',
+      name: '项目',
+      component: () =>
+              import('@/views/projectManage/projectList/projectIndex'),
+      meta: { title: '项目' }
+    },
+    {
+      path: 'projectViewDetails',
+      name: '项目详情',
+      hidden: true,
+      component: () =>
+              import('@/views/projectManage/projectList/projectViewDetails'),
+      meta: { title: '项目详情' }
+    },
+    // {
+    //   path: 'projectList',
+    //   name: '项目列表',
+    //   // hidden: true,
+    //   component: () => import('@/views/projectManage/projectList/projectListIndex'),
+    //   meta: { title: '项目列表' }
+    // },
+    // {
+    //   path: 'projectCreate',
+    //   hidden: true,
+    //   name: '项目创建',
+    //   component: () => import('@/views/projectManage/projectList/projectCreate'),
+    //   meta: { title: '项目创建' }
+    // },
+    // {
+    //   path: 'projectPreview',
+    //   hidden: true,
+    //   name: '项目查看',
+    //   component: () => import('@/views/projectManage/projectList/projectPreview'),
+    //   meta: { title: '项目查看' }
+    // },
+    {
+      path: 'taskIndex',
+      name: '任务',
+      component: () =>
+              import('@/views/projectManage/taskList/taskIndex'),
+      meta: { title: '任务' }
+    },
+    {
+      path: 'taskViewDetails',
+      name: '任务详情',
+      hidden: true,
+      component: () =>
+              import('@/views/projectManage/taskList/taskViewDetails'),
+      meta: { title: '任务详情' }
+    },
+    {
+      path: 'taskList',
+      name: '任务列表',
+      component: () =>
+              import('@/views/projectManage/taskList/taskListIndex'),
+      meta: { title: '任务列表' }
+    },
+    {
+      path: 'taskCreate',
+      hidden: true,
+      name: '任务创建',
+      component: () =>
+              import('@/views/projectManage/taskList/taskCreate'),
+      meta: { title: '任务创建' }
+    },
+    {
+      path: 'taskPreview',
+      hidden: true,
+      name: '任务查看',
+      component: () =>
+              import('@/views/projectManage/taskList/taskPreview'),
+      meta: { title: '任务查看' }
+    },
+    {
+      path: 'taskUpdate',
+      hidden: true,
+      name: '任务更新',
+      component: () =>
+              import('@/views/projectManage/taskList/taskUpdateCreate'),
+      meta: { title: '任务更新' }
+    },
+    {
+      path: 'versionsCalendar',
+      // hidden: true,
+      name: '版本日历',
+      component: () =>
+              import('@/views/projectManage/taskList/versionsCalendar'),
+      meta: { title: '版本日历' }
+    },
+    {
+      path: 'requirement',
+      name: '需求',
+      component: () =>
+              import('@/views/projectManage/requirement/list/index.vue'),
+      meta: { title: '需求' }
+    },
+    {
+      path: 'requirementDetails/:id',
+      name: '需求详情',
+      hidden: true,
+      props: true,
+      component: () =>
+              import('@/views/projectManage/requirement/details/index.vue'),
+      meta: { title: '需求详情' }
+    },
+    {
+      path: 'version',
+      name: '版本',
+      component: () =>
+              import('@/views/projectManage/version/list/index.vue'),
+      meta: { title: '版本' }
+    }
+    ]
+  },
   {
-    path: '/login',
-    component: () => import('@/views/login/index'),
-    hidden: true
+    path: '/Platform/useCasePage',
+    name: '测试计划管理',
+    component: () =>
+          import('@/views/Platform/useCasePage'),
+    meta: { title: '测试计划管理' },
+    children: [{
+      path: 'useCasePage',
+      name: '用例管理',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/useCasePage'),
+      meta: { title: '用例管理' }
+    },
+    {
+      path: 'createUse',
+      name: '用例新增',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/useCase/createUse'),
+      meta: { title: '用例新增' }
+    },
+    {
+      path: 'queryUse',
+      name: '用例查看',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/useCase/queryUse'),
+      meta: { title: '用例查看' }
+    },
+    {
+      path: 'testPageData',
+      name: '测试计划',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/testPage.vue'),
+      meta: { title: '测试计划' }
+    }
+    ]
   },
 
   {
-    path: '/404',
-    component: () => import('@/views/404'),
-    hidden: true
+    path: '/Platform/presentation',
+    name: '报告管理',
+    component: () =>
+          import('@/views/Platform/presentation/testa'),
+    redirect: '/Platform/presentation/testPresentation',
+    meta: { title: '报告管理' },
+    children: [{
+      path: 'testPresentation',
+      name: '日报报告',
+      component: () =>
+              import('@/views/Platform/presentation/testPresentation'),
+      meta: { title: '日报报告' }
+    },
+    {
+      path: 'ResultPage',
+      name: '准出报告',
+      component: () =>
+              import('@/views/Platform/presentation/ResultPage'),
+      meta: { title: '准出报告' }
+    },
+    {
+      path: 'Assumptions',
+      name: '提测报告',
+      component: () =>
+              import('@/views/Platform/presentation/Assumptions'),
+      meta: { title: '提测报告' }
+    },
+    {
+      path: 'DailyNewsAdded',
+      name: '日报报告',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/presentation/DailyNewsAdded'),
+      meta: { title: '新增日报报告' }
+    },
+    {
+      path: 'presentationReport',
+      name: '提测报告',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/presentation/presentationReport'),
+      meta: { title: '新增服务器提测报告' }
+    },
+    {
+      path: 'acceptTheReport',
+      name: '提测预览',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/presentation/acceptTheReport'),
+      meta: { title: '提测预览' }
+    },
+    {
+      path: 'testPresenyL',
+      name: '日报预览',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/presentation/testPresenyL'),
+      meta: { title: '日报预览' }
+    },
+    {
+      path: 'ResultPageyL',
+      name: '准出预览',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/presentation/ResultPageyL'),
+      meta: { title: '准出预览' }
+    },
+    {
+      path: 'Acceptance',
+      name: '准出报告',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/presentation/Acceptance'),
+      meta: { title: '准出报告,新增服务器端报告' }
+    },
+    {
+      path: 'ClientAcceptance',
+      name: '准出报告',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/presentation/ClientAcceptance'),
+      meta: { title: '准出报告,新增客户端报告' }
+    },
+    {
+      path: 'PresentReport',
+      name: '提测报告,新增报告',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/presentation/PresentReport'),
+      meta: { title: '新增客户端提测报告' }
+    }
+    ]
   },
-
   {
-    path: '/',
-    component: Home,
-    hidden: true
+    path: '/Platform/defectManagement',
+    name: '缺陷管理',
+    component: () =>
+          import('@/views/Platform/defectManagement'),
+    meta: { title: '缺陷管理' }
   },
-
   {
-    path: '/home',
-    component: Home,
-    name: '首页',
-    hidden: true
+    path: '/Platform/defectManagement/bugCreate',
+    name: '新建Bug',
+    hidden: true,
+    component: () =>
+          import('@/views/Platform/bugManage/bugCreate'),
+    meta: { title: '新建Bug' }
   },
-
-  // {
-  //   path: '/home',
-  //   component: Layout,
-  //   redirect: '/dashboard',
-  //   children: [{
-  //     path: 'dashboard',
-  //     name: 'Dashboard',
-  //     component: () => import('@/views/dashboard/index'),
-  //     meta: { title: 'Dashboard', icon: 'dashboard' }
-  //   }]
-  // },
   {
-    path: '/Platform',
-    component: Layout,
-    redirect: '/Platform/useCasePage',
-    name: '质惠平台',
-    meta: { title: '质惠平台', icon: '质惠平台' },
-    children: [
-      {
-        path: '/Platform/projectManage',
-        name: '项目管理',
-        component: () => import('@/views/projectManage/projectList/testa'),
-        redirect: '/Platform/projectManage/projectList/projectIndex',
-        meta: { title: '项目管理' },
-        children: [
-          {
-            path: 'projectIndex',
-            name: '项目',
-            component: () => import('@/views/projectManage/projectList/projectIndex'),
-            meta: { title: '项目' }
-          },
-          {
-            path: 'projectViewDetails',
-            name: '项目详情',
-            hidden: true,
-            component: () => import('@/views/projectManage/projectList/projectViewDetails'),
-            meta: { title: '项目详情' }
-          },
-          // {
-          //   path: 'projectList',
-          //   name: '项目列表',
-          //   // hidden: true,
-          //   component: () => import('@/views/projectManage/projectList/projectListIndex'),
-          //   meta: { title: '项目列表' }
-          // },
-          // {
-          //   path: 'projectCreate',
-          //   hidden: true,
-          //   name: '项目创建',
-          //   component: () => import('@/views/projectManage/projectList/projectCreate'),
-          //   meta: { title: '项目创建' }
-          // },
-          // {
-          //   path: 'projectPreview',
-          //   hidden: true,
-          //   name: '项目查看',
-          //   component: () => import('@/views/projectManage/projectList/projectPreview'),
-          //   meta: { title: '项目查看' }
-          // },
-          {
-            path: 'taskIndex',
-            name: '任务',
-            component: () => import('@/views/projectManage/taskList/taskIndex'),
-            meta: { title: '任务' }
-          },
-          {
-            path: 'taskViewDetails',
-            name: '任务详情',
-            hidden: true,
-            component: () => import('@/views/projectManage/taskList/taskViewDetails'),
-            meta: { title: '任务详情' }
-          },
-          {
-            path: 'taskList',
-            name: '任务列表',
-            component: () => import('@/views/projectManage/taskList/taskListIndex'),
-            meta: { title: '任务列表' }
-          },
-          {
-            path: 'taskCreate',
-            hidden: true,
-            name: '任务创建',
-            component: () => import('@/views/projectManage/taskList/taskCreate'),
-            meta: { title: '任务创建' }
-          },
-          {
-            path: 'taskPreview',
-            hidden: true,
-            name: '任务查看',
-            component: () => import('@/views/projectManage/taskList/taskPreview'),
-            meta: { title: '任务查看' }
-          },
-          {
-            path: 'taskUpdate',
-            hidden: true,
-            name: '任务更新',
-            component: () => import('@/views/projectManage/taskList/taskUpdateCreate'),
-            meta: { title: '任务更新' }
-          },
-          {
-            path: 'requirement',
-            name: '需求',
-            component: () => import('@/views/projectManage/requirement/list/index.vue'),
-            meta: { title: '需求' }
-          },
-          {
-            path: 'requirementDetails/:id',
-            name: '需求详情',
-            hidden: true,
-            props: true,
-            component: () => import('@/views/projectManage/requirement/details/index.vue'),
-            meta: { title: '需求详情' }
-          },
-          {
-            path: 'version',
-            name: '版本',
-            component: () => import('@/views/projectManage/version/list/index.vue'),
-            meta: { title: '版本' }
-          }
-        ]
-      },
-      {
-        path: '/Platform/useCasePage',
-        name: '测试计划管理',
-        component: () => import('@/views/Platform/useCasePage'),
-        meta: { title: '测试计划管理' },
-        children: [
-          {
-            path: 'useCasePage',
-            name: '用例管理',
-            hidden: true,
-            component: () => import('@/views/Platform/useCasePage'),
-            meta: { title: '用例管理' }
-          },
-          {
-            path: 'createUse',
-            name: '用例新增',
-            hidden: true,
-            component: () => import('@/views/Platform/useCase/createUse'),
-            meta: { title: '用例新增' }
-          },
-          {
-            path: 'queryUse',
-            name: '用例查看',
-            hidden: true,
-            component: () => import('@/views/Platform/useCase/queryUse'),
-            meta: { title: '用例查看' }
-          },
-          {
-            path: 'testPageData',
-            name: '测试计划',
-            hidden: true,
-            component: () => import('@/views/Platform/testPage.vue'),
-            meta: { title: '测试计划' }
-          }
-        ]
-      },
-
-      {
-        path: '/Platform/presentation',
-        name: '报告管理',
-        component: () => import('@/views/Platform/presentation/testa'),
-        redirect: '/Platform/presentation/testPresentation',
-        meta: { title: '报告管理' },
-        children: [
-          {
-            path: 'testPresentation',
-            name: '日报报告',
-            component: () => import('@/views/Platform/presentation/testPresentation'),
-            meta: { title: '日报报告' }
-          },
-          {
-            path: 'ResultPage',
-            name: '准出报告',
-            component: () => import('@/views/Platform/presentation/ResultPage'),
-            meta: { title: '准出报告' }
-          },
-          {
-            path: 'Assumptions',
-            name: '提测报告',
-            component: () => import('@/views/Platform/presentation/Assumptions'),
-            meta: { title: '提测报告' }
-          },
-          {
-            path: 'DailyNewsAdded',
-            name: '日报报告',
-            hidden: true,
-            component: () => import('@/views/Platform/presentation/DailyNewsAdded'),
-            meta: { title: '新增日报报告' }
-          },
-          {
-            path: 'presentationReport',
-            name: '提测报告',
-            hidden: true,
-            component: () => import('@/views/Platform/presentation/presentationReport'),
-            meta: { title: '新增服务器提测报告' }
-          },
-          {
-            path: 'acceptTheReport',
-            name: '提测预览',
-            hidden: true,
-            component: () => import('@/views/Platform/presentation/acceptTheReport'),
-            meta: { title: '提测预览' }
-          },
-          {
-            path: 'testPresenyL',
-            name: '日报预览',
-            hidden: true,
-            component: () => import('@/views/Platform/presentation/testPresenyL'),
-            meta: { title: '日报预览' }
-          },
-          {
-            path: 'ResultPageyL',
-            name: '准出预览',
-            hidden: true,
-            component: () => import('@/views/Platform/presentation/ResultPageyL'),
-            meta: { title: '准出预览' }
-          },
-          {
-            path: 'Acceptance',
-            name: '准出报告',
-            hidden: true,
-            component: () => import('@/views/Platform/presentation/Acceptance'),
-            meta: { title: '准出报告,新增服务器端报告' }
-          },
-          {
-            path: 'ClientAcceptance',
-            name: '准出报告',
-            hidden: true,
-            component: () => import('@/views/Platform/presentation/ClientAcceptance'),
-            meta: { title: '准出报告,新增客户端报告' }
-          },
-          {
-            path: 'PresentReport',
-            name: '提测报告,新增报告',
-            hidden: true,
-            component: () => import('@/views/Platform/presentation/PresentReport'),
-            meta: { title: '新增客户端提测报告' }
-          }
-        ]
+    path: '/Platform/defectManagement/bugQuery',
+    name: '查看Bug',
+    hidden: true,
+    component: () =>
+          import('@/views/Platform/bugManage/bugQuery'),
+    meta: { title: '查看Bug' }
+  },
+  {
+    path: '/Platform/defectManagement/bugUpdate',
+    name: '更新Bug',
+    hidden: true,
+    component: () =>
+          import('@/views/Platform/bugManage/bugUpdate'),
+    meta: { title: '更新Bug' }
+  },
+  {
+    path: '/Platform/setUp',
+    // component: Layout,
+    name: '设置',
+    hidden: true,
+    // meta: { title: '设置' },
+    component: () =>
+          import('@/views/Platform/setUp/testa'),
+    meta: { title: '设置' },
+    children: [{
+      path: 'systemSetup',
+      name: '系统设置',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/setUp/systemSetup/testa'),
+      meta: { title: '系统设置' },
+      children: [{
+        path: 'bizPage',
+        name: '业务线',
+        hidden: true,
+        component: () =>
+                  import('@/views/Platform/setUp/systemSetup/bizPage'),
+        meta: { title: '业务线' }
       },
       {
-        path: '/Platform/defectManagement',
-        name: '缺陷管理',
-        component: () => import('@/views/Platform/defectManagement'),
-        meta: { title: '缺陷管理' }
+        path: 'platformPage',
+        name: '平台类型',
+        hidden: true,
+        component: () =>
+                  import('@/views/Platform/setUp/systemSetup/platformPage'),
+        meta: { title: '平台类型' }
       },
       {
-        path: '/Platform/defectManagement/bugCreate',
-        name: '新建Bug',
+        path: 'modulePage',
+        name: '业务模块',
         hidden: true,
-        component: () => import('@/views/Platform/bugManage/bugCreate'),
-        meta: { title: '新建Bug' }
+        component: () =>
+                  import('@/views/Platform/setUp/systemSetup/modulePage'),
+        meta: { title: '业务模块' }
       },
       {
-        path: '/Platform/defectManagement/bugQuery',
-        name: '查看Bug',
+        path: 'projectPage',
+        name: '工程模块',
         hidden: true,
-        component: () => import('@/views/Platform/bugManage/bugQuery'),
-        meta: { title: '查看Bug' }
+        component: () =>
+                  import('@/views/Platform/setUp/systemSetup/projectPage'),
+        meta: { title: '工程模块' }
       },
       {
-        path: '/Platform/defectManagement/bugUpdate',
-        name: '更新Bug',
+        path: 'confList',
+        name: '业务配置列表',
         hidden: true,
-        component: () => import('@/views/Platform/bugManage/bugUpdate'),
-        meta: { title: '更新Bug' }
+        component: () =>
+                  import('@/views/Platform/setUp/systemSetup/confList'),
+        meta: { title: '业务配置列表' }
       },
       {
-        path: '/Platform/setUp',
-        // component: Layout,
-        name: '设置',
+        path: 'addConf',
+        name: '新增配置',
         hidden: true,
-        // meta: { title: '设置' },
-        component: () => import('@/views/Platform/setUp/testa'),
-        meta: { title: '设置' },
-        children: [{
-          path: 'systemSetup',
-          name: '系统设置',
-          hidden: true,
-          component: () => import('@/views/Platform/setUp/systemSetup/testa'),
-          meta: { title: '系统设置' },
-          children: [{
-            path: 'bizPage',
-            name: '业务线',
-            hidden: true,
-            component: () => import('@/views/Platform/setUp/systemSetup/bizPage'),
-            meta: { title: '业务线' }
-          },
-          {
-            path: 'platformPage',
-            name: '平台类型',
-            hidden: true,
-            component: () => import('@/views/Platform/setUp/systemSetup/platformPage'),
-            meta: { title: '平台类型' }
-          },
-          {
-            path: 'modulePage',
-            name: '业务模块',
-            hidden: true,
-            component: () => import('@/views/Platform/setUp/systemSetup/modulePage'),
-            meta: { title: '业务模块' }
-          },
-          {
-            path: 'projectPage',
-            name: '工程模块',
-            hidden: true,
-            component: () => import('@/views/Platform/setUp/systemSetup/projectPage'),
-            meta: { title: '工程模块' }
-          },
-          {
-            path: 'confList',
-            name: '业务配置列表',
-            hidden: true,
-            component: () => import('@/views/Platform/setUp/systemSetup/confList'),
-            meta: { title: '业务配置列表' }
-          },
-          {
-            path: 'addConf',
-            name: '新增配置',
-            hidden: true,
-            component: () => import('@/views/Platform/setUp/systemSetup/addConf'),
-            meta: { title: '新增配置' }
-          }
-
-          ]
-        },
-        {
-          path: 'teamPage',
-          name: '团队设置',
-          hidden: true,
-          component: () => import('@/views/Platform/setUp/teamPage'),
-          meta: { title: '团队设置' }
-        }
-        ]
+        component: () =>
+                  import('@/views/Platform/setUp/systemSetup/addConf'),
+        meta: { title: '新增配置' }
       }
+
+      ]
+    },
+    {
+      path: 'teamPage',
+      name: '团队设置',
+      hidden: true,
+      component: () =>
+              import('@/views/Platform/setUp/teamPage'),
+      meta: { title: '团队设置' }
+    }
     ]
+  }
+  ]
+},
+{
+  path: '/Platform/Workbench',
+  name: '工作台',
+  component: Layout,
+  redirect: '/Platform/Workbench/PersonalWorkbench',
+  meta: { title: '工作台', icon: '工作台' },
+  children: [{
+    path: 'PersonalWorkbench',
+    name: '个人工作台',
+    component: () =>
+          import('@/views/Platform/Workbench/PersonalWorkbench'),
+    meta: { title: '个人工作台' }
   },
   {
-    path: '/Platform/Workbench',
-    name: '工作台',
-    component: Layout,
-    redirect: '/Platform/Workbench/PersonalWorkbench',
-    meta: { title: '工作台', icon: '工作台' },
-    children: [
-      {
-        path: 'PersonalWorkbench',
-        name: '个人工作台',
-        component: () => import('@/views/Platform/Workbench/PersonalWorkbench'),
-        meta: { title: '个人工作台' }
-      },
-      {
-        path: 'TeamWorkbench',
-        name: '团队工作台',
-        component: () => import('@/views/Platform/Workbench/TeamWorkbench'),
-        meta: { title: '团队工作台' }
-      }
-    ]
+    path: 'TeamWorkbench',
+    name: '团队工作台',
+    component: () =>
+          import('@/views/Platform/Workbench/TeamWorkbench'),
+    meta: { title: '团队工作台' }
+  }
+  ]
+},
+
+{
+  path: '/env-platform',
+  component: Layout,
+  hidden: true,
+  redirect: '/env-platform/env',
+  name: '环境',
+  meta: { title: '环境平台', icon: 'env_platform' },
+  children: [{
+    path: 'env',
+    name: 'env',
+    component: () =>
+          import('@/views/env/index.vue'),
+    meta: { title: '环境管理' }
+
+  },
+  {
+    path: 'businessline',
+    name: 'businessline',
+    component: () =>
+          import('@/views/env/index.vue'),
+    meta: { title: '业务线管理' }
+  },
+  {
+    path: 'whitelist',
+    name: 'whitelist',
+    component: () =>
+          import('@/views/env/index.vue'),
+    meta: { title: '白名单管理' }
+  },
+  {
+    path: 'module',
+    name: 'module',
+    component: () =>
+          import('@/views/env/index.vue'),
+    meta: { title: '模块管理' }
   },
+  {
+    path: 'group',
+    name: 'group',
+    component: () =>
+          import('@/views/env/index.vue'),
+    meta: { title: 'Group管理' }
+  },
+  {
+    path: 'topic',
+    name: 'topic',
+    component: () =>
+          import('@/views/env/index.vue'),
+    meta: { title: 'Topic管理' }
+  },
+  {
+    path: 'mq',
+    name: 'mq',
+    component: () =>
+          import('@/views/env/index.vue'),
+    meta: { title: 'MQ管理' }
+  },
+  {
+    path: 'data',
+    name: 'data',
+    component: () =>
+          import('@/views/env/index.vue'),
+    meta: { title: '数据统计' }
+  }
+  ]
+},
 
+{
+  path: '/mock',
+  component: Layout,
+  hidden: true,
+  redirect: '/mock/interface',
+  name: 'Mock',
+  meta: { title: 'Mock服务', icon: 'MQ' },
+  children: [{
+    path: 'interface',
+    name: 'Interface',
+    component: () =>
+          import('@/views/mock/interface'),
+    meta: { title: 'dubbo mock' }
+  },
   {
-    path: '/env-platform',
-    component: Layout,
+    path: 'interface/:rule',
+    name: 'Rule',
     hidden: true,
-    redirect: '/env-platform/env',
-    name: '环境',
-    meta: { title: '环境平台', icon: 'env_platform' },
-    children: [
-      {
-        path: 'env',
-        name: 'env',
-        component: () => import('@/views/env/index.vue'),
-        meta: { title: '环境管理' }
+    component: () =>
+          import('@/views/mock/rule'),
+    meta: { title: 'dubbo规则' }
+  },
+  {
+    path: 'httpmock',
+    name: 'httpmock',
+    component: () =>
+          import('@/views/mock/httpmock'),
+    meta: { title: 'http mock' }
+  },
+  {
+    path: 'httpmock/:httprule',
+    name: 'Httprule',
+    hidden: true,
+    component: () =>
+          import('@/views/mock/httprule'),
+    meta: { title: 'httpmock规则' }
+  }
+  ]
+},
 
-      },
-      {
-        path: 'businessline',
-        name: 'businessline',
-        component: () => import('@/views/env/index.vue'),
-        meta: { title: '业务线管理' }
-      },
-      {
-        path: 'whitelist',
-        name: 'whitelist',
-        component: () => import('@/views/env/index.vue'),
-        meta: { title: '白名单管理' }
-      },
-      {
-        path: 'module',
-        name: 'module',
-        component: () => import('@/views/env/index.vue'),
-        meta: { title: '模块管理' }
-      },
-      {
-        path: 'group',
-        name: 'group',
-        component: () => import('@/views/env/index.vue'),
-        meta: { title: 'Group管理' }
-      },
-      {
-        path: 'topic',
-        name: 'topic',
-        component: () => import('@/views/env/index.vue'),
-        meta: { title: 'Topic管理' }
-      },
-      {
-        path: 'mq',
-        name: 'mq',
-        component: () => import('@/views/env/index.vue'),
-        meta: { title: 'MQ管理' }
-      },
-      {
-        path: 'data',
-        name: 'data',
-        component: () => import('@/views/env/index.vue'),
-        meta: { title: '数据统计' }
-      }
-    ]
+{
+  path: '/data',
+  component: Layout,
+  hidden: true,
+  redirect: '/data/upload-file',
+  name: '数据中心',
+  meta: { title: '数据中心', icon: 'examlpe' },
+  children: [{
+    path: 'upload-file',
+    name: 'jar包管理',
+    component: () =>
+          import('@/views/data/upload.vue'),
+    meta: { title: 'jar包管理' }
   },
+  {
+    path: 'item',
+    name: '动态数据',
+    component: () =>
+          import('@/views/data/index.vue'),
+    meta: { title: '动态数据' }
+  }
+  ]
+},
 
+{
+  path: '/virtualDevices',
+  component: Layout,
+  hidden: true,
+  redirect: '/virtualDevices/HTvehicle',
+  name: '虚拟硬件',
+  meta: { title: '虚拟硬件', icon: 'zhiliangdapan' },
+  children: [{
+    path: 'HTvehicle',
+    name: '单车',
+    component: () =>
+          import('@/views/virtualDevices/HTvehicle'),
+    meta: { title: '单车' }
+  },
   {
-    path: '/mock',
-    component: Layout,
-    hidden: true,
-    redirect: '/mock/interface',
-    name: 'Mock',
-    meta: { title: 'Mock服务', icon: 'MQ' },
-    children: [
-      {
-        path: 'interface',
-        name: 'Interface',
-        component: () => import('@/views/mock/interface'),
-        meta: { title: 'dubbo mock' }
-      },
-      {
-        path: 'interface/:rule',
-        name: 'Rule',
-        hidden: true,
-        component: () => import('@/views/mock/rule'),
-        meta: { title: 'dubbo规则' }
-      },
-      {
-        path: 'httpmock',
-        name: 'httpmock',
-        component: () => import('@/views/mock/httpmock'),
-        meta: { title: 'http mock' }
-      },
-      {
-        path: 'httpmock/:httprule',
-        name: 'Httprule',
-        hidden: true,
-        component: () => import('@/views/mock/httprule'),
-        meta: { title: 'httpmock规则' }
-      }
-    ]
+    path: 'ebike',
+    name: '电单车',
+    component: () =>
+          import('@/views/virtualDevices/HMvehicle.vue'),
+    meta: { title: '电单车' }
   },
+  {
+    path: 'ebike/ebikeCreate',
+    name: '新增电单车',
+    hidden: true,
+    component: () =>
+          import('@/views/virtualDevices/HMvehicleCreate.vue'),
+    meta: { title: '新增电单车' }
+  }
+  ]
+},
 
+{
+  path: '/online-quality',
+  component: Layout,
+  hidden: true,
+  redirect: '/online-quality/check-list',
+  name: '上线质检',
+  meta: { title: '上线质检', icon: '上线质检' },
+  children: [{
+    path: 'check-list',
+    name: '模板管理',
+    component: () =>
+          import('@/views/online-quality/CheckConfig/index.vue'),
+    meta: { title: '模板管理' }
+  },
+  {
+    path: 'history-task',
+    name: '历史任务',
+    component: () =>
+          import('@/views/online-quality/HistoryTask/index.vue'),
+    meta: { title: '历史任务' }
+  },
   {
-    path: '/data',
-    component: Layout,
+    path: 'history-task-details/:taskId',
+    props: true,
+    name: '历史任务详情',
     hidden: true,
-    redirect: '/data/upload-file',
-    name: '数据中心',
-    meta: { title: '数据中心', icon: 'examlpe' },
-    children: [
-      {
-        path: 'upload-file',
-        name: 'jar包管理',
-        component: () => import('@/views/data/upload.vue'),
-        meta: { title: 'jar包管理' }
-      },
-      {
-        path: 'item',
-        name: '动态数据',
-        component: () => import('@/views/data/index.vue'),
-        meta: { title: '动态数据' }
-      }
-    ]
+    component: () =>
+          import('@/views/online-quality/HistoryTask/taskDetails.vue'),
+    meta: { title: '历史任务详情' }
   },
+  {
+    path: 'block-server',
+    name: '阻断服务',
+    component: () =>
+          import('@/views/online-quality/BlockServer/index.vue'),
+    meta: { title: '阻断服务' }
+  }
+  ]
+},
 
+{ path: '*', redirect: '/404', hidden: true },
+
+{
+  path: '/quality',
+  component: Layout,
+  redirect: '/quality/qualityMeasurement',
+  name: '质量度量',
+  meta: { title: '质量度量', icon: '质量度量' },
+  children: [{
+    path: 'qualityMeasurement',
+    name: '质量大盘',
+    component: () =>
+          import('@/views/quality/qualityMeasurement.vue'),
+    meta: { title: '质量大盘' }
+  },
   {
-    path: '/virtualDevices',
-    component: Layout,
+    path: 'qualityProcess',
+    name: '上线过程',
     hidden: true,
-    redirect: '/virtualDevices/HTvehicle',
-    name: '虚拟硬件',
-    meta: { title: '虚拟硬件', icon: 'zhiliangdapan' },
-    children: [
-      {
-        path: 'HTvehicle',
-        name: '单车',
-        component: () => import('@/views/virtualDevices/HTvehicle'),
-        meta: { title: '单车' }
-      },
-      {
-        path: 'ebike',
-        name: '电单车',
-        component: () => import('@/views/virtualDevices/HMvehicle.vue'),
-        meta: { title: '电单车' }
-      },
-      {
-        path: 'ebike/ebikeCreate',
-        name: '新增电单车',
-        hidden: true,
-        component: () => import('@/views/virtualDevices/HMvehicleCreate.vue'),
-        meta: { title: '新增电单车' }
-      }
-    ]
+    component: () =>
+          import('@/views/quality/qualityProcess.vue'),
+    meta: { title: '上线过程' }
   },
-
   {
-    path: '/online-quality',
-    component: Layout,
+    path: 'qualityDefectProcess',
+    name: '缺陷过程',
     hidden: true,
-    redirect: '/online-quality/check-list',
-    name: '上线质检',
-    meta: { title: '上线质检', icon: '上线质检' },
-    children: [
-      {
-        path: 'check-list',
-        name: '模板管理',
-        component: () => import('@/views/online-quality/CheckConfig/index.vue'),
-        meta: { title: '模板管理' }
-      },
-      {
-        path: 'history-task',
-        name: '历史任务',
-        component: () => import('@/views/online-quality/HistoryTask/index.vue'),
-        meta: { title: '历史任务' }
-      },
-      {
-        path: 'history-task-details/:taskId',
-        props: true,
-        name: '历史任务详情',
-        hidden: true,
-        component: () => import('@/views/online-quality/HistoryTask/taskDetails.vue'),
-        meta: { title: '历史任务详情' }
-      },
-      {
-        path: 'block-server',
-        name: '阻断服务',
-        component: () => import('@/views/online-quality/BlockServer/index.vue'),
-        meta: { title: '阻断服务' }
-      }
-    ]
+    component: () =>
+          import('@/views/quality/qualityDefectProcess.vue'),
+    meta: { title: '缺陷过程' }
   },
-
-  { path: '*', redirect: '/404', hidden: true },
-
   {
-    path: '/quality',
-    component: Layout,
-    redirect: '/quality/qualityMeasurement',
-    name: '质量度量',
-    meta: { title: '质量度量', icon: '质量度量' },
-    children: [
-      {
-        path: 'qualityMeasurement',
-        name: '质量大盘',
-        component: () => import('@/views/quality/qualityMeasurement.vue'),
-        meta: { title: '质量大盘' }
-      },
-      {
-        path: 'qualityProcess',
-        name: '上线过程',
-        hidden: true,
-        component: () => import('@/views/quality/qualityProcess.vue'),
-        meta: { title: '上线过程' }
-      },
-      {
-        path: 'qualityDefectProcess',
-        name: '缺陷过程',
-        hidden: true,
-        component: () => import('@/views/quality/qualityDefectProcess.vue'),
-        meta: { title: '缺陷过程' }
-      },
-      {
-        path: 'qualityHotpatchProcess',
-        name: '热修复过程',
-        hidden: true,
-        component: () => import('@/views/quality/qualityHotpatchProcess.vue'),
-        meta: { title: '热修复过程' }
-      },
-      {
-        path: 'problemList',
-        name: '线上问题',
-        component: () => import('@/views/onlineProblem/problemList.vue'),
-        meta: { title: '线上问题' }
-      },
-      {
-        path: '/Platform/defectManagement/problemCreate',
-        name: '新建线上问题',
-        hidden: true,
-        component: () => import('@/views/onlineProblem/problemCreate'),
-        meta: { title: '新建线上问题' }
-      },
-      {
-        path: '/Platform/defectManagement/problemQuery',
-        name: '查看线上问题',
-        hidden: true,
-        component: () => import('@/views/onlineProblem/problemQuery'),
-        meta: { title: '查看线上问题' }
-      },
-      {
-        path: '/Platform/defectManagement/problemUpdate',
-        name: '更新线上问题',
-        hidden: true,
-        component: () => import('@/views/onlineProblem/problemUpdate'),
-        meta: { title: '更新线上问题' }
-      }
-    ]
+    path: 'qualityHotpatchProcess',
+    name: '热修复过程',
+    hidden: true,
+    component: () =>
+          import('@/views/quality/qualityHotpatchProcess.vue'),
+    meta: { title: '热修复过程' }
+  },
+  {
+    path: 'problemList',
+    name: '线上问题',
+    component: () =>
+          import('@/views/onlineProblem/problemList.vue'),
+    meta: { title: '线上问题' }
+  },
+  {
+    path: '/Platform/defectManagement/problemCreate',
+    name: '新建线上问题',
+    hidden: true,
+    component: () =>
+          import('@/views/onlineProblem/problemCreate'),
+    meta: { title: '新建线上问题' }
   },
   {
-    path: '/ToConfigure',
+    path: '/Platform/defectManagement/problemQuery',
+    name: '查看线上问题',
+    hidden: true,
+    component: () =>
+          import('@/views/onlineProblem/problemQuery'),
+    meta: { title: '查看线上问题' }
+  },
+  {
+    path: '/Platform/defectManagement/problemUpdate',
+    name: '更新线上问题',
+    hidden: true,
+    component: () =>
+          import('@/views/onlineProblem/problemUpdate'),
+    meta: { title: '更新线上问题' }
+  }
+  ]
+},
+{
+  path: '/ToConfigure',
+  name: '组织配置',
+  component: Layout,
+  redirect: '/ToConfigure/configure',
+  // hidden: true,
+  meta: { title: '组织配置', icon: '上线质检' },
+  children: [{
+    path: 'configure',
     name: '组织配置',
-    component: Layout,
-    redirect: '/ToConfigure/configure',
     // hidden: true,
-    meta: { title: '组织配置', icon: '上线质检' },
-    children: [
-      {
-        path: 'configure',
-        name: '组织配置',
-        // hidden: true,
-        component: () => import('@/views/ToConfigure/configure'),
-        meta: { title: '组织配置', icon: '组织配置' }
-      }
-    ]
-  }
+    component: () =>
+        import('@/views/ToConfigure/configure'),
+    meta: { title: '组织配置', icon: '组织配置' }
+  }]
+}
 ]
 
 const createRouter = () => new Router({

+ 538 - 0
src/views/projectManage/taskList/versionsCalendar.vue

@@ -0,0 +1,538 @@
+<template>
+  <div style="background-color:#F2F3F6;display:flex;align-items: center;justify-content: center;">
+    <el-container>
+      <el-header class="bgborder" style=" margin: 2%;align-items: center;justify-content: space-between;">
+        <div style="margin-left:1%;margin-top:1.8%">
+          <el-dropdown @command="handleCommand">
+            <span v-if="typeOpt !== []" class="el-dropdown-link drop_down" style="cursor: pointer;">{{ isCommand === '' ? defaultTypeOpt : clientType }}<i class="el-icon-arrow-down el-icon--right" /></span>
+            <el-dropdown-menu v-if="typeOpt !== []" slot="dropdown" align="center">
+              <el-dropdown-item v-for="item in typeOpt" :key="item.code" :command="{value:item.code,flag:item}">{{ item.msg }}</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </div>
+      </el-header>
+
+      <el-main class="bgborder" style=" margin: 0 2%;min-height: 120.5vh;padding:0 !important">
+        <div style="margin: 1.9%; font-weight: 600; white-space: nowrap;"><b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>版本日历 <el-button type="primary" size="mini" icon="el-icon-plus" style="float: right;" @click="adds()">添加版本事件</el-button></div>
+        <full-calendar :events="events" lang="zh" c5ass="test-fc" first-day="1" locale="fr" style="width:100%"> />
+          <div id="calendar" style="height: 800px;" />
+        </full-calendar>
+      </el-main>
+
+      <el-dialog title="版本管理" :visible.sync="dialogFormVisible" width="1180px">
+        <el-dialog :title="dialogStatus" width="35%" :visible.sync="dialogCraeteVisible" append-to-body>
+          <div style="margin-left:28px">
+            <el-form ref="addVersionForms" :rules="addVersionDataRules" :model="addVersionData">
+              <el-form-item label="版本号" prop="version">
+                <el-input v-model="addVersionData.version" placeholder="请填写" style="margin-left:7px;width:70%;" />
+              </el-form-item>
+            </el-form>
+          </div>
+          <div style="margin-top:10%;margin-left:58%">
+            <el-button type="info" plain size="mini" @click="dialogCraeteVisible=false">取消</el-button>
+            <el-button type="primary" size="mini" @click="addVersion(addVersionData)">确定</el-button>
+          </div>
+          <div style="margin-top:6%" />
+        </el-dialog>
+
+        <el-dialog :title="dialogStatus" width="48%" :visible.sync="dialogEventVisible" append-to-body>
+          <div style="margin-left:30px">
+            <el-form ref="addEventForms" :rules="addEventDataRules" :model="addEventData">
+              <el-form-item label="事件名称" prop="name">
+                <el-input v-model="addEventData.name" placeholder="请输入事件名称" style="margin-left:7px;width:70%;" />
+              </el-form-item>
+              <el-form-item label="时间" prop="name">
+                <el-date-picker
+                  v-model="addEventData.time"
+                  clearable
+                  type="datetimerange"
+                  style="width:70%;margin-left:7%"
+                  range-separator="-"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期"
+                />
+              </el-form-item>
+            </el-form>
+          </div>
+          <div style="margin-top:10%;margin-left:66%">
+            <el-button type="info" plain size="mini" @click="dialogEventVisible=false">取消</el-button>
+            <el-button type="primary" size="mini" @click="addEvents(addEventData)">确定</el-button>
+          </div>
+          <div style="margin-top:6%" />
+        </el-dialog>
+
+        <el-dialog :visible.sync="dialogDeleteVerVisible" width="35%" style="min-width: 400px;" append-to-body>
+          <div align="center" style="margin-top:2%">
+            <b>是否删除当前版本?</b>
+          </div>
+          <div style="margin-top:15%;margin-left:50%">
+
+            <el-button type="info" plain size="mini" @click="dialogDeleteVerVisible=false">取消</el-button>
+            <el-button type="primary" size="mini" @click="deleteBizType()">确定</el-button>
+          </div>
+          <div style="margin-top:4%" />
+        </el-dialog>
+        <el-dialog :visible.sync="dialogDeleteEveVisible" width="30%" append-to-body>
+          <div align="center" style="margin-top:2%">
+            <b>是否删除当前事件?</b>
+          </div>
+          <div style="margin-top:15%;margin-left:50%">
+            <el-button type="info" plain size="mini" @click="dialogDeleteEveVisible=false">取消</el-button>
+            <el-button type="primary" size="mini" @click="deleteEventTpye()">确定</el-button>
+          </div>
+          <div style="margin-top:4%" />
+        </el-dialog>
+
+        <div style="display:flex;margin-top:3%">
+          <div style="margin-left:5%">
+            <template>
+              <div slot="footer" class="dialog-footer">
+                <el-button type="primary" style="margin-left:76%" @click="handleVersionadd()">添加版本</el-button>
+              </div>
+              <el-table :data="tableData" fit highlight-current-row style="width: 100%;margin-top:3%" border :header-cell-style="{background:'#F0F2F4',color:'#606266'}" @row-click="cellBack">
+                <el-table-column prop="version" label="版本号" width="220%" align="center"><template slot-scope="scope"><span>{{ scope.row.version }}</span></template></el-table-column>
+                <el-table-column
+                  label="操作"
+                  width="200%"
+                  align="center"
+                >
+                  <template slot-scope="{row}">
+                    <el-button type="info" plain size="mini" @click="handelDeleteVer(row)">删除</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+              <el-pagination
+                background
+                :page-size="pageSize"
+                layout="prev, pager, next"
+                :total="total"
+                @current-change="handleCurrentChange"
+              />
+            </template>
+          </div>
+          <div style="margin-top:15%;margin-left:8%">   <el-button type="primary" icon="el-icon-arrow-right" circle /></div>
+          <div style="margin-left:7%">
+            <template>
+              <div slot="footer" class="dialog-footer">
+                <div style="display:flex">
+                  <div style="font-size:17px;margin-top:4%">
+                    版本 : {{ versionNum === '' ? "-" :versionNum }}
+                  </div>
+                  <div>
+                    <el-button :disabled="!versionNum" type="primary" style="margin-left:220%" @click="handleAddEvent()">添加事件</el-button>
+                  </div>
+                </div>
+              </div>
+              <el-table :data="tableData1" fit highlight-current-row style="width: 100%;margin-top:3%" border :header-cell-style="{background:'#F0F2F4',color:'#606266'}">
+                <el-table-column
+                  prop="name"
+                  label="事件"
+                  width="100%"
+                  align="center"
+                />
+                <el-table-column
+                  prop="time"
+                  label="时间"
+                  width="180%"
+                  align="center"
+                >
+                  <!-- <template slot-scope="scope"><span>{{ scope.row.time }}</span></template> -->
+                </el-table-column>
+                <el-table-column
+                  label="操作"
+                  width="120%"
+                  align="center"
+                >
+                  <template slot-scope="{row}">
+                    <el-button type="info" plain size="mini" @click="handelDeleteEvent(row)">删除</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+
+              <div style="margin-top:20%;margin-left:50%" />
+
+            </template>
+          </div>
+        </div>
+        <el-row style="margin-top:1%;margin-left:90%">
+          <el-button @click="getVersionList(),dialogFormVisible=false">关闭</el-button>
+          <!-- <el-button type="primary">确定</el-button> -->
+        </el-row>
+      </el-dialog>
+    </el-container>
+  </div>
+</template>
+
+<script>
+import { getEvent, showAppClientEnum, listByVersionType, createVersion, listByType, deleteVersion, createEvent, deleteEvent } from '@/api/versionsCalendar'
+import dayjs from 'dayjs'
+export default {
+  components: {
+    'full-calendar': require('vue-fullcalendar')
+  },
+
+  data() {
+    var checkVersion = (rule, value, callback) => {
+      if (!value) {
+        return callback(new Error('请输入版本号'))
+      }
+      if (this.pauseVersionCallBack === 15000) {
+        this.pauseVersionCallBack = ''
+        return callback(new Error('版本号已存在'))
+      } else {
+        callback()
+      }
+    }
+    return {
+      pauseVersionCallBack: '',
+      userInformation: localStorage.getItem('username'),
+      userName: localStorage.getItem('realname'),
+      isCommand: '',
+      options: [],
+      value1: [],
+      list: [],
+      form: {},
+      form_all: {
+        all_bizId: '客户端'
+      },
+      loading: false,
+      dialogCraeteVisible: false,
+      dialogEventVisible: false,
+      dialogFormVisible: false,
+      dialogDeleteVerVisible: false,
+      dialogDeleteEveVisible: false,
+      formLabelWidth: '100px',
+
+      eventData: [],
+      dialogStatus: '',
+      versionNum: '',
+      versionId: '',
+      vid: '',
+      events: [],
+      events1: [],
+      tableData: [],
+      tableData1: [],
+      addData: {},
+      addEveData: {},
+      clientType: '',
+      deleteVer: {},
+      red: 'red',
+      items: [
+        { type: '' },
+        { type: 'success' },
+        { type: 'info' },
+        { type: 'danger' },
+        { type: 'warning' }
+      ],
+      value: '',
+      defaultTypeOpt: '',
+      user: {},
+      deleteEve: {},
+      typeOpt: [],
+      pageSize: 5,
+      curIndex: 1,
+      total: 0,
+      orginName: '代驾乘客端',
+      orginType: 1,
+      addVersionData: {
+        version: ''
+      },
+      addEventData: {
+        name: ''
+      },
+      addVersionDataRules: {
+        version: [{ validator: checkVersion, trigger: 'change' }]
+      },
+      addEventDataRules: {
+        name: [{ required: true, message: '请输入事件名称', trigger: 'change' }],
+        time: [{ required: true, message: '请选择开始结束时间', trigger: 'change' }]
+      },
+      all_opt: [{ value: 1, label: '客户端' }, { value: 2, label: '服务端' }, { value: 3, label: '小程序' }]
+    }
+  },
+  created() {
+    this.getVersionType()
+    this.getVersionList()
+  },
+  methods: {
+    handleCommand(command) {
+      this.isCommand = command.value
+      this.clientType = command.flag.msg
+      this.getVersionList()
+    },
+    random(index) {
+      const number = Math.random() * 10
+      const a = Math.floor(number)
+      return this.items[a % 5].type
+    },
+    remoteMethod(query) {
+      if (query !== '') {
+        this.loading = true
+        setTimeout(() => {
+          this.loading = false
+          this.options = this.list.filter(item => {
+            return item.label.toLowerCase()
+              .indexOf(query.toLowerCase()) > -1
+          })
+        }, 200)
+      } else {
+        this.options = []
+      }
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if (rowIndex === 1) {
+        return 'warning-row'
+      } else if (rowIndex === 3) {
+        return 'success-row'
+      }
+      return ''
+    },
+    link_project() {
+      window.open('http://localhost:9528/#/Platform/projectManage/projectViewDetails', '_blank')
+    },
+    handleSizeChange(size) { //  分页
+      this.pageSize = size
+      this.getVersionBytpye(this.isCommand === '' ? 1 : this.isCommand)
+    },
+    handleCurrentChange(curIndex) { //  分页
+      this.curIndex = curIndex
+      this.getVersionBytpye(this.isCommand === '' ? 1 : this.isCommand)
+    },
+    formatDate(e) {
+      return dayjs(e).format('YYYY-MM-DD')
+    },
+    formatDate1(e) {
+      return dayjs(e).format('YYYY/MM/DD')
+    },
+    // 进首页
+    getVersionList(ele) {
+      listByVersionType(this.isCommand === '' ? 1 : this.isCommand).then(res => {
+        this.eventData = res.data
+        this.versionlist()
+      })
+    },
+    getVersionType() {
+      showAppClientEnum().then(res => {
+        this.typeOpt = res.data.appClient
+        this.defaultTypeOpt = this.typeOpt[0].msg
+      })
+    },
+    handelDeleteBiz(ele) {
+
+    },
+    // 点击版本后回调
+    cellBack(row, column, event) {
+      this.getEventList(row.id)
+      this.versionNum = row.version
+      this.vid = row.id
+    },
+    // 遍历首页列表
+    versionlist() {
+      this.events = []
+      for (var j = 0; j < this.eventData.length; j++) {
+        var event = {}
+        event.title = this.eventData[j].version + this.eventData[j].name
+        event.start = this.formatDate(this.eventData[j].startTime)
+        event.end = this.formatDate(this.eventData[j].endTime)
+        event.cssClass = this.red
+        this.events.push(event)
+      }
+      console.log(this.events)
+    },
+
+    adds() {
+      this.versionNum = ''
+      this.tableData1 = []
+      this.dialogFormVisible = true
+      this.getVersionBytpye(this.isCommand === '' ? this.typeOpt[0].code : this.isCommand)
+      this.versionlist()
+      // this.getAllVersionList()
+    },
+    // 获取所有版本
+    getVersionBytpye(ele) {
+      var queryVersionRequest = {}
+      // queryVersionRequest.ids = [ele]
+      queryVersionRequest.pageSize = this.pageSize
+      queryVersionRequest.curIndex = this.curIndex
+      queryVersionRequest.type = ele
+      listByType(queryVersionRequest).then(response => {
+        this.tableData = response.data.list
+        this.total = response.data.total
+        this.tableData.version = response.data.version
+      })
+    },
+    // 获取版本的所有事件
+    getEventList(ele) {
+      this.tableData1 = []
+      getEvent(ele).then(response => {
+        for (var j = 0; j < this.eventData.length; j++) {
+          var data1 = {}
+          data1.name = response.data[j].name
+          data1.id = response.data[j].id
+          if (response.data[j].startTime === response.data[j].endTime) {
+            data1.time = this.formatDate1(response.data[j].startTime)
+          }
+          data1.time = this.formatDate1(response.data[j].startTime) + ' - ' + this.formatDate1(response.data[j].endTime)
+          this.tableData1.push(data1)
+        }
+      })
+    },
+    // 新增
+    handleVersionadd() {
+      this.dialogStatus = '新建版本'
+      this.dialogCraeteVisible = true
+      this.$refs.addVersionForms.resetFields()
+      this.$set(this.addVersionData, 'version', '')
+      this.addBizData = {}
+    },
+
+    // 添加版本
+    addVersion(ele) {
+      this.$refs['addVersionForms'].validate((valid) => {
+        if (valid) {
+          this.addData = ele
+          this.addData.version = ele.version
+          if (this.clientType !== '' && this.isCommand !== '') {
+            this.addData.appName = this.clientType
+            this.addData.type = this.isCommand
+          } else {
+            this.addData.appName = this.orginName
+            this.addData.type = this.orginType
+          }
+          this.user = { id: '', ename: this.userInformation, name: this.userName }
+          this.VersionCreateRequest = { versionInfoRequest: this.addData, user: this.user }
+          createVersion(this.VersionCreateRequest).then(response => {
+            if (response.code === 200) {
+              this.successFun()
+              this.dialogCraeteVisible = false
+              this.getVersionBytpye(this.isCommand === '' ? 1 : this.isCommand)
+            } else {
+              this.pauseVersionCallBack = response.code
+              // this.errorFun(response.msg)
+              this.$refs['addVersionForms'].validate()
+            }
+          })
+        }
+      })
+    },
+    // 删除版本
+    handelDeleteVer(ele) {
+      this.deleteVer = ele
+      this.dialogDeleteVerVisible = true
+    },
+    deleteBizType() {
+      this.user = { id: '', ename: this.userInformation, name: this.userName }
+      deleteVersion(this.deleteVer.id, this.user).then(response => {
+        if (response.code === 200) {
+          this.successFun()
+          this.versionNum = ''
+          this.dialogDeleteVerVisible = false
+          this.getVersionBytpye(this.isCommand === '' ? 1 : this.isCommand)
+        } else {
+          this.errorFun(response.msg)
+        }
+      })
+    },
+    // 新增 事件
+    handleAddEvent() {
+      // this.$refs.addEventForms.resetFields()
+      this.dialogStatus = '新建版本事件'
+      this.dialogEventVisible = true
+    },
+
+    // 新增版本事件接口
+    addEvents(ele) {
+      this.$refs['addEventForms'].validate((valid) => {
+        if (valid) {
+          this.addEveData.name = ele.name
+          this.addEveData.version = this.versionNum
+          this.addEveData.versionId = this.vid
+          this.addEveData.startTime = ele.time === null || ele.time.length === 0 ? '' : ele.time[0]
+          this.addEveData.endTime = ele.time === null || ele.time.length === 0 ? '' : ele.time[1]
+          this.addEveData.creator = this.userInformation
+          this.user = { id: '', ename: this.userInformation, name: this.userName }
+          this.VersionScheduleRequest = { versionScheduleDO: this.addEveData, user: this.user }
+          createEvent(this.VersionScheduleRequest).then(response => {
+            if (response.code === 200) {
+              this.successFun()
+              this.getEventList(this.vid)
+              this.dialogEventVisible = false
+              // this.getVersionBytpye(this.isCommand === '' ? 1 : this.isCommand)
+            } else {
+              this.errorFun(response.msg)
+            }
+          })
+        }
+      })
+    },
+    // 删除事件
+    handelDeleteEvent(ele) {
+      this.deleteEve = ele
+      this.dialogDeleteVerVisible = true
+    },
+    deleteEventTpye() {
+      this.user = { id: '', ename: this.userInformation, name: this.userName }
+      deleteEvent(this.deleteEve.id, this.user).then(response => {
+        if (response.code === 200) {
+          this.successFun()
+          this.getEventList(this.vid)
+          this.dialogDeleteEveVisible = false
+          this.deleteEve = {}
+
+          // this.getVersionBytpye(this.isCommand === '' ? 1 : this.isCommand)
+        } else {
+          this.errorFun(response.msg)
+        }
+      })
+    },
+
+    successFun() {
+      this.$notify({ title: 'Success', message: 'Created Successfully', type: 'success', duration: 5000 })
+    },
+    errorFun(msg) {
+      this.$notify({ title: 'Failed', message: msg, type: 'error', duration: 5000 })
+    }
+
+  }
+}
+</script>
+
+<style>
+  .bgColorSz {
+    width: 100%;
+    height: 96vh;
+    background: #F2F3F6;
+    font-size: 0.9rem;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
+
+  .el-dialog { min-width: 400px }
+
+  .footer { text-align: right; margin: 1%; background-color: #FFFFFF; border-radius: 8px; }
+
+  .bgborder { background-color: #FFFFFF; border-radius: 8px;}
+
+  .bgborder .el-input__inner { border: none; padding: 0px 50px 0px 0px;}
+
+  .bgborder .el-select .el-input .el-select__caret { color: #333333 !important; }
+
+  .bgborder .el-table .el-table__body tr:hover td { color: #409EFF; background: #EEF0F5; font-size: 13px !important;} /*hover时字体, 背景颜色*/
+
+  .bgborder .el-input__icon { width: 77px !important; }
+
+  .bgborder .el-link { font-size: 13px !important; }
+
+  .el-table .warning-row { background: oldlace; }
+  .is-selected {color: #1989FA;}
+
+  #basicName::-webkit-input-placeholder {
+    color: #333333;
+  }
+  .drop_down {
+     font-size: 13px;
+     color: #333333;
+     /* white-space: nowrap; */
+  }
+</style>