qinzhipeng_v 5 yıl önce
ebeveyn
işleme
1effeff598

+ 38 - 0
src/api/bizPage.js

@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+import { mockUrl } from '@/apiConfig/api'
+
+// 新增业务线
+export function addBiz(data) {
+  return request({
+    url: mockUrl + `/setting/addBiz`,
+    method: 'post',
+    data
+  })
+}
+
+// 修改
+export function updateBiz(data) {
+  return request({
+    url: mockUrl + `/setting/updateBiz`,
+    method: 'post',
+    data
+  })
+}
+
+// 删除
+export function deleteBiz(data) {
+  return request({
+    url: mockUrl + `/setting/deleteBiz`,
+    method: 'post',
+    data
+  })
+}
+
+// 查看列表
+export function queryBizTypeList(data) {
+  return request({
+    url: mockUrl + `/setting/queryBizTypeList`,
+    method: 'post',
+    data
+  })
+}

+ 9 - 0
src/api/caseProject.js

@@ -59,6 +59,15 @@ export function queryCasesData(data) {
   })
 }
 
+// 查询
+export function queryCase(data) {
+  return request({
+    url: mockUrl + '/case/queryCase',
+    method: 'post',
+    data
+  })
+}
+
 // 编辑用例
 export function updateCaseData(data) {
   return request({

+ 17 - 0
src/api/httprule.js

@@ -43,3 +43,20 @@ export function changeStatus(data) {
     data
   })
 }
+// 查询支持的操作符
+export function getHttpOp() {
+  return request({
+    url: mockUrl + '/api/mock/ruleEngine/getHttpOp?protocol=http',
+    method: 'get'
+
+  })
+}
+
+// 查询支持的规则表达式
+export function getExpress() {
+  return request({
+    url: mockUrl + '/api/mock/ruleEngine/getExpress?protocol=http',
+    method: 'get'
+  })
+}
+

+ 56 - 0
src/api/modulePage.js

@@ -0,0 +1,56 @@
+import request from '@/utils/request'
+import { mockUrl } from '@/apiConfig/api'
+
+// 新增业务线
+export function addBizModule(data) {
+  return request({
+    url: mockUrl + `/setting/addBizModule`,
+    method: 'post',
+    data
+  })
+}
+
+// 修改
+export function updateBizModule(data) {
+  return request({
+    url: mockUrl + `/setting/updateBizModule`,
+    method: 'post',
+    data
+  })
+}
+
+// 删除
+export function deleteBizModule(data) {
+  return request({
+    url: mockUrl + `/setting/deleteBizModule`,
+    method: 'post',
+    data
+  })
+}
+
+// 查看列表
+export function queryBizModuleList(data) {
+  return request({
+    url: mockUrl + `/setting/queryBizModuleList`,
+    method: 'post',
+    data
+  })
+}
+
+// 获取biz列表
+export function queryBizTypeList(data) {
+  return request({
+    url: mockUrl + `/setting/queryBizTypeList`,
+    method: 'post',
+    data
+  })
+}
+
+// 平台列表
+export function queryPlatFormTypeList(data) {
+  return request({
+    url: mockUrl + `/setting/queryPlatFormTypeList`,
+    method: 'post',
+    data
+  })
+}

+ 47 - 0
src/api/platformPage.js

@@ -0,0 +1,47 @@
+import request from '@/utils/request'
+import { mockUrl } from '@/apiConfig/api'
+
+// 新增业务线
+export function addPlatFormType(data) {
+  return request({
+    url: mockUrl + `/setting/addPlatFormType`,
+    method: 'post',
+    data
+  })
+}
+
+// 修改
+export function updatePlatFormType(data) {
+  return request({
+    url: mockUrl + `/setting/updatePlatFormType`,
+    method: 'post',
+    data
+  })
+}
+
+// 删除
+export function deletePlatFormType(data) {
+  return request({
+    url: mockUrl + `/setting/deletePlatFormType`,
+    method: 'post',
+    data
+  })
+}
+
+// 查看列表
+export function queryPlatFormTypeList(data) {
+  return request({
+    url: mockUrl + `/setting/queryPlatFormTypeList`,
+    method: 'post',
+    data
+  })
+}
+
+// 获取biz列表
+export function queryBizTypeList(data) {
+  return request({
+    url: mockUrl + `/setting/queryBizTypeList`,
+    method: 'post',
+    data
+  })
+}

+ 53 - 0
src/api/projectTypePage.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+import { mockUrl } from '@/apiConfig/api'
+
+// 新增
+export function createModule(data) {
+  return request({
+    url: mockUrl + `/setting/createModule`,
+    method: 'post',
+    data
+  })
+}
+
+// 修改
+export function updateModule(data) {
+  return request({
+    url: mockUrl + `/setting/updateModule`,
+    method: 'post',
+    data
+  })
+}
+
+// 删除
+export function deleteModules(data) {
+  return request({
+    url: mockUrl + `/setting/deleteModules`,
+    method: 'post',
+    data
+  })
+}
+
+// 查看列表
+export function queryModuleInfoList(data) {
+  return request({
+    url: mockUrl + `/setting/queryModuleInfoList`,
+    method: 'post',
+    data
+  })
+}
+
+// 查看列表
+export function queryModuleInfoListByModuleName(data) {
+  return request({
+    url: mockUrl + `/setting/queryModuleInfoListByModuleName`,
+    method: 'post',
+    data
+  })
+}
+export function getTypeMap() {
+  return request({
+    url: mockUrl + `/setting/getTypeMap`,
+    method: 'get'
+  })
+}

+ 3 - 2
src/apiConfig/mock.js

@@ -1,3 +1,4 @@
 /*eslint-disable*/   //规避eslint的检查,如没有eslint可不写
-export const mockUrl = 'http://10.179.88.110:8089' // 线下
-// export const mockUrl = 'http://mock.Intra.xiaojukeji.com' // 线上
+export const mockUrl = 'http://10.179.88.110:8089' // stable
+// export const mockUrl = 'http://mock.Intra.xiaojukeji.com' // 线上
+// export const mockUrl = 'http://10.179.101.226:8089' // test

BIN
src/assets/home_images/功能介绍_icon_上线质检@3x.png


BIN
src/assets/home_images/功能介绍_icon_质量度量@3x.png


+ 94 - 47
src/router/index.js

@@ -142,11 +142,27 @@ export const constantRoutes = [
         ]
       },
       {
-        path: 'useCasePage',
-        name: 'useCasePage',
+        path: '/Platform/useCasePage',
+        name: '用例管理',
         hidden: true,
         component: () => import('@/views/Platform/useCasePage'),
-        meta: { title: '用例管理' }
+        meta: { title: '用例管理' },
+        children: [
+          {
+            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: '/Platform/presentation',
@@ -235,13 +251,6 @@ export const constantRoutes = [
             component: () => import('@/views/Platform/presentation/PresentReport'),
             meta: { title: '新增客户端提测报告' }
           },
-          {
-            path: 'defectManageQuery',
-            name: '缺陷查看',
-            // hidden: true,
-            component: () => import('@/views/Platform/presentation/defectManageQuery'),
-            meta: { title: '缺陷查看' }
-          },
           {
             path: 'projectQuery',
             name: '项目查看编辑',
@@ -284,6 +293,56 @@ export const constantRoutes = [
         hidden: true,
         component: () => import('@/views/Platform/bugManage/bugUpdate'),
         meta: { title: '更新Bug' }
+      },
+      {
+        path: '/Platform/setUp',
+        // component: Layout,
+        name: '设置',
+        // meta: { title: '设置' },
+        component: () => import('@/views/Platform/setUp/testa'),
+        meta: { title: '设置' },
+        children: [{
+          path: 'systemSetup',
+          name: '系统设置',
+          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: 'teamPage',
+          name: '团队设置',
+          component: () => import('@/views/Platform/setUp/teamPage'),
+          meta: { title: '团队设置' }
+        }
+        ]
       }
     ]
   },
@@ -404,6 +463,30 @@ export const constantRoutes = [
       }
     ]
   },
+
+  {
+    path: '/virtualDevices',
+    component: Layout,
+    redirect: '/virtualDevices/HTvehicle',
+    name: '虚拟硬件',
+    meta: { title: '虚拟硬件', icon: 'module' },
+    children: [
+      {
+        path: 'HTvehicle',
+        name: '单车',
+        component: () => import('@/views/virtualDevices/HTvehicle'),
+        meta: { title: '单车' }
+      },
+      {
+        path: 'HTvehicl1e',
+        name: '电单车'
+        // hidden: true,
+        // component: () => import('@/views/virtualDevices/HTvehicle'),
+        // meta: { title: '电单车' }
+      }
+    ]
+  },
+
   {
     path: '/online-quality',
     component: Layout,
@@ -440,7 +523,7 @@ export const constantRoutes = [
     ]
   },
 
-  // { path: '*', redirect: '/404', hidden: true },
+  { path: '*', redirect: '/404', hidden: true },
 
   {
     path: '/quality',
@@ -463,46 +546,10 @@ export const constantRoutes = [
             hidden: true,
             component: () => import('@/views/quality/qualityProcess.vue'),
             meta: { title: '上线过程' }
-          },
-          {
-            path: 'qualityDefectProcess',
-            name: '缺陷过程',
-            hidden: true,
-            component: () => import('@/views/quality/qualityDefectProcess.vue'),
-            meta: { title: '缺陷过程' }
           }
         ]
       }
     ]
-  },
-  {
-    path: '/virtualDevices',
-    component: Layout,
-    name: '虚拟设备',
-    meta: { title: '虚拟设备', icon: 'module' },
-    children: [{
-      path: 'HTvehicle',
-      name: '单车',
-      component: () => import('@/views/virtualDevices/HTvehicle.vue'),
-      meta: { title: '单车' }
-    },
-
-    {
-      path: 'HMvehicle',
-      name: '电单车',
-      component: () => import('@/views/virtualDevices/HMvehicle.vue'),
-      meta: { title: '电单车' },
-      children: [
-        {
-          path: 'HTvehicleCreate',
-          name: '新增电单车',
-          hidden: true,
-          component: () => import('@/views/virtualDevices/HMvehicleCreate.vue'),
-          meta: { title: '新增电单车' }
-        }
-      ]
-    }
-    ]
   }
 ]
 

+ 28 - 14
src/views/Platform/bugManage/bugCreate.vue

@@ -144,20 +144,23 @@
         <el-input v-model="form.remark" type="textarea" autocomplete="off" rows="5" style="margin: 20px 0;" />
         <div>
           <el-upload
+            ref="upload"
             class="upload-demo"
             multiple
-            capture
-            accept="image/jpeg, image/png, image/gif, audio/mp4, video/mp4, audio/mpeg, application/vnd.ms-excel"
-            :on-change="handleChange"
             :file-list="fileList"
             action="http://star.xiaojukeji.com/upload/img.node"
+            :on-success="handleChange"
+            :auto-upload="false"
           >
             <!-- action="http://page-daily.kuaidadi.com/upload/img.node" 线下 -->
             <!-- action="http://star.xiaojukeji.com/upload/img.node" 线上 -->
             <!-- action="https://jsonplaceholder.typicode.com/posts/" 原始地址-->
-            <el-button size="small">点击上传</el-button>
+            <!-- <el-button size="small">点击上传</el-button> -->
+            <el-button slot="trigger" size="small" type="primary" @click="createdDis">选取文件</el-button>
+            <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
           </el-upload>
         </div>
+        <!-- accept="image/jpeg, image/png, image/gif, audio/mp4, video/mp4, application/pdf, audio/mpeg, text/plain, application/vnd.ms-excel, application/vnd.ms-works, application/msword" -->
         <el-form-item class="submit">
           <el-button size="mini" type="primary" @click="createFormData(form)">提 交</el-button>
           <el-button class="move-button" size="mini" @click="$router.go(-1)">取 消</el-button>
@@ -230,10 +233,8 @@ export default {
       serviceDataRules: {
         bugName: [{ required: true, message: '标题不能为空', trigger: 'change' }],
         bizId: [{ required: true, message: '业务线不能为空', trigger: 'change' }],
-        // bugName: [{ required: true, message: '主题不能为空', trigger: 'change' }],
         taskId: [{ required: true, message: '任务不能为空', trigger: 'change' }],
         moduleId: [{ required: true, message: '工程模块不能为空', trigger: 'change' }],
-        // projectId: [{ required: true, message: '项目ID不能为空', trigger: 'change' }],
         bugType: [{ required: true, message: 'bug类型不能为空', trigger: 'change' }],
         reopenTimes: [{ required: true, message: 'reopen不能为空', trigger: 'change' }],
         discoveryMethod: [{ required: true, message: '发现方式不能为空', trigger: 'change' }],
@@ -252,8 +253,12 @@ export default {
       userData: '',
       businessTypeShow: false,
       moduleTypeShow: false,
+      accessory: '',
       userInformation: localStorage.getItem('username'),
-      userNames: localStorage.getItem('realname')
+      userNames: localStorage.getItem('realname'),
+      fileDbList: [],
+      dis: false
+      // fileDbList: [{ name: '智慧平台.png', url: 'http://pt-starimg.didistatic.com/static/starimg/node/qo4sKioLko1571277086594.png' }, { name: '智慧平台.png', url: 'http://pt-starimg.didistatic.com/static/starimg/node/qo4sKioLko1571277086594.png' }]
     }
   },
   created() {
@@ -261,16 +266,25 @@ export default {
     this.forkDown()
   },
   methods: {
-    handleChange(file, fileList) {
+    createdDis() {
+      this.dis = true
+    },
+    submitUpload() {
+      this.$refs.upload.submit()
+      this.dis = true
+      this.$message({ showClose: true, message: '文件正在上传······', type: 'success' })
+    },
+    handleChange(response, file, fileList) {
+      // setTimeout(function() {
       this.fileDbList = []
       this.fileList = fileList.slice(-3)
       for (var a of this.fileList) {
-        this.fileDbList.push({ name: a.name, url: 'http' + a.response.url })
-      }
-      var arr = []
-      for (var el of this.fileDbList) {
-        arr.push({ 'name': el.name, 'url': 'http' + el.response.url })
+        this.fileDbList.push({ 'name': a.name, 'url': 'http:' + a.response.url })
       }
+      this.accessory = JSON.stringify(this.fileDbList)
+      this.dis = false
+      this.$message({ showClose: true, message: '文件上传成功', type: 'success' })
+      // }, 500)
     },
     async bugListSelect() {
       await bugGetEnum().then(res => {
@@ -320,7 +334,6 @@ export default {
     },
     // 业务线取子数据
     clickChangePlatform(e) {
-      console.log(this.form.taskId)
       this.platformTypeStr = this.bizOptions.filter(value => value.code === e)[0].child
       this.businessTypeStr = []
       this.moduleStr = []
@@ -371,6 +384,7 @@ export default {
           if (this.$route.query.id && typeof this.form.bizId === 'string') {
             form.bizId = this.bizOptions.filter(value => value.name === form.bizId)[0].code
           }
+          form.accessory = this.accessory
           form.reopenTimes = parseInt(form.reopenTimes)
           form.projectId = this.taskIdStr.filter(value => value.id === this.form.taskId)[0].projectId
           if (form.assigner) {

+ 35 - 0
src/views/Platform/bugManage/bugQuery.vue

@@ -70,6 +70,21 @@
           app版本号 :&nbsp;&nbsp;&nbsp;{{ form.remark }}
         </div>
       </div>
+      <div class="block-end cla">
+        <div class="display-messege">
+          附件 :
+          <el-table :data="uptataKey" fit style="width: 100%;">
+            <el-table-column label="" min-width="150">
+              <template slot-scope="scope">{{ scope.row.name }}</template>
+            </el-table-column>
+            <el-table-column label="" min-width="300">
+              <template slot-scope="scope">
+                <a :href="scope.row.url" style="color:blue;">{{ scope.row.url }}</a>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
     </el-form>
     <el-dialog :visible.sync="dialogInDevelopment" width="40%" @close="cancelInput()">
       <el-form ref="refeshDevelopmentDialog" :model="pauseData" :rules="serviceDataRules">
@@ -144,6 +159,7 @@ export default {
       form: {
         id: ''
       },
+      uptataKey: [],
       formUpdateValue: {},
       pauseData: {
         reasonPause: '',
@@ -185,8 +201,16 @@ export default {
   },
   created() {
     this._initBegin()
+    // this.getLocalStor()
   },
   methods: {
+    // getLocalStor() {
+    //   var str = localStorage.getItem('updata')
+    //   var obj = JSON.parse(str.split('{}')[0])
+    //   for (var a of obj) {
+    //     this.uptataKey.push(a)
+    //   }
+    // },
     // 先后获取
     async _initBegin() {
       await bugGetEnum().then(res => {
@@ -199,6 +223,11 @@ export default {
       })
       bugGet(this.$route.query.id).then(res => {
         this.form = res.data
+        var str = res.data.accessory
+        var obj = JSON.parse(str.split('{}')[0])
+        for (var a of obj) {
+          this.uptataKey.push(a)
+        }
         for (const a of this.bizIdEnumList) {
           if (this.form.bizId === a.code) {
             this.bizId = this.form.bizName
@@ -381,6 +410,12 @@ export default {
 }
 </script>
 
+<style>
+ .cla .el-table td {
+    padding:0px;
+  }
+</style>
+
 <style lang="stylus" scoped>
   .set-background
     background-color #F2F3F6

+ 88 - 26
src/views/Platform/bugManage/bugUpdate.vue

@@ -144,24 +144,42 @@
         <el-input v-model="form.remark" type="textarea" autocomplete="off" rows="5" style="margin: 20px 0;" />
         <div>
           <el-upload
+            ref="upload"
             class="upload-demo"
             multiple
-            capture
             accept="image/jpeg, image/png, image/gif, audio/mp4, video/mp4, audio/mpeg, application/vnd.ms-excel"
-            :on-change="handleChange"
             :file-list="fileList"
             action="http://star.xiaojukeji.com/upload/img.node"
+            :on-success="handleChange"
+            :auto-upload="false"
           >
             <!-- action="http://page-daily.kuaidadi.com/upload/img.node" 线下 -->
             <!-- action="http://star.xiaojukeji.com/upload/img.node" 线上 -->
             <!-- action="https://jsonplaceholder.typicode.com/posts/" 原始地址-->
-            <el-button size="small">点击上传</el-button>
+            <!-- <el-button size="small">点击上传</el-button> -->
+            <el-button slot="trigger" size="small" type="primary" @click="createdDis">选取文件</el-button>
+            <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
           </el-upload>
         </div>
-        <el-form-item class="submit">
-          <el-button size="mini" type="primary" @click="createFormData(form)">提 交</el-button>
-          <el-button class="move-button" size="mini" @click="$router.go(-1)">取 消</el-button>
-        </el-form-item>
+        <div class="cla">
+          <el-table :data="uptataKey" fit style="width: 100%;">
+            <el-table-column label="" min-width="150">
+              <template slot-scope="scope">{{ scope.row.name }}</template>
+            </el-table-column>
+            <el-table-column label="" min-width="300">
+              <template slot-scope="scope"><a :href="scope.row.url" style="color:blue;">{{ scope.row.url }}</a></template>
+            </el-table-column>
+            <el-table-column fixed="right" label="" width="50" align="center">
+              <!-- <template slot-scope="scope"> -->
+              <el-button class="deleteSty" @click="createFormData(form, 2)"> x </el-button>
+              <!-- </template> -->
+            </el-table-column>
+          </el-table>
+          <el-form-item class="submit">
+            <el-button :disabled="dis" size="mini" type="primary" @click="createFormData(form, 1)">提 交</el-button>
+            <el-button class="move-button" size="mini" @click="$router.go(-1)">取 消</el-button>
+          </el-form-item>
+        </div>
       </div>
       <!-- <div style="flex:1">
         <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth"><el-input v-model="form.reasonsAndSolutionForTheProblem" type="textarea" placeholder="问题原因和修复方法" rows="4" style="width:77.2%;" /></el-form-item>
@@ -219,6 +237,8 @@ export default {
       moduleStr: [],
       stageStr: [],
       fileList: [],
+      uptataKey: [],
+      // uptataKey: [{ name: '智慧平台.png', url: 'http://pt-starimg.didistatic.com/static/starimg/node/qo4sKioLko1571277086594.png' }, { name: '智慧平台.png', url: 'http://pt-starimg.didistatic.com/static/starimg/node/qo4sKioLko1571277086594.png' }],
       serviceTypeEnumList: [],
       clientTypeEnumList: [],
       bugLevelStr: [],
@@ -248,7 +268,9 @@ export default {
       businessTypeShow: false,
       moduleTypeShow: false,
       userInformation: localStorage.getItem('username'),
-      userNames: localStorage.getItem('realname')
+      userNames: localStorage.getItem('realname'),
+      accessory: '',
+      dis: false
     }
   },
   created() {
@@ -256,8 +278,23 @@ export default {
     this.taskIdGet()
   },
   methods: {
-    handleChange(file, fileList) {
+    createdDis() {
+      this.dis = true
+    },
+    submitUpload() {
+      this.$refs.upload.submit()
+      this.dis = true
+      this.$message({ showClose: true, message: '文件正在上传······', type: 'success' })
+    },
+    handleChange(response, file, fileList) {
+      this.fileDbList = []
       this.fileList = fileList.slice(-3)
+      for (var a of this.fileList) {
+        this.fileDbList.push({ 'name': a.name, 'url': 'http:' + a.response.url })
+      }
+      this.accessory = JSON.stringify(this.fileDbList)
+      this.dis = false
+      this.$message({ showClose: true, message: '文件上传成功', type: 'success' })
     },
     async _initBegin() {
       await bugGetEnum().then(res => {
@@ -279,6 +316,11 @@ export default {
       })
       bugGet(this.$route.query.id).then(res => {
         this.form = res.data
+        var str = res.data.accessory
+        var obj = JSON.parse(str.split('{}')[0])
+        for (var a of obj) {
+          this.uptataKey.push(a)
+        }
         this.platformTypeStr = this.bizOptions.filter(value => value.code === this.form.bizId)[0].child
         if (this.form.clientType) {
           this.businessTypeShow = true
@@ -349,24 +391,35 @@ export default {
       }))
     },
     // 提交表单并且返回刷新
-    createFormData(form) {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          form.reopenTimes = parseInt(form.reopenTimes)
-          if (form.assigner) {
-            form.assigner = form.assigner.join(',')
-          }
-          if (form.currentHandler) {
-            form.currentHandler = form.currentHandler.join(',')
+    createFormData(form, e) {
+      if (e === 1) {
+        this.$refs.form.validate((valid) => {
+          if (valid) {
+            if (form.assigner) {
+              form.assigner = form.assigner.join(',')
+            }
+            if (form.currentHandler) {
+              form.currentHandler = form.currentHandler.join(',')
+            }
+            form.reopenTimes = parseInt(form.reopenTimes)
+            form.accessory = this.accessory
+            this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+            this.objData = { bugBaseInfo: form, user: this.userData }
+            bugUpdate(this.objData).then(res => {
+              res.code === 200 ? this.successFun() : this.errorFun()
+              this.$router.go(-1)
+            })
           }
-          this.userData = { id: '', ename: this.userInformation, name: this.userNames }
-          this.objData = { bugBaseInfo: form, user: this.userData }
-          bugUpdate(this.objData).then(res => {
-            res.code === 200 ? this.successFun() : this.errorFun()
-            this.$router.go(-1)
-          })
-        }
-      })
+        })
+      } else {
+        form.accessory = this.accessory
+        this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+        this.objData = { bugBaseInfo: form, user: this.userData }
+        bugUpdate(this.objData).then(res => {
+          res.code === 200 ? this.successFun() : this.errorFun()
+          this.$router.go(-1)
+        })
+      }
     },
     successFun() {
       this.$notify({ title: 'Success', message: 'Updated Successfully', type: 'success', duration: 2000 })
@@ -377,6 +430,15 @@ export default {
   }
 }
 </script>
+<style>
+ .cla .el-table td {
+    padding:0px;
+  }
+  .deleteSty {
+    cursor: pointer;
+    border: none;
+  }
+</style>
 
 <style lang="stylus" scoped>
   .set-background

+ 0 - 208
src/views/Platform/presentation/defectManageQuery.vue

@@ -1,208 +0,0 @@
-<template>
-  <div style="margin:2% 9%;">
-    <el-tabs tab-position="top" stretch style="height: auto;">
-      <el-tab-pane label=" 查 看 ">
-        <el-form :model="form" size="mini">
-          <div style="display:flex;">
-            <div style="flex:1">
-              <el-form-item label="主题 : " :label-width="formLabelWidth1">{{ form.bugName }}</el-form-item>
-              <el-form-item label="任务 : " class="styline" :label-width="formLabelWidth1">{{ form.projectName }}</el-form-item>
-              <el-form-item label="级别 : " :label-width="formLabelWidth1">{{ form.priority }}</el-form-item>
-              <el-form-item label="reopen的次数 : " :label-width="formLabelWidth1">{{ form.reopenTimes }}</el-form-item>
-              <el-form-item label="bug状态 : " :label-width="formLabelWidth1">{{ form.status }}</el-form-item>
-              <el-form-item label="bug类型 : " :label-width="formLabelWidth1">{{ form.bugType }}</el-form-item>
-              <el-form-item label="bug描述 : " :label-width="formLabelWidth1">{{ form.bugDescribe }}</el-form-item>
-              <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth">{{ form.reasonsAndSolutionForTheProblem }}</el-form-item>
-              <el-form-item label="问题原因 : " :label-width="formLabelWidth1">{{ form.reason }}</el-form-item>
-              <el-form-item label="平台类型 : " :label-width="formLabelWidth1">{{ form.platformType }}</el-form-item>
-              <el-form-item label="所处阶段 : " :label-width="formLabelWidth1">{{ form.stage }}</el-form-item>
-              <el-form-item label="发现方法 : " :label-width="formLabelWidth1">{{ form.discoveryMethod }}</el-form-item>
-              <el-form-item v-show="repairShow" label="修复结果 : " :label-width="formLabelWidth1">{{ form.repairResult }}</el-form-item>
-              <el-form-item label="os类型 : " :label-width="formLabelWidth1">{{ form.osType }}</el-form-item>
-              <el-form-item label="机型 : " :label-width="formLabelWidth1">{{ form.model }}</el-form-item>
-              <el-form-item label="网络类型 : " :label-width="formLabelWidth1">{{ form.networkType }}</el-form-item>
-              <el-form-item label="SDK版本 : " :label-width="formLabelWidth1">{{ form.sdkVersion }}</el-form-item>
-              <el-form-item label="app版本号 : " :label-width="formLabelWidth1">{{ form.appVersion }}</el-form-item>
-              <el-form-item label="地图类型 : " :label-width="formLabelWidth1">{{ form.mapType }}</el-form-item>
-              <el-form-item label="地图版本号 : " :label-width="formLabelWidth1">{{ form.mapVersion }}</el-form-item>
-              <el-form-item label="附件 : " :label-width="formLabelWidth1">{{ form.accessory }}</el-form-item>
-            </div>
-            <div style="flex:1; margin-left:30px;">
-              <el-form-item label="bug责任人 : " :label-width="formLabelWidth1">{{ form.assigner }}</el-form-item>
-              <el-form-item label="bug创建人 : " :label-width="formLabelWidth1">{{ form.creator }}</el-form-item>
-              <el-form-item label="bug处理人 : " :label-width="formLabelWidth1">{{ form.currentHandler }}</el-form-item>
-              <el-form-item label="开始开发时间 : " :label-width="formLabelWidth1">{{ form.startDevTime }}</el-form-item>
-              <el-form-item label="开始等待测试时间 : " :label-width="formLabelWidth1">{{ form.waitTestTime }}</el-form-item>
-              <el-form-item label="创建时间 : " :label-width="formLabelWidth1">{{ form.gmtCreate }}</el-form-item>
-            </div>
-          </div>
-          <el-form-item label="caseID" :label-width="formLabelWidth">{{ form.caseId }}</el-form-item>
-        </el-form>
-        <div align="center">
-          <el-button type="primary" @click="clickOut">返回bug主页</el-button>
-        </div>
-      </el-tab-pane>
-      <el-tab-pane label=" 编 辑 ">
-        <el-form :model="form">
-          <el-form-item label="任务" :label-width="formLabelWidth" right>
-            <el-select v-model="form.taskId" placeholder="任务" style="width:20%;">
-              <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="主题" prop="bugName" :label-width="formLabelWidth"><el-input v-model="form.bugName" autocomplete="off" style="width:86%;" /></el-form-item>
-          <el-form-item label="bug描述" prop="bugDescribe" :label-width="formLabelWidth"><el-input v-model="form.bugDescribe" type="textarea" placeholder="bug描述" rows="4" style="width:86%;" /></el-form-item>
-          <div style="display:flex;">
-            <div style="flex:1">
-              <el-form-item label="bug类型" prop="bugType" :label-width="formLabelWidth">
-                <el-select v-model="form.bugType" placeholder="bug类型">
-                  <el-option v-for="item in bugTypeStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="级别" prop="priority" :label-width="formLabelWidth">
-                <el-select v-model="form.priority" placeholder="级别">
-                  <el-option v-for="item in bugLevelStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="状态" prop="status" :label-width="formLabelWidth">
-                <el-select v-model="form.status" placeholder="状态">
-                  <el-option v-for="item in bugStatusStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="bug责任人" prop="assigner" :label-width="formLabelWidth"><el-input v-model="form.assigner" autocomplete="off" style="width:58%;" /></el-form-item>
-              <el-form-item label="发现方法" :label-width="formLabelWidth">
-                <el-select v-model="form.discoveryMethod" placeholder="发现方法">
-                  <el-option v-for="item in discoveryMethodStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="os类型" :label-width="formLabelWidth"><el-input v-model="form.osType" autocomplete="off" style="width:58%;" /></el-form-item>
-              <el-form-item label="机型" :label-width="formLabelWidth"><el-input v-model="form.model" autocomplete="off" style="width:58%;" /></el-form-item>
-              <el-form-item label="网络类型" :label-width="formLabelWidth"><el-input v-model="form.networkType" autocomplete="off" style="width:58%;" /></el-form-item>
-
-              <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth"><el-input v-model="form.reasonsAndSolutionForTheProblem" type="textarea" placeholder="问题原因和修复方法" rows="4" style="width:58%;" /></el-form-item>
-            </div>
-            <div style="flex:1; margin-left:15%; ">
-              <el-form-item label="平台类型" prop="platformType" :label-width="formLabelWidth">
-                <el-select v-model="form.platformType" placeholder="平台类型">
-                  <el-option v-for="item in platformTypeStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="所处阶段" prop="stage" :label-width="formLabelWidth">
-                <el-select v-model="form.stage" placeholder="所处阶段">
-                  <el-option v-for="item in stageStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="bug处理人" prop="currentHandler" :label-width="formLabelWidth"><el-input v-model="form.currentHandler" autocomplete="off" style="width:58%;" /></el-form-item>
-              <el-form-item label="问题原因" :label-width="formLabelWidth">
-                <el-select v-model="form.reason" placeholder="问题原因">
-                  <el-option v-for="item in reasonStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="app版本号" :label-width="formLabelWidth"><el-input v-model="form.appVersion" autocomplete="off" style="width:58%;" /></el-form-item>
-              <el-form-item label="地图类型" :label-width="formLabelWidth"><el-input v-model="form.mapType" autocomplete="off" style="width:58%;" /></el-form-item>
-              <el-form-item label="地图版本号" :label-width="formLabelWidth"><el-input v-model="form.mapVersion" autocomplete="off" style="width:58%;" /></el-form-item>
-              <el-form-item label="SDK版本" :label-width="formLabelWidth"><el-input v-model="form.sdkVersion" autocomplete="off" style="width:58%;" /></el-form-item>
-              <el-form-item v-show="repairShow" label="修复结果" :label-width="formLabelWidth">
-                <el-select v-model="form.repairResult" placeholder="发现方法">
-                  <el-option v-for="item in repairResultStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-            </div>
-          </div>
-        </el-form>
-        <div align="center">
-          <el-button type="primary" @click="clickOut">返回bug主页</el-button>
-          <el-button type="primary" @click="queryFormData(form)">确 定</el-button>
-        </div>
-      </el-tab-pane>
-    </el-tabs>
-  </div>
-</template>
-
-<script>
-import { bugGet, bugUpdate, taskListCreate, bugGetEnum } from '@/api/defectManage'
-export default {
-  name: 'DefectManageQuery',
-  data() {
-    return {
-      bugTypeStr: [],
-      bugStatusStr: [],
-      bugLevelStr: [{ name: 'p0', value: 0 }, { name: 'p1', value: 1 }, { name: 'p2', value: 2 }, { name: 'p3', value: 3 }],
-      reasonStr: [],
-      platformTypeStr: [],
-      stageStr: [],
-      discoveryMethodStr: [],
-      repairResultStr: [],
-      userInformation: localStorage.getItem('username'),
-      userNames: localStorage.getItem('realname'),
-      bizJson: localStorage.getItem('key'),
-      form: {},
-      statusShow: false,
-      repairShow: false,
-      formLabelWidth: '150px',
-      formLabelWidth1: '140px',
-      objData: '',
-      userData: '',
-      taskIdStr: '',
-      url: '',
-      arrurl: ''
-    }
-  },
-  created() {
-    this.getList()
-    this.bugListSelect()
-  },
-  mounted() {
-    this.getQueryData()
-  },
-  methods: {
-    getList() {
-      if (this.$route.query.data) {
-        this.form = this.$route.query.data
-      } else {
-        this.url = window.location.href // 获取url中"?"符后的字串
-        this.arrurl = this.url.split('?id=')
-        bugGet(this.arrurl[1]).then(res => {
-          this.form = res.data
-        })
-      }
-    },
-    bugListSelect() {
-      bugGetEnum().then(res => {
-        this.bugStatusStr = res.data.bugEnumList
-        this.stageStr = res.data.bugStageEnumList
-        this.reasonStr = res.data.reasonEnumList
-        this.platformTypeStr = res.data.platformTypeEnumList
-        this.bugTypeStr = res.data.bugTypeEnumList
-        this.bugLevelStr = res.data.priorityEnumList
-        this.discoveryMethodStr = res.data.discoveryMethodEnumList
-        this.repairResultStr = res.data.repairResultEnumList
-      })
-    },
-    getQueryData() {
-      this.$route.query.code === 4 ? this.queryCode.taskId = this.$route.query.id : ''
-      this.bizJson = localStorage.getItem('key')
-      taskListCreate({ bizId: this.bizJson }).then(res => {
-        console.log(res)
-        this.taskIdStr = res.data
-      })
-    },
-    queryFormData(form) {
-      this.userData = { id: '', ename: this.userInformation, name: this.userNames }
-      this.objData = { bugBaseInfo: this.form, user: this.userData }
-      bugUpdate(this.objData).then(res => {
-        res.code === 200 ? this.successFun() : this.errorFun()
-        this.getList()
-      })
-    },
-    clickOut() {
-      this.$router.push({ path: '/Platform/defectManagement' })
-    },
-    successFun() {
-      this.$notify({ title: 'Success', message: 'Created Successfully', type: 'success', duration: 2000 })
-    },
-    errorFun() {
-      this.$notify({ title: 'Failed', message: 'Created Failed', type: 'error', duration: 2000 })
-    }
-  }
-}
-</script>

+ 319 - 0
src/views/Platform/setUp/systemSetup/bizPage.vue

@@ -0,0 +1,319 @@
+<template>
+  <!-- 业务线 -->
+  <div class="set-background">
+    <div class="block">
+      <el-form :model="bizForm">
+        <div class="set-head">
+          业务线<el-input v-model="bizForm.bizName" clearable placeholder="请填写业务线" style="margin-left:10px;width:45%;" @keyup.enter.native="queryBizList(bizForm)" />
+          <div style="float:right">
+            <el-button type="primary" @click="queryBizList(bizForm)">搜索</el-button>
+            <el-button type="primary" plain @click="handleaddBiz()">新增</el-button>
+          </div>
+        </div>
+      </el-form>
+      <div class="set-locate">
+        <el-table :key="tableKey" v-loading="listLoading" :data="bizData" fit highlight-current-row style="width: 100%;" border :header-cell-style="{background:'#F0F2F4',color:'#606266'}">
+          <el-table-column prop="id" label="序号" min-width="36px" align="center"><template slot-scope="scope"><span>{{ scope.row.id }}</span></template></el-table-column>
+          <!-- <el-table-column label="序号" prop="id" min-width="35px" align="center" /> -->
+          <el-table-column label="业务线" prop="bizName" min-width="140px" align="center">
+            <template slot-scope="scope"><a href="javascript:void(0)" style="color:#20a0ff">{{ scope.row.bizName }}</a></template>
+          </el-table-column>
+          <el-table-column prop="modifier" label="操作人" min-width="140px" align="center"><template slot-scope="scope"><span>{{ scope.row.modifier }}</span></template> </el-table-column>
+          <!-- <el-table-column label="操作人" prop="modifier" min-width="140px" align="center" /> -->
+          <el-table-column label="操作" align="center" min-width="180px" class-name="small-padding fixed-width">
+            <template slot-scope="{row}">
+              <el-button type="primary" size="mini" @click="handelEditBiz(row)">编辑</el-button>
+              <el-button type="danger" size="mini" @click="handelDeleteBiz(row)">删除</el-button>
+
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <el-dialog :title="titleName" width="40%" :visible.sync="dialogFormVisible">
+          <div style="margin-left:30px">
+            <el-form ref="addBizForms" :rules="addBizDataRules" :model="addBizData">
+              <el-form-item label="业务线ID" prop="id">
+                <el-input v-model="addBizData.id" :disabled="idUnvisible" placeholder="请填写" style="margin-left:7px;width:60%;" />
+              </el-form-item>
+              <el-form-item label="业务线名称" prop="bizName">
+                <el-input v-model="addBizData.bizName" placeholder="请填写" style="margin-left:-5px;margin-top:-10px;width:60%;" />
+              </el-form-item>
+            </el-form>
+          </div>
+          <div align="center" style="margin-top:18px">
+            <el-button type="info" plain size="mini" @click="dialogFormVisible=false">取消</el-button>
+            <el-button type="primary" size="mini" @click="titleName === '新增' ? addBizType(addBizData) :editBizType(addBizData)">确定</el-button>
+          </div>
+          <div style="margin-top:6%" />
+        </el-dialog>
+
+        <el-dialog :visible.sync="dialogDeleteVisible" width="30%">
+          <div align="center" style="margin-top:-6%">
+            <b>确定要删除这条业务线吗?</b>
+          </div>
+          <div align="center" style="margin-top:38px">
+            <el-button type="primary" size="mini" @click="deleteBizType()">确定</el-button>
+            <el-button type="danger" size="mini" @click="dialogDeleteVisible=false,idUnvisible = false">取消</el-button>
+          </div>
+          <div style="margin-top:4%" />
+        </el-dialog>
+
+        <!-- <el-pagination
+          v-show="total>0"
+          align="center"
+          background
+          :page.sync="bizData.curIndex"
+          :limit.sync="bizData.pageSize"
+          layout="prev, pager, next"
+          :total="total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        /> -->
+
+        <el-pagination style="margin-top:30px;" align="center" :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+      </div>
+
+    </div>
+  </div></template>
+
+<script>
+import { addBiz, updateBiz, deleteBiz, queryBizTypeList } from '@/api/bizPage'
+import waves from '@/directive/waves' // waves directive
+// import Pagination from '@/components/Pagination'
+import { } from '@/utils'
+
+var envSelections = []
+var consumerSelections = []
+
+export default {
+  name: 'BizPage',
+  // components: { Pagination },
+  // components: { Pagination },
+  directives: { waves },
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        1: 'success',
+        draft: 'info',
+        0: 'danger'
+      }
+      return statusMap[status]
+    }
+  },
+  data() {
+    return {
+      userInformation: localStorage.getItem('username'),
+      userName: localStorage.getItem('realname'),
+      userData: '',
+      envSelections,
+      consumerSelections,
+      bizData: [],
+      total: 0,
+      idUnvisible: false,
+      titleName: '',
+      bizForm: {
+        bizName: ''
+      },
+      addBizData: {
+        id: '',
+        bizName: ''
+      },
+      deleteData: {},
+      currentBizData: [],
+      tableKey: 0,
+      curIndex: 0,
+      pageSize: 10,
+      listLoading: true,
+      dialogFormVisible: false,
+      dialogDeleteVisible: false,
+      dialogName: '业务线名称',
+      addBizDataRules: {
+        id: [{ required: true, message: 'id不能为空', trigger: 'change' }],
+        bizName: [{ required: true, message: '业务线名称不能为空', trigger: 'change' }]
+      }
+
+    }
+  },
+
+  created() {
+    this.getList()
+  },
+  methods: {
+  // 新增业务线
+    handleaddBiz() {
+      this.titleName = '新增'
+      this.dialogFormVisible = true
+      this.idUnvisible = false
+      this.$refs.addBizForms.resetFields()
+      this.$set(this.addBizData, 'id', '')
+      this.$set(this.addBizData, 'bizName', '')
+      this.addBizData = {}
+    },
+    addBizType(ele) {
+      this.$refs['addBizForms'].validate((valid) => {
+        if (valid) {
+          this.addBizData = ele
+          this.addBizData.creator = this.userInformation
+          this.addBizData.modifier = this.userInformation
+          // this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+          // this.bizTypeInfo = { bizTypeInfo: this.addBizData }
+          addBiz(this.addBizData).then(response => {
+            console.log(response)
+            if (response.code === 200) {
+              this.getList()
+              this.successFun()
+              this.dialogFormVisible = false
+            } else {
+              this.errorFun()
+            }
+          })
+        }
+      })
+    },
+    // 进首页
+    getList() {
+      this.listLoading = true
+      this.indexPage = {
+        pageSize: this.pageSize,
+        curIndex: this.curIndex - 1
+      }
+      queryBizTypeList(this.indexPage).then(response => {
+        this.bizData = response.data.list
+        this.total = response.data.total
+        this.listLoading = false
+      })
+    },
+
+    // 查看
+    queryBizList(ele) {
+      this.bizForm.bizName = ele.bizName
+      // this.bizForm.pageSize = this.pageSize
+      // this.bizForm.curIndex = this.curIndex
+      // this.bizTypeInfo = { bizTypeInfo: this.bizForm }
+      console.log(ele)
+      queryBizTypeList(this.bizForm).then(response => {
+        if (response.code === 200) {
+          // this.getMyDevicesList()
+          this.bizData = response.data.list
+          this.total = response.data.total
+          this.dialogFormVisible = false
+        } else {
+          this.errorFun()
+        }
+      })
+    },
+    // 删除
+    handelDeleteBiz(ele) {
+      this.addBizData = ele
+      this.dialogDeleteVisible = true
+    },
+    deleteBizType() {
+      console.log(typeof (this.addBizData.id))
+      var bizIds = [this.addBizData.id]
+      // bizIds.push(this.addBizData.id)
+      this.deleteData.modifier = this.userInformation
+      this.deleteData.bizIds = bizIds
+      deleteBiz(this.deleteData).then(response => {
+        if (response.code === 200) {
+          this.successFun()
+          this.dialogDeleteVisible = false
+          this.getList()
+          this.bizData = response.data.list
+        } else {
+          this.errorFun()
+          // this.dialogDeleteVisible = false
+        }
+      })
+    },
+
+    // 编辑
+    handelEditBiz(ele) {
+      this.addBizData = Object.assign({}, ele)
+      this.titleName = '编辑'
+      this.dialogFormVisible = true
+      this.idUnvisible = true
+      this.$refs.addBizForms.resetFields()
+      console.log(ele)
+    },
+    editBizType(ele) {
+      this.$refs['addBizForms'].validate((valid) => {
+        if (valid) {
+          var myDate = new Date()
+
+          this.addBizData = ele
+          this.addBizData.modifyTime = myDate
+          this.addBizData.modifier = this.userInformation
+          // this.bizTypeInfo = { bizTypeInfo: this.addBizData }
+          updateBiz(this.addBizData).then(response => {
+            console.log(response)
+            if (response.code === 200) {
+              this.getList()
+              this.successFun()
+              this.dialogFormVisible = false
+            } else {
+              this.errorFun()
+            }
+          })
+        }
+      })
+    },
+
+    handleSizeChange(size) {
+      this.pageSize = size
+      this.getList()
+    },
+    handleCurrentChange(curIndex) {
+      this.curIndex = curIndex
+      this.getList()
+    },
+
+    clearValidate(formName) {
+      this.$refs[formName].clearValidate()
+    },
+
+    successFun() {
+      this.$notify({ title: 'Success', message: 'Created Successfully', type: 'success', duration: 5000 })
+    },
+    errorFun() {
+      this.$notify({ title: 'Failed', message: 'Created Failed', type: 'error', duration: 5000 })
+    }
+  }
+}
+</script>
+<style lang="stylus" scoped>
+  .set-background
+    background-color #F1F4F7
+    display flex
+    justify-content center
+    min-width 700px
+    .setPercent >>> .el-dialog__body
+      width 100%
+    .block
+      background-color rgba(255,255,255,1)
+      box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
+      border-radius 7px
+      width 93%
+      margin 25px 0
+      padding 20px
+      min-height calc(100vh - 100px)
+    .set-head
+      font-size 13px
+      width 100%
+      color #333B4A
+      white-space nowrap
+    .set-dialogfont
+      font-size 13px
+      .set-dialogfont >>> .el-input
+        width 70%
+    // .set-between
+    //   display flex
+    // .set-between >>> .el-button
+      // height 40px
+    .set-locate
+      margin-top 25px
+      // border-bottom 1px solid #BFC6DC
+      // border-left 1px solid #BFC6DC
+      // border-top 1px solid #BFC6DC
+      // border-right 1px solid #BFC6DC
+
+</style>

+ 402 - 0
src/views/Platform/setUp/systemSetup/modulePage.vue

@@ -0,0 +1,402 @@
+<template>
+  <!-- 业务模块 -->
+  <div class="set-background">
+    <div class="block">
+      <el-form :model="moduleForm">
+        <div class="set-head">
+          业务模块<el-input v-model="moduleForm.bizModuleName" clearable placeholder="请填写" style="margin-left:10px;width:18%;" /> &nbsp;&nbsp;
+          业务线<el-select v-model="moduleForm.bizId" placeholder="请选择" filterable clearable style="margin-left:10px;width:18%;" @change="choosePlatType()">
+            <el-option v-for="item in bizData" :key="item.id" :label="item.bizName" :value="item.id" />
+          </el-select>
+          平台类型<el-select v-model="moduleForm.platId" placeholder="请选择" filterable clearable style="margin-left:10px;width:18%;">
+            <el-option v-for="item in platData1" :key="item.id" :label="item.platName" :value="item.id" />
+          </el-select>
+          <div style="float:right">
+            <el-button type="primary" @click="queryModuleList(moduleForm)">查询</el-button>
+            <el-button type="primary" plain @click="handleaddModule()">新增</el-button>
+          </div>
+        </div>
+      </el-form>
+      <div class="set-locate">
+        <el-table :key="tableKey" :data="moduletData" fit highlight-current-row style="width: 100%;" border :header-cell-style="{background:'#F0F2F4',color:'#606266'}">
+          <el-table-column label="序号" prop="id" min-width="40px" align="center"><template slot-scope="scope"><span>{{ scope.row.id }}</span></template> </el-table-column>
+          <el-table-column label="业务模块" prop="bizModuleName" align="center" min-width="100">
+            <template slot-scope="scope"><a href="javascript:void(0)" style="color:#20a0ff">{{ scope.row.bizModuleName }}</a></template>
+          </el-table-column>
+          <el-table-column label="平台类型" prop="platName" min-width="70px" align="center"><template slot-scope="scope"><span>{{ scope.row.platName }}</span></template> </el-table-column>
+          <el-table-column label="业务线" prop="bizName" min-width="70px" align="center"><template slot-scope="scope"><span>{{ scope.row.bizName }}</span></template> </el-table-column>
+          <el-table-column label="端类型" prop="clientType" min-width="120px" align="center"><template slot-scope="{row}"><span>{{ statusMaps.get(row.clientType) }}</span></template> </el-table-column>
+          <el-table-column label="操作人" prop="modifier" min-width="70px" align="center"><template slot-scope="scope"><span>{{ scope.row.modifier }}</span></template> </el-table-column>
+          <el-table-column label="操作" align="center" min-width="150px" class-name="small-padding fixed-width">
+            <template slot-scope="{row}">
+              <el-button type="primary" size="mini" @click="handelEditModule(row)">编辑</el-button>
+              <el-button type="danger" size="mini" @click="handelDeleteModule(row)">删除</el-button>
+
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <el-dialog :title="titleName" width="40%" :visible.sync="dialogFormVisible">
+          <div style="margin-left:30px">
+            <el-form ref="addModuleForms" :rules="addModuleDataRules" :model="addModuleForm">
+              <el-form-item label="业务模块" prop="bizModuleName">
+                <el-input v-model="addModuleForm.bizModuleName" placeholder="请填写" style="margin-left:7px;width:60%;" />
+              </el-form-item>
+              <el-form-item label="业务线" prop="bizId">
+                <el-select v-model="addModuleForm.bizId" placeholder="请选择" filterable clearable style="margin-left:20px;width:60%;" @change="getPlatType()">
+                  <el-option v-for="item in bizData" :key="item.id" :label="item.bizName" :value="item.id" />
+                </el-select>
+              </el-form-item>
+              <el-form-item label="平台类型" prop="platId">
+                <el-select v-model="addModuleForm.platId" placeholder="请选择" filterable clearable style="margin-left:7px;width:60%;" @change="changePlat()">
+                  <el-option v-for="item in platData" :key="item.id" :label="item.platName" :value="item.id" />
+                </el-select>
+              </el-form-item>
+            </el-form>
+          </div>
+          <div align="center" style="margin-top:18px">
+            <el-button type="info" plain size="mini" @click="dialogFormVisible=false">取消</el-button>
+            <el-button type="primary" size="mini" @click="titleName === '新增' ? addModuleType(addModuleForm) :editModuleType(addModuleForm)">确定</el-button>
+          </div>
+          <div style="margin-top:6%" />
+        </el-dialog>
+
+        <el-dialog :visible.sync="dialogDeleteVisible" width="30%">
+          <div align="center" style="margin-top:-6%">
+            <b>确定要删除该业务模块吗?</b>
+          </div>
+          <div align="center" style="margin-top:38px">
+            <el-button type="primary" size="mini" @click="deleteModuleType()">确定</el-button>
+            <el-button type="danger" size="mini" @click="dialogDeleteVisible=false">取消</el-button>
+          </div>
+          <div style="margin-top:4%" />
+        </el-dialog>
+        <div>
+          <el-pagination style="margin-top:30px;" align="center" :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+        </div>
+      </div>
+
+    </div>
+  </div></template>
+
+<script>
+import { addBizModule, updateBizModule, deleteBizModule, queryBizModuleList, queryBizTypeList, queryPlatFormTypeList } from '@/api/modulePage'
+import waves from '@/directive/waves' // waves directive
+
+var envSelections = []
+var consumerSelections = []
+
+export default {
+  name: 'ModulePage',
+  // components: { Pagination },
+  directives: { waves },
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        1: 'success',
+        draft: 'info',
+        0: 'danger'
+      }
+      return statusMap[status]
+    }
+  },
+  data() {
+    return {
+      userInformation: localStorage.getItem('username'),
+      userName: localStorage.getItem('realname'),
+      statusMaps: new Map([[1, '服务端 '], [2, '客户端']]),
+      clientOptions: [{
+        value: 1,
+        label: '服务端'
+      }, {
+        value: 2,
+        label: '客户端'
+      }, {
+        value: 0,
+        label: '默认选项'
+      }],
+      userData: '',
+      envSelections,
+      addModuleForm: {},
+      consumerSelections,
+      bizData: [],
+      total: 0,
+      titleName: '',
+      bizForm: {
+        bizName: ''
+      },
+      moduleForm: {
+        platId: '',
+        bizId: '',
+        bizModuleName: ''
+      },
+      platData: [],
+      platData1: [],
+      platType: {},
+      deleteData: {},
+      moduletData: {},
+      addModuleData: {},
+      currentBizData: [],
+      tableKey: 0,
+      curIndex: 0,
+      pageSize: 10,
+      listLoading: true,
+      dialogFormVisible: false,
+      dialogDeleteVisible: false,
+      // dialogName: '业务线名称',
+      addModuleDataRules: {
+        bizModuleName: [{ required: true, message: '业务类型不能为空', trigger: 'change' }],
+        platId: [{ required: true, message: '平台类型不能为空', trigger: 'change' }],
+        bizId: [{ required: true, message: '业务线不能为空', trigger: 'change' }]
+      }
+
+    }
+  },
+
+  created() {
+    this.getBizList()
+    // this.getPlatList()
+    this.getList()
+  },
+  methods: {
+    // 获得biztype
+    getBizList() {
+      this.bizForm.bizName = ''
+      this.bizForm.curIndex = this.curIndex - 1
+      queryBizTypeList(this.bizForm).then(response => {
+        if (response.code === 200) {
+          this.bizData = response.data.list
+        } else {
+          this.errorFun()
+        }
+      })
+    },
+    // 获取平台类型
+    choosePlatType() {
+      // this.listLoading = true
+      this.indexPage = {
+        bizId: this.moduleForm.bizId,
+        pageSize: this.pageSize,
+        curIndex: this.curIndex - 1
+      }
+      queryPlatFormTypeList(this.indexPage).then(response => {
+        this.platData1 = response.data.list
+        this.$set(this.moduleForm, 'platId', '')
+        this.total = response.data.total
+        this.listLoading = false
+      })
+    },
+
+    // 新增获取平台类型
+    getPlatType() {
+      // this.listLoading = true
+      this.indexPage = {
+        bizId: this.addModuleForm.bizId,
+        pageSize: this.pageSize,
+        curIndex: this.curIndex - 1
+      }
+      queryPlatFormTypeList(this.indexPage).then(response => {
+        this.platData = response.data.list
+        // this.$set(this.addModuleForm, 'platId', '')
+        // this.total = response.data.total
+        this.listLoading = false
+      })
+    },
+
+    changePlat() {
+      this.addData = { id: this.addModuleForm.platId }
+      queryPlatFormTypeList(this.addData).then(response => {
+        this.platType = response.data.list
+        console.log(this.platType)
+        console.log(this.platType[0].bizId)
+        this.total = 30
+        this.listLoading = false
+      })
+    },
+
+    // 新增平台类型
+    handleaddModule() {
+      this.titleName = '新增'
+      this.dialogFormVisible = true
+      this.$refs.addModuleForms.resetFields()
+      this.$set(this.addModuleForm, 'bizModuleName', '')
+      this.$set(this.addModuleForm, 'platId', '')
+      this.$set(this.addModuleForm, 'bizId', '')
+      this.addModuleForm = {}
+    },
+    addModuleType(ele) {
+      this.$refs['addModuleForms'].validate((valid) => {
+        if (valid) {
+          this.addModuleForm = ele
+          this.addModuleForm.bizModuleName = ele.bizModuleName
+          this.addModuleForm.platId = ele.platId
+          this.addModuleForm.bizId = ele.bizId
+          this.addModuleForm.clientType = this.platType[0].clientType
+          this.addModuleForm.creator = this.userInformation
+          this.addModuleForm.modifier = this.userInformation
+          addBizModule(this.addModuleForm).then(response => {
+            console.log(response)
+            if (response.code === 200) {
+              this.getList()
+              this.successFun()
+              this.dialogFormVisible = false
+            } else {
+              this.errorFun()
+            }
+          })
+        }
+      })
+    },
+    // 进首页
+    getList() {
+      // this.listLoading = true
+      this.indexPage = {
+        pageSize: this.pageSize,
+        curIndex: this.curIndex - 1
+      }
+      queryBizModuleList(this.indexPage).then(response => {
+        this.moduletData = response.data.list
+        this.total = response.data.total
+        this.listLoading = false
+      })
+    },
+
+    // 查看
+    queryModuleList(ele) {
+      this.moduleForm.bizModuleName = ele.bizModuleName
+      this.moduleForm.bizId = ele.bizId
+      this.moduleForm.platId = ele.platId
+      // this.bizForm.pageSize = this.pageSize
+      // this.platForm.curIndex = this.curIndex - 1
+      // this.listLoading = true
+      queryBizModuleList(this.moduleForm).then(response => {
+        if (response.code === 200) {
+          // this.getMyDevicesList()
+          this.moduletData = response.data.list
+          this.total = response.data.total
+          this.dialogFormVisible = false
+          // this.listLoading = false
+        } else {
+          this.errorFun()
+        }
+      })
+    },
+    // 删除
+    handelDeleteModule(ele) {
+      this.dialogDeleteVisible = true
+      this.addModuleForm = ele
+    },
+    deleteModuleType() {
+      var bizModuleIds = [this.addModuleForm.id]
+      this.deleteData.modifier = this.userInformation
+      this.deleteData.bizModuleIds = bizModuleIds
+      deleteBizModule(this.deleteData).then(response => {
+        if (response.code === 200) {
+          this.successFun()
+          this.dialogDeleteVisible = false
+          this.getList()
+          this.bizData = response.data.list
+        } else {
+          this.errorFun()
+          // this.dialogDeleteVisible = false
+        }
+      })
+    },
+
+    // 编辑
+    handelEditModule(ele) {
+      // 不能直接赋值变量,使用Object.assign复制一级属性(注意Object.assign不算完全的深拷贝)
+      this.addModuleForm = Object.assign({}, ele)
+      // this.addModuleForm = JSON.parse(JSON.stringify(ele))
+      this.titleName = '编辑'
+      this.getPlatType()
+      this.dialogFormVisible = true
+      this.$refs.addModuleForms.resetFields()
+      this.$set(this.platData, [])
+      console.log(ele)
+    },
+    editModuleType(ele) {
+      this.$refs['addModuleForms'].validate((valid) => {
+        if (valid) {
+          var myDate = new Date()
+          this.addModuleForm = ele
+          this.addModuleForm.bizModuleName = ele.bizModuleName
+          this.addModuleForm.platId = ele.platId
+          // this.addModuleForm.platName = this.platData.filter((value) => value.code === ele.platId)
+          this.addModuleForm.modifyTime = myDate
+          this.addModuleForm.modifier = this.userInformation
+          // this.bizTypeInfo = { bizTypeInfo: this.addBizData }
+          updateBizModule(this.addModuleForm).then(response => {
+            this.$set(this.platData, [])
+            console.log(response)
+            if (response.code === 200) {
+              this.getList()
+              this.successFun()
+              this.dialogFormVisible = false
+            } else {
+              this.errorFun()
+            }
+          })
+        }
+      })
+    },
+
+    handleSizeChange(size) {
+      this.pageSize = size
+      this.getList()
+    },
+    handleCurrentChange(curIndex) {
+      this.curIndex = curIndex
+      this.getList()
+    },
+
+    clearValidate(formName) {
+      this.$refs[formName].clearValidate()
+    },
+
+    successFun() {
+      this.$notify({ title: 'Success', message: 'Created Successfully', type: 'success', duration: 5000 })
+    },
+    errorFun() {
+      this.$notify({ title: 'Failed', message: 'Created Failed', type: 'error', duration: 5000 })
+    }
+  }
+}
+</script>
+<style lang="stylus" scoped>
+  .set-background
+    background-color #F1F4F7
+    display flex
+    justify-content center
+    min-width 700px
+    .setPercent >>> .el-dialog__body
+      width 100%
+    .block
+      background-color rgba(255,255,255,1)
+      box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
+      border-radius 7px
+      width 93%
+      margin 25px 0
+      padding 20px
+      min-height calc(100vh - 100px)
+    .set-head
+      font-size 13px
+      width 100%
+      color #333B4A
+      white-space nowrap
+    .set-dialogfont
+      font-size 13px
+      .set-dialogfont >>> .el-input
+        width 70%
+    // .set-between
+    //   display flex
+    // .set-between >>> .el-button
+      // height 40px
+    .set-locate
+      margin-top 25px
+      // border-bottom 1px solid #BFC6DC
+      // border-left 1px solid #BFC6DC
+      // border-top 1px solid #BFC6DC
+      // border-right 1px solid #BFC6DC
+
+</style>

+ 356 - 0
src/views/Platform/setUp/systemSetup/platformPage.vue

@@ -0,0 +1,356 @@
+<template>
+  <!-- 平台类型 -->
+  <div class="set-background">
+    <div class="block">
+      <el-form :model="platForm">
+        <div class="set-head">
+          平台类型<el-input v-model="platForm.platName" clearable placeholder="请填写" style="margin-left:10px;width:30%;" @keyup.enter.native="queryBizList(platForm)" /> &nbsp;&nbsp;
+          业务线<el-select v-model="platForm.bizId" placeholder="请选择" filterable clearable style="margin-left:10px;width:30%;">
+            <el-option v-for="item in bizData" :key="item.id" :label="item.bizName" :value="item.id" />
+          </el-select>
+          <div style="float:right">
+            <el-button type="primary" @click="queryBizList(platForm)">查询</el-button>
+            <el-button type="primary" plain @click="handleaddPlat()">新增</el-button>
+          </div>
+        </div>
+      </el-form>
+      <div class="set-locate">
+        <el-table :key="tableKey" v-loading="listLoading" :data="platData" fit highlight-current-row style="width: 100%;" border :header-cell-style="{background:'#F0F2F4',color:'#606266'}">
+          <el-table-column label="序号" prop="id" min-width="50px" align="center"><template slot-scope="scope"><span>{{ scope.row.id }}</span></template> </el-table-column>
+          <el-table-column label="平台类型" prop="platName" align="center" min-width="120">
+            <template slot-scope="scope"><a href="javascript:void(0)" style="color:#20a0ff">{{ scope.row.platName }}</a></template>
+          </el-table-column>
+          <el-table-column label="业务线" prop="bizName" min-width="110px" align="center"><template slot-scope="scope"><span>{{ scope.row.bizName }}</span></template> </el-table-column>
+          <el-table-column label="端类型" prop="clientType" min-width="120px" align="center"><template slot-scope="{row}"><span>{{ statusMaps.get(row.clientType) }}</span></template> </el-table-column>
+          <el-table-column label="操作人" prop="modifier" min-width="120px" align="center"><template slot-scope="scope"><span>{{ scope.row.modifier }}</span></template> </el-table-column>
+          <el-table-column label="操作" align="center" min-width="200px" class-name="small-padding fixed-width">
+            <template slot-scope="{row}">
+              <el-button type="primary" size="mini" @click="handelEditPlat(row)">编辑</el-button>
+              <el-button type="danger" size="mini" @click="handelDeletePlat(row)">删除</el-button>
+
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <el-dialog :title="titleName" width="40%" :visible.sync="dialogFormVisible">
+          <div style="margin-left:30px">
+            <el-form ref="addPlatForms" :rules="addPlatDataRules" :model="addPlatForm">
+              <el-form-item label="平台类型" prop="platName">
+                <el-input v-model="addPlatForm.platName" placeholder="请填写" style="margin-left:7px;width:60%;" />
+              </el-form-item>
+              <el-form-item label="业务线" prop="bizId">
+                <el-select v-model="addPlatForm.bizId" placeholder="请选择" filterable clearable style="margin-left:20px;width:60%;">
+                  <el-option v-for="item in bizData" :key="item.id" :label="item.bizName" :value="item.id" />
+                </el-select>
+              </el-form-item>
+              <el-form-item label="端类型" prop="clientType">
+                <el-select v-model="addPlatForm.clientType" placeholder="请选择" filterable clearable style="margin-left:20px;width:60%;">
+                  <el-option v-for="item in clientOptions" :key="item.value" :label="item.label" :value="item.value" />
+                </el-select>
+              </el-form-item>
+
+            </el-form>
+          </div>
+          <div align="center" style="margin-top:30px">
+            <el-button type="info" plain size="mini" @click="dialogFormVisible=false">取消</el-button>
+            <el-button type="primary" size="mini" @click="titleName === '新增' ? addPlatType(addPlatForm) :editPlatType(addPlatForm)">确定</el-button>
+          </div>
+          <div style="margin-top:6%" />
+        </el-dialog>
+
+        <el-dialog :visible.sync="dialogDeleteVisible" width="30%">
+          <div align="center" style="margin-top:-6%">
+            <b>确定要删除该平台类型吗?</b>
+          </div>
+          <div align="center" style="margin-top:35px">
+            <el-button type="primary" size="mini" @click="deletePlatType()">确定</el-button>
+            <el-button type="danger" size="mini" @click="dialogDeleteVisible=false">取消</el-button>
+          </div>
+          <div style="margin-top:4%" />
+        </el-dialog>
+        <div>
+          <!-- <el-pagination
+            align="center"
+            background
+            layout="prev, pager, next"
+            :total="50"
+            :current-page="curIndex"
+            :page-size="pageSize"
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+          /> -->
+          <el-pagination style="margin-top:30px;" align="center" :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+        </div>
+
+      </div>
+
+    </div>
+  </div></template>
+
+<script>
+import { queryBizTypeList, addPlatFormType, updatePlatFormType, deletePlatFormType, queryPlatFormTypeList } from '@/api/platformPage'
+import waves from '@/directive/waves' // waves directive
+
+var envSelections = []
+var consumerSelections = []
+
+export default {
+  name: 'PlatformPage',
+  // components: { Pagination },
+  directives: { waves },
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        1: 'success',
+        draft: 'info',
+        0: 'danger'
+      }
+      return statusMap[status]
+    }
+  },
+  data() {
+    return {
+      userInformation: localStorage.getItem('username'),
+      userName: localStorage.getItem('realname'),
+      statusMaps: new Map([[1, '服务端 '], [2, '客户端']]),
+      clientOptions: [{
+        value: 1,
+        label: '服务端'
+      }, {
+        value: 2,
+        label: '客户端'
+      }],
+      userData: '',
+      envSelections,
+      consumerSelections,
+      bizData: [],
+      total: 0,
+      titleName: '',
+      bizForm: {
+        bizName: ''
+      },
+      platForm: {
+        platName: '',
+        bizId: ''
+      },
+      platData: {},
+      deleteData: {},
+      addPlatForm: {},
+      currentBizData: [],
+      tableKey: 0,
+      curIndex: 0,
+      pageSize: 10,
+      listLoading: true,
+      dialogFormVisible: false,
+      dialogDeleteVisible: false,
+      // dialogName: '业务线名称',
+      addPlatDataRules: {
+        bizId: [{ required: true, message: '业务线不能为空', trigger: 'change' }],
+        clientType: [{ required: true, message: '端类型不能为空', trigger: 'change' }],
+        platName: [{ required: true, message: '平台类型名称不能为空', trigger: 'change' }]
+      }
+
+    }
+  },
+
+  created() {
+    this.getBizList()
+    this.getList()
+  },
+  methods: {
+    // 获得biztype
+    getBizList() {
+      this.bizForm.bizName = ''
+      this.bizForm.curIndex = this.curIndex - 1
+      queryBizTypeList(this.bizForm).then(response => {
+        if (response.code === 200) {
+          this.bizData = response.data.list
+        } else {
+          this.errorFun()
+        }
+      })
+    },
+    // 新增平台类型
+    handleaddPlat() {
+      this.titleName = '新增'
+      this.dialogFormVisible = true
+      this.$refs.addPlatForms.resetFields()
+      this.$set(this.addPlatForm, 'bizId', '')
+      this.$set(this.addPlatForm, 'clientType', '')
+      this.$set(this.addPlatForm, 'platName', '')
+      this.addPlatForm = {}
+    },
+    addPlatType(ele) {
+      this.$refs['addPlatForms'].validate((valid) => {
+        if (valid) {
+          this.addPlatForm = ele
+          this.addPlatForm.bizId = ele.bizId
+          this.addPlatForm.clientType = ele.clientType
+          this.addPlatForm.platName = ele.platName
+          this.addPlatForm.creator = this.userInformation
+          this.addPlatForm.modifier = this.userInformation
+          addPlatFormType(this.addPlatForm).then(response => {
+            console.log(response)
+            if (response.code === 200) {
+              this.getList()
+              this.successFun()
+              this.dialogFormVisible = false
+            } else {
+              this.errorFun()
+            }
+          })
+        }
+      })
+    },
+    // 进首页
+    getList() {
+      // this.listLoading = true
+      this.indexPage = {
+        pageSize: this.pageSize,
+        curIndex: this.curIndex - 1
+      }
+      queryPlatFormTypeList(this.indexPage).then(response => {
+        this.platData = response.data.list
+        this.total = response.data.total
+        this.listLoading = false
+      })
+    },
+
+    // 查看
+    queryBizList(ele) {
+      this.platForm.platName = ele.platName
+      this.platForm.bizId = ele.bizId
+      // this.bizForm.pageSize = this.pageSize
+      // this.platForm.curIndex = this.curIndex - 1
+      console.log(ele)
+      // this.listLoading = true
+      queryPlatFormTypeList(this.platForm).then(response => {
+        if (response.code === 200) {
+          // this.getMyDevicesList()
+          this.platData = response.data.list
+          this.total = response.data.total
+          this.dialogFormVisible = false
+          // this.listLoading = false
+        } else {
+          this.errorFun()
+        }
+      })
+    },
+    // 删除
+    handelDeletePlat(ele) {
+      this.dialogDeleteVisible = true
+      this.addPlatForm = ele
+    },
+    deletePlatType() {
+      console.log(typeof (this.addPlatForm.id))
+      var platIds = [this.addPlatForm.id]
+      // bizIds.push(this.addBizData.id)
+      this.deleteData.modifier = this.userInformation
+      this.deleteData.platIds = platIds
+      deletePlatFormType(this.deleteData).then(response => {
+        if (response.code === 200) {
+          this.successFun()
+          this.dialogDeleteVisible = false
+          this.getList()
+          this.bizData = response.data.list
+        } else {
+          this.errorFun()
+          // this.dialogDeleteVisible = false
+        }
+      })
+    },
+
+    // 编辑
+    handelEditPlat(ele) {
+      // 不能直接赋值变量,使用Object.assign复制一级属性(注意Object.assign不算完全的深拷贝)
+      this.addPlatForm = Object.assign({}, ele)
+      // this.addPlatform = JSON.parse(JSON.stringify(ele))
+      this.titleName = '编辑'
+      this.dialogFormVisible = true
+      this.$refs.addPlatForms.resetFields()
+      console.log(ele)
+    },
+    editPlatType(ele) {
+      this.$refs['addPlatForms'].validate((valid) => {
+        if (valid) {
+          var myDate = new Date()
+          this.addPlatForm = ele
+          this.addPlatForm.bizId = ele.bizId
+          this.addPlatForm.clientType = ele.clientType
+          this.addPlatForm.platName = ele.platName
+          this.addPlatForm.modifyTime = myDate
+          this.addPlatForm.modifier = this.userInformation
+          // this.bizTypeInfo = { bizTypeInfo: this.addBizData }
+          updatePlatFormType(this.addPlatForm).then(response => {
+            console.log(response)
+            if (response.code === 200) {
+              this.getList()
+              this.successFun()
+              this.dialogFormVisible = false
+            } else {
+              this.errorFun()
+            }
+          })
+        }
+      })
+    },
+
+    handleSizeChange(size) {
+      this.pageSize = size
+      this.getList()
+    },
+    handleCurrentChange(curIndex) {
+      this.curIndex = curIndex
+      this.getList()
+    },
+
+    clearValidate(formName) {
+      this.$refs[formName].clearValidate()
+    },
+
+    successFun() {
+      this.$notify({ title: 'Success', message: 'Created Successfully', type: 'success', duration: 5000 })
+    },
+    errorFun() {
+      this.$notify({ title: 'Failed', message: 'Created Failed', type: 'error', duration: 5000 })
+    }
+  }
+}
+</script>
+<style lang="stylus" scoped>
+  .set-background
+    background-color #F1F4F7
+    display flex
+    justify-content center
+    min-width 700px
+    .setPercent >>> .el-dialog__body
+      width 100%
+    .block
+      background-color rgba(255,255,255,1)
+      box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
+      border-radius 7px
+      width 93%
+      margin 25px 0
+      padding 20px
+      min-height calc(100vh - 100px)
+    .set-head
+      font-size 13px
+      width 100%
+      color #333B4A
+      white-space nowrap
+    .set-dialogfont
+      font-size 13px
+      .set-dialogfont >>> .el-input
+        width 70%
+    // .set-between
+    //   display flex
+    // .set-between >>> .el-button
+      // height 40px
+    .set-locate
+      margin-top 25px
+      // border-bottom 1px solid #BFC6DC
+      // border-left 1px solid #BFC6DC
+      // border-top 1px solid #BFC6DC
+      // border-right 1px solid #BFC6DC
+
+</style>

+ 340 - 0
src/views/Platform/setUp/systemSetup/projectPage.vue

@@ -0,0 +1,340 @@
+<template>
+  <!-- 工程模块 -->
+  <div class="set-background">
+    <div class="block">
+      <el-form :model="projectForm">
+        <div class="set-head">
+          工程模块<el-input v-model="projectForm.platformType" placeholder="请填写" style="margin-left:10px;width:14%;" /> &nbsp;&nbsp;
+          业务线<el-select v-model="projectForm.bizId" placeholder="请选择" filterable clearable style="margin-left:10px;width:14%;" @change="getPlat(projectForm.bizId)">
+            <el-option v-for="item in bizType" :key="item.code" :label="item.name" :value="item.code" />
+          </el-select>
+          平台类型<el-select v-model="projectForm.platId" placeholder="请选择" filterable clearable style="margin-left:10px;width:14%;" @change="getProgect(projectForm.platId)">
+            <el-option v-for="item in platType" :key="item.code" :label="item.name" :value="item.code" />
+          </el-select>
+          业务模块<el-select v-model="projectForm.id" placeholder="请选择" filterable clearable style="margin-left:10px;width:14%;">
+            <el-option v-for="item in projectType" :key="item.code" :label="item.name" :value="item.code" />
+          </el-select>
+          <div style="float:right">
+            <el-button type="primary">查询</el-button>
+            <el-button type="primary" plain @click="handleaddBiz()">新增</el-button>
+          </div>
+        </div>
+      </el-form>
+      <div class="set-locate">
+        <el-table :key="tableKey" :data="projectData" fit highlight-current-row style="width: 100%;" border :header-cell-style="{background:'#F0F2F4',color:'#606266'}">
+          <el-table-column label="序号" prop="id" min-width="40px" align="center" />
+          <el-table-column label="工程模块" prop="bizName" align="center" min-width="100">
+            <template slot-scope="scope"><a href="javascript:void(0)" style="color:#20a0ff">{{ scope.row.bizName }}</a></template>
+          </el-table-column>
+          <el-table-column label="业务模块" prop="editor" min-width="70px" align="center" />
+          <el-table-column label="平台类型" prop="editor" min-width="70px" align="center" />
+          <el-table-column label="业务线" prop="editor" min-width="70px" align="center" />
+          <el-table-column label="端类型" prop="editor" min-width="70px" align="center" />
+          <el-table-column label="修改人" prop="editor" min-width="70px" align="center" />
+          <el-table-column label="操作" align="center" min-width="150px" class-name="small-padding fixed-width">
+            <!-- <template slot-scope="{row}"> -->
+            <el-button type="primary" size="mini">编辑</el-button>
+            <el-button type="danger" size="mini" @click="dialogDeleteVisible=true">删除</el-button>
+
+            <!-- </template> -->
+          </el-table-column>
+        </el-table>
+        <el-dialog :visible.sync="dialogFormVisible" width="32%">
+          <div class="set-dialogfont" style="margin-left:25px;margin-top:-8px">
+            <b>工程模块</b><el-input placeholder="请填写" style="margin-left:10px;width:72%;" />
+          </div>
+          <div class="set-dialogfont" style="margin-left:35px;margin-top:10px">
+            <b>Git地址</b><el-input placeholder="请填写" style="margin-left:10px;width:74%;" />
+          </div>
+          <div class="set-dialogfont" style="margin-left:23px;margin-top:10px">
+            <b>业务模块</b><el-select v-model="projectForm.biz" placeholder="请选择业务模块" filterable clearable style="margin-left:13px;width:71.5%;">
+              <el-option v-for="item in bizType" :key="item.id" :label="item.name" :value="item.id" />
+            </el-select>
+          </div>
+          <div class="set-dialogfont" style="margin-left:35px;margin-top:10px">
+            <b>odin节点</b><el-input placeholder="请填写" style="margin-left:10px;width:74%;" />
+          </div>
+          <div align="center" style="margin-top:30px">
+            <el-button type="info" plain size="mini" @click="dialogFormVisible=false">确定</el-button>
+            <el-button type="danger" size="mini" @click="dialogFormVisible=false">取消</el-button>
+            <div style="margin-top:3%" />
+          </div>
+        </el-dialog>
+
+        <el-dialog :visible.sync="dialogDeleteVisible" width="30%">
+          <div align="center" style="margin-top:-6%">
+            <b>确定要删除该工程模块吗?</b>
+          </div>
+          <div align="center" style="margin-top:38px">
+            <el-button type="primary" size="mini" @click="dialogDeleteVisible=false">确定</el-button>
+            <el-button type="danger" size="mini" @click="dialogDeleteVisible=false">取消</el-button>
+          </div>
+          <div style="margin-top:4%" />
+        </el-dialog>
+        <div>
+          <el-pagination style="margin-top:30px;" align="center" :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+        </div>
+      </div>
+
+    </div>
+  </div></template>
+
+<script>
+import { getTypeMap, createModule } from '@/api/projectTypePage'
+//  updateModule, deleteModules, queryModuleInfoList, queryModuleInfoListByModuleName
+import waves from '@/directive/waves' // waves directive
+
+var envSelections = []
+var consumerSelections = []
+
+export default {
+  name: 'ProjectPage',
+  // components: { Pagination },
+  directives: { waves },
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        1: 'success',
+        draft: 'info',
+        0: 'danger'
+      }
+      return statusMap[status]
+    }
+  },
+  data() {
+    return {
+      userInformation: localStorage.getItem('username'),
+      userName: localStorage.getItem('realname'),
+      userData: '',
+      envSelections,
+      consumerSelections,
+      projectData: [],
+      bizType: [],
+      platType: [],
+      projectType: [],
+      total: 0,
+      titleName: '',
+      projectForm: {
+        bizId: '',
+        platId: '',
+        id: ''
+      },
+      addBizData: {},
+      deleteData: {},
+      currentBizData: [],
+      tableKey: 0,
+      curIndex: 0,
+      pageSize: 10,
+      listLoading: true,
+      dialogFormVisible: false,
+      dialogDeleteVisible: false,
+      dialogName: '业务线名称',
+      addBizDataRules: {
+        id: [{ required: true, message: 'id不能为空', trigger: 'change' }],
+        bizName: [{ required: true, message: '业务线名称不能为空', trigger: 'change' }]
+      }
+
+    }
+  },
+
+  created() {
+    this.getBizTypeMap()
+  },
+  methods: {
+    // 获取业务类型
+    getBizTypeMap() {
+      getTypeMap().then(response => {
+        this.bizType = response.data
+        console.log(this.bizType)
+        // this.lockSupplierList = response.data.supplierInfos
+      })
+    },
+
+    // 新增业务线
+    handleaddBiz() {
+      this.titleName = '新增'
+      this.dialogFormVisible = true
+      this.$refs.addBizForms.resetFields()
+    },
+    addModuleType(ele) {
+      this.$refs['addBizForms'].validate((valid) => {
+        if (valid) {
+          this.addBizData = ele
+          this.addBizData.creator = this.userInformation
+          this.addBizData.modifier = this.userInformation
+          // this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+          // this.bizTypeInfo = { bizTypeInfo: this.addBizData }
+          createModule(this.addBizData).then(response => {
+            console.log(response)
+            if (response.code === 200) {
+              this.getList()
+              this.successFun()
+              this.dialogFormVisible = false
+            } else {
+              this.errorFun()
+            }
+          })
+        }
+      })
+    },
+    getPlat(e) {
+      if (this.bizType.filter((value) => value.code === e)[0]) {
+        this.platType = this.bizType.filter((value) => value.code === e)[0].child
+        this.$set(this.projectForm, 'platId', '')
+        this.$set(this.projectForm, 'id', '')
+      }
+    },
+    getProgect(e) {
+      console.log(e)
+      if (this.platType.filter((value) => value.code === e)[0]) {
+        this.projectType = this.platType.filter((value) => value.code === e)[0].child
+        this.$set(this.projectForm, 'id', '')
+      }
+    },
+    // // 进首页
+    // getList() {
+    //   this.listLoading = true
+    //   this.indexPage = {
+    //     pageSize: this.pageSize,
+    //     curIndex: this.curIndex - 1
+    //   }
+    //   queryBizTypeList(this.indexPage).then(response => {
+    //     this.bizData = response.data.list
+    //     this.total = 10
+    //     this.listLoading = false
+    //   })
+    // },
+
+    // // 查看
+    // queryBizList(ele) {
+    //   this.bizForm.bizName = ele.bizName
+    //   // this.bizForm.pageSize = this.pageSize
+    //   this.bizForm.curIndex = this.curIndex - 1
+    //   // this.bizTypeInfo = { bizTypeInfo: this.bizForm }
+    //   console.log(ele)
+    //   queryBizTypeList(this.bizForm).then(response => {
+    //     if (response.code === 200) {
+    //       // this.getMyDevicesList()
+    //       this.bizData = response.data.list
+    //       this.dialogFormVisible = false
+    //     } else {
+    //       this.errorFun()
+    //     }
+    //   })
+    // },
+    // // 删除
+    // handelDeleteBiz(ele) {
+    //   this.addBizData = ele
+    //   this.dialogDeleteVisible = true
+    // },
+    // deleteBizType() {
+    //   console.log(typeof (this.addBizData.id))
+    //   var bizIds = [this.addBizData.id]
+    //   // bizIds.push(this.addBizData.id)
+    //   this.deleteData.modifier = this.userInformation
+    //   this.deleteData.bizIds = bizIds
+    //   deleteBiz(this.deleteData).then(response => {
+    //     if (response.code === 200) {
+    //       this.successFun()
+    //       this.dialogDeleteVisible = false
+    //       this.getList()
+    //       this.bizData = response.data.list
+    //     } else {
+    //       this.errorFun()
+    //       // this.dialogDeleteVisible = false
+    //     }
+    //   })
+    // },
+
+    // // 编辑
+    // handelEditBiz(ele) {
+    //   this.addBizData = ele
+    //   this.titleName = '编辑'
+    //   this.dialogFormVisible = true
+    //   this.$refs.addBizForms.resetFields()
+    //   console.log(ele)
+    // },
+    // editBizType(ele) {
+    //   this.$refs['addBizForms'].validate((valid) => {
+    //     if (valid) {
+    //       var myDate = new Date()
+
+    //       this.addBizData = ele
+    //       this.addBizData.modifyTime = myDate
+    //       this.addBizData.modifier = this.userInformation
+    //       // this.bizTypeInfo = { bizTypeInfo: this.addBizData }
+    //       updateBiz(this.addBizData).then(response => {
+    //         console.log(response)
+    //         if (response.code === 200) {
+    //           // this.getMyDevicesList()
+    //           this.successFun()
+    //           // this.$refs.addBizForms.resetFields()
+    //           this.dialogFormVisible = false
+    //         } else {
+    //           this.errorFun()
+    //           // this.$refs.addBizForms.resetFields()
+    //         }
+    //       })
+    //     }
+    //   })
+    // },
+
+    handleSizeChange(size) {
+      this.pageSize = size
+      this.getList()
+    },
+    handleCurrentChange(curIndex) {
+      this.curIndex = curIndex
+      this.getList()
+    },
+
+    clearValidate(formName) {
+      this.$refs[formName].clearValidate()
+    },
+
+    successFun() {
+      this.$notify({ title: 'Success', message: 'Created Successfully', type: 'success', duration: 5000 })
+    },
+    errorFun() {
+      this.$notify({ title: 'Failed', message: 'Created Failed', type: 'error', duration: 5000 })
+    }
+  }
+}
+</script>
+<style lang="stylus" scoped>
+  .set-background
+    background-color #F1F4F7
+    display flex
+    justify-content center
+    min-width 700px
+    .setPercent >>> .el-dialog__body
+      width 100%
+    .block
+      background-color rgba(255,255,255,1)
+      box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
+      border-radius 7px
+      width 93%
+      margin 25px 0
+      padding 20px
+      min-height calc(100vh - 100px)
+    .set-head
+      font-size 13px
+      width 100%
+      color #333B4A
+      white-space nowrap
+    .set-dialogfont
+      font-size 13px
+      .set-dialogfont >>> .el-input
+        width 70%
+    // .set-between
+    //   display flex
+    // .set-between >>> .el-button
+      // height 40px
+    .set-locate
+      margin-top 25px
+      // border-bottom 1px solid #BFC6DC
+      // border-left 1px solid #BFC6DC
+      // border-top 1px solid #BFC6DC
+      // border-right 1px solid #BFC6DC
+
+</style>

+ 3 - 0
src/views/Platform/setUp/systemSetup/testa.vue

@@ -0,0 +1,3 @@
+<template>
+  <router-view />
+</template>

+ 359 - 0
src/views/Platform/setUp/teamPage.vue

@@ -0,0 +1,359 @@
+<template>
+  <el-container>
+    <el-aside width="150pt">
+      <el-tree
+        style="background: #E9EEF3; height:110vh; padding:15%;"
+        :data="bizOptions"
+        node-key="id"
+        undraggable
+        :highlight-current="true"
+        @node-click="clickFun"
+      />
+    </el-aside>
+    <el-container>
+      <el-header style="height: auto; text-align:left">
+        <div style="margin: 4%;">
+          <el-input v-model="form.name" clearable filterable placeholder="姓名" style="width:22%;margin-right:5px;" />
+          <el-input v-model="form.email" clearable filterable placeholder="邮箱" style="width:22%;margin-right:5px;" />
+          <el-select v-model="form.role" width="200" clearable placeholder="请选择角色">
+            <el-option v-for="item in roleStrings" :key="item.value" :label="item.name" :value="item.name" />
+          </el-select>
+          <el-button type="primary" style="margin-left:8%;" @click="queryList(form)">查询</el-button>
+          <el-button type="primary" @click="createGetShow">新增</el-button>
+        </div>
+
+        <el-dialog :title="titleName" width="40%" :visible.sync="dialogFormVisible">
+          <el-form ref="MemberData" :model="MemberData" status-icon :rules="serviceDataRules" label-width="60px">
+            <el-form-item v-show="hide" label="id" prop="Id" :label-width="formLabelWidths">
+              <el-input v-model="MemberData.id" autocomplete="off" style="width:75%" :disabled="true" />
+            </el-form-item>
+            <el-form-item label="姓名" prop="name" :label-width="formLabelWidths">
+              <el-input v-model="MemberData.name" autocomplete="off" style="width:75%" />
+            </el-form-item>
+            <el-form-item label="邮箱" prop="email" :label-width="formLabelWidths">
+              <el-input v-model="MemberData.email" autocomplete="off" style="width:75%" />
+            </el-form-item>
+            <el-form-item label="业务线" prop="bizId" :label-width="formLabelWidths">
+              <el-select v-model="MemberData.bizId" placeholder="请选择业务线" style="width:75%">
+                <el-option v-for="item in bizOptions" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="角色" prop="role" :label-width="formLabelWidths">
+              <el-select v-model="MemberData.role" placeholder="请选择角色" style="width:75%">
+                <el-option v-for="item in roleStrings" :key="item.value" :label="item.name" :value="item.name" />
+              </el-select>
+            </el-form-item>
+          </el-form>
+          <div slot="footer" class="dialog-footer">
+            <el-button @click="dialogFormVisible = false,clickClose()">关 闭</el-button>
+            <el-button v-show="Determine" type="primary" @click="titleName === '新增'?createMembers(MemberData):updateData(MemberData)">确 定</el-button>
+          </div>
+        </el-dialog>
+      </el-header>
+      <el-table :data="list" style="width: 100%; height:570vh;" row-key="id" lazy align="center">
+        <el-table-column prop="id" label="ID" width="150" align="center"><template slot-scope="scope"><span>{{ scope.row.id }}</span></template></el-table-column>
+        <el-table-column prop="name" label="姓名" width="180" align="center"><template slot-scope="scope"><span>{{ scope.row.name }}</span></template> </el-table-column>
+        <!-- <el-table-column label="team" width="180" align="center"><template slot-scope="scope"><span>{{ scope.row.teamName }}</span></template></el-table-column> -->
+        <el-table-column label="邮箱" width="180" align="center"><template slot-scope="scope"><span>{{ scope.row.email }}</span></template></el-table-column>
+        <el-table-column prop="role" label="角色" width="150" align="center"><template slot-scope="scope"><span>{{ scope.row.role }}</span></template></el-table-column>
+        <el-table-column label="操作" align="center" min-width="220px" fixed="right">
+          <template slot-scope="{row}">
+            <el-button size="mini" type="primary" @click="dialogFormVisible = true,queryData(row)">查看</el-button>
+            <el-button size="mini" type="primary" @click="dialogFormVisible = true,changeData(row)">编辑</el-button>
+            <el-button size="mini" type="primary" @click="deleteCodeData(row)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-footer>
+        <el-pagination :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" align="center" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+      </el-footer>
+    </el-container>
+  </el-container>
+</template>
+
+<script>
+import { createMembers, updateMembers, deleteMembers, getMemberList } from '@/api/teamPage.js'
+
+const operateType = {
+  OPER_ADD: 1, // 新增
+  OPER_EDIT: 2, // 编辑
+  OPER_QUERY: 3 // 查看
+}
+export default {
+  name: 'TeamPage',
+  data() {
+    return {
+      centerDialogVisible: false,
+      dialogFormVisible: false,
+      Determine: true,
+      hide: true,
+      radioButton: 0,
+      titleName: '',
+      parameter: '',
+      startId: '',
+      startName: '',
+      parentFolderId: '',
+      formLabelWidths: '120px',
+      roleStrings: [{ value: 1, name: 'rd' }, { value: 2, name: 'qa' }, { value: 3, name: 'pm' }, { value: 4, name: 'other' }],
+      bizOptions: [{ label: '滴滴代驾', value: 261 }, { label: '企业级', value: 100 }, { label: 'prado', value: 330 }, { label: 'carbo', value: 331 }, { label: '海马', value: 309 }, { label: '万象', value: 102 }],
+      userInformation: localStorage.getItem('username'),
+      userNames: localStorage.getItem('realname'),
+      bizId: '',
+      curIndex: 1, // 初始页
+      pageSize: 10, // 每页的数据
+      total: 0,
+      userData: '',
+      folderName: '',
+      list: [],
+      form: {},
+      queryListData: {},
+      bizData: {},
+      MemberData: {
+        bizId: '',
+        teamId: '',
+        email: '',
+        role: '',
+        name: ''
+      },
+      formData: {
+        bizId: '',
+        teamId: '',
+        role: '',
+        email: '',
+        name: ''
+
+      },
+      serviceDataRules: {
+        name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
+        bizId: [{ required: true, message: '业务线不能为空', trigger: 'change' }],
+        teamId: [{ required: true, message: '业务线不能为空', trigger: 'change' }],
+        role: [{ required: true, message: '角色不能为空', trigger: 'change' }],
+        email: [{ required: true, message: '邮箱不能为空', trigger: 'blur' }]
+      },
+      defaultProps: {
+        children: 'children',
+        label: 'label'
+      },
+      multipleSelection: []
+    }
+  },
+  created() {
+    this.getAllList()
+  },
+
+  methods: {
+    updateDetailDialog(type) {
+      if (type === operateType.OPER_ADD) {
+        this.Determine = true
+        this.hide = false
+      } else if (type === operateType.OPER_EDIT) {
+        this.hide = true
+        this.Determine = true
+      } else if (type === operateType.OPER_QUERY) {
+        this.hide = true
+        this.Determine = false
+      }
+    },
+    handleSizeChange(size) {
+      this.pageSize = size
+      this.getAllList({
+        pageSize: this.pageSize,
+        curIndex: this.curIndex
+      })
+    },
+    handleCurrentChange(curIndex) {
+      this.curIndex = curIndex
+      this.getAllList({
+        pageSize: this.pageSize,
+        curIndex: this.curIndex
+      })
+    },
+    submitForm(formName) {
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          alert('submit!')
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    },
+    resetForm(formName) {
+      this.$refs[formName].resetFields()
+    },
+
+    // 全部列表
+    getAllList() {
+      var indexPage = {
+        pageSize: this.pageSize,
+        curIndex: this.curIndex
+      }
+      getMemberList(indexPage).then(res => {
+        this.list = res.data
+        for (var a of this.list) {
+          var b = a.teamId
+          for (var c of this.bizOptions) {
+            b === c ? b = c.label : ''
+          }
+        }
+        this.total = res.total
+      })
+    },
+
+    // 查看成员详情
+    queryData(vel) {
+      this.titleName = '查看详情'
+      this.MemberData = vel
+      this.updateDetailDialog(3)
+    },
+
+    // 查询
+    queryList(val) {
+      console.log(val)
+      getMemberList(val).then(res => {
+        this.list = res.data
+        // this.form = {}
+      })
+    },
+
+    deleteCodeData(e) {
+      this.$confirm('确定删除吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.handleDelete(e)
+        this.$message({ type: 'success', message: '删除成功!' })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        })
+      })
+    },
+
+    // 删除
+    handleDelete(e) {
+      this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+      deleteMembers(e.id, this.userData).then(response => {
+        if (response.code === 200) {
+          this.getAllList()
+          // this.queryList({ 'teamId': e.teamId })
+          this.successFun()
+        } else {
+          this.errorFun(response.msg)
+        }
+      })
+    },
+
+    // 编辑
+    changeData(vel) {
+      console.log(vel)
+      this.titleName = '编辑'
+      this.MemberData = vel
+      this.updateDetailDialog(2)
+    },
+
+    updateData(vel) {
+      if (vel === this.MemberData) {
+        this.bizData = {
+          name: vel.name,
+          id: vel.id,
+          role: vel.role,
+          email: vel.email,
+          teamId: vel.bizId,
+          bizId: vel.bizId
+        }
+      } else {
+        this.bizData = vel
+        this.bizData.name = vel.name
+        this.bizData.role = vel.role
+        this.bizData.email = vel.email
+        this.bizData.teamId = vel.teamId
+        this.bizData.bizId = vel.bizId
+      }
+      this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+      this.objData = { teamMembersInfo: this.bizData, user: this.userData }
+      updateMembers(this.objData).then(response => {
+        if (response.code === 200) {
+          this.dialogFormVisible = false
+          this.successFun()
+          this.getAllList()
+        } else {
+          this.errorFun()
+        }
+      })
+    },
+    // 新增需提示选择目录
+    createGetShow() {
+      this.titleName = '新增'
+      if (this.startId === '') {
+        this.$notify({ title: '提示', message: '请选择目录', duration: 2000 })
+      } else {
+        this.MemberData = {}
+        this.dialogFormVisible = true
+        this.$nextTick(() => {
+          this.$refs['MemberData'].clearValidate()
+        })
+        this.updateDetailDialog(1)
+      }
+    },
+    clickFun(e) {
+      console.log(e)
+      this.startId = e.value
+      this.startName = e.label
+      getMemberList({ teamId: e.value }).then(res => {
+        this.list = res.data
+      })
+    },
+
+    clickClose() {
+      this.startId = ''
+    },
+
+    // 新增
+    createMembers(vel) {
+      this.$refs['MemberData'].validate((valid) => {
+        if (valid) {
+          if (vel !== '') {
+            this.bizData = {
+              name: vel.name,
+              id: vel.id,
+              role: vel.role,
+              email: vel.email,
+              teamId: this.startId,
+              bizId: vel.bizId
+            }
+          }
+          this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+          this.objData = { teamMembersInfo: this.bizData, user: this.userData }
+          createMembers(this.objData).then(response => {
+            if (response.code === 200) {
+              this.dialogFormVisible = false
+              this.successFun()
+              this.getAllList()
+            } else {
+              this.errorFun()
+            }
+          })
+        } else {
+          return false
+        }
+      })
+    },
+
+    successFun() {
+      this.$notify({ title: 'Success', message: 'Created Successfully', type: 'success', duration: 5000 })
+    },
+    errorFun() {
+      this.$notify({ title: 'Failed', message: 'Created Failed', type: 'error', duration: 5000 })
+    }
+  }}
+
+</script>
+
+<style>
+.headerStyle {
+  margin: 10px;
+}
+</style>

+ 3 - 0
src/views/Platform/setUp/testa.vue

@@ -0,0 +1,3 @@
+<template>
+  <router-view />
+</template>

+ 273 - 0
src/views/Platform/useCase/createUse.vue

@@ -0,0 +1,273 @@
+<template>
+  <div id="window-judge" style="background:#F2F3F6;min-height:95vh;">
+    <el-container>
+      <el-header style="background:#ffffff;height:auto; width:94%;margin:3%; font-size:14px;border-radius:8px;">
+        <el-form ref="caseData" :model="caseData" label-width="90pt" style="margin:1%;" :rules="createFormData">
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="前置条件" label-width="80pt" prop="caseCondition">
+                <el-input v-model="caseData.caseCondition" placeholder="请输入内容" style="margin-left:1.3%;" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="20">
+              <div style="white-space:nowrap; display:flex;">
+                <el-form-item label="用例优先级" prop="casePriority" style="flex:1">
+                  <el-select v-model="caseData.casePriority" clearable placeholder="用例优先级" style="width: 100%">
+                    <el-option v-for="item in priorityStrings" :key="item.value" :label="item.name" :value="item.value" />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="API" prop="api" style="flex:1"><el-input v-model="caseData.api" clearable autocomplete="off" style="width: 100%; margin-left:3%;" /></el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-header>
+      <el-main style="background:#ffffff;height:auto; width:94%;margin: 0 3% 3% 3%; font-size:14px;border-radius:8px;">
+        <div v-for="(item, index) in arr" ref="for" :key="index">
+          <div ref="div1">
+            <div style="box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04); margin-bottom:2%;">
+              <el-form :model="caseData" label-width="90pt">
+                <el-row>
+                  <el-col :span="20" style="margin:2% 0 0 0; white-space:nowrap;">
+                    <el-form-item label="执行步骤">
+                      <el-input v-model="caseData.description" type="textarea" :rows="4" placeholder="请输入内容" />
+                      <el-button v-show="plus" size="mini" type="primary" icon="el-icon-plus" style="margin-bottom: 6%;" @click="addform(caseData, key)" />
+                      <el-button v-show="plus" size="mini" icon="el-icon-minus" @click="deleteData" />
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+                <el-row>
+                  <el-col :span="22">
+                    <el-form-item label="预期结果">
+                      <el-input v-model="caseData.expectedResult" placeholder="请输入内容" />
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+                <div style="display:flex;">
+                  <el-row style="flex:1;">
+                    <el-col :span="22">
+                      <el-form-item label="附件">
+                        <el-upload class="upload-demo" drag action="https://jsonplaceholder.typicode.com/posts/" multiple :on-success="handleAvatarSuccess" :on-progress="DisableButton">
+                          <i class="el-icon-plus avatar-uploader-icon"> 添加图片 </i>
+                        </el-upload>
+                      </el-form-item>
+                    </el-col>
+                  </el-row>
+                  <el-row style="flex:1;">
+                    <el-col :span="20">
+                      <el-form-item label="备注">
+                        <el-input v-model="caseData.remark" type="textarea" :rows="8" placeholder="请输入内容" />
+                      </el-form-item>
+                    </el-col>
+                  </el-row>
+                </div>
+                <div v-show="btn_show" align="center" class="cla">
+                  <el-table v-show="btn_show" :data="uptataKey" fit style="width: 90%;">
+                    <el-table-column label="" min-width="150">
+                      <template slot-scope="scope">{{ scope.row.name }}</template>
+                    </el-table-column>
+                    <el-table-column label="" min-width="300">
+                      <template slot-scope="scope"><a :href="scope.row.url" style="color:blue;">{{ scope.row.url }}</a></template>
+                    </el-table-column>
+                    <el-table-column fixed="right" label="" width="50" align="center">
+                      <template slot-scope="scope">
+                        <el-button class="deleteSty" @click="deleteURL(scope.row)"> x </el-button>
+                      </template>
+                    </el-table-column>
+                  </el-table>
+                </div>
+              </el-form>
+            </div>
+          </div>
+        </div>
+        <el-row>
+          <el-col :span="22" style="text-align:right; ">
+            <el-button :disabled="dis" type="primary" @click="caseCreateCase(caseData, titleName)">保 存</el-button>
+            <el-button style="margin:9% 0 0 4%;" @click="Return">取 消</el-button>
+          </el-col>
+        </el-row>
+      </el-main>
+    </el-container>
+
+  </div>
+</template>
+
+<script>
+import { createFolderData, createCaseData, updateCaseData, queryCasesData } from '@/api/caseProject.js'
+
+export default {
+  data() {
+    return {
+      startId: '',
+      caseFolderId: '',
+      caseData: {},
+      add_obj: {},
+      btn_show: true,
+      plus: true,
+      dis: false,
+      id: '',
+      titleName: '',
+      uptataKey: [],
+      createFormData: {
+        caseCondition: [{ required: true, message: '前置条件不能为空', trigger: 'change' }],
+        api: [{ required: true, message: '对应接口不能为空', trigger: 'change' }],
+        casePriority: [{ required: true, message: '用例优先级不能为空', trigger: 'change' }]
+      },
+      textarea: '',
+      priorityStrings: [{ name: 'p0', value: 0 }, { name: 'p1', value: 1 }, { name: 'p2', value: 2 }, { name: 'p3', value: 3 }],
+      arr: [`<div style="box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04); margin-bottom:2%;"><el-form ref="caseData" :model="caseData" label-width="90pt"><el-row><el-col :span="20" style="margin:2% 0 0 0; white-space:nowrap;"><el-form-item label="执行步骤"><el-input v-model="textarea" type="textarea" :rows="4" placeholder="请输入内容" /><el-button id="addData" size="mini" type="primary" icon="el-icon-plus" style="margin-bottom: 6%;" @click="addform" /><el-button id="deleteData" size="mini" icon="el-icon-minus" @click="deleteData" /></el-form-item></el-col></el-row><el-row><el-col :span="22"><el-form-item label="预期结果"><el-input v-model="textarea" placeholder="请输入内容" /></el-form-item></el-col></el-row><div style="display:flex;"><el-row style="flex:1;"><el-col :span="22"><el-form-item label="附件"><el-upload class="upload-demo" drag action="https://jsonplaceholder.typicode.com/posts/" multiple><i class="el-icon-plus avatar-uploader-icon"> 添加图片 </i></el-upload></el-form-item></el-col></el-row><el-row style="flex:1;"><el-col :span="20"><el-form-item label="备注"><el-input v-model="textarea" type="textarea" :rows="8" placeholder="请输入内容" /></el-form-item></el-col></el-row></div></el-form></div>`]
+    }
+  },
+  created() {
+    this.initCode()
+  },
+  methods: {
+    initCode() {
+      if (this.$route.query.data) { // 新增
+        this.titleName = '新增'
+        this.btn_show = false
+        this.startId = this.$route.query.data
+        if (this.$refs['caseData'] !== undefined) {
+          this.$refs['caseData'].resetFields()
+        }
+      }
+
+      if (this.$route.query.id) { // 编辑
+        this.titleName = '编辑'
+        this.startId = this.$route.query.id
+        this.plus = false
+        queryCasesData({ caseFolderId: this.startId }).then(res => {
+          for (var el of res.data.list) {
+            el.caseFolderId === this.startId ? this.caseData = el : ''
+            var obj = JSON.parse(this.caseData.accessory.split('{}')[0])
+            for (var a of obj) {
+              this.uptataKey.push(a)
+            }
+            console.log(this.uptataKey)
+            break
+          }
+        })
+      }
+    },
+    DisableButton() {
+      this.dis = true
+    },
+    getCreateUseData() {
+      if (this.$route.query.data) {
+        console.log(this.$route.query.data)
+        createFolderData(this.formData).then(res => {
+          if (res.code === 200) {
+            this.centerDialogVisible = false
+            this.$message({ type: 'success', message: res.msg, duration: 1000 })
+            this.createCaseCode = false
+            this.dataShow = true
+            this.data1 = []
+            this.AllQueryFolderData()
+          } else {
+            this.errorFun(res.msg)
+          }
+        })
+      }
+    },
+    // 图片上传成功的回调
+    handleAvatarSuccess(res, file) {
+      this.dis = false
+      this.uptataKey.push({ name: file.name, url: file.response.id })
+      console.log(this.uptataKey)
+      // this.imageUrl = URL.createObjectURL(file.raw)
+    },
+
+    // 返回
+    Return() {
+      this.$router.go(-1)
+    },
+
+    // 添加事件
+    addform(vel, e) {
+      this.arr.push(this.$refs.div1.innerHTML)
+      console.log(this.arr)
+      console.log(this.$refs.div1)
+    },
+
+    deleteData(e) {
+      this.arr.splice(e, 1)
+    },
+
+    deleteURL(vel) {
+      console.log(vel)
+      console.log(this.uptataKey)
+      for (var i = 0; i < this.uptataKey.length; i++) {
+        if (this.uptataKey[i].name === vel.name) {
+          this.uptataKey.splice(i, 1)
+        }
+      }
+      // this.uptataKey = this.uptataKey.filter((value) => value.url !== vel.url)
+    },
+
+    // 新建Data
+    caseCreateCase(vel, e) {
+      debugger
+      if (e === '编辑') {
+        this.caseData = vel
+        this.caseData.accessory = JSON.stringify(this.uptataKey)
+        updateCaseData(this.caseData).then(res => {
+          this.$message({ type: 'success', message: res.msg })
+          this.$router.go(-1)
+        })
+      }
+      if (e === '新增') {
+        this.$refs['caseData'].validate((valid) => {
+          if (valid) {
+            this.caseData = vel
+            this.caseData.accessory = JSON.stringify(this.uptataKey)
+            this.caseData.creator = this.userInformation
+            this.caseData.creatorName = this.userNames
+            this.caseData.modifier = this.userInformation
+            this.caseData.pageSize = 5
+            this.caseData.curIndex = 0
+            this.caseData.caseFolderId = this.startId
+            this.caseData.bizId = this.bizJson
+            createCaseData(this.caseData).then(res => {
+              if (res.code === 200) {
+                this.gridData = res.data
+                this.$message({ type: 'success', message: res.msg, duration: 1000 })
+              } else {
+                this.$notify({ title: '提示', message: res.msg, duration: 1000 })
+              }
+            })
+          }
+        })
+      }
+    }
+  }
+}
+</script>
+
+<style>
+.cla .el-table td {
+  padding:0px;
+}
+.deleteSty {
+  cursor: pointer;
+  border: none;
+}
+.bgColorSz {
+    width: 100%;
+    height: 96vh;
+    background: #F2F3F6;
+    font-size: 0.9rem;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
+  .avatar-uploader-icon {
+    font-size: 20px;
+    color: #8c939d;
+    width: 178px;
+    height: 178px;
+    line-height: 178px;
+    text-align: center;
+  }
+</style>

+ 92 - 0
src/views/Platform/useCase/queryUse.vue

@@ -0,0 +1,92 @@
+<template>
+  <div id="window-judge" style="background:#F2F3F6;min-height:95vh;">
+    <el-container>
+      <el-main style="background:#ffffff;height:auto; width:94%;margin:3%; font-size:14px;border-radius:8px;">
+        <el-form label-position="left" label-width="100px" :model="formLabelAlign">
+          <el-form-item label="用例优先级:">
+            {{ formLabelAlign.casePriority }}
+          </el-form-item>
+          <el-form-item label="API:">
+            {{ formLabelAlign.api }}
+          </el-form-item>
+          <el-form-item label="前置条件:">
+            {{ formLabelAlign.caseCondition }}
+          </el-form-item>
+          <el-form-item label="预期结果:">
+            {{ formLabelAlign.expectedResult }}
+          </el-form-item>
+          <el-form-item label="附件:" />
+          <el-table :data="uptataKey" fit border style="width: 70%; margin: 0% 0 2% 0;">
+            <el-table-column label="name" min-width="150">
+              <template slot-scope="scope">{{ scope.row.name }}</template>
+            </el-table-column>
+            <el-table-column label="URL" min-width="300">
+              <template slot-scope="scope"><a :href="scope.row.url" style="color:blue;">{{ scope.row.url }}</a></template>
+            </el-table-column>
+          </el-table>
+          <el-form-item label="备注:">
+            {{ formLabelAlign.remark }}
+          </el-form-item>
+          <el-form-item label="创建人:">
+            {{ formLabelAlign.creatorName }}
+          </el-form-item>
+          <el-form-item label="操作人:">
+            {{ formLabelAlign.modifier }}
+          </el-form-item>
+          <el-form-item label="创建时间:">
+            {{ formLabelAlign.createTime }}
+          </el-form-item>
+          <el-form-item label="修改时间:">
+            {{ formLabelAlign.modifyTime }}
+          </el-form-item>
+        </el-form>
+        <div align="center" style="margin: 5% 0;">
+          <el-button @click="Return">返 回</el-button>
+        </div>
+      </el-main>
+    </el-container>
+  </div>
+</template>
+
+<script>
+import { queryCase } from '@/api/caseProject.js'
+export default {
+  data() {
+    return {
+      formLabelAlign: {},
+      caseFolderId: '',
+      id: '',
+      uptataKey: []
+    }
+  },
+  created() {
+    this.initCode()
+  },
+
+  methods: {
+    initCode() {
+      this.id = this.$route.query.data.id
+      this.caseFolderId = this.$route.query.data.caseFolderId
+      queryCase({ id: this.id, caseFolderId: this.caseFolderId }).then(res => {
+        for (var el of res.data.list) {
+          el.id === this.id ? this.formLabelAlign = el : ''
+          var obj = JSON.parse(this.formLabelAlign.accessory.split('{}')[0])
+          for (var a of obj) {
+            this.uptataKey.push(a)
+          }
+          console.log(this.uptataKey)
+          break
+        }
+      })
+    },
+
+    // 返回
+    Return() {
+      this.$router.go(-1)
+    }
+  }
+}
+</script>
+
+<style>
+</style>

+ 3 - 0
src/views/Platform/useCase/test.vue

@@ -0,0 +1,3 @@
+<template>
+  <router-view />
+</template>

+ 202 - 296
src/views/Platform/useCasePage.vue

@@ -1,208 +1,133 @@
 <template>
-  <div>
-    <el-container>
-      <el-aside width="150pt">
-        <el-dialog title="提示" :visible.sync="centerDialogVisible" width="30%" center>
-          <el-form :model="formData">
-            <el-form-item label="目录名称 :"><el-input v-model="formData.folderName" autocomplete="off" style="width: 280px" /></el-form-item>
-          </el-form>
-          <span slot="footer" class="dialog-footer">
-            <el-button type="primary" @click="deleteCodeData(formData), centerDialogVisible = false">删除当前目录</el-button>
-            <el-button type="primary" @click="createCase(formData)">新 增</el-button>
-          </span>
-        </el-dialog>
-        <div v-show="createCaseCode" style="background: #E9EEF3; height:93vh; text-align:center; padding:50% 0;">
-          <p>请先创建任务,再继续·····</p>
-          <el-button type="primary" @click="changeStartId">新 增</el-button>
-        </div>
-        <el-tree
-          v-show="dataShow"
-          style="background: #E9EEF3; height:93vh; padding:15%;"
-          :data="data1"
-          node-key="id"
-          draggable
-          :allow-drop="allowDrop"
-          :allow-drag="allowDrag"
-          @node-drag-start="handleDragStart"
-          @node-drag-enter="handleDragEnter"
-          @node-drag-leave="handleDragLeave"
-          @node-drag-over="handleDragOver"
-          @node-drag-end="handleDragEnd"
-          @node-drop="handleDrop"
-          @node-contextmenu="createUpdate"
-          @node-click="clickFun"
-        />
-      </el-aside>
-      <el-container>
-        <el-header style="height: auto; width:100%; font-size:14px; text-align:right">
-          <el-row>
-            <el-col :span="23" style="white-space:nowrap;">
-              <div class="headerStyle">api接口 <el-input v-model="createParticipation.api" placeholder="api接口" clearable style="width: 16.3%;margin-right:5px;" class="filter-item" />
-                优先级
-                <el-select v-model="createParticipation.casePriority" style="width: 20%;margin-right:5px;" clearable placeholder="优先级">
-                  <el-option v-for="item in priorityStrings" :key="item.value" :label="item.name" :value="item.value" />
-                </el-select>
-                用例名
-                <el-input v-model="createParticipation.folderName" placeholder="用例名" clearable style="width: 20%;" class="filter-item" />
-                <el-button class="headerStyle" style="margin-left:6%;" type="primary" @click="exportExcel">导出</el-button>
-                <el-button class="headerStyle" type="primary" @click="queryCaseData(createParticipation)">查询</el-button>
-              </div>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="23" style="white-space:nowrap;">
-              <div class="demonstration headerStyle">创建时间
-                <el-date-picker v-model="createParticipation.createTime" style="width:20%;margin-right:5px;" type="datetime" placeholder="开始日期" />-
-                <el-date-picker v-model="createParticipation.modifyTime" style="width:20%;margin-right:5px;" type="datetime" placeholder="结束日期" />
-                创建人 <el-input v-model="createParticipation.creator" placeholder="创建人" clearable style="width: 20%;" class="filter-item" />
-                <input id="imFile" ref="imFile" type="file" style="display: none" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" @change="importFile(this)">
-                <el-button type="primary" style="margin-left:6%;" @click="uploadFile()">导入</el-button>
-                <el-button type="primary" @click="createGetShow">新增</el-button>
-              </div>
-            </el-col>
-          </el-row>
-        </el-header>
-        <el-main>
-          <!-- 主页table -->
-          <el-table :data="gridData" fit height="570vh" tooltip-effect="dark" style="width: 100%" @select-all="clickAllData" @selection-change="handleSelectionChange">
-            <el-table-column type="selection" width="55" align="center" @change="clickAllData(gridData)" />
-            <el-table-column prop="id" label="ID" width="60px" align="center">
-              <template slot-scope="scope">
-                <span>{{ scope.row.id }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="caseName" label="用例名" width="150" align="center">
-              <template slot-scope="scope">
-                <span>{{ scope.row.caseName }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="expectedResult" label="期望结果" width="150" align="center">
-              <template slot-scope="scope">
-                <span>{{ scope.row.expectedResult }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="casePriorityName" label="优先级" width="80" align="center">
-              <template slot-scope="scope">
-                <span>{{ scope.row.casePriorityName }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="creatorName" label="创建人" width="100" align="center">
-              <template slot-scope="scope">
-                <el-tag type="success">{{ scope.row.creatorName }}</el-tag>
-                <!-- <span>{{ scope.row.creatorName }}</span> -->
-              </template>
-            </el-table-column>
-            <el-table-column prop="modifierName" label="修改人" width="100" align="center">
-              <template slot-scope="scope">
-                <span>{{ scope.row.modifierName }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="createTime" label="创建时间" width="200" align="center">
-              <template slot-scope="scope">
-                <span>{{ scope.row.createTime }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column label="操作" min-width="220px" align="center" fixed="right">
-              <template slot-scope="scope">
-                <el-button size="mini" type="primary" @click="queryGetShow(gridData)">查看</el-button>
-                <el-button size="mini" type="primary" @click="updateGetShow(scope.row)">编辑</el-button>
-                <el-button size="mini" type="primary" @click="deleteCaseData(scope.row.id)">删除</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-          <!-- 导出文件内容 -->
-          <el-table v-show="false" id="out-table" :data="tableData" fit height="570vh" tooltip-effect="dark" style="width: 100%">
-            <el-table-column type="index" prop="ids" label="序号" width="50" />
-            <!-- <el-table-column prop="ids" label="序号" /> -->
-            <el-table-column prop="caseName" label="用例名" />
-            <el-table-column prop="description" label="用例描述" />
-            <el-table-column prop="expectedResult" label="期望结果" />
-            <el-table-column prop="api" label="对应api" />
-            <el-table-column prop="projectTypeName" label="项目类型" />
-            <el-table-column prop="taskTypeName" label="平台类型" />
-            <el-table-column prop="casePriorityName" label="用例优先级" />
-            <el-table-column prop="moduleTypeName" label="模块名" />
-            <el-table-column prop="creatorName" label="创建人" />
-            <el-table-column prop="modifierName" label="修改人" />
-            <el-table-column prop="remark" label="备注" />
-            <el-table-column prop="createTime" label="创建时间" />
-          </el-table>
-          <el-pagination :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="100" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
-        </el-main>
-      </el-container>
-    </el-container>
-    <!-- 新增-编辑 -->
-    <el-dialog :title="titleName" :visible.sync="dialogFormVisibleUpdate" width="80%">
-      <el-form ref="caseData" :model="caseData" label-width="90pt" :rules="createFormData">
-        <div style="display:flex;">
-          <div style="flex:1;">
-            <el-form-item label="用例名" prop="caseName"><el-input v-model="caseData.caseName" clearable autocomplete="off" style="width: 200px" /></el-form-item>
-            <el-form-item label="期望结果" prop="expectedResult"><el-input v-model="caseData.expectedResult" clearable autocomplete="off" style="width: 200px" /></el-form-item>
-            <el-form-item label="对应api" prop="api"><el-input v-model="caseData.api" clearable autocomplete="off" style="width: 200px" /></el-form-item>
-          </div>
-          <div style="flex:1;">
-            <el-form-item label="项目类型" prop="projectType">
-              <el-select v-model="caseData.projectType" clearable placeholder="项目类型" style="width: 200px">
-                <el-option v-for="item in projectTypeStrings" :key="item.value" :label="item.name" :value="item.value" />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="平台类型" prop="taskType">
-              <el-select v-model="caseData.taskType" clearable placeholder="任务类型" style="width: 200px" @change="taskTypeChange(caseData.taskType)">
-                <el-option v-for="item in taskTypeStrings" :key="item.value" :label="item.name" :value="item.value" />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="用例优先级" prop="casePriority">
-              <el-select v-model="caseData.casePriority" clearable placeholder="用例优先级" style="width: 200px">
-                <el-option v-for="item in priorityStrings" :key="item.value" :label="item.name" :value="item.value" />
-              </el-select>
-            </el-form-item>
-          </div>
-          <div style="flex:1;">
-            <el-form-item v-show="moduleTypeShow" label="模块名" prop="casePriority">
-              <el-select v-model="caseData.moduleType" clearable placeholder="模块类型" style="width: 200px">
-                <el-option v-for="item in moduleTypeStr" :key="item.id" :label="item.moduleName" :value="item.id" />
-              </el-select>
-            </el-form-item>
-          </div>
-        </div>
-        <el-form-item label="用例描述" prop="description"><el-input v-model="caseData.description" clearable type="textarea" style="width: 95%" :rows="5" placeholder="请输入内容" /></el-form-item>
-        <el-form-item label="备注"><el-input v-model="caseData.remark" clearable type="textarea" style="width: 95%" :rows="5" placeholder="请输入内容" /></el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="dialogFormVisibleUpdate = false">关 闭</el-button>
-        <el-button type="primary" @click="caseCreateCase(caseData, titleName)">确 定</el-button>
+  <div id="init-window" style="position:relative; min-height:95vh; background:#F2F3F6;">
+    <router-view />
+    <div style="position: absolute;width: 100%;">
+      <div style="background:#F2F3F6;">
+        <el-container>
+          <el-aside width="150pt" style="margin:2.5% 0 2.5% 2.5%; border-radius:8px;">
+            <el-dialog title="提示" :visible.sync="centerDialogVisible" width="30%" center>
+              <el-form :model="formData">
+                <el-form-item label="目录名称 :"><el-input v-model="formData.folderName" autocomplete="off" style="width: 280px" /></el-form-item>
+              </el-form>
+              <span slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="deleteCodeData(formData), centerDialogVisible = false">删除当前目录</el-button>
+                <el-button type="info" @click="createCase(formData)">新增</el-button>
+              </span>
+            </el-dialog>
+            <div v-show="createCaseCode" style="background: #E9EEF3; height:80vh; text-align:center; padding:50% 0;">
+              <p>请先创建文件夹 ·····</p>
+              <el-button type="primary" @click="changeStartId">新</el-button>
+            </div>
+            <div style="background: #fff; height:73vh; padding:15%;">
+              <el-tree
+                v-show="dataShow"
+                :data="data1"
+                node-key="id"
+                draggable
+                :allow-drop="allowDrop"
+                :allow-drag="allowDrag"
+                @node-drag-start="handleDragStart"
+                @node-drag-enter="handleDragEnter"
+                @node-drag-leave="handleDragLeave"
+                @node-drag-over="handleDragOver"
+                @node-drag-end="handleDragEnd"
+                @node-drop="handleDrop"
+                @node-contextmenu="createUpdate"
+                @node-click="clickFun"
+              />
+              <el-input v-show="Folder_Show" ref="input1" v-model="add_Folder" placeholder="新建文件夹" clearable @blur="hide_input(add_Folder)" />
+            </div>
+            <div style="background: #fff; padding:15%; text-align: center;"><el-button icon="el-icon-circle-plus" style="border:none;" @click="createFolder">新建文件夹</el-button></div>
+          </el-aside>
+          <el-container>
+            <el-header style="background:#ffffff;height:auto; width:94%;margin:3%; font-size:14px;border-radius:8px;">
+              <el-row>
+                <el-col style="white-space:nowrap; display: flex; justify-content: center; align-items: center;margin-top:1.3%;">
+                  前置条件
+                  <el-input v-model="createParticipation.caseCondition" clearable placeholder="请输入内容" style="margin-left:1%;" />
+                  <el-button style="margin-left:1%;" type="primary" @click="queryCaseData(createParticipation)">查询</el-button>
+                  <el-button @click="createGetShow">新增</el-button>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col style="white-space:nowrap; display: flex; justify-content: center; align-items: center;margin:1.3% 0;">
+                  <div style="width:50%;white-space:nowrap; display: flex; justify-content: center; align-items: center;">
+                    序 列 号 &nbsp;<el-input v-model="createParticipation.id" placeholder="用例名" clearable style="width: 40%;margin: 0 2.5% 0 2%;" class="filter-item" />
+                    优先级
+                    <el-select v-model="createParticipation.casePriority" style="width: 40%;margin: 0 3% 0 3%;" clearable placeholder="优先级">
+                      <el-option v-for="item in priorityStrings" :key="item.value" :label="item.name" :value="item.value" />
+                    </el-select>
+                  </div>
+                  api接口<el-input v-model="createParticipation.api" placeholder="api接口" clearable style="width: 50%;margin-left:2.5%;" class="filter-item" />
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col style="white-space:nowrap; display: flex; justify-content: center; align-items: center;margin-bottom:1%;">
+                  <div style="width:50%;white-space:nowrap; display: flex; justify-content: center; align-items: center;">
+                    创建时间
+                    <el-date-picker v-model="createParticipation.createTime" style="width:40%;margin: 0 4.5% 0 2%;" type="datetime" placeholder="开始日期" /><span style="margin: 0 1% 0 1% ;"> 一 </span>
+                    <el-date-picker v-model="createParticipation.modifyTime" style="width:40%;margin: 0 3.5% 0 4.5%;" type="datetime" placeholder="结束日期" />
+                  </div>
+                  操作人 <el-input v-model="createParticipation.modifier" placeholder="创建人" clearable style="width: 50%;margin-left:2.5%;" class="filter-item" />
+                  <input id="imFile" ref="imFile" type="file" style="display: none" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" @change="importFile(this)">
+                </el-col>
+              </el-row>
+            </el-header>
+            <el-main style="background:#ffffff; width:94%;margin:0% 3% 3% 3%; font-size:14px;border-radius:8px;">
+              <el-button type="primary" style="margin-left:1%;width:15%;" @click="uploadFile()">导入Excel/Xmind</el-button>
+              <el-button style="margin-left:2%;width:15%;" @click="exportExcel">导出Excel/Xmind</el-button>
+              <el-button style="margin-left:2%;width:15%;" @click="exportExcel">导出Excel模版</el-button>
+              <!-- 主页table -->
+              <el-table :data="gridData" style="width: 100%" @select-all="clickAllData" @selection-change="handleSelectionChange">
+                <el-table-column type="selection" min-width="55" align="center" @change="clickAllData(gridData)" />
+                <el-table-column prop="id" label="序列号" min-width="80px" align="center">
+                  <template slot-scope="scope">{{ scope.row.id }}</template>
+                </el-table-column>
+                <el-table-column prop="caseCondition" :show-overflow-tooltip="true" label="前置条件" min-width="150" align="center">
+                  <template slot-scope="scope">{{ scope.row.caseCondition }}</template>
+                </el-table-column>
+                <el-table-column prop="api" :show-overflow-tooltip="true" label="API" min-width="150" align="center">
+                  <template slot-scope="scope">{{ scope.row.api }}</template>
+                </el-table-column>
+                <el-table-column prop="description" :show-overflow-tooltip="true" label="执行步骤" min-width="150" align="center">
+                  <template slot-scope="scope">{{ scope.row.description }}</template>
+                </el-table-column>
+                <el-table-column prop="casePriority" label="优先级" min-width="60" align="center">
+                  <template slot-scope="scope">{{ scope.row.casePriority }}</template>
+                </el-table-column>
+                <el-table-column prop="creatorName" label="操作人" min-width="100" align="center">
+                  <template slot-scope="scope">{{ scope.row.modifier }}</template>
+                </el-table-column>
+                <el-table-column label="操作" min-width="220px" align="center" fixed="right">
+                  <template slot-scope="scope">
+                    <el-button size="mini" type="primary" @click="queryGetShow(scope.row)">查看</el-button>
+                    <el-button size="mini" type="primary" @click="updateGetShow(scope.row)">编辑</el-button>
+                    <el-button size="mini" type="primary" @click="deleteCaseData(scope.row.id)">删除</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+              <!-- 导出文件内容 -->
+              <el-table v-show="false" id="out-table" :data="tableData" tooltip-effect="dark" style="width: 100%">
+                <el-table-column prop="id" label="序号" width="50" />
+                <el-table-column prop="caseCondition" label="前置条件" />
+                <el-table-column prop="description" label="测试步骤" />
+                <el-table-column prop="expectedResult" label="期望结果" />
+                <el-table-column prop="api" label="对应api" />
+                <el-table-column prop="accessory" label="附件" />
+                <el-table-column prop="casePriority" label="用例优先级" />
+                <el-table-column prop="remark" label="备注" />
+              </el-table>
+              <el-pagination :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+            </el-main>
+          </el-container>
+        </el-container>
       </div>
-    </el-dialog>
-
-    <el-dialog title="查看" :visible.sync="dialogFormVisibleQuery" width="80%">
-      <el-form ref="caseData" :model="caseData" label-width="90pt">
-        <div style="display:flex;">
-          <div style="flex:1;">
-            <el-form-item label="用例名 :">{{ caseData.caseName }}</el-form-item>
-            <el-form-item label="期望结果 :">{{ caseData.expectedResult }}</el-form-item>
-            <el-form-item label="对应接口 :">{{ caseData.api }}</el-form-item>
-          </div>
-          <div style="flex:1;">
-            <el-form-item label="项目类型 :">{{ caseData.projectTypeName }}</el-form-item>
-            <el-form-item label="任务类型 :">{{ caseData.taskTypeName }}</el-form-item>
-            <el-form-item label="用例优先级 :">{{ caseData.casePriorityName }}</el-form-item>
-          </div>
-          <div style="flex:1;">
-            <el-form-item v-show="moduleTypeShow" label="模块类型 :">{{ caseData.moduleTypeName }}</el-form-item>
-          </div>
-        </div>
-        <el-form-item label="用例描述 :">{{ caseData.description }}</el-form-item>
-        <el-form-item label="备注 :">{{ caseData.remark }}</el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="dialogFormVisibleQuery = false">关 闭</el-button>
-      </div>
-    </el-dialog>
+    </div>
   </div>
 </template>
 
 <script>
-import { createFolderData, queryAllFolderData, queryCasesData, createCaseData, updateCaseData, deleteFolderData, deleteCaseData, settingQueryModuleInfoListData, updateFolderData } from '@/api/caseProject.js'
+import { createFolderData, queryAllFolderData, queryCasesData, deleteFolderData, deleteCaseData, settingQueryModuleInfoListData, updateFolderData } from '@/api/caseProject.js'
 import { mockUrl } from '@/apiConfig/api'
 import FileSaver from 'file-saver'
 import axios from 'axios'
@@ -212,13 +137,16 @@ export default {
   name: 'UseCasePage',
   data() {
     return {
+      value: '',
+      Folder_Show: false,
+      add_Folder: '',
       centerDialogVisible: false,
-      dialogFormVisibleQuery: false,
+      // dialogFormVisibleQuery: false,
       moduleTypeShow: false,
       dataShow: true,
       titleName: '',
       createCaseCode: false,
-      dialogFormVisibleUpdate: false,
+      // dialogFormVisibleUpdate: false,
       priorityStrings: [{ name: 'p0', value: 0 }, { name: 'p1', value: 1 }, { name: 'p2', value: 2 }, { name: 'p3', value: 3 }],
       projectTypeStrings: [{ name: 'B端', value: 1 }, { name: 'C端', value: 2 }],
       taskTypeStrings: [{ name: '客户端', value: 1 }, { name: '服务端', value: 2 }],
@@ -254,22 +182,24 @@ export default {
       },
       createTimeData: '',
       userData: '',
+      caseInfo: '',
       pageSize: 5,
       curIndex: 0,
       startId: '',
+      total: 0,
       createParticipation: {},
       moduleTypeStr: [],
       gridData: [],
       caseData: {},
-      createFormData: {
-        caseName: [{ required: true, message: '用例名不能为空', trigger: 'change' }],
-        description: [{ required: true, message: '用例描述不能为空', trigger: 'change' }],
-        expectedResult: [{ required: true, message: '期望结果不能为空', trigger: 'change' }],
-        api: [{ required: true, message: '对应接口不能为空', trigger: 'change' }],
-        projectType: [{ required: true, message: '项目类型不能为空', trigger: 'change' }],
-        taskType: [{ required: true, message: '任务类型不能为空', trigger: 'change' }],
-        casePriority: [{ required: true, message: '用例优先级不能为空', trigger: 'change' }]
-      },
+      // createFormData: {
+      //   caseName: [{ required: true, message: '用例名不能为空', trigger: 'change' }],
+      //   description: [{ required: true, message: '用例描述不能为空', trigger: 'change' }],
+      //   expectedResult: [{ required: true, message: '期望结果不能为空', trigger: 'change' }],
+      //   api: [{ required: true, message: '对应接口不能为空', trigger: 'change' }],
+      //   projectType: [{ required: true, message: '项目类型不能为空', trigger: 'change' }],
+      //   taskType: [{ required: true, message: '任务类型不能为空', trigger: 'change' }],
+      //   casePriority: [{ required: true, message: '用例优先级不能为空', trigger: 'change' }]
+      // },
       dialogTableVisible: false,
       formData: {},
       formLabelWidth: '120px',
@@ -289,8 +219,16 @@ export default {
   },
   mounted() {
     this.imFile = document.getElementById('imFile')
+    this.initWindow()
   },
   methods: {
+    initWindow() {
+      if (!document.getElementById('window-judge')) {
+        document.getElementById('init-window').parentNode.style.overflow = 'auto'
+      } else {
+        document.getElementById('init-window').parentNode.style.overflow = 'hidden'
+      }
+    },
     AllQueryFolderData() {
       this.formData = { bizId: this.bizJson }
       queryAllFolderData(this.formData).then(res => {
@@ -318,7 +256,6 @@ export default {
           }
           this.data1.push(arr)
         }
-        console.log(this.data1)
         if (this.data1.length === 0) {
           this.createCaseCode = true
           this.dataShow = false
@@ -344,19 +281,12 @@ export default {
         curIndex: this.curIndex,
         caseFolderId: this.startId
       }
+
       queryCasesData(this.formData).then(res => {
-        this.gridData = res.data
+        this.gridData = res.data.list
       })
     },
     clickAllData(rows) {
-      // if (rows) {
-      //   rows.forEach(row => {
-      //     this.$refs.multipleTable.toggleRowSelection(row)
-      //   })
-      // } else {
-      //   this.$refs.multipleTable.clearSelection()
-      // }
-
       this.formData = {
         caseFolderId: this.startId
       }
@@ -364,99 +294,72 @@ export default {
         this.tableData = res.data
       })
     },
-    taskTypeChange(ele) {
-      if (ele === 2) {
-        this.moduleTypeShow = true
-      } else {
-        this.moduleTypeShow = false
+    // 隐藏input
+    hide_input(vel) {
+      vel === '' ? vel = '新建文件夹' : ''
+      this.formData = {
+        bizId: this.bizJson,
+        folderName: vel,
+        parentFolderId: this.startId,
+        creator: this.userInformation,
+        modifier: this.userInformation
       }
+      createFolderData(this.formData).then(res => {
+        if (res.code === 200) {
+          this.successFun(res.msg)
+          this.createCaseCode = false
+          this.dataShow = true
+          this.data1 = []
+          this.AllQueryFolderData()
+        } else {
+          this.errorFun(res.msg)
+        }
+      })
+      this.Folder_Show = false
     },
-    // 新增
-    caseCreateCase(vel, e) {
-      if (e === '编辑') {
-        updateCaseData(this.caseData).then(res => {
-          this.successFun()
-          this.dialogFormVisibleUpdate = false
-        })
-      }
-      if (vel !== '' && e === '新增') {
-        this.$refs['caseData'].validate((valid) => {
-          if (valid) {
-            this.caseData = vel
-            this.caseData.creator = this.userInformation
-            this.caseData.creatorName = this.userNames
-            this.caseData.modifier = this.userInformation
-            this.caseData.pageSize = 5
-            this.caseData.curIndex = 0
-            this.caseData.caseFolderId = this.startId
-            this.caseData.bizId = this.bizJson
-            createCaseData(this.caseData).then(res => {
-              if (res.code === 200) {
-                this.gridData = res.data
-                this.successFun()
-                this.dialogFormVisibleUpdate = false
-              } else {
-                this.$notify({ title: '提示', message: res.msg, duration: 2000 })
-              }
-            })
-          }
-        })
-      }
+
+    // 新建文件夹
+    createFolder() {
+      this.Folder_Show = true
+      this.add_Folder = ''
+      setTimeout(() => { this.$refs.input1.focus() }, 100)
     },
     // 查询
     queryCaseData(ele) {
       if (this.createParticipation.caseName === '') return false
       if (this.startId === '') {
-        this.$notify({ title: '提示', message: '请选择目录', duration: 2000 })
+        this.$message({ message: '提示, 👈请选择目录', type: 'success', duration: 1000, offset: 150 })
       } else {
         this.createParticipation = ele
         this.createParticipation.caseFolderId = this.startId
-        this.createParticipation.pageSize = this.pageSize
-        this.createParticipation.curIndex = this.curIndex
         queryCasesData(this.createParticipation).then(res => {
-          this.gridData = res.data
+          this.gridData = res.data.list
         })
       }
     },
     // 查看
     queryGetShow(ele) {
-      if (this.startId === '') {
-        this.$notify({ title: '提示', message: '请选择目录', duration: 2000 })
-      } else {
-        for (var vel of ele) {
-          var obj = vel
-        }
-        if (obj.taskType === 2) { this.moduleTypeShow = true }
-        this.dialogFormVisibleQuery = true
-        this.caseData = {}
-        this.caseData = obj
+      var data = {
+        id: ele.id,
+        caseFolderId: ele.caseFolderId
       }
+      this.$router.push({ path: '/Platform/useCasePage/queryUse', query: { data: data }})
     },
     // 编辑
     updateGetShow(ele) {
-      this.titleName = '编辑'
-      this.caseData = ele
       if (this.startId === '') {
-        this.$notify({ title: '提示', message: '请选择目录', duration: 2000 })
+        this.$message({ message: '提示, 👈请选择目录', type: 'success', duration: 1000, offset: 150 })
       } else {
-        if (ele.taskType === 2) { this.moduleTypeShow = true }
-        this.dialogFormVisibleUpdate = true
+        this.$router.push({ path: '/Platform/useCasePage/createUse', query: { id: this.startId }})
       }
     },
 
     // 新增
     createGetShow() {
-      this.titleName = '新增'
       if (this.startId === '') {
-        this.$notify({ title: '提示', message: '请选择目录', duration: 2000 })
+        this.$message({ message: '提示, 👈请选择目录', type: 'success', duration: 1000, offset: 150 })
       } else {
-        this.dialogFormVisibleUpdate = true
-        // this.caseData = {}
-        this.moduleTypeShow = false
-        // this.$refs['caseData'].resetFields()
-        if (this.$refs['caseData'] !== undefined) {
-          this.$refs['caseData'].resetFields()
-        }
+        this.$router.push({ path: '/Platform/useCasePage/createUse', query: { data: this.startId }})
       }
     },
     // 文件夹新增
@@ -469,6 +372,7 @@ export default {
           creator: this.userInformation,
           modifier: this.userInformation
         }
+
         createFolderData(this.formData).then(res => {
           if (res.code === 200) {
             this.centerDialogVisible = false
@@ -547,7 +451,8 @@ export default {
         caseFolderId: e.id
       }
       queryCasesData(this.formData).then(res => {
-        this.gridData = res.data
+        this.gridData = res.data.list
+        this.total = res.data.total
       })
     },
     deleteCodeData(vel) {
@@ -581,7 +486,7 @@ export default {
     },
     deleteCaseData(e) {
       if (this.startId === '') {
-        this.$notify({ title: '提示', message: '请选择目录', duration: 2000 })
+        this.$message({ message: '提示, 👈请选择目录', type: 'success', duration: 1000, offset: 150 })
       } else {
         this.$confirm('是否确认删除', '确认信息', {
           distinguishCancelAndClose: true,
@@ -589,15 +494,19 @@ export default {
           cancelButtonText: '取消'
         })
           .then(() => {
-            this.formData = { id: e, modifier: this.userInformation }
-            deleteCaseData(this.formData).then(res => {
+            this.caseInfo = { id: e, modifier: this.userInformation }
+            deleteCaseData(this.caseInfo).then(res => {
               if (res.code === 200) {
-                this.$message({ type: 'success', message: '已删除' })
                 this.data1 = []
                 this.AllQueryFolderData()
-                this.createParticipation.caseFolderId = this.startId
-                queryCasesData(this.createParticipation).then(res => {
-                  this.gridData = res.data
+                var data = {
+                  pageSize: this.pageSize,
+                  curIndex: this.curIndex,
+                  caseFolderId: this.startId
+                }
+                queryCasesData(data).then(res => {
+                  this.gridData = res.data.list
+                  this.$message({ type: 'success', message: '已删除' })
                 })
               } else {
                 this.errorFun(res.msg)
@@ -615,7 +524,7 @@ export default {
     },
     exportExcel() {
       if (this.startId === '') {
-        this.$notify({ title: '提示', message: '请选择目录', duration: 2000 })
+        this.$message({ message: '提示,👈请选择目录', type: 'success', duration: 1000, offset: 150 })
       } else {
       /* generate workbook object from table */
         var wb = XLSX.utils.table_to_book(document.querySelector('#out-table'))
@@ -693,7 +602,4 @@ export default {
 </script>
 
 <style>
-.headerStyle {
-  margin:5px 0;
-  }
 </style>

+ 249 - 169
src/views/Platform/workbench.vue

@@ -1,140 +1,156 @@
 <template>
   <!-- -------------------------- 待处理 ----------------------------- -->
+  <div class="bgColorSz">
+    <el-tabs v-model="activeName" class="abc" @tab-click="handleClick">
+      <el-tab-pane label="待处理" name="first">
+        <div class="titStyle">近期代办</div>
+        <div style="height:6em;margin: 1.5% 0% 0% 2%;">
+          <el-button v-show="show1" type="primary" class="itemName" size="small" plain @click="clickNum(1)">{{ oneData.name }}</el-button>
+          <el-button v-show="show2" type="primary" class="itemName" size="small" plain @click="clickNum(2)">{{ oneData1.name }}</el-button>
+          <el-button v-show="show3" type="primary" class="itemName" size="small" plain @click="clickNum(3)">{{ oneData2.name }}</el-button>
+          <el-button v-show="show1" style="margin-bottom:24px;" type="primary" size="mini" @click="clickNum(4)"> · · · </el-button>
+        </div>
+        <!-- <div style="height:6em;margin: 2%;">
+          <el-badge v-show="show1" :value="num1" class="item"><el-button type="primary" class="itemName" size="small" plain @click="clickNum(1)">{{ oneData.name }}</el-button></el-badge>
+          <el-badge v-show="show2" :value="num2" class="item"><el-button type="primary" class="itemName" size="small" plain @click="clickNum(2)">{{ oneData1.name }}</el-button></el-badge>
+          <el-badge v-show="show3" :value="num3" class="item"><el-button type="primary" class="itemName" size="small" plain @click="clickNum(3)">{{ oneData2.name }}</el-button></el-badge>
+          <el-badge v-show="show1" style="margin-bottom:24px;"><el-button type="primary" size="mini" @click="clickNum(4)"> · · · </el-button></el-badge>
+        </div> -->
+        <div style="background:#F2F3F6;padding: 1%;" />
+        <div style="height:50vh%; text-align:center; border-radius:8px;">
+          <div align="center" style="height:55vh;">
+            类型
+            <el-select v-model="bugOrTask1.isBugOrTask" size="medium" style="width: 13%;margin: 2% 5% 2% 1%;" clearable placeholder="类型" @change="getstatus(bugOrTask1.isBugOrTask)">
+              <el-option v-for="item in bugTask" :key="item.value" :label="item.name" :value="item.value" />
+            </el-select>
+            状态
+            <el-select v-model="bugOrTask1.status" size="medium" multiple collapse-tags style="width: 13%;margin: 2% 5% 2% 1%;" clearable placeholder="状态">
+              <el-option v-for="item in bugStatusStr1" :key="item.code" :label="item.name" :value="item.code" />
+            </el-select>
+            优先级
+            <el-select v-model="bugOrTask1.priority" size="medium" style="width: 13%;margin: 2% 5% 2% 1%;" clearable placeholder="优先级">
+              <el-option v-for="item in bugLevelStr" :key="item.code" :label="item.name" :value="item.code" />
+            </el-select>
+            主题 <el-input v-model="bugOrTask1.titles" size="medium" placeholder="主题" clearable style="width: 14%; margin: 2% 5% 2% 1%;" />
 
-  <div style="background:#F2F3F6">
-    <div style="background:#F2F3F6;font-size:0.9rem;margin: 0% 4% 0% 4%;">
-      <el-tabs v-model="activeName" @tab-click="handleClick">
-        <el-tab-pane label="待处理" name="first">
-          <div style="white-space:nowrap;margin:1% 0;"><img v-show="img" style="width:10px;height:10px;margin: 0 1% 0.45% 0" :src="imgUrl"><span class="titStyle">近期代办</span></div>
-          <div style="height:44em;">
-            <el-badge v-show="show1" :value="num1" class="item"><el-button type="primary" class="itemName" size="small" plain @click="clickNum(1)">{{ oneData.name }}</el-button></el-badge>
-            <el-badge v-show="show2" :value="num2" class="item"><el-button type="primary" class="itemName" size="small" plain @click="clickNum(2)">{{ oneData1.name }}</el-button></el-badge>
-            <el-badge v-show="show3" :value="num3" class="item"><el-button type="primary" class="itemName" size="small" plain @click="clickNum(3)">{{ oneData2.name }}</el-button></el-badge>
-            <el-badge v-show="show1" style="margin-bottom:24px;"><el-button type="primary" size="small" @click="clickNum(4)"> 更 多 </el-button></el-badge>
-            <div align="center" style="background:#FFFFFF; height:60vh%; text-align:center; border-radius:8px;">
-              <div align="center" style="height:35em;">
-                类型
-                <el-select v-model="bugOrTask1.isBugOrTask" size="small" style="width: 13%;margin: 2% 5% 2% 1%;" clearable placeholder="类型" @change="getstatus(bugOrTask1.isBugOrTask)">
-                  <el-option v-for="item in bugTask" :key="item.value" :label="item.name" :value="item.value" />
-                </el-select>
-                状态
-                <el-select v-model="bugOrTask1.status" size="small" multiple collapse-tags style="width: 13%;margin: 2% 5% 2% 1%;" clearable placeholder="状态">
-                  <el-option v-for="item in bugStatusStr1" :key="item.code" :label="item.name" :value="item.code" />
-                </el-select>
-                优先级
-                <el-select v-model="bugOrTask1.priority" size="small" style="width: 13%;margin: 2% 5% 2% 1%;" clearable placeholder="优先级">
-                  <el-option v-for="item in bugLevelStr" :key="item.code" :label="item.name" :value="item.code" />
-                </el-select>
-                主题 <el-input v-model="bugOrTask1.title" size="small" placeholder="主题" clearable style="width: 14%;margin: 2% 5% 2% 1%;" />
+            <el-button type="primary" size="small" style="margin:2% 0%;" @click="clickQuery(bugOrTask1)">查询</el-button>
 
-                <el-button type="primary" size="small" style="margin:2% 0%;" @click="clickQuery(bugOrTask1)">查询</el-button>
-                <!-- <div align="center" style="height:30em;"> -->
-                <el-table v-if="bug" :data="tableType" border max-height="390" :header-cell-style="getRowClass" style="width:95%;" align="center" @row-click="clickQueryTableTask">
-                  <el-table-column type="index" label="序号" width="150" align="center" />
-                  <el-table-column label="类型" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.isBugOrTask }}</template></el-table-column>
-                  <el-table-column label="主题" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.bugName }}</template></el-table-column>
-                  <el-table-column label="优先级" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.priority }}</template></el-table-column>
-                  <el-table-column label="状态" min-width="100" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.status }}</el-tag></template></el-table-column>
-                  <el-table-column label="最近更新时间" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.gmtModify }}</template></el-table-column>
-                </el-table>
-                <el-table v-if="task" :data="tableType" border max-height="390" :header-cell-style="getRowClass" style="width: 95%" align="center" @row-click="clickQueryTableTask">
-                  <el-table-column type="index" label="序号" width="150" align="center" />
-                  <el-table-column label="类型" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.isBugOrTask }}</template></el-table-column>
-                  <el-table-column label="主题" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
-                  <el-table-column label="优先级" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.priorityString }}</template></el-table-column>
-                  <el-table-column label="状态" min-width="100" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.statusString }}</el-tag></template></el-table-column>
-                  <el-table-column label="最近更新时间" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.modifyTime }}</template></el-table-column>
-                </el-table>
-              </div>
-            </div>
+            <el-table v-if="bug" :data="tableType" border max-height="335" :header-cell-style="getRowClass" style="width:95%;cursor:pointer" align="center" @row-click="clickQueryTableTask">
+              <el-table-column type="index" label="序号" width="150" align="center" />
+              <el-table-column label="类型" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.isBugOrTask }}</template></el-table-column>
+              <el-table-column label="主题" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.bugName }}</template></el-table-column>
+              <el-table-column label="优先级" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.priorityName }}</template></el-table-column>
+              <el-table-column label="状态" min-width="100" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.bugStatusName }}</el-tag></template></el-table-column>
+              <el-table-column label="最近更新时间" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.gmtModify }}</template></el-table-column>
+            </el-table>
+            <el-table v-if="task" :data="tableType" border max-height="335" :header-cell-style="getRowClass" style="width: 95%;cursor:pointer" align="center" @row-click="clickQueryTableTask">
+              <el-table-column type="index" label="序号" width="150" align="center" />
+              <el-table-column label="类型" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.isBugOrTask }}</template></el-table-column>
+              <el-table-column label="主题" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
+              <el-table-column label="优先级" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.priorityString }}</template></el-table-column>
+              <el-table-column label="状态" min-width="100" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.statusString }}</el-tag></template></el-table-column>
+              <el-table-column label="最近更新时间" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.modifyTime }}</template></el-table-column>
+            </el-table>
           </div>
-        </el-tab-pane>
 
-        <!-- ------------------------- 工作统计 ------------------------------ -->
+        </div>
+      </el-tab-pane>
 
-        <el-tab-pane label="工作统计" name="second">
-          <div style="white-space:nowrap;margin:1% 0;"><img v-show="img" style="width:10px;height:10px;margin: 0 1% 0.45% 0" :src="imgUrl"><span class="titStyle">本周统计</span></div>
-          <div style="height:44em;">
-            <el-badge :value="HashSet" class="item"><el-button type="primary" class="itemName" size="small" plain @click="queryClickTable(1)">任务进行中</el-button></el-badge>
-            <el-badge :value="HashSet1" class="item"><el-button type="primary" class="itemName" size="small" plain @click="queryClickTable(2)">任务已上线</el-button></el-badge>
-            <el-badge :value="Vector" class="item"><el-button type="primary" class="itemName" size="small" plain @click="queryClickTable(3)">bug待解决</el-button></el-badge>
-            <el-badge :value="Vector1" class="item"><el-button type="primary" class="itemName" size="small" plain @click="queryClickTable(4)">bug已解决</el-button></el-badge>
+      <!-- ------------------------- 工作统计 ------------------------------ -->
 
-            <div style="background:#FFFFFF; height:60vh%; text-align:center; border-radius:8px;">
-              <div style="white-space:nowrap; padding: 0 2.5%;">
-                时间
-                <el-date-picker v-model="bugOrTask.value2" size="small" style="margin: 2% 6% 2% 1%;" type="datetimerange" :picker-options="pickerOptions" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" align="right" />
-                类型
-                <el-select v-model="bugOrTask.isBugOrTask" size="small" style="width: 13%;  margin: 2% 6% 2% 1%;" clearable placeholder="类型" @change="Setstatus(bugOrTask.isBugOrTask)">
-                  <el-option v-for="item in bugTask" :key="item.value" :label="item.name" :value="item.value" />
-                </el-select>
-                状态
-                <el-select v-model="bugOrTask.status" size="small" style="width: 13%;margin: 2% 6% 2% 1%;" clearable placeholder="状态">
-                  <el-option v-for="item in bugStatusStr" :key="item.value" :label="item.name" :value="item.value" />
-                </el-select>
-                <el-button type="primary" size="small" @click="clickQueryTaskAndBug(bugOrTask)">查询</el-button>
-              </div>
-              <div align="center" style="height:30em;">
-                <el-table v-if="taskShow" :data="tableData" :header-cell-style="getRowClass" border max-height="390" style="width: 95%" align="center" @row-click="clickQueryTableTask">
-                  <el-table-column type="index" label="序号" width="150" align="center" />
-                  <el-table-column label="主题" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
-                  <el-table-column label="类型" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.isBugOrTask }}</template></el-table-column>
-                  <el-table-column label="状态" min-width="100" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.statusString }}</el-tag></template></el-table-column>
-                  <el-table-column label="最近更新时间" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.modifyTime }}</template></el-table-column>
-                </el-table>
+      <el-tab-pane label="工作统计" name="second">
+        <div style="white-space:nowrap;"><img v-show="img" style="width:10px;height:10px;margin: 0 1% 0.45% 0" :src="imgUrl"><span class="titStyle">本周统计</span></div>
+        <div style=" margin: 2% 0 0 2%;">
+          <el-badge :value="HashSet" class="item"><el-button type="primary" class="itemName" size="small" plain @click="queryClickTable(1)">任务进行中</el-button></el-badge>
+          <el-badge :value="HashSet1" class="item"><el-button type="primary" class="itemName" size="small" plain @click="queryClickTable(2)">任务已上线</el-button></el-badge>
+          <el-badge :value="Vector" class="item"><el-button type="primary" class="itemName" size="small" plain @click="queryClickTable(3)">bug待解决</el-button></el-badge>
+          <el-badge :value="Vector1" class="item"><el-button type="primary" class="itemName" size="small" plain @click="queryClickTable(4)">bug已解决</el-button></el-badge>
+        </div>
+        <div style="height:55vh; text-align:center;">
+          <div style="white-space:nowrap; padding: 0 2.5%;">
+            时间
+            <el-date-picker v-model="bugOrTask.value2" size="medium" style="margin: 2% 6% 2% 1%;" type="datetimerange" :picker-options="pickerOptions" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" align="right" />
+            类型
+            <el-select v-model="bugOrTask.isBugOrTask" size="medium" style="width: 13%;  margin: 2% 6% 2% 1%;" clearable placeholder="类型" @change="Setstatus(bugOrTask.isBugOrTask)">
+              <el-option v-for="item in bugTask" :key="item.value" :label="item.name" :value="item.value" />
+            </el-select>
+            状态
+            <el-select v-model="bugOrTask.status" size="medium" multiple collapse-tags style="width: 13%;margin: 2% 6% 2% 1%;" clearable placeholder="状态">
+              <el-option v-for="item in bugStatusStr" :key="item.code" :label="item.name" :value="item.code" />
+            </el-select>
+            <el-button type="primary" size="small" @click="clickQueryTaskAndBug(bugOrTask)">查询</el-button>
+          </div>
+          <div align="center" style="height:auto;">
+            <el-table v-if="taskShow" :data="tableData" :header-cell-style="getRowClass" border max-height="335" style="width: 95%;cursor:pointer" align="center" @row-click="clickQueryTableTask">
+              <el-table-column type="index" label="序号" width="150" align="center" />
+              <el-table-column label="主题" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
+              <el-table-column label="类型" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.isBugOrTask }}</template></el-table-column>
+              <el-table-column label="状态" min-width="100" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.statusString }}</el-tag></template></el-table-column>
+              <el-table-column label="最近更新时间" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.modifyTime }}</template></el-table-column>
+            </el-table>
 
-                <el-table v-if="bugShow" :data="tableData" :header-cell-style="getRowClass" border max-height="390" style="width: 95%" align="center" @row-click="clickQueryTableTask">
-                  <el-table-column type="index" label="序号" width="150" align="center" />
-                  <el-table-column label="主题" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.bugName }}</template></el-table-column>
-                  <el-table-column label="进展" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.stage }}</template></el-table-column>
-                  <el-table-column label="优先级" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.priority }}</template></el-table-column>
-                  <el-table-column label="状态" min-width="100" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.status }}</el-tag></template></el-table-column>
-                  <el-table-column label="最近更新时间" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.gmtModify }}</template></el-table-column>
-                </el-table>
-              </div>
-            </div>
+            <el-table v-if="bugShow" :data="tableData" :header-cell-style="getRowClass" border max-height="335" style="width: 95%;cursor:pointer" align="center" @row-click="clickQueryTableTask">
+              <el-table-column type="index" label="序号" width="150" align="center" />
+              <el-table-column label="主题" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.bugName }}</template></el-table-column>
+              <el-table-column label="进展" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.stageName }}</template></el-table-column>
+              <el-table-column label="优先级" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.priorityName }}</template></el-table-column>
+              <el-table-column label="状态" min-width="100" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.bugStatusName }}</el-tag></template></el-table-column>
+              <el-table-column label="最近更新时间" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.gmtModify }}</template></el-table-column>
+            </el-table>
           </div>
-        </el-tab-pane>
-      </el-tabs>
+        </div>
+      </el-tab-pane>
+    </el-tabs>
+
+    <!-- 项目展示 -->
+    <el-dialog tltle="详情" :visible.sync="dialogTableVisible" width="70%">
+      <el-table :data="gridData" max-height="390" style="cursor:pointer" @row-click="clickQueryTable">
+        <el-table-column type="index" label="序号" min-width="120" align="center" />
+        <el-table-column label="主题" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
+        <el-table-column label="进展" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.stageString }}</template></el-table-column>
+        <el-table-column label="优先级" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.priorityString }}</template></el-table-column>
+        <el-table-column label="状态" min-width="120" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.statusString }}</el-tag></template></el-table-column>
+        <el-table-column label="最近更新时间" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.modifyTime }}</template></el-table-column>
+      </el-table>
+    </el-dialog>
+
+    <!-- 项目转任务 -->
+    <el-dialog tltle="详情" :visible.sync="dialogTableVisible0" width="70%">
+      <el-table :data="gridData3" max-height="390" style="cursor:pointer" @row-click="clickQueryTable1">
+        <el-table-column type="index" label="序号" min-width="120" align="center" />
+        <el-table-column label="主题" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
+        <el-table-column label="进展" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.stageString }}</template></el-table-column>
+        <el-table-column label="优先级" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.priorityString }}</template></el-table-column>
+        <el-table-column label="状态" min-width="120" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.statusString }}</el-tag></template></el-table-column>
+        <el-table-column label="最近更新时间" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.modifyTime }}</template></el-table-column>
+      </el-table>
+    </el-dialog>
 
-      <!-- 项目展示 -->
-      <el-dialog tltle="详情" :visible.sync="dialogTableVisible" width="70%">
-        <el-table :data="gridData" max-height="390" @row-click="clickQueryTable">
-          <el-table-column type="index" label="序号" min-width="120" align="center" />
-          <el-table-column label="平台类型" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.typeString }}</template></el-table-column>
-          <el-table-column label="主题" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
-          <el-table-column label="进展" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.stageString }}</template></el-table-column>
-          <el-table-column label="优先级" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.priorityString }}</template></el-table-column>
-          <el-table-column label="状态" min-width="120" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.statusString }}</el-tag></template></el-table-column>
-          <el-table-column label="最近更新时间" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.modifyTime }}</template></el-table-column>
-        </el-table>
-      </el-dialog>
+    <!-- 任务展示 -->
+    <el-dialog tltle="详情" :visible.sync="dialogTableVisible1" width="70%">
+      <el-table :data="gridData1" max-height="390" style="cursor:pointer" :header-cell-style="getRowClass" @row-click="clickQueryTable2">
+        <el-table-column type="index" label="序号" min-width="120" align="center" />
+        <el-table-column label="主题" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
+        <el-table-column label="进展" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.stageString }}</template></el-table-column>
+        <el-table-column label="平台类型" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.typeString }}</template></el-table-column>
+        <el-table-column label="优先级" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.priorityString }}</template></el-table-column>
+        <el-table-column label="状态" min-width="120" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.statusString }}</el-tag></template></el-table-column>
+        <el-table-column label="最近更新时间" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.modifyTime }}</template></el-table-column>
+      </el-table>
+    </el-dialog>
 
-      <!-- 任务展示 -->
-      <el-dialog tltle="详情" :visible.sync="dialogTableVisible1" width="70%">
-        <el-table :data="gridData1" max-height="390" :header-cell-style="getRowClass" @row-click="clickQueryTable2">
-          <el-table-column type="index" label="序号" min-width="120" align="center" />
-          <el-table-column label="平台类型" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.typeString }}</template></el-table-column>
-          <el-table-column label="主题" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
-          <el-table-column label="进展" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.stageString }}</template></el-table-column>
-          <el-table-column label="优先级" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.priorityString }}</template></el-table-column>
-          <el-table-column label="状态" min-width="120" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.statusString }}</el-tag></template></el-table-column>
-          <el-table-column label="最近更新时间" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.modifyTime }}</template></el-table-column>
-        </el-table>
-      </el-dialog>
+    <!-- 缺陷展 示 -->
+    <el-dialog tltle="详情" :visible.sync="dialogTableVisibleTow" width="70%">
+      <el-table :data="gridData2" max-height="390" style="cursor:pointer" :header-cell-style="getRowClass" @row-click="clickQueryTable3">
+        <el-table-column type="index" label="序号" min-width="120" align="center" />
+        <el-table-column label="主题" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.bugName }}</template></el-table-column>
+        <el-table-column label="类型" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.bugTypeName }}</template></el-table-column>
+        <el-table-column label="优先级" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.priorityName }}</template></el-table-column>
+        <el-table-column label="状态" min-width="120" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.bugStatusName }}</el-tag></template></el-table-column>
+        <el-table-column label="最近更新时间" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.gmtModify }}</template></el-table-column>
+      </el-table>
+    </el-dialog>
 
-      <!-- 缺陷展示 -->
-      <el-dialog tltle="详情" :visible.sync="dialogTableVisibleTow" width="70%">
-        <el-table :data="gridData2" max-height="390" :header-cell-style="getRowClass" @row-click="clickQueryTable3">
-          <el-table-column type="index" label="序号" min-width="120" align="center" />
-          <el-table-column label="主题" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.bugName }}</template></el-table-column>
-          <el-table-column label="进展" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.stage }}</template></el-table-column>
-          <el-table-column label="优先级" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.priority }}</template></el-table-column>
-          <el-table-column label="状态" min-width="120" align="center"><template slot-scope="scope"><el-tag type="success">{{ scope.row.status }}</el-tag></template></el-table-column>
-          <el-table-column label="最近更新时间" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.gmtModify }}</template></el-table-column>
-        </el-table>
-      </el-dialog>
-    </div>
   </div>
 </template>
 <script>
@@ -153,6 +169,7 @@ export default {
       bizJson: localStorage.getItem('key'),
       dialogTableVisible: false,
       dialogTableVisible1: false,
+      dialogTableVisible0: false,
       dialogTableVisibleTow: false,
       img: false,
       clievent: '{ background:#409EFF; color: #FFFFFF;}',
@@ -174,6 +191,7 @@ export default {
       gridData: [],
       gridData1: [],
       gridData2: [],
+      gridData3: [],
       isBugOrTask: '',
       oneData: {},
       oneData1: {},
@@ -182,9 +200,6 @@ export default {
       show1: false,
       show2: false,
       show3: false,
-      num1: '',
-      num2: '',
-      num3: '',
       task: true,
       bug: false,
       bugShow: false,
@@ -193,10 +208,12 @@ export default {
       HashSet1: '',
       Vector: '',
       Vector1: '',
+      selectData: '',
       pickerOptions: {
         shortcuts: [{
           text: '最近一周',
           onClick(picker) {
+            localStorage.setItem('selectData', 0)
             const end = new Date()
             const start = new Date()
             start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
@@ -205,6 +222,7 @@ export default {
         }, {
           text: '最近一个月',
           onClick(picker) {
+            localStorage.setItem('selectData', 1)
             const end = new Date()
             const start = new Date()
             start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
@@ -216,6 +234,7 @@ export default {
   },
   created() {
     this.getTopShowData()
+    this.Setstatus(1)
   },
   methods: {
     // 待处理  list
@@ -225,24 +244,24 @@ export default {
         if (res.code === 200) {
           if (res.data.list[0]) {
             this.oneData = res.data.list[0]
-            this.num1 = res.data.list[0].taskCount
+            // this.num1 = res.data.list[0].taskCount
             this.show1 = true
           }
           if (res.data.list[1]) {
             this.oneData1 = res.data.list[1]
-            this.num2 = res.data.list[1].taskCount
+            // this.num2 = res.data.list[1].taskCount
             this.show2 = true
           }
           if (res.data.list[2]) {
             this.oneData2 = res.data.list[2]
-            this.num3 = res.data.list[2].taskCount
+            // this.num3 = res.data.list[2].taskCount
             this.show3 = true
           }
-          if (this.num1 + this.num2 + this.num3 === 0) {
-            this.img = false
-          } else {
-            this.img = true
-          }
+          // if (this.num1 + this.num2 + this.num3 === 0) {
+          //   this.img = false
+          // } else {
+          //   this.img = true
+          // }
           this.oneData3 = res.data.list
         }
       })
@@ -260,37 +279,46 @@ export default {
       switch (e) {
         case 1:
           this.gridData = this.oneData.taskInfoDOList
+          this.dialogTableVisible = true
           break
         case 2:
           this.gridData = this.oneData1.taskInfoDOList
+          this.dialogTableVisible = true
           break
         case 3:
           this.gridData = this.oneData2.taskInfoDOList
+          this.dialogTableVisible = true
           break
         case 4:
-          this.gridData = this.oneData3
+          this.gridData3 = this.oneData3
+          this.dialogTableVisible0 = true
       }
-      this.dialogTableVisible = true
     },
 
     // 待处理 查询
     clickQuery(e) {
+      e.status === '' ? e.status = [] : ''
       if (e.isBugOrTask === 0 || e.isBugOrTask === 1) {
         this.isBugOrTask = e.isBugOrTask
         this.userName = e
         this.userName.status = e.status
         this.userName.bizId = this.bizJson
         this.userName.handlerPerson = this.userInformation
-        this.userName.title = e.title
+        this.userName.title = e.titles
         personalworkstationQueryBackLogBugAndTask(this.userName).then(res => {
-          res.data.taskInfoList === null ? this.total = res.data.bugBaseInfoList.list.length : this.total = res.data.taskInfoList.length
-          res.data.taskInfoList === null ? this.tableType = res.data.bugBaseInfoList.list : this.tableType = res.data.taskInfoList
-          res.data.taskInfoList === null ? this.task = false : this.task = true
-          res.data.bugBaseInfoList === null ? this.bug = false : this.bug = true
+          if (e.isBugOrTask === 0) {
+            res.data.bugBaseInfoList.list === null ? this.total = 0 : this.total = res.data.bugBaseInfoList.list.length
+            res.data.bugBaseInfoList.list === null ? this.tableType = [] : this.tableType = res.data.bugBaseInfoList.list
+          }
+          if (e.isBugOrTask === 1) {
+            res.data.taskInfoList === null ? this.total = 0 : this.total = res.data.taskInfoList.length
+            res.data.taskInfoList === null ? this.tableType = [] : this.tableType = res.data.taskInfoList
+          }
           for (var a of this.tableType) {
-            this.isBugOrTask === 0 ? this.isBugOrTask = '缺陷' : this.isBugOrTask = '任务'
-            a.isBugOrTask = this.isBugOrTask
+            e.isBugOrTask === 1 ? a.isBugOrTask = '任务' : a.isBugOrTask = '缺陷'
           }
+          res.data.taskInfoList === null ? this.task = false : this.task = true
+          res.data.bugBaseInfoList === null ? this.bug = false : this.bug = true
         })
       } else {
         this.$message({ message: '请选择类型', type: 'success', center: true })
@@ -299,15 +327,16 @@ export default {
 
     // 待处理的缺陷和任务切换
     getstatus(e) {
+      this.$set(this.bugOrTask1, 'status', '')
       this.tableType = []
       this.Informationen.isBugOrTask = e
       this.Informationen.bizId = this.bizJson
       this.Informationen.handlerPerson = this.userInformation
       personalworkstationQueryStatusAndPriority(this.Informationen).then(res => {
-        var statusList = res.data.statusList
+        var backLogStatusList = res.data.backLogStatusList
         var arr = []
-        for (var a in statusList) {
-          arr.push({ 'code': a, 'name': statusList[a] })
+        for (var a in backLogStatusList) {
+          arr.push({ 'code': a, 'name': backLogStatusList[a] })
         }
         var priorityList = res.data.priorityList
         var brr = []
@@ -322,8 +351,9 @@ export default {
     // 工作统计全局list
     handleClick(tab) {
       this.total = 0
+      this.$set(this.bugOrTask, 'isBugOrTask', '任务')
       if (tab.label === '工作统计') {
-        this.userName = { bizId: this.bizJson, handlerPerson: this.userInformation, timeType: 1 }
+        this.userName = { bizId: this.bizJson, handlerPerson: this.userInformation, timeType: 0 }
         personalworkstationQueryPeriodBugAndTask(this.userName).then(res => {
           this.HashSet = res.data.taskInfoDoingList.length
           this.HashSetArray = res.data.taskInfoDoingList
@@ -360,25 +390,31 @@ export default {
 
     // 工作统计查询
     clickQueryTaskAndBug(e) {
+      this.selectData = localStorage.getItem('selectData')
+      if (this.selectData === null) {
+        this.selectData = 2
+      }
+      e.status === '' ? e.status = [] : ''
       this.isBugOrTask = e.isBugOrTask
       if (e.value2) {
         if (e.value2 !== '') {
           var obj = {
             bizId: this.bizJson,
-            timeType: 2,
-            // status: e.status,
+            timeType: this.selectData,
+            status: e.status,
             isBugOrTask: e.isBugOrTask,
             startTime: e.value2[0],
             endTime: e.value2[1],
             handlerPerson: this.userInformation
           }
           personalworkstationQueryPeriodBugAndTask(obj).then(res => {
+            localStorage.removeItem('selectData')
             if (obj.isBugOrTask === 0) {
-              this.tableData = res.data.bugBaseInfoDoingList
+              this.tableData = res.data.bugBaseInfoList.list
               this.bugShow = true
               this.taskShow = false
             } else {
-              this.tableData = res.data.taskInfoDoingList
+              this.tableData = res.data.taskInfoList
               this.bugShow = false
               this.taskShow = true
             }
@@ -397,58 +433,102 @@ export default {
 
     // 工作统计状态切换
     Setstatus(e) {
+      this.$set(this.bugOrTask, 'status', '')
+      this.Informationen.isBugOrTask = e
+      this.Informationen.bizId = this.bizJson
+      this.Informationen.handlerPerson = this.userInformation
+      personalworkstationQueryStatusAndPriority(this.Informationen).then(res => {
+        if (res.code === 200) {
+          var periodStatusList = res.data.periodStatusList
+          var arr = []
+          for (var a in periodStatusList) {
+            arr.push({ 'code': a, 'name': periodStatusList[a] })
+          }
+          this.bugStatusStr = arr
+        // e === 0 ? this.bugStatusStr = arr : this.bugStatusStr = brr
+        }
+      })
       e === 1 ? this.tableData.isBugOrTask = '任务' : this.tableData.isBugOrTask = '缺陷'
-      e === 0 ? this.bugStatusStr = this.bugStatus : this.bugStatusStr = this.taskStatus
     },
 
+    clickQueryTable1(e) {
+      this.$router.push({ path: '/Platform/presentation/projectQuery', query: { id: e.id }})
+    },
     clickQueryTable(e) {
-      this.$router.push({ path: '/Platform/presentation/projectQuery', query: { id: e.projectId }})
+      this.$router.push({ path: '/Platform/presentation/taskQuery', query: { id: e.id }})
     },
     clickQueryTable2(e) {
       this.$router.push({ path: '/Platform/presentation/taskQuery', query: { id: e.id }})
     },
     clickQueryTable3(e) {
-      this.$router.push({ path: '/Platform/presentation/defectManageQuery', query: { id: e.id }})
+      this.$router.push({ path: '/Platform/defectManagement/bugQuery', query: { id: e.id }})
     },
     clickQueryTableTask(e) {
       if (e.isBugOrTask === '任务') {
         this.$router.push({ path: '/Platform/presentation/taskQuery', query: { id: e.id }})
       }
       if (e.isBugOrTask === '缺陷') {
-        this.$router.push({ path: '/Platform/presentation/defectManageQuery', query: { id: e.id }})
+        this.$router.push({ path: '/Platform/defectManagement/bugQuery', query: { id: e.id }})
       }
     }
   }
 }
 </script>
+<style lang="scss">
+  .abc .el-tabs__nav-wrap::after {
+    background-color:#FFFFFF !important;
+  }
+  .el-tabs__nav-scroll {
+    padding: 1% 2% !important;
+  }
+  .item .el-badge__content.is-fixed {
+    right: 50px;
+  }
+</style>
 <style scoped>
-  .titStyle {
-    font-size:25px;
-    color: #333B4A;
-    font-weight:bold;
-    padding:1% 0;
+  .abc {
+    background:#FFFFFF;
+    border-radius:8px;
+    margin: 0 3%;
+    width: 100%;
   }
 
-  .item {
-  margin-top: 0.625em;
-  margin-right: 2.5em;
+  .titStyle {
+    font-size: 20px;
+    color: #333B4A;
+    font-weight: bold;
+    margin-left: 2%;
   }
 
-.item1 {
-  margin-top: 0.3em;
-  margin-right: 0.4em;
+  .bgColorSz {
+    width: 100%;
+    height: 96vh;
+    background: #F2F3F6;
+    font-size: 0.9rem;
+    display: flex;
+    justify-content: center;
+    align-items: center;
   }
 
 .itemName {
-  width: 8.875em;
+  margin-right: 2.5em;
+  width: 13em;
   height: 3.25em;
   font-size: 1em;
   border: 1px solid #BFC6DC;
   border-radius:  0.25em;
   background: #FFFFFF;
   color:#6F7C93;
-  margin-bottom: 25%;
+  margin-bottom: 24%;
+  overflow: hidden;
+  text-overflow:ellipsis;
   }
+
+  .item {
+  margin-top: 10px;
+  margin-right: 4%;
+}
+
 .itemName:hover {
     background:#409EFF;
     color: #FFFFFF;

+ 46 - 26
src/views/home/index.vue

@@ -9,12 +9,14 @@
       @select="handleSelect"
     >
       <img class="logo" src="@/assets/home_images/homepage_logo@2x.png">
-      <el-menu-item style="margin-left: 18.5%" index="1">环境平台</el-menu-item>
+      <el-menu-item style="margin-left: 18.5%" index="4">流程管控</el-menu-item>
+      <el-menu-item index="1">环境平台</el-menu-item>
       <el-menu-item index="2">Mock服务</el-menu-item>
       <el-menu-item index="3">数据中心</el-menu-item>
-      <el-menu-item index="4">流程管控</el-menu-item>
+      <el-menu-item index="6">虚拟硬件</el-menu-item>
+      <el-menu-item index="7">上线质检</el-menu-item>
+      <el-menu-item index="8">质量度量</el-menu-item>
       <el-menu-item index="5" disabled>自动化</el-menu-item>
-      <el-menu-item index="6" disabled>虚拟硬件</el-menu-item>
       <div class="div-login">
         <svg-icon icon-class="yonghu" />
         <el-dropdown style="color: #ffffff" @command="handleCommand">
@@ -45,19 +47,16 @@
       >
       <img style="width: 100%;z-index: -1;" src="@/assets/home_images/banner_pic@3x.png">
     </div>
-    <div class="div-main" style="height: 600pt;width 100%;text-align: center;">
+    <div class="div-main" style="height: 700pt;width 100%;text-align: center;">
       <div style="font-size: 21pt;margin-top: 54pt;color: #333333;">功能介绍</div>
-      <el-card
-        disabled
-        style="margin-left: 0;margin-top: 42pt"
-        shadow="hover"
-        @click.native="handleSelect('1')"
-      >
-        <img
-          class="image-module-logo"
-          src="@/assets/home_images/功能介绍_icon_环境平台@3x.png"
-          fit="contain"
-        >
+
+      <el-card disabled shadow="hover" style="margin-left: 0;margin-top: 42pt" @click.native="handleSelect('4')">
+        <img class="image-module-logo" src="@/assets/home_images/功能介绍_icon_流程管控@3x.png">
+        <div class="div-title">流程管控</div>
+        <div class="div-module-introduction">简单、明了、一站式流程管理</div>
+      </el-card>
+      <el-card shadow="hover" @click.native="handleSelect('1')">
+        <img class="image-module-logo" src="@/assets/home_images/功能介绍_icon_环境平台@3x.png" fit="contain">
         <div class="div-title">环境平台</div>
         <div class="div-module-introduction">全面综合的个性化环境服务</div>
       </el-card>
@@ -66,26 +65,36 @@
         <div class="div-title">Mock服务</div>
         <div class="div-module-introduction">灵活稳定的Mock服务</div>
       </el-card>
-      <el-card shadow="hover" @click.native="handleSelect('3')">
+      <br>
+      <el-card shadow="hover" style="margin-left: 0;margin-top: 36pt;" @click.native="handleSelect('3')">
         <img class="image-module-logo" src="@/assets/home_images/功能介绍_icon_数据中心@3x.png">
         <div class="div-title">数据中心</div>
         <div class="div-module-introduction">数据构造、统计、备份、分析</div>
       </el-card>
+      <el-card shadow="hover" @click.native="handleSelect('6')">
+        <img class="image-module-logo" src="@/assets/home_images/功能介绍_icon_虚拟硬件@3x.png">
+        <div class="div-title">虚拟硬件</div>
+        <div class="div-module-introduction">设备一键生成,自由管控</div>
+      </el-card>
+      <el-card shadow="hover" @click.native="handleSelect('7')">
+        <img class="image-module-logo" src="@/assets/home_images/功能介绍_icon_上线质检@3x.png">
+        <div class="div-title">上线质检</div>
+        <div class="div-module-introduction">细心、精心、用心,品质永保称心</div>
+      </el-card>
       <br>
-      <el-card style="margin-left: 0;margin-top: 36pt;" @click.native="handleSelect('4')">
-        <img class="image-module-logo" src="@/assets/home_images/功能介绍_icon_流程管控@3x.png">
-        <div class="div-title">流程管控</div>
-        <div class="div-module-introduction">简单、明了、一站式流程管理</div>
+      <el-card shadow="hover" style=" margin-left: 0;margin-top: 36pt; " @click.native="handleSelect('8')">
+        <img class="image-module-logo" src="@/assets/home_images/功能介绍_icon_质量度量@3x.png">
+        <div class="div-title">质量度量</div>
+        <div class="div-module-introduction">业务、部门、工程等多维度统计评估</div>
       </el-card>
       <el-card class="expect" shadow="never" @click.native="handleSelect('5')">
         <img class="image-module-logo" src="@/assets/home_images/功能介绍_icon_自动化未上线@3x.png">
         <div class="div-title" style="color: #999999">自动化-敬请期待</div>
         <div class="div-module-introduction">简洁优雅实现自动化</div>
       </el-card>
-      <el-card class="expect" shadow="never" @click.native="handleSelect('6')">
-        <img class="image-module-logo" src="@/assets/home_images/功能介绍_icon_虚拟硬件未上线@3x.png">
-        <div class="div-title" style="color: #999999">虚拟硬件-敬请期待</div>
-        <div class="div-module-introduction">设备一键生成,自由管控</div>
+      <el-card class="expect" shadow="never">
+        <div class="div-title" style="color: #999999" />
+        <div class="div-module-introduction" />
       </el-card>
     </div>
     <div style="height: 180pt;width 100%;background-color: #1B2341;">
@@ -95,7 +104,7 @@
         <br>
         <span>© 2019. All Rights Reserved</span>
       </div>
-      <div class="div-footer2" style="width: 500px;margin-top: 45pt;margin-left: 550pt;">
+      <div class="div-footer2" style="width: 510px;margin-top: 45pt;margin-left: 550pt;">
         <div style="visibility: hidden;">质惠综合测试平台</div>
         <span style="margin-top: 18pt">Mock服务-赵福贵</span>
         <span>数据中心-王丽莎</span>
@@ -106,7 +115,8 @@
         <span>产品设计-郑莉</span>
         <br>
         <span>自动化-陈雅琪</span>
-        <span style="width: 200px">流程管控-郑美双/罗舒宁</span>
+        <span>流程管控-郑美双/罗舒宁</span>
+        <span>UI设计师-汝瑞</span>
         <br>
       </div>
     </div>
@@ -313,6 +323,16 @@ export default {
           break
         case '4' :
           this.$router.push({ name: 'workbench' })
+          break
+        case '6':
+          this.$router.push({ name: '单车' })
+          break
+        case '7':
+          this.$router.push({ name: '上线质检' })
+          break
+        case '8':
+          this.$router.push({ name: '质量度量' })
+          break
       }
     },
     handleScroll() {

+ 126 - 52
src/views/mock/httpmock.vue

@@ -5,12 +5,12 @@
         <el-input v-model="listQuery.id" placeholder="接口ID" style="width: 80px;" class="filter-item" @keyup.enter.native="handleFilter" />
         <el-input v-model="listQuery.customName" placeholder="接口名称" style="width: 150px;" class="filter-item" @keyup.enter.native="handleFilter" />
         <el-input v-model="listQuery.url" placeholder="url" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
-        <el-select v-model="listQuery.method" placeholder="method" style="width: 100px;" class="filter-item" filterable clearable @change="getMethod(listQuery.method)">
-          <el-option v-for="item in envMethod" :key="item.str" :label="item.str" :value="item.str" />
-        </el-select>
-        <el-select v-model="listQuery.returnDataTypeStr" placeholder="返回值data类型" style="width: 200px;" class="filter-item" filterable clearable @change="getDataType(listQuery.returnDataType)">
-          <el-option v-for="item in envSelectDataType" :key="item.code" :label="item.msg" :value="item.code" />
-        </el-select>
+        <!--<el-select v-model="listQuery.method" placeholder="method" style="width: 100px;" class="filter-item" filterable clearable @change="getMethod(listQuery.method)">-->
+        <!--<el-option v-for="item in envMethod" :key="item.str" :label="item.str" :value="item.str" />-->
+        <!--</el-select>-->
+        <!--<el-select v-model="listQuery.returnDataTypeStr" placeholder="返回值data类型" style="width: 200px;" class="filter-item" filterable clearable @change="getDataType(listQuery.returnDataType)">-->
+        <!--<el-option v-for="item in envSelectDataType" :key="item.code" :label="item.msg" :value="item.code" />-->
+        <!--</el-select>-->
         <el-select v-model="listQuery.status" placeholder="状态" style="width: 100px;" class="filter-item" filterable clearable>
           <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
@@ -34,12 +34,12 @@
       <el-table-column label="mockURL" min-width="180px" align="center">
         <template slot-scope="scope"><span>{{ scope.row.mockUrl }}</span></template>
       </el-table-column>
-      <el-table-column label="method" min-min-width="60px">
-        <template slot-scope="{row}"><span>{{ row.method }}</span></template>
-      </el-table-column>
-      <el-table-column label="返回值data类型" min-width="110px" align="center">
-        <template slot-scope="scope"><span>{{ scope.row.returnDataTypeStr }}</span></template>
-      </el-table-column>
+      <!--<el-table-column label="method" min-min-width="60px">-->
+      <!--<template slot-scope="{row}"><span>{{ row.method }}</span></template>-->
+      <!--</el-table-column>-->
+      <!--<el-table-column label="返回值data类型" min-width="110px" align="center">-->
+      <!--<template slot-scope="scope"><span>{{ scope.row.returnDataTypeStr }}</span></template>-->
+      <!--</el-table-column>-->
       <el-table-column label="状态" class-name="status-col" min-width="100">
         <template slot-scope="{row}"><el-tag :type="row.status | statusFilter">{{ statusMaps.get(row.status) }}</el-tag></template>
       </el-table-column>
@@ -47,7 +47,10 @@
         <template slot-scope="scope"><span>{{ scope.row.actualUrl }}</span></template>
       </el-table-column>
       <el-table-column label="创建人" min-width="110px" align="center">
-        <template slot-scope="scope"><span>{{ scope.row.creator }}</span></template>
+        <template slot-scope="scope">{{ scope.row.creator }}</template>
+      </el-table-column>
+      <el-table-column label="更新人" min-width="110px" align="center">
+        <template slot-scope="scope">{{ scope.row.updator }}</template>
       </el-table-column>
       <el-table-column label="更新时间" min-width="150px" align="center">
         <template slot-scope="scope"><span>{{ scope.row.updateTimeStr }}</span></template>
@@ -55,45 +58,57 @@
       <el-table-column v-if="showReviewer" label="备注" min-width="110px" align="center">
         <template slot-scope="scope"><span style="color:red;">{{ scope.row.remark }}</span></template>
       </el-table-column>
-      <el-table-column label="操作" align="center" min-width="370px" class-name="small-padding fixed-width" fixed="right">
+      <el-table-column label="操作" align="center" min-width="410" class-name="small-padding fixed-width" fixed="right">
         <template slot-scope="{row}">
           <el-button type="primary" size="mini" @click="handleCheck(row)">查看</el-button>
           <el-button type="primary" size="mini" @click="handleUpdate(row)">编辑</el-button>
           <el-button type="primary" size="mini" @click="handleCopy(row)">复制</el-button>
           <el-button v-if="row.status!=1" size="mini" type="success" @click="handleModifyStatus(row, 1)">开启</el-button>
           <el-button v-if="row.status!=0" size="mini" type="danger" @click="handleModifyStatus(row, 0)">关闭</el-button>
-          <el-button type="primary" size="mini" @click="redirectTo(row.id, row.customName, methodProtocol)">规则 >></el-button>
+          <el-button type="primary" style="width:auto;" size="mini" @click="redirectTo(row.id, row.customName, methodProtocol)">mock结果 >></el-button>
         </template>
       </el-table-column>
     </el-table>
     <pagination v-show="total>0" :total="total" :page.sync="listQuery.curIndex" :limit.sync="listQuery.pageSize" @pagination="getList" />
     <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="65%">
-      <el-form ref="serviceDataForms" :rules="serviceDataRules" :model="serviceData" label-position="left" label-width="120px" style="width: 500px; margin-left:80px;">
+      <el-form ref="serviceDataForms" :rules="checkRequest" :model="serviceData" label-position="left" label-width="120px" style="width: 500px; margin-left:80px;">
         <el-form-item label="接口名称" prop="customName">
           <el-input v-model="serviceData.customName" :disabled="shouldShow" placeholder="接口名称" />
         </el-form-item>
         <el-form-item label="url" prop="url">
-          <el-input v-model="serviceData.url" :disabled="shouldShow" placeholder="url" />
-        </el-form-item>
-        <el-form-item label="method" prop="method">
-          <el-select v-model="serviceData.method" :disabled="shouldShow" class="filter-item" filterable clearable placeholder="method">
-            <el-option v-for="item in envMethod" :key="item.str" :label="item.str" :value="item.str" />
-          </el-select>
+          <el-input v-model="serviceData.url" :disabled="shouldShow" placeholder="/getUserinfo" />
         </el-form-item>
-        <el-form-item label="返回值data类型" prop="returnDataType">
-          <el-select v-model="serviceData.returnDataTypeStr" :disabled="shouldShow" class="filter-item" filterable clearable placeholder="data类型">
-            <el-option v-for="item in envSelectDataType" :key="item.code" :label="item.msg" :value="item.code" />
-          </el-select>
+        <!--<el-form-item label="method" prop="method">-->
+        <!--<el-select v-model="serviceData.method" :disabled="shouldShow" class="filter-item" filterable clearable placeholder="method">-->
+        <!--<el-option v-for="item in envMethod" :key="item.str" :label="item.str" :value="item.str" />-->
+        <!--</el-select>-->
+        <!--</el-form-item>-->
+        <!--<el-form-item label="返回值data类型" prop="returnDataType">-->
+        <!--<el-select v-model="serviceData.returnDataTypeStr" :disabled="shouldShow" class="filter-item" filterable clearable placeholder="data类型">-->
+        <!--<el-option v-for="item in envSelectDataType" :key="item.code" :label="item.msg" :value="item.code" />-->
+        <!--</el-select>-->
+        <!--</el-form-item>-->
+        <el-form-item label="请求转发" prop="forWard">
+          <el-switch
+            v-model="serviceData.requestForWard"
+            @change="showTrueUrl"
+          />
         </el-form-item>
-        <el-form-item label="真实服务url" prop="actualUrl">
-          <el-input v-model="serviceData.actualUrl" :disabled="shouldShow" placeholder="真实服务url" />
+        <el-form-item v-show="trueUrl" label="真实服务url" prop="actualUrl">
+          <el-input v-model="serviceData.actualUrl" :disabled="shouldShow" placeholder="http://10.179.1.22:8089" />
         </el-form-item>
       </el-form>
-      <span class="showBtn" @mouseover="explain" @mouseout="explain">配置指南</span>
-      <div v-if="showexplain" class="showInfo">
-        <div class="showZm" />
-        <div class="showInfo">配置指南</div>
-      </div>
+      <span class="showBtn">
+        <a href="http://wiki.intra.xiaojukeji.com/pages/viewpage.action?pageId=213729138#id-11%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C-11%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C-%E4%B8%80%E3%80%81%E6%8E%A5%E5%85%A5httpmock" target="_blank">配置指南
+        </a>
+      </span>
+      <!--<div v-if="showexplain" class="showInfo">-->
+      <!--<div class="showZm" />-->
+      <!--<div class="showInfo">-->
+      <!--<a href="http://wiki.intra.xiaojukeji.com/pages/viewpage.action?pageId=213729138#id-11%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C-11%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C-%E4%B8%80%E3%80%81%E6%8E%A5%E5%85%A5httpmock" target="_blank">配置指南-->
+      <!--</a>-->
+      <!--</div>-->
+      <!--</div>-->
       <div slot="footer" class="dialog-footer">
         <el-button @click="dialogFormVisible = false">取消</el-button>
         <el-button v-if="showSubmitBtn" type="primary" @click="dialogStatus==='create'?createData(serviceData):updateData(serviceData)">确定</el-button>
@@ -164,15 +179,18 @@ export default {
         curIndex: 1,
         pageSize: 20,
         sort: '+id',
-        id: null
+        id: null,
+        redirect: ''
       },
       importanceOptions: [1, 2, 3],
-      envSelectDataType: '',
+      envSelectDataType: [],
       envSelections,
       methodProtocol: 'http',
       consumerSelections,
       sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }],
       statusOptions: ['published', 'draft', 'deleted'],
+      userNames: localStorage.getItem('realname'),
+      username: localStorage.getItem('username'),
       showReviewer: false,
       showSubmitBtn: true,
       temp: {
@@ -197,7 +215,10 @@ export default {
         id: '',
         status: 1,
         actualUrl: '',
-        creator: ''
+        creator: '',
+        ruleDesc: '',
+        redirect: '',
+        requestForWard: false
       },
       serviceDataExt: {
         id: 0
@@ -215,7 +236,23 @@ export default {
         url: [{ required: true, message: 'url不能为空', trigger: 'change' }],
         method: [{ required: true, message: 'method不能为空', trigger: 'change' }]
       },
-      downloadLoading: false
+      downloadLoading: false,
+      trueUrl: false,
+      serviceRequestFoward: {
+        customName: [{ required: true, message: '接口名称不能为空', trigger: 'change' }],
+        url: [{ required: true, message: 'url不能为空', trigger: 'change' }],
+        method: [{ required: true, message: 'method不能为空', trigger: 'change' }],
+        actualUrl: [{ required: true, message: '真实服务url不能为空', trigger: 'change' }]
+      }
+    }
+  },
+  computed: {
+    checkRequest: function() {
+      if (this.serviceData.requestForWard) {
+        return this.serviceRequestFoward
+      } else {
+        return this.serviceDataRules
+      }
     }
   },
   created() {
@@ -233,13 +270,13 @@ export default {
         this.listLoading = false
       })
     },
-    explain() {
-      if (this.showexplain === false) {
-        this.showexplain = true
-      } else {
-        this.showexplain = false
-      }
-    },
+    // explain() {
+    //   if (this.showexplain === false) {
+    //     this.showexplain = true
+    //   } else {
+    //     this.showexplain = false
+    //   }
+    // },
     // 获取method方法
     mockGetMethod() {
       this.envMethod = []
@@ -314,7 +351,9 @@ export default {
         id: '',
         status: 1,
         actualUrl: '',
-        creator: ''
+        creator: '',
+        ruleDesc: '',
+        requestForWard: false
       }
     },
     // hearder新增时调用
@@ -324,6 +363,8 @@ export default {
       this.dialogStatus = 'create'
       this.dialogFormVisible = true
       this.showSubmitBtn = true
+      this.serviceData.requestForWard = false
+      this.trueUrl = false
       this.$nextTick(() => {
         this.$refs['serviceDataForms'].clearValidate()
       })
@@ -333,8 +374,12 @@ export default {
       this.$refs['serviceDataForms'].validate((valid) => {
         if (valid) {
           this.serviceData = ele
+          this.serviceData.creator = this.userNames
+          this.serviceData.creatorEn = this.username
+          this.serviceData.updator = ''
           this.serviceData.id = ''
-          this.serviceData.returnDataType === '' ? this.serviceData.returnDataType = '512' : this.serviceData.returnDataType = ele.returnDataTypeStr
+          this.serviceData.returnDataType === 512
+          if (this.serviceData.requestForWard) { this.serviceData.redirect = 1 } else { this.serviceData.redirect = 0 }
           createService(this.serviceData).then(response => {
             if (response.code === 200) {
               this.dialogFormVisible = false
@@ -353,12 +398,13 @@ export default {
         id: row.id,
         url: row.url,
         customName: row.customName,
-        returnDataType: row.returnDataType,
+        returnDataType: '512',
         actualUrl: row.actualUrl,
         creator: row.creator,
         method: row.method,
         // returnDataTypeStr: row.returnDataTypeStr,
-        mockUrl: row.mockUrl
+        mockUrl: row.mockUrl,
+        redirect: row.redirect
       }
       var rowList = row
       this.shouldShow = false
@@ -374,9 +420,14 @@ export default {
           this.serviceData.method = rowList.method
           this.serviceData.returnDataTypeStr = rowList.returnDataTypeStr
           this.serviceData.mockUrl = rowList.mockUrl
+          this.serviceData.redirect = row.redirect
+          if (this.serviceData.redirect === 1) { this.serviceData.requestForWard = true } else { this.serviceData.requestForWard = false }
+          this.serviceData.actualUrl = row.actualUrl
+          this.showTrueUrl()
           this.dialogStatus = 'update'
           this.dialogFormVisible = true
           this.showSubmitBtn = true
+          this.requestForWard = false
           this.$nextTick(() => {
             this.$refs['serviceDataForms'].clearValidate()
           })
@@ -386,7 +437,7 @@ export default {
     // 查看
     handleCheck(row) {
       this.shouldShow = true
-      this.serviceData = row
+      // this.serviceData = row
       // var queryData = { id: row.id }
       // fetchServiceList(queryData).then(response => {
       // var rowData = response.data.mockMethodList
@@ -401,9 +452,16 @@ export default {
       // this.serviceData.method = row.method
       // this.serviceData.returnDataTypeStr = row.returnDataTypeStr
       // this.serviceData.mockUrl = row.mockUrl
+      this.serviceData.customName = row.customName
       this.dialogStatus = 'update'
       this.dialogFormVisible = true
       this.showSubmitBtn = false
+      // this.serviceData.redirect = 1
+      this.serviceData.redirect = row.redirect
+      if (this.serviceData.redirect === 1) { this.serviceData.requestForWard = true } else { this.serviceData.requestForWard = false }
+      this.serviceData.actualUrl = row.actualUrl
+      this.showTrueUrl()
+      // this.serviceData.requestForWard === 'true' ? this.serviceData.redirect === 1 : this.serviceData.redirect
       // this.$nextTick(() => {
       //   this.$refs['serviceDataForms'].clearValidate()
       // })
@@ -427,6 +485,10 @@ export default {
       this.dialogStatus = 'create'
       this.dialogFormVisible = true
       this.showSubmitBtn = true
+      this.serviceData.redirect = row.redirect
+      if (this.serviceData.redirect === 1) { this.serviceData.requestForWard = true } else { this.serviceData.requestForWard = false }
+      this.serviceData.actualUrl = row.actualUrl
+      this.showTrueUrl()
       // this.$nextTick(() => {
       //   this.$refs['serviceDataForms'].clearValidate()
       // })
@@ -444,9 +506,10 @@ export default {
             method: ele.method,
             actualUrl: this.serviceData.actualUrl,
             status: this.serviceData.status,
-            creator: this.serviceData.creator,
-            returnDataType: ele.returnDataTypeStr,
-            mockUrl: this.serviceData.mockUrl
+            updator: this.userNames,
+            returnDataType: '512',
+            mockUrl: this.serviceData.mockUrl,
+            redirect: this.serviceData.redirect
           }
           updateService(tempData).then(response => {
             if (response.code === 200) {
@@ -474,6 +537,17 @@ export default {
       this.$router.push({
         path: `/mock/httpmock/${id}`, query: { mehtodName: mehtodName, methodProtocol: methodProtocol }
       })
+    },
+    showTrueUrl() {
+      if (this.serviceData.requestForWard === true) {
+        this.trueUrl = true
+        this.serviceData.requestForWard = true
+        this.serviceData.redirect = 1
+      } else {
+        this.trueUrl = false
+        this.serviceData.requestForWard = false
+        this.serviceData.redirect = 0
+      }
     }
   }
 }

+ 398 - 257
src/views/mock/httprule.vue

@@ -2,155 +2,168 @@
   <div class="app-container">
     <el-header style="height:auto;!improtant">
       <div class="filter-container" style="padding-bottom: 20px;!improtant">
-        <el-input v-model="listQuery.whenScript" disabled placeholder="any" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
+        <el-input v-model="listQuery.ruleDesc" placeholder="描述" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
         <el-input v-model="listQuery.execSort" placeholder="优先级" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
-        <!-- <el-input-number v-model="listQuery.execSort" label="优先级" :min="1" :max="100" /> -->
         <el-select v-model="listQuery.status" class="filter-item" filterable clearable placeholder="状态">
           <el-option v-for="item in ruleStatus" :key="item.key" :label="item.display_name" :value="item.key" />
         </el-select>
         <!-- <el-input v-model="listQuery.interfaceName" placeholder="接口类" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" /> -->
-        <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">
-          搜索
-        </el-button>
-        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleCreate">
-          新增
-        </el-button>
-        <el-checkbox v-model="showReviewer" class="filter-item" style="margin-left:15px;" @change="tableKey=tableKey+1">
-          显示返回值
-        </el-checkbox>
-        <el-button style="float: right;" type="primary" @click="prev">
-          返回
-        </el-button>
+        <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter"> 搜索 </el-button>
+        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleCreate"> 新增 </el-button>
+        <el-checkbox v-model="showRules" class="filter-item" style="margin-left:15px;" @change="tableKey=tableKey+1"> 显示条件 </el-checkbox>
+        <el-checkbox v-model="showReviewer" class="filter-item" style="margin-left:1%;" @change="tableKey=tableKey+1"> 显示返回值 </el-checkbox>
+        <el-button style="float: right;" type="primary" @click="prev"> 返回 </el-button>
       </div>
     </el-header>
-    <el-table
-      :key="tableKey"
-      v-loading="listLoading"
-      :data="list"
-      fit
-      highlight-current-row
-      style="width: 100%;"
-      :header-cell-style="styleObj"
-      @sort-change="sortChange"
-    >
-      <el-table-column label="规则ID" prop="id" sortable="custom" align="center" min-width="80px">
+    <el-table :key="tableKey" v-loading="listLoading" :data="list" fit highlight-current-row style="width: 100%;">
+
+      <el-table-column label="结果ID" prop="id" sortable="custom" align="center" min-width="80px">
         <template slot-scope="scope">
-          <span>{{ scope.row.id }}</span>
+          <el-popover trigger="hover" placement="top">
+            <p>创建人: {{ scope.row.creator }}</p>
+            <p>更新人: {{ scope.row.updator }}</p>
+            <div slot="reference" class="name-wrapper">
+              {{ scope.row.id }}
+            </div>
+          </el-popover>
         </template>
       </el-table-column>
-      <el-table-column label="接口ID" min-width="80px" align="center">
-        <!-- <template slot-scope="scope"> -->
-        <span>{{ this.$route.path.split('/')[3] }}</span>
-        <!-- </template> -->
-      </el-table-column>
-      <el-table-column label="方法协议" min-width="150px" align="center">
-        <!-- <template slot-scope="scope"> -->
-        <span>{{ this.$route.query.methodProtocol }}</span>
-        <!-- </template> -->
-      </el-table-column>
-      <el-table-column label="规则" min-min-width="60px">
-        <template slot-scope="{row}">
-          <span>{{ row.whenScript }}</span>
-          <!-- <el-tag>{{ row.type | typeFilter }}</el-tag> -->
+
+      <el-table-column label="描述" prop="desc" sortable="custom" align="center" min-width="80px">
+        <template slot-scope="scope">
+          <el-popover trigger="hover" placement="top">
+            <p>创建人: {{ scope.row.creator }}</p>
+            <p>更新人: {{ scope.row.updator }}</p>
+            <div slot="reference" class="name-wrapper">
+              <span v-show="desc">{{ scope.row.ruleDesc|lengthFilter }}</span>
+            </div>
+          </el-popover>
+          <!--<span v-show="listQuery.ruleDescSeen" @mouseleave="descLeave">{{ scope.row.ruleDesc}}</span>-->
         </template>
       </el-table-column>
+
+      <el-table-column label="接口ID" min-width="80px" align="center">
+        {{ this.$route.path.split('/')[3] }}
+      </el-table-column>
+
+      <!--<el-table-column label="方法协议" min-width="150px" align="center">-->
+      <!--&lt;!&ndash; <template slot-scope="scope"> &ndash;&gt;-->
+      <!--<span>{{ this.$route.query.methodProtocol }}</span>-->
+      <!--&lt;!&ndash; </template> &ndash;&gt;-->
+      <!--</el-table-column>-->
+      <!--<el-table-column label="规则" min-min-width="60px">-->
+      <!--<template slot-scope="{row}">-->
+      <!--<span>{{ row.whenScript }}</span>-->
+      <!--&lt;!&ndash; <el-tag>{{ row.type | typeFilter }}</el-tag> &ndash;&gt;-->
+      <!--</template>-->
+      <!--</el-table-column>-->
+
       <el-table-column label="优先级" min-width="110px" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.execSort }}</span>
-        </template>
+        <template slot-scope="scope">{{ scope.row.execSort }}</template>
       </el-table-column>
+
       <el-table-column label="http请求URL" min-width="110px" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.httpUrl }}</span>
-        </template>
+        <template slot-scope="scope">{{ scope.row.httpUrl }}</template>
       </el-table-column>
-      <!-- <el-table-column label="创建人" min-width="110px" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.creator }}</span>
-        </template>
-      </el-table-column> -->
+
       <el-table-column label="状态" class-name="status-col" min-width="100">
         <template slot-scope="{row}">
-          <el-tag :type="row.status | statusFilter">
-            {{ statusMappings.get(row.status) }}
-          </el-tag>
-        </template>
+          <el-tag :type="row.status | statusFilter">{{ statusMappings.get(row.status) }}</el-tag></template>
+      </el-table-column>
+
+      <el-table-column label="创建人" min-width="110px" align="center">
+        <template slot-scope="scope">{{ scope.row.creator }}</template>
+      </el-table-column>
+
+      <el-table-column label="更新人" min-width="110px" align="center">
+        <template slot-scope="scope">{{ scope.row.updator }}</template>
       </el-table-column>
+
+      <el-table-column v-if="showRules" label="条件" min-width="110px" align="center">
+        <template slot-scope="scope"><span style="color:red;">{{ scope.row.metaRuleList }}</span></template>
+      </el-table-column>
+
       <el-table-column v-if="showReviewer" label="返回值" min-width="110px" align="center">
-        <template slot-scope="scope">
-          <span style="color:red;">{{ scope.row.returnMessage }}</span>
-        </template>
+        <template slot-scope="scope"><span style="color:red;">{{ scope.row.returnMessage }}</span></template>
       </el-table-column>
+
       <el-table-column label="操作" align="center" min-width="370" class-name="small-padding fixed-width" fixed="right">
         <template slot-scope="{row}">
-          <el-button type="primary" size="mini" @click="handleCheck(row)">
-            查看
-          </el-button>
-          <el-button type="primary" size="mini" @click="handleUpdate(row)">
-            编辑
-          </el-button>
-          <el-button type="primary" size="mini" @click="handleCopy(row)">
-            复制
-          </el-button>
-          <el-button type="primary" size="mini">
-            测试
-          </el-button>
-          <el-button v-if="row.status!=1" size="mini" type="success" @click="handleModifyStatus(row, 1)">
-            开启
-          </el-button>
-          <el-button v-if="row.status!=0" size="mini" type="danger" @click="handleModifyStatus(row, 0)">
-            关闭
-          </el-button>
+          <el-button type="primary" size="mini" @click="handleCheck(row)"> 查看 </el-button>
+          <el-button type="primary" size="mini" @click="handleUpdate(row)"> 编辑 </el-button>
+          <el-button type="primary" size="mini" @click="handleCopy(row)"> 复制 </el-button>
+          <el-button type="primary" size="mini"> 测试 </el-button>
+          <el-button v-if="row.status!=1" size="mini" type="success" @click="handleModifyStatus(row, 1)"> 开启 </el-button>
+          <el-button v-if="row.status!=0" size="mini" type="danger" @click="handleModifyStatus(row, 0)"> 关闭 </el-button>
         </template>
       </el-table-column>
     </el-table>
+
     <pagination v-show="total>0" :total="total" :page.sync="listQuery.curIndex" :limit.sync="listQuery.pageSize" @pagination="getList" />
-    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="65%" @open="returnMessageData">
-      <el-form ref="ruleDataForm" :rules="roleDataRules" :model="ruleData" label-position="left" label-width="120px" style="width: 500px; margin-left:80px;">
-        <el-form-item label="规则" prop="whenScript">
-          <el-input v-model="ruleData.whenScript" placeholder="any" disabled />
+
+    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="65%" @open="isNotAnyRequest">
+
+      <el-form ref="ruleForm" :rules="rulesCheck" :model="ruleForm" label-width="150px" style="width: 83%;">
+        <el-row v-if="isNotAnyRequest" class="set-Width">
+          <el-col :span="4">
+            <el-form-item label="条件" prop="expression1">
+              <el-select v-model="ruleForm.expression1" clearable placeholder="请选择表达式" style="width: 8vw;" fiterable size="medium" @change="chooseTest1">
+                <el-option v-for="item in expressOptions" :key="item.desc" :label="item.descChn" :value="item.desc" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="4">
+            <el-form-item label="" prop="expression2">
+              <el-input v-model="ruleForm.expression2" clearable placeholder="请输入参数" style="width: 8vw;" filterable size="medium" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="4">
+            <el-form-item label="" prop="judgeType">
+              <el-select v-model="ruleForm.judgeType" clearable placeholder="请选择运算方式" style="width: 8vw;" filterable size="medium">
+                <el-option v-for="item1 in operatorOptions" :key="item1.character" :label="item1.desc" :value="item1.character" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="4">
+            <el-form-item label="" prop="judgeValue">
+              <el-input v-model="ruleForm.judgeValue" clearable placeholder="请输入值" style="width: 8vw;" filterable size="medium" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-form-item v-if="showguiz" label="条件" prop="whenScript">
+          <el-select v-model="ruleForm.whenScript" clearable placeholder="请选择表达式" fiterable @change="chooseTest1">
+            <el-option v-for="item1 in expressOptions" :key="item1.d6sc" :label="item1.descChn" :value="item1.desc" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="描述" prop="ruleDesc" style="width:52vw; white-space:nowrap;">
+          <el-input v-model="ruleForm.ruleDesc" placeholder="请输入描述" />
         </el-form-item>
         <el-form-item label="优先级" prop="execSort">
-          <el-input-number v-model="ruleData.execSort" label="优先级" :min="1" :max="100" title="值越大,优先级越高" />
+          <el-tooltip class="item" effect="light" content="值越大,优先级越高" placement="right">
+            <el-input-number v-model="ruleForm.execSort" label="优先级" :min="1" :max="100" />
+          </el-tooltip>
         </el-form-item>
-        <el-form-item label="返回值" prop="returnMessage">
-          <el-input v-model="ruleData.returnMessage" :autosize="{ minRows: 3, maxRows: 10}" type="textarea" :placeholder="jsonTit" />
+        <el-form-item label="返回值" prop="returnMessage" style="width:52vw;margin-top: 4%;">
+          <el-input v-model="ruleForm.returnMessage" :autosize="{ minRows: 3, maxRows: 10}" type="textarea" :placeholder="jsonTit" />
         </el-form-item>
       </el-form>
+
       <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">
-          取消
-        </el-button>
-        <el-button v-if="showSubmit" type="primary" @click="dialogStatus==='create'?createData():updateData()">
-          确定
-        </el-button>
+        <el-button @click="dialogFormVisible = false"> 取消 </el-button>
+        <el-button v-if="showSubmit" type="primary" @click=" dialogStatus === 'create'?createData(ruleForm):updateData(ruleForm)"> 确定 </el-button>
       </div>
     </el-dialog>
-    <el-dialog :visible.sync="dialogPvVisible" title="Reading statistics">
-      <el-table :data="pvData" border fit highlight-current-row style="width: 100%">
-        <el-table-column prop="key" label="Channel" />
-        <el-table-column prop="pv" label="Pv" />
-      </el-table>
-      <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="dialogPvVisible = false">Confirm</el-button>
-      </span>
-    </el-dialog>
   </div>
 </template>
 
 <script>
-import { fetchEnvInfo, fetchRuleById, fetchRuleList, createRule, updateRule, changeStatus } from '@/api/httprule'
+import { fetchEnvInfo, fetchRuleById, fetchRuleList, createRule, updateRule, changeStatus, getHttpOp, getExpress } from '@/api/httprule'
 import waves from '@/directive/waves' // waves directive
 import { parseTime } from '@/utils'
 import Pagination from '@/components/Pagination' // secondary package based on el-pagination
 
-// var envSelections = []
-
-const ruleStatus = [
-  { key: 1, display_name: '已开启' },
-  { key: 0, display_name: '未开启' },
-  { key: '', display_name: '全部显示' }
-]
+const ruleStatus = [{ key: 1, display_name: '已开启' }, { key: 0, display_name: '未开启' }, { key: '', display_name: '全部显示' }]
 
 export default {
   name: 'Httprule',
@@ -158,79 +171,151 @@ export default {
   directives: { waves },
   filters: {
     statusFilter(status) {
-      const statusMap = {
-        1: 'success',
-        draft: 'info',
-        0: 'danger'
-      }
+      const statusMap = { 1: 'success', draft: 'info', 0: 'danger' }
       return statusMap[status]
+    },
+    lengthFilter(value) {
+      if (value.length >= 20) {
+        return value.slice(0, 20) + '...'
+      }
+      return value
     }
   },
   data() {
     return {
-      styleObj: {
-        'color': 'rgba(0, 0, 0, 0.726)'
+      isAnyshow: false,
+      isNotAnyRequest: false,
+      expression: '',
+      btnReception: {},
+      whenScript: '',
+      userNames: localStorage.getItem('realname'),
+      username: localStorage.getItem('username'),
+      ruleForm: {
+        whenScript: 0,
+        expression1: 'any',
+        maxPrior: -1,
+        minPrior: 100,
+        execSort: 1,
+        ruleDesc: '',
+        metaRuleList: [{ operator: '', expression1: '', expression2: '', judgeType: '', judgeValue: '', and: '', or: '', prior: '', bracket: '' }]
+      },
+      rulesCheck: {
+        metaRuleList: [{ required: true, message: '条件不能为空', trigger: 'change' }],
+        whenScript: [{ required: true, message: '不能条件为空', trigger: 'change' }],
+        execSort: [{ required: true, message: '优先级1-100', trigger: 'change' }],
+        returnMessage: [{ required: true, message: '不能为空', trigger: 'change' }],
+        ruleDesc: [{ required: true, message: '描述不能为空', trigger: 'change' }],
+        expression1: [{ required: true, message: '请输入方法', trigger: 'change' }],
+        expression2: [{ required: true, message: '请输入运算符', trigger: 'change' }],
+        judgeType: [{ required: true, message: '请选择匹配规则', trigger: 'change' }],
+        judgeValue: [{ required: true, message: '请选择参数', trigger: 'change' }]
       },
       tableKey: 0,
       list: null,
       total: 0,
       listLoading: true,
+      showRule: false,
       statusMappings: new Map([[1, '已开启'], [0, '未开启']]),
       ruleStatus,
       listQuery: {
         curIndex: 1,
         pageSize: 20,
-        whenScript: 'any',
+        whenScript: '',
         methodId: 0,
         execSort: null,
         status: null,
         methodName: '',
-        methodProtocol: 'http'
+        methodProtocol: 'http',
+        ruleDesc: '',
+        ruleDescSeen: false,
+        formLabelWidths: '7px',
+        paramtions: {}
       },
       showSubmit: true,
       jsonTit: `{ 'code': 200, 'data': { 'crowdComposition': 'U_866', 'campaignId': 789, 'id': 4606, 'class': 'com.didi.prado.config.api.dto.CampaignCrowdDTO'}}`,
-      sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }],
-      statusOptions: ['published', 'draft', 'deleted'],
+      // sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }],
+      operatorOptions: [],
+      expressOptions: [],
+      expressOptionWithutAny: [],
+      // statusOptions: ['published', 'draft', 'deleted'],
       showReviewer: false,
-      ruleData: {
-        methodId: 0,
-        updator: '',
-        methodName: '',
-        execSort: 1,
-        whenScript: '',
-        returnMessage: '',
-        curIndex: 1,
-        pageSize: 20,
-        methodProtocol: 'http'
-      },
+      metaRule: [],
+      showRules: false,
       dialogFormVisible: false,
+      showguiz: true,
       dialogStatus: '',
       textMap: {
         update: '编辑',
-        create: '新增规则'
-      },
-      dialogPvVisible: false,
-      pvData: [],
-      roleDataRules: {
-        whenScript: [{ required: true, message: '规则不能为空', trigger: 'change' }],
-        execSort: [{ required: true, message: '优先级1-100', trigger: 'change' }],
-        returnMessage: [{ required: true, message: '不能为空', trigger: 'change' }]
-        // interfaceName: [{ required: true, message: '接口名称不能为空', trigger: 'change' }],
-        // serviceVersion: [{ required: true, message: '服务版本不能为空', trigger: 'change' }],
-        // protocol: [{ required: true, message: '请选择协议类型', trigger: 'change' }],
-        // consumerIds: [{ required: false, message: '请选择消费者', trigger: 'change' }],
-        // methodName: [{ required: true, message: '方法名称不能为空', trigger: 'change' }],
-        // methodParamsTypes: [{ required: true, message: '入参类型不能为空', trigger: 'change' }],
-        // returnDataStructure: [{ required: true, message: '返回值类型不能为空', trigger: 'change' }]
+        create: '新增'
       },
-      downloadLoading: false
+      desc: true,
+      dataFrom: {}
     }
   },
   created() {
     this.getList()
     this.getFormatJsonStrFromStringRule(this.jsonTit)
+    this.getHttpOp()
+    this.getExpress()
   },
   methods: {
+    // getExpressOpt(index) {
+    //   if (index === 0) {
+    //     return this.expressOptions
+    //   } else {
+    //     return this.expressOptionWithutAny
+    //   }
+    // },
+    chooseTest1(val) {
+      if (val === 'any') {
+        this.$set(this.ruleForm, 'whenScript', val)
+        this.isNotAnyRequest = false
+        this.showguiz = true
+        this.isAnyshow = true
+      } else {
+        this.$set(this.ruleForm, 'expression1', val)
+        this.exression2
+        this.isNotAnyRequest = true
+        this.showguiz = false
+      }
+      // if (this.ruleForm.metaRuleList[0].expression1 === 'any request') {
+      //   this.isNotAnyRequest = false
+      //   this.isAnyshow = true
+      // } else {
+      //   this.isNotAnyRequest = true
+
+      // this.paramOptions.push(0,0,{ name: 'any', value: 0 })
+      // }
+    },
+
+    // chooseTest2(val) {
+    //   this.expression2 = val
+    // },
+    // chooseTest3(val) {
+    //   this.ruleForm.metaRuleList.judgeType = val
+    // },
+    // chooseTest4(val) {
+    //   this.ruleForm.metaRuleList.judgeValue = val
+    // },
+
+    // 获取运算符
+    getHttpOp() {
+      getHttpOp().then(response => {
+        this.operatorOptions = response.data
+      })
+    },
+    // 获取规则表达式
+    getExpress() {
+      getExpress().then(response => {
+        this.expressOptions = response.data
+        // this.expressOptions.forEach((opt, index) => {
+        //   if (opt.desc === 'any request') {
+        //     return true
+        //   }
+        //   this.expressOptionWithutAny.push(opt)
+        // })
+      })
+    },
     prev() {
       this.$router.go(-1)
     },
@@ -245,7 +330,9 @@ export default {
       })
     },
     returnMessageData() {
-      this.getFormatJsonStrFromStringRule1(this.ruleData.returnMessage)
+      this.showguiz = true
+      this.isNotAnyRequest = false
+      this.getFormatJsonStrFromStringRule1(this.ruleForm.returnMessage)
     },
     getFormatJsonStrFromStringRule: function(jsonStr) {
       var res = ''
@@ -287,10 +374,10 @@ export default {
         res += ele
       }
       // eslint-disable-next-line no-return-assign
-      return this.ruleData.returnMessage = res
+      return this.ruleForm.returnMessage = res
     },
     updateEnvChannel(v) {
-      this.ruleData.envChannel = v
+      this.ruleForm.envChannel = v
       this.envSelections = []
       fetchEnvInfo(v).then(response => {
         for (var sel of response.data) {
@@ -302,88 +389,99 @@ export default {
       })
     },
     handleFilter() {
-      // this.listQuery.page = 1
       this.listQuery.methodStatus = this.listQuery.value
       this.getList()
     },
-    sortChange(data) {
-      const { prop, order } = data
-      if (prop === 'id') {
-        this.sortByID(order)
-      }
-    },
-    sortByID(order) {
-      if (order === 'ascending') {
-        this.listQuery.sort = '+id'
-      } else {
-        this.listQuery.sort = '-id'
-      }
-      this.handleFilter()
-    },
-    resetServiceData() {
-      this.ruleData = {
-        methodId: 0,
-        updator: '',
-        execSort: 1,
-        whenScript: '',
-        returnMessage: '',
-        curIndex: 1,
-        pageSize: 20
-      }
-    },
+    // sortChange(data) {
+    //   const { prop, order } = data
+    //   if (prop === 'id') {
+    //     this.sortByID(order)
+    //   }
+    // },
+    // sortByID(order) {
+    //   if (order === 'ascending') {
+    //     this.listQuery.sort = '+id'
+    //   } else {
+    //     this.listQuery.sort = '-id'
+    //   }
+    //   this.handleFilter()
+    // },
     handleCreate() {
-      this.resetServiceData()
       this.dialogStatus = 'create'
       this.dialogFormVisible = true
       this.showSubmit = true
+      this.ruleForm = {}
+      this.isNotAnyRequest = false
+      this.showguiz = true
+      this.$set(this.ruleForm, 'whenScript', 'any')
+      this.$set(this.ruleForm, 'execSort', '1')
+      this.$set(this.ruleForm, 'returnMessage', '')
+
       this.$nextTick(() => {
-        this.$refs['ruleDataForm'].clearValidate()
+        this.$refs['ruleForm'].clearValidate()
       })
     },
-    createData() {
-      const shouldJson = this.ruleData.returnMessage
-      console.log('dasdsadsad' + typeof (shouldJson))
-      if (this.ruleData.whenScript === '') { this.ruleData.whenScript = 'any' }
-      if (typeof shouldJson === 'string') {
-        this.$refs['ruleDataForm'].validate((valid) => {
+
+    // 新增Data
+    createData(vel) {
+      if (typeof vel.returnMessage === 'string') {
+        this.$refs['ruleForm'].validate((valid) => {
           if (valid) {
-            delete this.ruleData.id
-            this.ruleData.methodProtocol = 'http'
-            this.ruleData.methodId = parseInt(this.$route.path.split('/')[3])
-            createRule(this.ruleData).then(response => {
-              console.log(this.ruleData)
+            this.dataFrom = vel
+            this.dataFrom.creator = this.userNames
+            this.dataFrom.creatorEn = this.username
+            this.dataFrom.updator = ''
+            this.dataFrom.methodId = parseInt(this.$route.path.split('/')[3])
+            this.dataFrom.methodProtocol = 'http'
+            this.dataFrom = vel
+            this.dataFrom = vel
+
+            this.showguiz === false ? this.dataFrom.whenScript = '' : ''
+            this.isNotAnyRequest === false ? this.dataFrom.metaRuleList = [] : this.dataFrom.metaRuleList = [{ 'operator': '', 'expression': vel.expression1 + '.' + vel.expression2, 'judgeType': vel.judgeType, 'judgeValue': vel.judgeValue }]
+            delete this.dataFrom.expression1
+            delete this.dataFrom.expression2
+            delete this.dataFrom.judgeType
+            delete this.dataFrom.judgeValue
+            delete this.dataFrom.id
+
+            createRule(this.dataFrom).then(response => {
               if (response.code === 200) {
                 this.dialogFormVisible = false
                 this.getList()
-                this.$notify({
-                  title: 'Success',
-                  message: 'Created Successfully',
-                  type: 'success',
-                  duration: 2000
-                })
+                this.$notify({ title: 'Success', message: response.msg, type: 'success', duration: 2000 })
               } else {
-                this.$notify({
-                  title: 'Failed',
-                  message: 'Created Failed',
-                  type: 'error',
-                  duration: 2000
-                })
+                this.$notify({ title: 'Failed', message: response.msg, type: 'error', duration: 2000 })
               }
             })
           }
         })
       }
     },
+
+    // 编辑Data
     handleUpdate(row) {
       var queryData = { id: row.id }
       fetchRuleById(queryData).then(response => {
-        var row_data = response.data.mockRuleList
-        this.ruleData = Object.assign({}, row_data[0])
+        this.ruleForm = response.data.mockRuleList[0]
+        if (this.ruleForm.whenScript !== '') {
+          this.isNotAnyRequest = false
+          this.showguiz = true
+        }
+        if (this.ruleForm.metaRuleList.length !== 0) {
+          this.isNotAnyRequest = true
+          this.showguiz = false
+          for (var a of this.ruleForm.metaRuleList) {
+            this.ruleForm.expression1 = a.expression.split('.')[0]
+            this.ruleForm.expression2 = a.expression.split('.')[1]
+            this.ruleForm.judgeType = a.judgeType
+            this.ruleForm.judgeValue = a.judgeValue
+          }
+        }
         this.dialogStatus = 'update'
         this.dialogFormVisible = true
         this.showSubmit = true
         this.$nextTick(() => {
-          this.$refs['ruleDataForm'].clearValidate()
+          this.$refs['ruleForm'].clearValidate()
         })
       })
     },
@@ -395,65 +493,84 @@ export default {
       changeStatus(statusData).then(response => {
         if (response.code === 200) {
           row.status = status
-          this.$message({
-            message: row.id.toString() + ' 操作成功!',
-            type: 'success'
-          })
+          this.$message({ message: row.id.toString() + ' 操作成功!', type: 'success' })
         } else {
-          this.$message({
-            message: row.id.toString() + ' 操作失败!',
-            type: 'danger'
-          })
+          this.$message({ message: row.id.toString() + ' 操作失败!', type: 'danger' })
         }
       })
     },
+
+    // 复制Data
     handleCopy(row) {
-      // this.ruleData = {
-      //   // id: row.id,
-      //   customName: row.customName,
-      //   httpUrl: row.httpUrl,
-      //   execSort: row.execSort,
-      //   whenScript: row.whenScript,
-      //   methodProtocol: row.methodProtocol,
-      //   status: row.status,
-      //   returnMessage: row.returnMessage
-      // }
-      this.ruleData = Object.assign({}, row) // copy obj
-      this.ruleData.timestamp = new Date(this.ruleData.timestamp)
-      this.dialogStatus = 'create'
-      this.dialogFormVisible = true
-      this.showSubmit = true
-      this.$nextTick(() => {
-        this.$refs['ruleDataForm'].clearValidate()
-      })
-    },
-    updateData() {
-      this.$refs['ruleDataForm'].validate((valid) => {
-        if (valid) {
-        //   const tempData = Object.assign({}, this.ruleData)
-          const tempData = {
-            id: this.ruleData.id,
-            methodId: parseInt(this.$route.path.split('/')[3]),
-            updator: '',
-            execSort: this.ruleData.execSort,
-            whenScript: this.ruleData.whenScript,
-            returnMessage: this.ruleData.returnMessage,
-            mehtodName: this.$route.query.methodName,
-            methodProtocol: this.$route.query.methodProtocol
+      var queryData = { id: row.id }
+      fetchRuleById(queryData).then(response => {
+        this.ruleForm = response.data.mockRuleList[0]
+        if (this.ruleForm.whenScript !== '') {
+          this.isNotAnyRequest = false
+          this.showguiz = true
+        }
+        if (this.ruleForm.metaRuleList.length !== 0) {
+          this.isNotAnyRequest = true
+          this.showguiz = false
+          for (var a of this.ruleForm.metaRuleList) {
+            this.$set(this.ruleForm, 'expression1', a.expression.split('.')[0])
+            this.$set(this.ruleForm, 'expression2', a.expression.split('.')[1])
+            this.$set(this.ruleForm, 'judgeType', a.judgeType)
+            this.$set(this.ruleForm, 'judgeValue', a.judgeValue)
           }
-          updateRule(tempData).then(() => {
-            this.getList()
-            this.dialogFormVisible = false
-            this.$notify({
-              title: 'Success',
-              message: 'Update Successfully',
-              type: 'success',
-              duration: 2000
-            })
-          })
         }
+        this.dialogStatus = 'create'
+        this.dialogFormVisible = true
+        this.showSubmit = true
+        this.$nextTick(() => {
+          this.$refs['ruleForm'].clearValidate()
+        })
       })
     },
+
+    // 编辑提交
+    updateData(vel) {
+      if (typeof vel.returnMessage === 'string') {
+        this.$refs['ruleForm'].validate((valid) => {
+          if (valid) {
+            this.dataFrom = vel
+            // this.dataFrom.creator = this.userNames
+            this.dataFrom.updator = this.userNames
+            this.dataFrom.methodId = parseInt(this.$route.path.split('/')[3])
+            this.dataFrom.methodProtocol = 'http'
+            this.dataFrom = vel
+            this.dataFrom = vel
+            if (this.showguiz === false) {
+              delete this.dataFrom.whenScript
+            }
+            // this.showguiz === false ? this.dataFrom.whenScript = '' : ''
+            this.isNotAnyRequest === false ? this.dataFrom.metaRuleList = [] : this.dataFrom.metaRuleList = [{ 'operator': '', 'expression': vel.expression1 + '.' + vel.expression2, 'judgeType': vel.judgeType, 'judgeValue': vel.judgeValue }]
+            delete this.dataFrom.expression1
+            delete this.dataFrom.expression2
+            delete this.dataFrom.judgeType
+            delete this.dataFrom.judgeValue
+            //   const tempData = Object.assign({}, this.ruleData)
+            // const tempData = {
+            //   id: this.ruleForm.id,
+            //   methodId: parseInt(this.$route.path.split('/')[3]),
+            //   updator: '',
+            //   execSort: this.ruleForm.execSort,
+            //   whenScript: this.ruleForm.whenScript,
+            //   returnMessage: this.ruleForm.returnMessage,
+            //   mehtodName: this.$route.query.methodName,
+            //   methodProtocol: this.$route.query.methodProtocol,
+            //   metaRuleList: [],
+            //   ruleDesc: this.ruleForm.ruleDesc
+            // }
+            updateRule(this.dataFrom).then(() => {
+              this.getList()
+              this.dialogFormVisible = false
+              this.$notify({ title: 'Success', message: 'Update Successfully', type: 'success', duration: 2000 })
+            })
+          }
+        })
+      }
+    },
     formatJson(filterVal, jsonData) {
       return jsonData.map(v => filterVal.map(j => {
         if (j === 'timestamp') {
@@ -463,20 +580,43 @@ export default {
         }
       }))
     },
+
+    // 查看
     handleCheck(row) {
       var queryData = { id: row.id }
       fetchRuleById(queryData).then(response => {
-        console.log('aaaaaaaaa' + response)
         var row_data = response.data.mockRuleList
-        this.ruleData = Object.assign({}, row_data[0])
+        this.ruleForm = Object.assign({}, row_data[0])
+        if (this.ruleForm.whenScript !== '') {
+          this.isNotAnyRequest = false
+          this.showguiz = true
+        }
+        if (this.ruleForm.metaRuleList.length !== 0) {
+          this.isNotAnyRequest = true
+          this.showguiz = false
+          for (var a of this.ruleForm.metaRuleList) {
+            this.ruleForm.expression1 = a.expression.split('.')[0]
+            this.ruleForm.expression2 = a.expression.split('.')[1]
+            this.ruleForm.judgeType = a.judgeType
+            this.ruleForm.judgeValue = a.judgeValue
+          }
+        }
         this.dialogStatus = 'update'
         this.dialogFormVisible = true
         this.showSubmit = false
         this.$nextTick(() => {
-          this.$refs['ruleDataForm'].clearValidate()
+          this.$refs['ruleForm'].clearValidate()
         })
       })
     }
+    // descEnter(index, row) {
+    //   this.listQuery.ruleDescSeen = true
+    //   this.desc = false
+    // },
+    // descLeave(row) {
+    //   this.listQuery.ruleDescSeen = false
+    //   this.desc = true
+    // }
   }
 }
 </script>
@@ -484,7 +624,8 @@ export default {
 <style>
 .el-notification.right{
   position: fixed;
-  right: 38.5%;
-}
+  right: 38.5%;}
+  .set-Width .el-form-item__error {
+    width: 90px;
+  }
 </style>
-

+ 29 - 15
src/views/mock/interface.vue

@@ -84,12 +84,21 @@
           <span>{{ scope.row.updateTimeStr }}</span>
         </template>
       </el-table-column>
+
+      <el-table-column label="创建人" min-width="110px" align="center">
+        <template slot-scope="scope">{{ scope.row.creator }}</template>
+      </el-table-column>
+
+      <el-table-column label="更新人" min-width="110px" align="center">
+        <template slot-scope="scope">{{ scope.row.updator }}</template>
+      </el-table-column>
+
       <el-table-column v-if="showReviewer" label="备注" min-width="110px" align="center">
         <template slot-scope="scope">
           <span style="color:red;">{{ scope.row.remark }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" min-width="370px" class-name="small-padding fixed-width" fixed="right">
+      <el-table-column label="操作" align="center" min-width="410px" class-name="small-padding fixed-width" fixed="right">
         <template slot-scope="{row}">
           <el-button type="primary" size="mini" @click="handleCheck(row)">
             查看
@@ -106,8 +115,8 @@
           <el-button v-if="row.methodStatus!=0" size="mini" type="danger" @click="handleModifyStatus(row, 0)">
             关闭
           </el-button>
-          <el-button type="primary" size="mini" @click="redirectTo(row.id, row.methodName)">
-            规则 >>
+          <el-button type="primary" style="width:auto;" size="mini" @click="redirectTo(row.id, row.methodName)">
+            mock结果 >>
           </el-button>
         </template>
       </el-table-column>
@@ -126,7 +135,11 @@
           </el-form-item>
           <el-form-item prop="envId" style="flex:1; margin-left:-120px;">
             <el-select v-model="serviceData.envId" class="filter-item" :title="Edition" style="width: 190px;" filterable placeholder="环境" @change="envUpdate(serviceData.envId)">
-              <el-option v-for="item in envSelections" :key="item.key" :label="item.display_name" :value="item.key" :title="item.registryAddress" />
+              <div v-for="item in envSelections" :key="item.key">
+                <el-tooltip class="item" effect="light" :content="item.registryAddress" placement="right">
+                  <el-option :label="item.display_name" :value="item.key" />
+                </el-tooltip>
+              </div>
             </el-select>
           </el-form-item>
         </div>
@@ -139,11 +152,11 @@
         <el-form-item label="服务版本" prop="serviceVersion">
           <el-input v-model="serviceData.serviceVersion" placeholder="1.0.0_test" />
         </el-form-item>
-        <el-form-item label="协议" prop="protocol">
+        <!-- <el-form-item label="协议" prop="protocol">
           <el-select v-model="serviceData.protocol" class="filter-item" filterable clearable placeholder="协议">
             <el-option v-for="item in protocols" :key="item.key" :label="item.display_name" :value="item.key" />
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="消费者" prop="consumerIds">
           <el-select v-model="serviceData.consumerIds" class="filter-item" multiple placeholder="消费者">
             <el-option v-for="item in consumerSelections" :key="item.key" :label="item.display_name" :value="item.key" />
@@ -255,6 +268,8 @@ export default {
       styleObj: {
         'color': 'rgba(0, 0, 0, 0.726)'
       },
+      userNames: localStorage.getItem('realname'),
+      username: localStorage.getItem('username'),
       tableKey: 0,
       list: null,
       total: 0,
@@ -308,7 +323,7 @@ export default {
         // bizModuleId: 0,
         customName: '',
         interfaceName: '',
-        protocol: '',
+        // protocol: '',
         serviceVersion: '',
         envChannel: 1,
         envId: 0,
@@ -340,7 +355,7 @@ export default {
         envId: [{ required: true, message: '请选择环境', trigger: 'change' }],
         interfaceName: [{ required: true, message: '接口名称不能为空', trigger: 'change' }],
         serviceVersion: [{ required: true, message: '服务版本不能为空', trigger: 'change' }],
-        protocol: [{ required: true, message: '请选择协议类型', trigger: 'change' }],
+        // protocol: [{ required: true, message: '请选择协议类型', trigger: 'change' }],
         consumerIds: [{ required: false, message: '请选择消费者', trigger: 'change' }],
         methodName: [{ required: true, message: '方法名称不能为空', trigger: 'change' }]
         // methodParamsTypes: [{ required: true, message: '入参类型不能为空', trigger: 'change' }],
@@ -524,7 +539,7 @@ export default {
         // bizModuleId: 0,
         customName: '',
         interfaceName: '',
-        protocol: '',
+        // protocol: '',
         serviceVersion: '',
         envChannel: 1,
         envId: 0,
@@ -566,9 +581,9 @@ export default {
           if (typeof this.serviceData.consumerIds === 'object') {
             this.serviceData.consumerIds = '[' + this.serviceData.consumerIds.toString() + ']'
           }
-          // console.log('#######################')
-          // console.log(this.serviceData)
-          // console.log('#######################')
+          this.serviceData.creator = this.userNames
+          this.serviceData.creatorEn = this.username
+          this.$set(this.serviceData, 'updator', '')
           createService(this.serviceData).then(response => {
             // this.list.unshift(this.serviceData)
             // console.log(response)
@@ -685,7 +700,7 @@ export default {
             bizModuleId: this.serviceDataExt.bizModuleId,
             customName: this.serviceData.customName,
             interfaceName: this.serviceData.interfaceName,
-            protocol: this.serviceData.protocol,
+            // protocol: this.serviceData.protocol,
             serviceVersion: this.serviceData.serviceVersion,
             envChannel: this.serviceData.envChannel,
             envId: this.serviceData.envId,
@@ -695,7 +710,7 @@ export default {
             methodStatus: this.serviceData.methodStatus,
             consumerIds: '[' + this.serviceData.consumerIds.toString() + ']',
             remark: this.serviceData.remark,
-            updator: ''
+            updator: this.userNames
           }
           // console.log(tempData)
           updateService(tempData).then(response => {
@@ -730,7 +745,6 @@ export default {
       }))
     },
     redirectTo(id, methodName) {
-      // console.log(id,methodName)
       this.$router.push({
         path: `/mock/interface/${id}`,
         query: {

+ 27 - 31
src/views/mock/rule.vue

@@ -34,10 +34,9 @@
       @sort-change="sortChange"
     >
       <el-table-column label="ID" prop="id" sortable="custom" align="center" min-width="80px">
-        <template slot-scope="scope">
-          <span>{{ scope.row.id }}</span>
-        </template>
+        <template slot-scope="scope">{{ scope.row.id }}</template>
       </el-table-column>
+
       <el-table-column label="方法名" min-width="150px" align="center">
         <!-- <template slot-scope="scope"> -->
         <span>{{ this.$route.query.methodName }}</span>
@@ -51,17 +50,16 @@
         <span>{{ this.$route.path.split('/')[3] }}</span>
         <!-- </template> -->
       </el-table-column>
-      <el-table-column label="规则" min-min-width="60px">
-        <template slot-scope="{row}">
-          <span>{{ row.whenScript }}</span>
-          <!-- <el-tag>{{ row.type | typeFilter }}</el-tag> -->
-        </template>
+
+      <el-table-column label="条件" min-min-width="60px">
+        <template slot-scope="{row}">{{ row.whenScript }} </template>
+        <!-- <el-tag>{{ row.type | typeFilter }}</el-tag> -->
       </el-table-column>
+
       <el-table-column label="优先级" min-width="110px" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.execSort }}</span>
-        </template>
+        <template slot-scope="scope">{{ scope.row.execSort }}</template>
       </el-table-column>
+
       <el-table-column label="状态" class-name="status-col" min-width="100">
         <template slot-scope="{row}">
           <el-tag :type="row.status | statusFilter">
@@ -69,11 +67,19 @@
           </el-tag>
         </template>
       </el-table-column>
+
       <el-table-column label="更新时间" min-width="170px" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.updateTimeStr }}</span>
-        </template>
+        <template slot-scope="scope">{{ scope.row.updateTimeStr }}</template>
       </el-table-column>
+
+      <el-table-column label="创建人" min-width="110px" align="center">
+        <template slot-scope="scope">{{ scope.row.creator }}</template>
+      </el-table-column>
+
+      <el-table-column label="更新人" min-width="110px" align="center">
+        <template slot-scope="scope">{{ scope.row.updator }}</template>
+      </el-table-column>
+
       <el-table-column v-if="showReviewer" label="返回值" min-width="110px" align="center">
         <template slot-scope="scope">
           <span style="color:red;">{{ scope.row.returnMessage }}</span>
@@ -105,7 +111,7 @@
     <pagination v-show="total>0" :total="total" :page.sync="listQuery.curIndex" :limit.sync="listQuery.pageSize" @pagination="getList" />
     <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="65%" @open="returnMessageData">
       <el-form ref="ruleDataForm" :rules="roleDataRules" :model="ruleData" label-position="left" label-width="120px" style="width: 500px; margin-left:80px;">
-        <el-form-item label="规则" prop="whenScript">
+        <el-form-item label="条件" prop="whenScript">
           <el-input v-model="ruleData.whenScript" placeholder="any" disabled />
         </el-form-item>
         <el-form-item label="优先级" prop="execSort">
@@ -174,6 +180,8 @@ export default {
       styleObj: {
         'color': 'rgba(0, 0, 0, 0.726)'
       },
+      userNames: localStorage.getItem('realname'),
+      username: localStorage.getItem('username'),
       tableKey: 0,
       list: null,
       total: 0,
@@ -239,7 +247,6 @@ export default {
       this.listLoading = true
       this.listQuery.methodId = parseInt(this.$route.path.split('/')[3])
       fetchRuleList(this.listQuery).then(response => {
-        console.log(this.listQuery)
         this.list = response.data.mockRuleList
         this.total = response.data.total
         // Just to simulate the time of the request
@@ -250,7 +257,6 @@ export default {
       this.getFormatJsonStrFromStringRule1(this.ruleData.returnMessage)
     },
     getFormatJsonStrFromStringRule: function(jsonStr) {
-      console.log(jsonStr)
       var res = ''
       for (var i = 0, j = 0, k = 0, ii, ele; i < jsonStr.length; i++) { // k:缩进,j:""个数
         ele = jsonStr.charAt(i)
@@ -272,7 +278,6 @@ export default {
       return this.jsonTit = res
     },
     getFormatJsonStrFromStringRule1: function(jsonStr) {
-      console.log(jsonStr)
       var res = ''
       for (var i = 0, j = 0, k = 0, ii, ele; i < jsonStr.length; i++) { // k:缩进,j:""个数
         ele = jsonStr.charAt(i)
@@ -294,7 +299,6 @@ export default {
       return this.ruleData.returnMessage = res
     },
     updateEnvChannel(v) {
-      console.log(v)
       this.ruleData.envChannel = v
       this.envSelections = []
       fetchEnvInfo(v).then(response => {
@@ -355,6 +359,9 @@ export default {
           if (valid) {
             delete this.ruleData.id
             this.ruleData.methodId = parseInt(this.$route.path.split('/')[3])
+            this.ruleData.creator = this.userNames
+            this.ruleData.creatorEn = this.username
+            this.ruleData.updator = ''
             createRule(this.ruleData).then(response => {
               // this.list.unshift(this.serviceData)
               if (response.code === 200) {
@@ -382,13 +389,9 @@ export default {
     handleUpdate(row) {
       var queryData = { id: row.id }
       fetchRuleById(queryData).then(response => {
-        console.log(response)
         var row_data = response.data.mockRuleList
         // this.ruleData.timestamp = new Date(this.temp.timestamp)
-        // console.log(this.ruleData)
-        // console.log(row_data)
         this.ruleData = Object.assign({}, row_data[0])
-        // console.log(this.ruleData)
         this.ruleData.timestamp = new Date(this.ruleData.timestamp)
         this.dialogStatus = 'update'
         this.dialogFormVisible = true
@@ -403,9 +406,7 @@ export default {
         id: row.id,
         status: status
       }
-      // console.log(statusData)
       changeStatus(statusData).then(response => {
-        // console.log(response)
         if (response.code === 200) {
           row.status = status
           this.$message({
@@ -437,8 +438,7 @@ export default {
           const tempData = {
             id: this.ruleData.id,
             methodId: parseInt(this.$route.path.split('/')[3]),
-            creator: '',
-            updator: '',
+            updator: this.userNames,
             execSort: this.ruleData.execSort,
             whenScript: this.ruleData.whenScript,
             returnMessage: this.ruleData.returnMessage,
@@ -477,13 +477,9 @@ export default {
     handleCheck(row) {
       var queryData = { id: row.id }
       fetchRuleById(queryData).then(response => {
-        console.log(response)
         var row_data = response.data.mockRuleList
         // this.ruleData.timestamp = new Date(this.temp.timestamp)
-        // console.log(this.ruleData)
-        // console.log(row_data)
         this.ruleData = Object.assign({}, row_data[0])
-        // console.log(this.ruleData)
         this.ruleData.timestamp = new Date(this.ruleData.timestamp)
         this.dialogStatus = 'update'
         this.dialogFormVisible = true