Browse Source

Merge branch 'product' of http://1.116.113.26:8088/zhuliu/xiaoshi_system into product

zhuhao 1 year ago
parent
commit
bcc552a91c
55 changed files with 2880 additions and 309 deletions
  1. 3 115
      src/App.vue
  2. 82 0
      src/assets/css/main.scss
  3. 3 1
      src/assets/css/theme.css
  4. 49 3
      src/icons/icon2/demo_index.html
  5. 11 3
      src/icons/icon2/iconfont.css
  6. 1 1
      src/icons/icon2/iconfont.js
  7. 14 0
      src/icons/icon2/iconfont.json
  8. BIN
      src/icons/icon2/iconfont.ttf
  9. BIN
      src/icons/icon2/iconfont.woff
  10. BIN
      src/icons/icon2/iconfont.woff2
  11. 1 0
      src/main.js
  12. 42 42
      src/router/index.js
  13. 121 0
      src/utils/model/card/index.vue
  14. 3 2
      src/utils/model/index.js
  15. 63 6
      src/utils/model/route.vue
  16. 1 1
      src/utils/model/selectButton/index.vue
  17. 4 5
      src/views/client/index.vue
  18. 41 34
      src/views/event/components/dialog/addEvent.vue
  19. 1 0
      src/views/event/components/index.vue
  20. 53 37
      src/views/event/components/view/card.vue
  21. 1 1
      src/views/event/components/view/table.vue
  22. 38 14
      src/views/layout/components/UserBar.vue
  23. 135 0
      src/views/layout/components/dialog/feedback.vue
  24. 1 1
      src/views/layout/components/field.vue
  25. 6 4
      src/views/layout/components/guide.js
  26. 145 0
      src/views/layout/components/help.vue
  27. 5 1
      src/views/layout/index.vue
  28. 140 0
      src/views/patentMining/components/basicMessage.vue
  29. 59 0
      src/views/patentMining/components/details/index.vue
  30. 185 0
      src/views/patentMining/components/dialog/addAndEditProject.vue
  31. 69 0
      src/views/patentMining/components/dialog/auditRecords.vue
  32. 100 0
      src/views/patentMining/components/dialog/createTask.vue
  33. 169 0
      src/views/patentMining/components/dialog/handleTask1.vue
  34. 166 0
      src/views/patentMining/components/dialog/handleTask2.vue
  35. 127 0
      src/views/patentMining/components/dialog/uploadFile.vue
  36. 235 0
      src/views/patentMining/components/excavateTask/excavateTask.vue
  37. 28 0
      src/views/patentMining/components/excavateTask/index.vue
  38. 128 0
      src/views/patentMining/components/fileMessage.vue
  39. 160 0
      src/views/patentMining/components/handleExamine/handleExamine.vue
  40. 28 0
      src/views/patentMining/components/handleExamine/index.vue
  41. 33 0
      src/views/patentMining/components/mixins/index.js
  42. 126 0
      src/views/patentMining/components/projectPath.vue
  43. 75 0
      src/views/patentMining/components/view/commonTable.vue
  44. 144 0
      src/views/patentMining/index.vue
  45. 1 1
      src/views/product/components/commodity/commodity.vue
  46. 1 1
      src/views/product/components/framework/view/table.vue
  47. 1 1
      src/views/product/components/index.vue
  48. 1 1
      src/views/product/components/view/categoryTable.vue
  49. 1 1
      src/views/product/components/view/productTable.vue
  50. 65 26
      src/views/project/components/drawer/form.vue
  51. 1 1
      src/views/project/components/view/table.vue
  52. 1 1
      src/views/project/index.vue
  53. 2 2
      src/views/report/components/view/table.vue
  54. 8 1
      src/views/visual/components/drawer/eventDrawer.vue
  55. 2 2
      src/views/visual/components/drawer/titleDrawer.vue

+ 3 - 115
src/App.vue

@@ -43,50 +43,7 @@ export default {
   methods: {
     
   },
-    //注册局部组件指令
-    directives: {
-    drag: function (el,data,vnode) {
-      let dragBox = el; //获取当前元素
-      // 当前页面可视区的高
-      let clientHeight = document.documentElement.clientHeight 
-      dragBox.onmousedown = e => {
-        //算出鼠标相对元素的位置
-        let disX = e.clientX - dragBox.offsetLeft;
-        let disY = dragBox.offsetTop - e.clientY;
-        // let disY = e.clientY - dragBox.offsetTop;
-        document.onmousemove = e => {
-          if ( e.stopPropagation ) {
-            e.stopPropagation()
-          }
-          if ( e.preventDefault ) {
-            e.preventDefault()
-          }
-          //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
-          let left = disX + 100 +'px';
-          let top = -(clientHeight - e.clientY);
-          if (top > -50) {
-            top=-50
-          } else if (top < -clientHeight) {
-            top = -clientHeight
-          }
-          // let left = e.clientX - disX;
-          // let top = e.clientY - disY;
-          //移动当前元素
-          dragBox.style.left = left + "px";
-          dragBox.style.top = top + "px";
-        };
-        document.onmouseup = e2 => {
-          //鼠标弹起来的时候不再移动
-          document.onmousemove = null;
-          //预防鼠标弹起来后还会循环(即预防鼠标放上去的时候还会移动)  
-          document.onmouseup = null;
-          if ( e.clientX == e2.clientX && e.clientY == e2.clientY ) {
-            vnode.context.feedback()//想要添加的元素的点击事件
-          }
-        };
-      };
-    }
-  }
+
 }
 </script>
 
@@ -100,81 +57,12 @@ export default {
   height: 100%;
 }
 
-
-.showPiZhu{
-  position: absolute;
-  background: rgb(255 249 199);
-  left:0;
-  width:200px;
-  box-shadow: 5px 5px 5px rgb(227, 227, 75);
-  padding: 5px;
-  border-radius: 5px;
-}
-.pizhuLightHeigh{
-  position: relative;
-  background: #409EFF !important;
-}
-
-.greenColor{
-  background: #409EFF !important;
-}
-
-   .jinzhi{
-    cursor: not-allowed;
-    pointer-events:none;
-  }
-  .el-dropdown .el-button-group .el-button--primary:first-child{
-    padding: 0;
-    p{
-      margin: 0;
-      min-width: 50px;
-      line-height: 30px;
-      height: 30px;
-      padding: 0 10px;
-    }
-  }
-  </style>
+</style>
 <style lang="less">
-.el-form-item__label{
-  background: var(--bg);
-  color: var(--color) !important;
-}
-.el-button--primary{
-  background: var(--bg) !important;
-  border-color: var(--bg) !important;
-  color: var(--color);
-}
-.el-table{
-  // border: 1px solid rgba(124,124,124) !important;
-  height: 100%;
-  width: 100%;
-  padding-bottom:10px;
-  .el-table__body-wrapper{
-    max-height: calc(100% - 50px);
-    overflow-y: auto;
-  }
-}
-.el-table th{
-  background: var(--bg) !important;
-  color: var(--color);
-}
-.el-table tr td{
-  border-bottom: 1px solid rgba(124,124,124) !important;
-}
-.el-table tr td:first-child{
-  border-right: 1px solid rgba(124,124,124) !important;
-  border-left: 1px solid rgba(124,124,124) !important;
-}
-.el-table tr td:last-child{
-  border-right: 1px solid rgba(124,124,124) !important;
-  border-left: 1px solid rgba(124,124,124) !important;
-}
 .cursor_pointer{
   cursor:pointer
 }
-textarea {
-  font-family: 微软雅黑;
-}
+
 html, body, #app {
   width: 100%;
   height: 100%;

+ 82 - 0
src/assets/css/main.scss

@@ -0,0 +1,82 @@
+//弹窗
+.el-dialog{
+    .el-dialog__title{
+      font-family: var(--fm) !important;
+      color: var(--color1) !important;
+      font-weight: bold !important;
+      font-size: 20px !important;
+    }
+  }
+  //抽屉
+  .el-drawer{
+    #el-drawer__title span{
+      font-family: var(--fm) !important;
+      color: var(--color1) !important;
+      font-weight: bold !important;
+      font-size: 20px !important;
+    }
+  }
+  //表单样式
+  .el-form-item__label{
+    color:var(--color2) !important;
+    font-family: var(--fm) !important;
+    font-weight: bold;
+    font-size: 15px !important;
+  }
+  .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before, .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{
+    content:'' !important;
+    margin-right:0 !important;
+  }
+  .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before, .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:after{
+    content:'*' !important;
+    color:#F56C6c !important;
+  }
+  //input框
+  .el-input__inner{
+    border:1px solid var(--color1) !important;
+  }
+  .el-input__inner:hover, .el-input__inner:focus{
+    border-color: #409eff !important;
+  }
+  
+  //文本域
+  textarea {
+    font-family: 微软雅黑;
+    border-color: var(--color1) !important;
+  }
+  textarea:hover, .textarea:focus{
+    border-color: #409eff !important;
+  }
+  //按钮样式
+  .el-button--primary{
+    background: var(--bg) !important;
+    border-color: var(--bg) !important;
+    color: var(--color);
+  }
+  //表格
+  .el-table{
+    // border: 1px solid rgba(124,124,124) !important;
+    height: 100%;
+    width: 100%;
+    padding-bottom:10px;
+    .el-table__body-wrapper{
+      max-height: calc(100% - 50px);
+      overflow-y: auto;
+    }
+  }
+  .el-table th{
+    background: var(--bg) !important;
+    color: var(--color);
+  }
+  .el-table tr td{
+    border-bottom: 1px solid rgba(124,124,124) !important;
+  }
+  .el-table tr td:first-child{
+    border-right: 1px solid rgba(124,124,124) !important;
+    border-left: 1px solid rgba(124,124,124) !important;
+  }
+  .el-table tr td:last-child{
+    border-right: 1px solid rgba(124,124,124) !important;
+    border-left: 1px solid rgba(124,124,124) !important;
+  }
+  

+ 3 - 1
src/assets/css/theme.css

@@ -20,5 +20,7 @@ html[theme-type='#879cf3']{
   --color:#fff; 
 }
 body{
-  --fm:黑体;
+  --fm:思源黑体CN;
+  --color1:#316192;
+  --color2:#000000;
 }

+ 49 - 3
src/icons/icon2/demo_index.html

@@ -55,6 +55,18 @@
           <ul class="icon_lists dib-box">
           
             <li class="dib">
+              <span class="icon iconfont">&#xe63c;</span>
+                <div class="name">意见反馈</div>
+                <div class="code-name">&amp;#xe63c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe657;</span>
+                <div class="name">新手指引</div>
+                <div class="code-name">&amp;#xe657;</div>
+              </li>
+          
+            <li class="dib">
               <span class="icon iconfont">&#xe636;</span>
                 <div class="name">icon-suoxiao</div>
                 <div class="code-name">&amp;#xe636;</div>
@@ -294,9 +306,9 @@
 <pre><code class="language-css"
 >@font-face {
   font-family: 'iconfont';
-  src: url('iconfont.woff2?t=1695187885587') format('woff2'),
-       url('iconfont.woff?t=1695187885587') format('woff'),
-       url('iconfont.ttf?t=1695187885587') format('truetype');
+  src: url('iconfont.woff2?t=1698304160408') format('woff2'),
+       url('iconfont.woff?t=1698304160408') format('woff'),
+       url('iconfont.ttf?t=1698304160408') format('truetype');
 }
 </code></pre>
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -323,6 +335,24 @@
         <ul class="icon_lists dib-box">
           
           <li class="dib">
+            <span class="icon iconfont icon-yijianfankui"></span>
+            <div class="name">
+              意见反馈
+            </div>
+            <div class="code-name">.icon-yijianfankui
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-xinshouzhiyin"></span>
+            <div class="name">
+              新手指引
+            </div>
+            <div class="code-name">.icon-xinshouzhiyin
+            </div>
+          </li>
+          
+          <li class="dib">
             <span class="icon iconfont icon-icon-suoxiao"></span>
             <div class="name">
               icon-suoxiao
@@ -684,6 +714,22 @@
           
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-yijianfankui"></use>
+                </svg>
+                <div class="name">意见反馈</div>
+                <div class="code-name">#icon-yijianfankui</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-xinshouzhiyin"></use>
+                </svg>
+                <div class="name">新手指引</div>
+                <div class="code-name">#icon-xinshouzhiyin</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#icon-icon-suoxiao"></use>
                 </svg>
                 <div class="name">icon-suoxiao</div>

+ 11 - 3
src/icons/icon2/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 4121381 */
-  src: url('iconfont.woff2?t=1695187885587') format('woff2'),
-       url('iconfont.woff?t=1695187885587') format('woff'),
-       url('iconfont.ttf?t=1695187885587') format('truetype');
+  src: url('iconfont.woff2?t=1698304160408') format('woff2'),
+       url('iconfont.woff?t=1698304160408') format('woff'),
+       url('iconfont.ttf?t=1698304160408') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,14 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-yijianfankui:before {
+  content: "\e63c";
+}
+
+.icon-xinshouzhiyin:before {
+  content: "\e657";
+}
+
 .icon-icon-suoxiao:before {
   content: "\e636";
 }

File diff suppressed because it is too large
+ 1 - 1
src/icons/icon2/iconfont.js


+ 14 - 0
src/icons/icon2/iconfont.json

@@ -6,6 +6,20 @@
   "description": "",
   "glyphs": [
     {
+      "icon_id": "1119363",
+      "name": "意见反馈",
+      "font_class": "yijianfankui",
+      "unicode": "e63c",
+      "unicode_decimal": 58940
+    },
+    {
+      "icon_id": "7467790",
+      "name": "新手指引",
+      "font_class": "xinshouzhiyin",
+      "unicode": "e657",
+      "unicode_decimal": 58967
+    },
+    {
       "icon_id": "22208627",
       "name": "icon-suoxiao",
       "font_class": "icon-suoxiao",

BIN
src/icons/icon2/iconfont.ttf


BIN
src/icons/icon2/iconfont.woff


BIN
src/icons/icon2/iconfont.woff2


+ 1 - 0
src/main.js

@@ -21,6 +21,7 @@ import lodash from 'lodash'
 import "@/icons/icon/iconfont.css"
 import "@/icons/icon2/iconfont.css"
 import "@/assets/css/theme.css"
+import "@/assets/css/main.scss"
 
 
 //是否有功能权限

+ 42 - 42
src/router/index.js

@@ -92,46 +92,46 @@ const routes = [
       //   ]
       // },
       // //专利挖掘
-      // {
-      //   path: '/patentMining',
-      //   name:'patentMining',
-      //   component:{render(c){return c('router-view')}},
-      //   redirect:'/patentMining',
-      //   children:[
-      //     {
-      //       path:'/',
-      //       meta: {
-      //         title: '专利挖掘',
-      //         // allowPath:true
-      //       },
-      //       component: () => import('@/views/patentMining/index.vue'),
-      //     },
-      //     {
-      //       path:'/details',
-      //       meta: {
-      //         title: '专利挖掘详情',
-      //         // allowPath:true
-      //       },
-      //       component: () => import('@/views/patentMining/components/details/index.vue'),
-      //     },
-      //     {
-      //       path:'/excavateTask',
-      //       meta: {
-      //         title: '专利挖掘任务',
-      //         // allowPath:true
-      //       },
-      //       component: () => import('@/views/patentMining/components/excavateTask/index.vue'),
-      //     },
-      //     {
-      //       path:'/handleExamine',
-      //       meta: {
-      //         title: '专利挖掘任务详情',
-      //         // allowPath:true
-      //       },
-      //       component: () => import('@/views/patentMining/components/handleExamine/index.vue'),
-      //     },
-      //   ]
-      // },
+      {
+        path: '/patentMining',
+        name:'patentMining',
+        component:{render(c){return c('router-view')}},
+        redirect:'/patentMining',
+        children:[
+          {
+            path:'/',
+            meta: {
+              title: '专利挖掘',
+              sign:'patentMining'
+            },
+            component: () => import('@/views/patentMining/index.vue'),
+          },
+          {
+            path:'/details',
+            meta: {
+              title: '专利挖掘详情',
+              // allowPath:true
+            },
+            component: () => import('@/views/patentMining/components/details/index.vue'),
+          },
+          {
+            path:'/excavateTask',
+            meta: {
+              title: '专利挖掘任务',
+              // allowPath:true
+            },
+            component: () => import('@/views/patentMining/components/excavateTask/index.vue'),
+          },
+          {
+            path:'/handleExamine',
+            meta: {
+              title: '专利挖掘任务详情',
+              // allowPath:true
+            },
+            component: () => import('@/views/patentMining/components/handleExamine/index.vue'),
+          },
+        ]
+      },
       // // 产品
       {
         path: '/product',
@@ -143,7 +143,7 @@ const routes = [
             path:'/',
             meta: {
               title: '产品',
-              sign:'Product'
+              sign:'product'
             },
             component: () => import('@/views/product/index.vue'),
           },
@@ -211,7 +211,7 @@ const routes = [
             path:'/',
             meta: {
               title: '事件',
-              sign:'Event',
+              sign:'event',
             },
             component: () => import('@/views/event/index.vue'),
           }

+ 121 - 0
src/utils/model/card/index.vue

@@ -0,0 +1,121 @@
+<template>
+    <div :class="classList">
+        <div class="head">
+            <slot name="head"></slot>
+        </div>
+        <div class="body">
+          <slot></slot>  
+        </div>
+        <div class="foot">
+            <slot name="foot"></slot>
+        </div>
+        
+    </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {
+    shadow:{
+        default:'always'
+    }
+  },
+  data() {
+    return {
+        classList:'myCard'
+    };
+  },
+  watch: {
+    shadow(){
+        this.getStyle()
+    }
+  },
+  computed: {},
+  created() {},
+  mounted() {
+    this.getStyle()
+  },
+  methods: {
+    getStyle(){
+        var a = 'myCard'
+        switch(this.shadow){
+            case 'always':
+                a = a + ' is-always-shadow'
+                break;
+            case 'hover':
+                a = a + ' is-hover-shadow'
+                break;
+            case 'never':
+                break;
+            default:
+                break;
+        }
+        this.classList = a
+    }
+  },
+};
+</script>
+<style lang="scss">
+.myCard{
+    .el-form-item{
+    margin-bottom: 0px;
+  }
+  .el-form-item__content{
+    font-family: var(--fm) !important;
+    color: var(--color2) !important;
+    // width:100%;
+    text-align: right;
+  }
+}
+</style>
+<style lang="scss" scoped>
+.myCard{
+    background-color: #FFF;
+    color: #303133;
+    transition: .3s;
+    border: 1px solid var(--color1) !important;
+    border-radius: 5px;
+    .head{
+        width: auto;
+        border-bottom: 1px solid var(--color1) !important;
+        padding: 10px;
+    }
+    .head>*{
+        width: 100%;
+        display: flex;
+        justify-content: space-between;
+        font-family: var(--fm);
+        color: var(--color1);
+        font-weight: bold;
+    }
+    .head:empty{
+        border-bottom: none !important;
+        padding: 0px;
+    }
+    .body{
+        padding: 10px;
+    }
+    .foot{
+        border-top: 1px solid var(--color1) !important;
+        padding: 10px;
+    }
+    .foot>*{
+        width: 100%;
+        display: flex;
+        justify-content: space-between;
+    }
+    .foot:empty{
+        border-top: none !important;
+        padding: 0px;
+    }
+
+    
+}
+.is-always-shadow{
+    box-shadow: 10px 18px 12px 0 rgba(27, 23, 23, 0.1);
+}
+.is-hover-shadow:hover{
+    box-shadow: 10px 18px 12px 0 rgba(27, 23, 23, 0.1);
+}
+</style>

+ 3 - 2
src/utils/model/index.js

@@ -12,7 +12,7 @@ import myTimeChoose from './time/timeIndex.vue';
 
 import myContextMenu from './contextMenu/index.vue';
 import mySelectTree from './selectTree/index'
-
+import myCard from './card/index'
 
 var models = {
   myCustomSvg,
@@ -27,7 +27,8 @@ var models = {
   myTimeChoose,
 
   myContextMenu,
-  mySelectTree
+  mySelectTree,
+  myCard
 }
 export default {
   install(Vue) {

+ 63 - 6
src/utils/model/route.vue

@@ -1,19 +1,76 @@
 <template>
-  <div style="width:100%;height:100%">
-    <myContextMenu></myContextMenu>
-    <div @mouseup="mouseup" style="width:100%;height:100%">
+  <div style="background:white;height:700px">
+    
 
-    </div>
+    <el-row :gutter="24">
+        <el-col :span="6" v-for="item in data" class="c">
+          <myCard shadow="always">
+            <div slot="head">
+              <div>{{ item.title }}</div>
+              <div>
+                <el-dropdown class="float_right" @command="handleCommand($event, item)" trigger="click" size="small">
+                <span class="el-dropdown-link">
+                  <i class="el-icon-more el-icon--right"></i>
+                </span>
+                <el-dropdown-menu slot="dropdown" class="text-align_center">
+                  <el-dropdown-item command="e" >
+                    <span v-if="$permission('/workspace/project/modify') && ($r(item.id,[2])||userinfo.id == item.createBy)">编辑</span>
+                    <span v-else>查看</span>
+                  </el-dropdown-item>
+                  <el-dropdown-item command="0" :disabled="!($permission('/workspace/project/patent_import')&& $r(item.id,[1,2]))">
+                    <el-dropdown @command="handleCommand($event, item)" placement="right-start">
+                      <span class="el-dropdown-link"> 专利导入 </span>
+                      <el-dropdown-menu  class="children_item">
+                          <el-dropdown-item command="7"> Excel导入 </el-dropdown-item>
+                          <el-dropdown-item command="8">专利号导入 </el-dropdown-item>
+                          <el-dropdown-item command="11" v-if="$permission('/workspace/common/retrieval')"> 检索条件导入 </el-dropdown-item>
+                      </el-dropdown-menu>
+                    </el-dropdown>
+                  </el-dropdown-item>
+                  <el-dropdown-item command="12">任务清单</el-dropdown-item>
+                <el-dropdown-item command="1">分配参与者</el-dropdown-item>
+                <el-dropdown-item command="2" :disabled="!$permission('/workspace/project/report_manage')">报告管理</el-dropdown-item>
+                <el-dropdown-item command="6" v-if="item.isCategory == 1&& $permission('/workspace/product')">产品架构</el-dropdown-item>
+                <el-dropdown-item command="10" v-if="$permission('/workspace/event')">事 件</el-dropdown-item>
+                <el-dropdown-item command="5" :disabled="!$permission('/workspace/project/other_accessories')">其它附件</el-dropdown-item>
+                <el-dropdown-item command="3" :disabled="!($permission('/workspace/project/project_share')&&$r(item.id,[2]))">项目分享</el-dropdown-item>
+                <el-dropdown-item command="4" divided class="color-red" :disabled="!($permission('/workspace/project/modify') && ($r(item.id,[2])||userinfo.id == item.createBy))">删除</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
+              </div>
+            </div>
+            <div>
+              <p>名称:{{ item.name }}</p>
+            </div>
+            <div slot="foot">
+              <i class="el-icon-delete"></i>
+            </div>
+          </myCard>
+        </el-col>
+      </el-row>
   </div>
 </template>
 
 <script>
+import help from '@/views/layout/components/help.vue'
 export default {
-  components: {},
+  components: {
+    help
+  },
   props: {},
   data() {
     return {
-        show:false
+        show:false,
+        data:[
+          {
+            title:'标题',
+            name:'名称'
+          },
+          {
+            title:'标题2',
+            name:'名称2'
+          },
+        ]
     };
   },
   watch: {},

+ 1 - 1
src/utils/model/selectButton/index.vue

@@ -9,7 +9,7 @@
         </el-select>
       </slot>
       
-      <el-button  @click="handleClick" :disabled="disabled" :size="size" class="selectButton-button">
+      <el-button  @click="handleClick" type="primary" :disabled="disabled" :size="size" class="selectButton-button">
         <slot name="button">
          <i class="el-icon-search"></i> 
         </slot>

+ 4 - 5
src/views/client/index.vue

@@ -37,11 +37,10 @@
                 <el-table-column label="操作" align="center" width="150">
                   <template slot-scope="scope">
                     <el-dropdown split-button type="primary" size="small" @click="handleEdit(scope.row)">
-                      <p>编辑</p>
-                      <el-dropdown-menu slot="dropdown" class="text-align_center">
-                        <el-dropdown-item class="color-red" @click.native="handleDelete(scope.row)"
-                          divided>删除</el-dropdown-item>
-                      </el-dropdown-menu>
+                      <span>编辑</span> 
+                        <el-dropdown-menu slot="dropdown" class="text-align_center">
+                        <el-dropdown-item class="color-red" @click.native="handleDelete(scope.row)" divided>删除</el-dropdown-item>
+                        </el-dropdown-menu>
                     </el-dropdown>
                   </template>
                 </el-table-column>

+ 41 - 34
src/views/event/components/dialog/addEvent.vue

@@ -8,13 +8,18 @@
             <el-autocomplete class="inline-input" v-model="formData[0].name" v-SelectLazyLoading="load"
               :fetch-suggestions="querySearchQuestion"
               placeholder="请输入或选择事件" :trigger-on-focus="false"
-              @select="handleSelectQuestion" @change="change1($event, { $index: 0 })" @focus="focus($event, { $index: 0 })"
-              @input="input1($event, {
-                $index: 0,
-                row: formData[0]
-              })" style="width: 100%;">
+              @select="handleSelectQuestion" @blur="blur($event, { $index: 0 })" style="width: 100%;">
             </el-autocomplete>
           </el-form-item>
+          <el-form-item label="所属客户" prop="clientId" v-if="userinfo.tenantType == 1">
+            <el-select v-model="formData[0].clientId" :disabled="(formData[0].id && !this.row) ? true : false"
+              style="width: 100%;" placeholder="请选择客户">
+              <el-option
+                v-for="item in clientList"
+                :key="parseInt(item.value)" :label="item.label" :value="parseInt(item.value)">
+              </el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item label="事件日期" prop="eventDate">
             <el-date-picker
               style="width: 100%" v-model="formData[0].eventDate"
@@ -22,12 +27,8 @@
               >
             </el-date-picker>
           </el-form-item>
-          <el-form-item label="事件描述" prop="description">
-            <el-input type="textarea" :rows="1" v-model="formData[0].description" autocomplete="off" placeholder="请输入事件描述"
-              ></el-input>
-          </el-form-item>
-          <el-form-item label="事件场景" prop="scenarioId">
-            <el-select v-model="formData[0].scenarioId"
+          <el-form-item label="事件场景" prop="assistPerson">
+            <el-select v-model="formData[0].applicationScenarios[0]" :disabled="(formData[0].id && !this.row) ? true : false"
               style="width: 100%;" placeholder="请选择事件场景">
               <el-option
                 v-for="item in commonData.ENTERPRISE_APPLICATION_SCENARIO ? commonData.ENTERPRISE_APPLICATION_SCENARIO : []"
@@ -35,6 +36,10 @@
               </el-option>
             </el-select>
           </el-form-item>
+          <el-form-item label="事件描述" prop="description">
+            <el-input type="textarea" :rows="2" v-model="formData[0].description" autocomplete="off" placeholder="请输入事件描述"
+              ></el-input>
+          </el-form-item>
         </el-form>
       </div>
       <!-- 批量新增(事件) -->
@@ -52,7 +57,7 @@
               <div>
                 <el-autocomplete class="inline-input" v-model="scope.row.name"
                   :fetch-suggestions="querySearchQuestion" placeholder="请输入或选择事件" :trigger-on-focus="false"
-                  @select="handleSelectQuestion" @focus="focus($event, scope)" style="width: 100%;">
+                  @select="handleSelectQuestion" @blur="blur($event, scope)" style="width: 100%;">
                 </el-autocomplete>
               </div>
             </template>
@@ -66,15 +71,8 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column prop="description" label="事件描述" align="center" width="250px">
-            <template slot-scope="scope">
-              <div>
-                <el-input type="textarea" :rows="1" v-model="scope.row.description" autocomplete="off"
-                  placeholder="请输入事件描述"></el-input>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column prop="scenarioId" label="事件场景" align="center">
+          
+          <el-table-column prop="applicationScenarios" label="事件场景" align="center">
             <template slot-scope="scope">
               <div>
                 <!-- multiple -->
@@ -88,6 +86,14 @@
               </div>
             </template>
           </el-table-column>
+          <el-table-column prop="description" label="事件描述" align="center" width="250px">
+            <template slot-scope="scope">
+              <div>
+                <el-input type="textarea" :rows="1" v-model="scope.row.description" autocomplete="off"
+                  placeholder="请输入事件描述" :disabled="scope.row.id ? true : false"></el-input>
+              </div>
+            </template>
+          </el-table-column>
           <el-table-column label="事件操作" align="" width="100px">
             <template slot-scope="scope">
               <div>
@@ -103,9 +109,9 @@
         </el-table>
       </div>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm1()" size="small" style="width:100px">确定</el-button>
-        <el-button size="small" @click="resetForm()" style="width:100px">重置</el-button>
         <el-button size="small" @click="handleClose()" style="width:100px">取消</el-button>
+        <el-button size="small" @click="resetForm()" style="width:100px">重置</el-button>
+        <el-button type="primary" @click="submitForm1()" size="small" style="width:100px">确定</el-button>
       </div>
     </el-dialog>
 
@@ -113,6 +119,7 @@
 </template>
 
 <script>
+import { mapGetters } from 'vuex'
 export default {
   props: [],
   data() {
@@ -146,9 +153,14 @@ export default {
         size:2,
       },
       eventInput:'',
+      //客户集合
+      clientList:[]
     }
   },
   watch: {},
+  computed:{
+    ...mapGetters(["userinfo"]),
+  },
   async mounted() {
     // 应用场景(是通过字典还是接口待定)
     await this.getCommonData()
@@ -322,6 +334,7 @@ export default {
       this.questionEventList()
     },
     // 查询事件
+    // 查询所有事件(不需要)
     async questionEventList() {
       let searchValue={name:this.eventInput}
       let params = {
@@ -347,6 +360,7 @@ export default {
       // 调用 callback 返回建议列表的数据
       cb(records);
     },
+
     // input框切换选择
     handleSelectQuestion(val) {
       let a = this.formData.findIndex(item => {
@@ -360,17 +374,10 @@ export default {
         return false
       }
     },
-    //失去焦点
-    focus(ev, val) {
 
-    },
-    // input事件
-    input1(ev, val) {
-      // console.log(ev,val);
-    },
-    // change事件,input值改变触发
-    change1(val) {
-      // console.log(val);
+    //失去焦点(远程找是否存在名称相同事件,如果存在就直接赋值)
+    blur(ev, val) {
+
     },
 
   },
@@ -380,7 +387,7 @@ export default {
 <style lang="scss">
 .addEvent {
   .dialog-footer {
-    text-align: center;
+    // text-align: center;
   }
 }
 

+ 1 - 0
src/views/event/components/index.vue

@@ -25,6 +25,7 @@
             <el-dropdown-menu slot="dropdown" class="text-align_center">
               <el-dropdown-item command="1">添加事件</el-dropdown-item>
               <el-dropdown-item command="2">批量添加事件</el-dropdown-item>
+              <el-dropdown-item command="2">批量添加事件</el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown> -->
         </div>

+ 53 - 37
src/views/event/components/view/card.vue

@@ -1,14 +1,14 @@
 <template>
-  <div>
+  <div class="eventCard">
     <el-row :gutter="12">
       <el-col :span="6" v-for="(item, itemIndex) in tableData" :key="itemIndex" style="height:420px">
-        <el-card shadow="always" style="background:white;box-shadow:2px 2px 10px #909090" class="card">
-          <div style="display:flex;justify-content:space-between;align-items:center">
-            <p style="font-size:18px"><span># {{ (itemIndex + 1) + ((queryParams.current - 1) * queryParams.size)
-            }}</span></p>
-            <div class="fun" style="color:blue;display:flex;justify-content: flex-end;" v-if="!projectId && !show">
-              <span style="margin-right: 10px;" @click="handleEdit(item)" v-if="true">编辑</span>
-              <span style="margin-right: 10px;" @click="handleEdit(item)" v-else>查看</span>
+        <myCard shadow="always">
+          <div slot="head">
+            <div style="font-size:18px">
+              <!-- <span># {{ (itemIndex + 1) + ((queryParams.current - 1) * queryParams.size)}}</span> -->
+              <span>{{ item.questionName }}</span>
+            </div>
+            <div v-if="!projectId && !show">
               <el-dropdown @command="handleCommand($event, item)" trigger="click">
                 <span class="el-dropdown-link">
                   <i class="el-icon-more" style="font-size: 16px;"></i>
@@ -26,38 +26,38 @@
                       </el-dropdown-menu>
                     </el-dropdown>
                   </el-dropdown-item>
-                  <el-dropdown-item command="3" divided class="color-red">删除</el-dropdown-item>
+                  <!-- <el-dropdown-item command="3" divided class="color-red">删除</el-dropdown-item> -->
                 </el-dropdown-menu>
               </el-dropdown>
             </div>
           </div>
-
-          <p>
-            <span style="font-weight:bolder">事件名称:</span>
-            <el-tooltip class="item" effect="light" placement="top" :content="item.name">
-              <el-link type="primary"
-                @click="checkVisual(item.scenarioNames, item.id, item.name)">{{ item.name }}</el-link>
-            </el-tooltip>
-          </p>
-          <p><span style="font-weight:bolder">相关报告数量:</span> <span>{{ item.reportNum || 0 }}</span> </p>
-          <p><span style="font-weight:bolder">相关专题库数量:</span> <span>{{ item.reportNum || 0 }}</span> </p>
-          <p>
-            <span style="font-weight:bolder">应用场景:</span>
-            <el-tooltip class="item" effect="light" placement="top">
-              <div slot="content"><span v-for="name in item.scenarioNames">{{ name }}&nbsp;&nbsp;</span></div>
-              <span v-if="item.scenarioNames">{{ item.scenarioNames[0] }}
-                <span v-if="item.scenarioNames.length > 1">
-
-                  <span><img src="@/assets/img/更多.png" style="width:18px;vertical-align:bottom" /></span>
-                </span>
-              </span>
-            </el-tooltip>
-          </p>
-          <p><span style="font-weight:bolder">事件时间:</span> <span>{{ item.eventDate }}</span> </p>
-          <p><span style="font-weight:bolder">描述:</span> <span>{{ item.description }}</span> </p>
-          <p><span style="font-weight:bolder">创建人:</span> <span>{{ item.createPersonName }}</span> </p>
-          <p><span style="font-weight:bolder">创建时间:</span> <span>{{ item.createTime }}</span> </p>
-        </el-card>
+          <div>
+            <el-form label-position="left" label-width="110px">
+              <el-form-item label="报告数量:"> {{ item.reportNum || 0  }} </el-form-item>
+              <el-form-item label="专题库数量:">{{ item.reportNum || 0 }}</el-form-item>
+              <el-form-item label="应用场景:">
+                <el-tooltip class="item" effect="light" placement="top">
+                  <div slot="content"><span v-for="name in item.scenarioNames">{{ name }}&nbsp;&nbsp;</span></div>
+                  <span v-if="item.scenarioNames">{{ item.scenarioNames[0] }}
+                    <span v-if="item.scenarioNames.length > 1">
+                      <span><img src="@/assets/img/更多.png" style="width:18px;vertical-align:bottom" /></span>
+                    </span>
+                  </span>
+                </el-tooltip>
+              </el-form-item>
+              <el-form-item label="时间:">{{ item.eventDate }}</el-form-item>
+              <el-form-item label="描述:">{{ item.description }}</el-form-item>
+              <el-form-item label="创建人:">{{ item.createPersonName }}</el-form-item>
+              <el-form-item label="创建时间:">{{ item.createTime }}</el-form-item>
+            </el-form>
+          </div>
+          <div slot="foot">
+            <div class="btn">
+              <i class="el-icon-edit" @click="handleEdit(item)"></i>
+              <i class="el-icon-delete" @click="handleCommand('3', item)"></i>
+            </div>
+          </div>
+        </myCard>
       </el-col>
     </el-row>
   </div>
@@ -80,4 +80,20 @@ export default {
   methods: {},
 };
 </script>
-<style lang="scss" scoped></style>
+<style lang="scss">
+.eventCard{
+  
+}
+</style>
+<style lang="scss" scoped>
+  .eventCard{
+    .btn{
+      margin: 0;
+      i{
+        color: var(--color2);
+        font-size: 16px;
+        margin-right:16px
+      }
+    }
+  }
+</style>

+ 1 - 1
src/views/event/components/view/table.vue

@@ -21,7 +21,7 @@
           <template slot-scope="scope">
             <el-dropdown split-button type="primary" size="small" @click="handleClick(scope.row)"
               @command="handleCommand($event,scope.row)">
-              <p>编 辑</p>
+              <span>编 辑</span>
               <el-dropdown-menu slot="dropdown" style="text-align:center">
                 <el-dropdown-item command="0">新增专题库</el-dropdown-item>
                 <el-dropdown-item>

+ 38 - 14
src/views/layout/components/UserBar.vue

@@ -1,12 +1,12 @@
 <template>
   <div class="admin-user-bar">
     <div class="menu">
-      <el-link :underline="true" v-for="item in menu" :key="item.path" @click="changePage(item.path)" :type="item.label==title?'danger':'default'">{{ item.label }}</el-link>
+      <el-link :underline="true" v-for="item in menu" :key="item.path" @click="changePage(item.path)" :type="item.sign==sign?'primary':'default'">{{ item.label }}</el-link>
       <el-dropdown @command="importPatent">
-        <el-link :underline="true" :type="title == '专利检索'?'danger':'default'" class="el-dropdown-link">
+        <el-link :underline="true" :type="sign == '专利检索'?'danger':'default'" class="el-dropdown-link">
           专利检索<i class="el-icon-arrow-down el-icon--right"></i>
           </el-link>
-        <el-dropdown-menu slot="dropdown">children_item
+        <el-dropdown-menu slot="dropdown">
           <el-dropdown-item>接口检索</el-dropdown-item>
           <el-dropdown-item>本地专利检索</el-dropdown-item>
         </el-dropdown-menu>
@@ -137,45 +137,52 @@ export default {
       };
     return {
       menu:[
-        {
-          value:'7',
-          label:'企业专利数据库',
-          path:'/enterprisePatentDB',
-        },
+        // {
+        //   value:'7',
+        //   label:'企业专利数据库',
+        //   path:'/enterprisePatentDB',
+        // },
         {
           value:'5',
           label:'场景可视化',
           path:'/visual',
+          sign:'visual'
         },
         {
           value:'3',
           label:'事件',
           path:'/Event',
+          sign:'event'
         },
         {
           value:'1',
-          label:'专库',
+          label:'专利数据库',
           path:'/project',
+          sign:'project'
         },
         {
           value:'4',
           label:'报告',
           path:'/AllReport',
+          sign:'report'
         },
         {
           value:'2',
           label:'产品',
           path:'/product',
+          sign:'product'
         },
         {
           value:'6',
           label:'专利挖掘',
           path:'/patentMining',
+          sign:'patentMining'
         },
         {
           value:'8',
           label:'我的任务',
           path:'/rTaskList',
+          sign:'task'
         },
       ],
       clientTitle:'',
@@ -209,8 +216,8 @@ export default {
   },
   computed: {
     ...mapGetters(['userinfo']),
-    title(){
-      return this.$route.meta.title
+    sign(){
+      return this.$route.meta.sign
     }
   },
   mounted() {
@@ -346,10 +353,27 @@ export default {
 .menu{
   .el-link{
     font-family: var(--fm);
+    color: var(--color2);
+    font-weight: bold;
+  }
+  .el-link.el-link--default:hover,.el-link.el-link--primary:hover,.el-link.el-link--primary{
+    color:var(--color1)
+  }
+  .el-link.el-link--default:hover.is-underline::after,.el-link.el-link--primary:hover.is-underline::after{
+    position: absolute;
+    top: calc(100% + 5px);
+    border-bottom: 3px solid var(--color1);
+  }
+  .el-link.el-link--primary.is-underline::after {
+    content: "";
+    position: absolute;
+    top: calc(100% + 5px);
+    left: 0;
+    right: 0;
+    height: 0;
+    bottom: 0;
+    border-bottom: 3px solid var(--color1);
   }
-  // .el-link.el-link--default:hover{
-  //   color:var(--bg)
-  // }
 }
 .admin-user-bar {
   display: flex;

+ 135 - 0
src/views/layout/components/dialog/feedback.vue

@@ -0,0 +1,135 @@
+<template>
+    <div>
+      <el-dialog   
+        title="意见反馈"
+        :visible.sync="feedbackVisible"
+        width="700px"
+        append-to-body
+        :close-on-click-modal="false"
+        :before-close="feedbackClose">
+          <div>
+            <div>
+              <div class="head">尊敬的用户:</div>
+              <p class="content">您在知识产权风控与组织记忆系统中遇到产品使用的问题,请在这里告诉我们,欢迎提出意见和建议,我们将参考您的建议来改善我们的服务。</p>
+              <h3 class="foot"> 感谢您的关注和支持! </h3>
+            </div>
+            <div>
+              <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+                <el-form-item label="反馈类型" prop="feedBackType">
+                  <el-select v-model="form.feedBackType" style="width: 50%;" placeholder="请选择反馈类型">
+                    <el-option
+                      v-for="item in options"
+                      :key="item.feedBackType"
+                      :label="item.label"
+                      :value="item.feedBackType">
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="电子邮件" prop="email">
+                <el-input v-model="form.email" style="width: 50%;" placeholder="请输入您的Email"></el-input>
+                </el-form-item>
+                <el-form-item label="详细描述" prop="feedBackContent">
+                  <el-input type="textarea" v-model="form.feedBackContent" placeholder="请输入详细描述"></el-input>
+                </el-form-item>
+              </el-form>
+            </div>
+          
+          </div>
+  
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="feedbackClose">取 消</el-button>
+          <el-button type="primary" @click="finish">确 定</el-button>
+        </span>
+      </el-dialog>
+    </div>
+</template>
+  
+<script>
+  export default {
+    data() {
+      const isEmail = (rule, value, callback) => {
+        const mailReg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9_\.\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
+        if (!this.form.email) {
+          return callback(new Error("邮箱不能为空"));
+        }
+        setTimeout(() => {
+          if (mailReg.test(value)) {
+            callback();
+          } else {
+            callback(new Error("请输入正确的邮箱格式"));
+          }
+        }, 100);
+      };
+      return {
+        form: {
+          feedBackType:'1'
+        },
+        options: [{
+          feedBackType: '1',
+            id:1,
+            label: 'BUG反馈'
+          }, {
+            feedBackType: '2',
+            id:2,
+            label: '数据纠错'
+          }, {
+            feedBackType: '3',
+            id:3,
+            label: '意见建议'
+          }],
+        feedbackVisible:false,
+        rules: {
+          feedBackType:[ { required: true, message: '请选择反馈类型', trigger: 'change' },],
+          email:[{ required: true, validator: isEmail, trigger: 'blur' },],
+          feedBackContent:[{ required: true, message: '请输入详细描述', trigger: 'blur' },],
+        }
+      }
+    },
+    computed: {},
+    mounted() { },
+    methods: {
+      open() {
+        this.feedbackVisible=true
+      },
+      finish() {
+        this.$refs.form.validate((valid) => {
+          if (valid) {
+            // console.log(this.form);
+             this.$api.addUserFeedBack(this.form).then(res => {
+               if (res.code == 200) {
+                 this.feedbackClose()
+                  this.$message.success('您的反馈已收到,让我们携手共行,共创美好未来')
+                }
+             })
+          }
+        })
+      },
+      feedbackClose() {
+        this.form.email=''
+        this.form.feedBackContent = ''
+        this.$refs.form.resetFields()
+        this.feedbackVisible=false
+      },
+    },
+  }
+  </script>
+
+<style lang="scss" scoped>
+  .head{
+    font-family: var(--fm);
+    font-weight: bold;
+    color: #5e6064;
+    font-size: 20px;
+  }
+  .content{
+    font-family: var(--fm);
+    color: #5e6064;
+    font-size: 18px;
+  }
+  .foot{
+    font-family: var(--fm);
+    font-weight: bold;
+    color: var(--color1);
+    font-size: 20px;
+  }
+</style>

+ 1 - 1
src/views/layout/components/field.vue

@@ -38,7 +38,7 @@
               <el-table-column label="操作" align="center" width="150">
                 <template slot-scope="scope">
                   <el-dropdown  split-button type="primary" size="small">
-                   <p @click="handleEdit(scope.row)">编辑</p>
+                   <span @click="handleEdit(scope.row)">编辑</span>
                    <!-- <p v-else :disabled="true">编辑</p> -->
                     <el-dropdown-menu slot="dropdown" class="text-align_center">
                       <el-dropdown-item @click.native="handleEditOption(scope.row)" v-if="[3, 4, 5, 6].indexOf(scope.row.type) !== -1 ">选项管理</el-dropdown-item>

+ 6 - 4
src/views/layout/components/guide.js

@@ -111,7 +111,7 @@ export const guide = {
             this.startGuide(title,arr,userinfo)
             
         },
-        //开始新手指引
+        //开始新手指引(title:当前路由标识,arr:需要展示的指引步骤,userinfo:用户信息)
         startGuide(title,arr,userinfo){
             this.$nextTick(()=>{
                 if(!steps[title]){
@@ -129,9 +129,11 @@ export const guide = {
                     //     drivers.destroy();
                     // },
                     onDestroyed:()=>{
-                        if(arr[userinfo.id]){
-                          arr[userinfo.id].push(title)
-                          localStorage.firstRoute = JSON.stringify(arr)  
+                        if(userinfo){
+                            if(arr[userinfo.id]){
+                                arr[userinfo.id].push(title)
+                                localStorage.firstRoute = JSON.stringify(arr)  
+                            }
                         }
                         drivers.destroy();
                     }

+ 145 - 0
src/views/layout/components/help.vue

@@ -0,0 +1,145 @@
+<template>
+  <div >
+    <div class="help" v-drag="isMove">
+        <div @click="feedback">
+            <span>
+                <i class="iconfont icon-yijianfankui"></i>
+            </span>
+            <span>意见反馈</span>
+        </div>
+        <div @click="guide">
+            <span>
+                <i class="iconfont icon-xinshouzhiyin"></i>
+            </span>
+            <span>新手指引</span>
+        </div>
+    </div>
+    <feedback ref="feedback"></feedback>
+  </div>
+</template>
+
+<script>
+import feedback from './dialog/feedback.vue';
+import { guide } from "./guide";
+export default {
+  mixins:[guide],
+  components: {
+    feedback
+  },
+  props: {},
+  data() {
+    return {
+        move:false,
+    };
+  }, 
+  //注册局部组件指令
+  directives: {
+    drag: function (el,data,vnode) {
+      let dragBox = el; //获取当前元素
+      let clientHeight = document.documentElement.clientHeight 
+      dragBox.onmousedown = e => {
+        //算出鼠标相对元素的位置
+        var start = dragBox.offsetTop
+        var height = dragBox.offsetHeight
+        var startY = e.clientY
+        document.onmousemove = e => {
+          if ( e.stopPropagation ) {
+            e.stopPropagation()
+          }
+          if ( e.preventDefault ) {
+            e.preventDefault()
+          }
+          var moveY = e.clientY - startY
+          var bottom = 50
+          if(moveY < 0){
+            bottom = clientHeight - start - height + Math.abs(moveY)
+            if(bottom - height > clientHeight - 200){
+                bottom = clientHeight - 100
+            }
+          }else{
+            bottom = clientHeight - start - height - Math.abs(moveY)
+            if(bottom < 50){
+                bottom = 50
+            }
+          }
+          dragBox.style.bottom = bottom + 'px'
+        };
+        document.onmouseup = e2 => {
+          //鼠标弹起来的时候不再移动
+          document.onmousemove = null;
+          //预防鼠标弹起来后还会循环(即预防鼠标放上去的时候还会移动)  
+          document.onmouseup = null;
+          if ( startY == e2.clientY ) {
+            data.value(true)
+          }else{
+            data.value(false)
+          }
+        };
+      };
+    }
+  },
+  
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {
+    //是否移动
+    isMove(val){
+        this.move = val
+    },
+    //意见反馈
+    feedback(){
+        if(this.move){
+            this.$refs.feedback.open()
+        }
+    },
+    //新手指引
+    guide(){
+        if(this.move){
+            //开始新手指引(title:当前路由标识,arr:需要展示的指引步骤,userinfo:用户信息)
+           this.startGuide(this.$route.meta.sign)
+        }
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.help{
+    background: white;
+    z-index: 999;
+    border:3px solid var(--color1);
+    border-right: none;
+    width: 35px;
+    height: auto;
+    white-space: nowrap;
+    border-radius: 5px 0 0 10px;
+    position: fixed;
+    right: 0;
+    bottom:50px;
+    div{
+        border-bottom: 1px solid var(--color1);
+        padding: 5px 0;
+    }
+    div:last-child{
+        border-bottom: none;
+    }
+    span{
+        color: var(--color1);
+        font-family: var(--fm);
+        font-size: 14px;
+        font-weight: bold;
+        margin-left:10px;
+        cursor: pointer;
+    }
+    i{
+        font-size: 20px;
+    }
+}
+.help:hover{
+    width: 100px;
+    i{
+        font-size: 14px;
+    }
+}
+</style>

+ 5 - 1
src/views/layout/index.vue

@@ -26,6 +26,7 @@
         </section>
       </el-main>
     </el-container>
+    <help></help>
   </div>
 </template>
 
@@ -35,10 +36,13 @@ import UserBar from "./components/UserBar";
 import { webSocket } from "./mixins";
 import { guide } from "./components/guide";
 import contextMenu from "./components/contextMenu.vue";
+
+import help from "./components/help.vue";
 export default {
   components: {
     UserBar,
-    contextMenu
+    contextMenu,
+    help
   },
   mixins: [webSocket,guide],
   data() {

+ 140 - 0
src/views/patentMining/components/basicMessage.vue

@@ -0,0 +1,140 @@
+<template>
+  <!-- 基本信息及流程 -->
+  <div class="basicMessage">
+    <div style="margin-bottom: 40px;">
+      <span>项目基本信息</span>
+      <el-divider></el-divider>
+      <el-descriptions class="margin-top" title="" :column="column" size="" border>
+        <el-descriptions-item>
+          <template slot="label"> 
+            <i class="el-icon-user"></i> 项目名称 
+          </template> 
+          {{ row.name }}
+        </el-descriptions-item>
+        <el-descriptions-item> 
+          <template slot="label"> 
+            <i class="el-icon-mobile-phone"></i> 项目产出
+          </template>
+          {{ row.type }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-location-outline"></i> 技术方向
+          </template>
+          {{ row.type }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-tickets"></i> 产品阶段
+          </template>
+          {{ row.type }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-office-building"></i> 是否检索
+          </template>
+          {{ row.type }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-office-building"></i> 负责人
+          </template>
+          {{ row.type }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-office-building"></i> 相关竞争对手
+          </template>
+          {{ row.type }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-office-building"></i> 技术关键词
+          </template>
+          {{ row.type }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-office-building"></i> 审核状态
+          </template>
+          <el-tag size="small">{{ row.status }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-office-building"></i> 审核进度
+          </template>
+          <el-tag size="small">{{ row.status }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-office-building"></i> 创建人
+          </template>
+          {{ row.createPerson }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-office-building"></i> 参与人
+          </template>
+         {{ row.createPerson }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-office-building"></i> 附件
+          </template>
+          {{ row.type }}
+        </el-descriptions-item>
+      </el-descriptions>
+    </div>
+    <div style="width: 100%;">
+      <!-- 项目流程 -->
+      <projectPath></projectPath>
+    </div>
+  </div>
+</template>
+
+<script>
+import projectPath from './projectPath.vue'
+export default {
+  components: {
+    projectPath,
+  },
+  props:['row'],
+  data() {
+    return {
+      column:4,
+      queryParams:{}
+    }
+  },
+  mounted() {
+    window.addEventListener('resize', (e) => {
+      let width = window.innerWidth
+      if (width > 2200) {  
+        this.column = 6;  
+      } else if (width < 1000) {  
+        this.column = 3;  
+      } else if (width < 1400) {  
+        this.column = 4;  
+      } else if (width < 1800) {  
+        this.column = 5;  
+      }  
+    })
+  },
+  methods: {
+    
+  },
+}
+</script>
+
+<style lang="scss">
+.basicMessage {
+  .el-divider--horizontal {
+    margin: 10px 0;
+  }
+}
+</style>
+<style lang="scss" scoped>
+.basicMessage{
+  width: 100%;
+  height: 100%;
+}
+</style>

+ 59 - 0
src/views/patentMining/components/details/index.vue

@@ -0,0 +1,59 @@
+<template>
+  <!-- 详情 -->
+  <div class="details">
+    <el-tabs v-model="activeName" type="card" @tab-click="handleClick" style="height: 100%;">
+      <el-tab-pane label="基本信息" name="basicMessage">
+        <BasicMessage :row="row"></BasicMessage>
+      </el-tab-pane>
+      <el-tab-pane label="挖掘任务" name="excavateTask" style="height: 100%;">
+        <ExcavateTaskIndex style="height: 100%;"></ExcavateTaskIndex>
+      </el-tab-pane>
+      <el-tab-pane label="文件列表" name="fileMessage" style="height: 100%;">
+        <FileMessage style="height: 100%;"></FileMessage>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import BasicMessage from '../basicMessage.vue'
+import ExcavateTaskIndex from '../excavateTask/index.vue'
+import FileMessage from '../fileMessage.vue'
+export default {
+  components: {
+    BasicMessage,
+    ExcavateTaskIndex,
+    FileMessage,
+  },
+  data() {
+    return {
+      activeName: 'basicMessage'
+    };
+  },
+  computed: {
+    row() {
+      return this.$route.query
+    },
+  },
+  mounted() {
+
+  },
+  methods: {
+    handleClick(tab, event) {
+      console.log(tab, event);
+    }
+  }
+};
+</script>
+
+<style lang="scss">
+.details {
+  width: calc(100% - 40px);
+  height: calc(100% - 40px) !important;
+  padding: 20px;
+  .el-tabs__content{
+    height: calc(100% - 40px);
+    overflow: auto;
+  }
+}
+</style>

+ 185 - 0
src/views/patentMining/components/dialog/addAndEditProject.vue

@@ -0,0 +1,185 @@
+<template>
+  <div>
+    <el-dialog :title="title" :visible.sync="dialogVisible" width="800" :before-close="handleClose">
+      <el-form :model="form" status-icon :rules="rules" ref="form" label-width="120px" class="demo-ruleForm">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="项目名称:" prop="name">
+              <el-input v-model="form.name" placeholder="请输入项目名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="技术方向:">
+              <el-input v-model="form.type" placeholder="请输入技术方向"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="产品阶段:">
+              <el-input v-model="form.name" placeholder="请输入产品阶段"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="产出:">
+              <el-input v-model="form.type" placeholder="请输入产出"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="相关竞争对手:">
+              <el-input v-model="form.name" placeholder="请输入相关竞争对手"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="技术关键词:">
+              <el-input v-model="form.type" placeholder="请输入技术关键词"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="参与人:">
+              <el-select v-model="form.value" placeholder="请选择负责人" style="width: 100%;">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="负责人:">
+              <el-select v-model="form.value" placeholder="请选择负责人" style="width: 100%;">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="是否检索:">
+              <el-switch v-model="form.delivery" active-color="#13ce66" inactive-color="#ff4949">
+              </el-switch>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="是否审核:">
+              <el-switch v-model="form.delivery2" active-color="#13ce66" inactive-color="#ff4949">
+              </el-switch>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <template v-if="form.delivery2">
+          <el-row >
+            <el-col :span="12">
+              <el-form-item label="审核人:">
+                <el-select v-model="form.value" placeholder="请选择负责人" style="width: 100%;">
+                  <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="截止时间:">
+                <el-date-picker style="width: 100%" v-model="form.endTime" type="datetime"
+                  value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择截止日期时间">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="24">
+              <el-form-item label="审核备注:">
+                <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="form.remark"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </template>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="附件:">
+              <el-upload ref="upload" class="upload-file" drag action="#" :auto-upload="false" :show-file-list="true"
+                :on-change="onChange" :on-remove="handleRemove" :on-preview="handlePreview">
+                <i :class="fileList.length != 0 ? 'el-icon-upload' : 'el-icon-refresh'"></i>
+                <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+                <div class="el-upload__tip" slot="tip"></div>
+              </el-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="项目备注:">
+              <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="form.remark"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="handleClose">取 消</el-button>
+        <el-button type="primary" @click="submit">确 定</el-button>
+      </span>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+      dialogVisible: false,
+      title: '',
+      form: {},
+      rules: {
+        name: [{ required: true, message: '请输入项目名称', trigger: 'blur' },],
+      },
+      options: [],//负责人数组
+      value: '',//负责人
+      fileList: []//文件数组
+    };
+  },
+  watch: {},
+  computed: {},
+  created() { },
+  mounted() { },
+  methods: {
+    onChange(file, fileList) { },
+    handlePreview(file, fileList) { },
+    handleRemove(file, fileList) { },
+    //打开弹窗
+    open(form) {
+      this.form = JSON.parse(JSON.stringify(form))
+      if (this.form.id) {
+        this.title = '编辑专利挖掘项目'
+      } else {
+        this.title = '新增专利挖掘项目'
+      }
+      this.dialogVisible = true
+    },
+    //关闭弹窗
+    handleClose() {
+      this.$refs.upload.clearFiles()
+      this.$refs.form.resetFields()
+      this.form = {}
+      this.dialogVisible = false
+    },
+    //提交数据
+    submit() {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.handleClose()
+        } else {
+          this.$message.error('信息未输入完整')
+        }
+      });
+      
+    }
+  },
+
+};
+</script>
+<style lang="scss" scoped></style>

+ 69 - 0
src/views/patentMining/components/dialog/auditRecords.vue

@@ -0,0 +1,69 @@
+<template>
+  <!-- 任务审核记录 -->
+  <div class="auditRecords">
+    <el-dialog title="查看审核记录" :visible.sync="dialogVisible" width="1000px" :before-close="handleClose" :close-on-click-modal="false">
+      <el-table :data="tableData" style="width: 100%;" border header-row-class-name="custom-table-header">
+        <el-table-column label="#" align="center" width="60px">
+          <template slot-scope="scope">
+            <div>
+              {{ (queryParams.current - 1) * queryParams.size + scope.$index + 1 }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="name" label="任务名称" align="center"></el-table-column>
+        <el-table-column prop="type" label="任务类型" align="center"></el-table-column>
+        <el-table-column prop="createPerson" label="发起人" align="center"></el-table-column>
+        <el-table-column prop="handlePerson" label="处理人" align="center"></el-table-column>
+        <el-table-column prop="createTime" label="创建时间" align="center"></el-table-column>
+        <el-table-column prop="endTime" label="截止时间" align="center"></el-table-column>
+        <el-table-column prop="status" label="状态" align="center"></el-table-column>
+      </el-table>
+      <div style="text-align: center;padding-top: 20px;">
+        <el-pagination background layout="total, prev, pager, next, jumper" :current-page.sync="queryParams.current"
+          :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="queryParams.total">
+        </el-pagination>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="handleClose">关 闭</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      tableData: [],
+      dialogVisible: false,
+      queryParams: {
+        current: 1,
+        size: 10,
+        total: 0,
+      },
+    }
+  },
+  mounted() {
+
+  },
+  methods: {
+    getList() { },
+    // 打开弹窗
+    open() {
+      // this.getList()
+      this.dialogVisible = true
+    },
+    handleClose() {
+      this.dialogVisible = false
+    },
+    // 分页查询
+    handleCurrentChange(val) {
+      this.queryParams.current=val
+      this.getList()
+    },
+    
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 100 - 0
src/views/patentMining/components/dialog/createTask.vue

@@ -0,0 +1,100 @@
+<template>
+  <!-- 创建挖掘任务弹窗 -->
+  <div class="createTask">
+    <el-dialog :title="title" :visible.sync="dialogVisible" width="500px" :before-close="handleClose" :close-on-click-modal="false">
+      <el-form :model="form" status-icon :rules="rules" ref="form" label-width="120px" class="demo-ruleForm">
+        <el-form-item label="任务名称:" prop="taskName">
+          <el-input v-model="form.taskName" placeholder="请输入任务名称"></el-input>
+        </el-form-item>
+        <el-form-item label="任务流程:" prop="taskPath">
+          <el-select v-model="form.taskPath" placeholder="请选择流程" style="width: 100%;">
+            <el-option v-for="item in pathOptions" :key="item.value" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="处理人:" prop="taskPerson">
+          <el-select v-model="form.taskPerson" placeholder="请选择处理人" style="width: 100%;">
+            <el-option v-for="item in personOptions" :key="item.value" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="截止时间:" prop="endTime">
+          <el-date-picker style="width: 100%" v-model="form.endTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
+            placeholder="请选择截止日期时间">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="handleClose">取 消</el-button>
+        <el-button type="primary" @click="submit">确 定</el-button>
+      </span>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+      dialogVisible: false,
+      title: '',
+      form: {},
+      rules: {},
+      personOptions: [],//处理人
+      pathOptions: [
+        {label:'创新点流程',value:'1'},
+        {label:'查新检索',value:'2'},
+        {label:'保护主题规划',value:'3'},
+        {label:'独权撰写',value:'4'},
+        {label:'从权撰写',value:'5'},
+        {label:'申请文件定稿',value:'6'},
+        { label: '说明书规划撰写', value: '7' },
+      ],//流程
+      rules: {
+        taskName: [{ required: true, message: '请输入任务名称', trigger: 'blur' },],
+        taskPath: [{ required: true, message: '请选择流程', trigger: 'change' },],
+        taskPerson: [{ required: true, message: '请选择处理人', trigger: 'change' },],
+        endTime: [{ required: true, message: '请选择截止时间', trigger: 'change' },],
+      }
+    };
+  },
+  watch: {},
+  computed: {},
+  created() { },
+  mounted() { },
+  methods: {
+    //打开弹窗
+    open(form) {
+      this.form = JSON.parse(JSON.stringify(form))
+      // if(this.form.id){
+      //     this.title = '编辑任务'
+      // }else{
+      //     this.title = '创建任务'
+      // }
+      this.title = '创建任务'
+      this.dialogVisible = true
+    },
+    //关闭弹窗
+    handleClose() {
+      this.$refs.form.resetFields()
+      this.form = {}
+      this.dialogVisible = false
+    },
+    //提交数据
+    submit() {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.handleClose()
+        } else {
+          this.$message.error('信息未输入完整')
+        }
+      });
+    }
+  },
+
+};
+</script>
+<style lang="scss" scoped></style>

+ 169 - 0
src/views/patentMining/components/dialog/handleTask1.vue

@@ -0,0 +1,169 @@
+<template>
+  <!-- 处理挖掘任务1(审核任务) -->
+  <div class="handleTask1">
+    <el-dialog :title="title" :visible.sync="dialogVisible" width="800px" :before-close="handleClose" :close-on-click-modal="false">
+      <el-form :model="form" status-icon :rules="rules" ref="form" label-width="120px" class="demo-ruleForm" :disabled="!form.isLook">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="项目名称:" prop="name">
+              <el-input v-model="form.name" placeholder="请输入项目名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="技术方向:">
+              <el-input v-model="form.type" placeholder="请输入技术方向"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="产品阶段:">
+              <el-input v-model="form.name" placeholder="请输入产品阶段"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="产品产出:">
+              <el-input v-model="form.type" placeholder="请输入产品产出"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="相关竞争对手:">
+              <el-input v-model="form.name" placeholder="请输入相关竞争对手"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="技术关键词:">
+              <el-input v-model="form.type" placeholder="请输入技术关键词"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="参与人:">
+              <el-input v-model="form.name" placeholder="请输入参与人"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="负责人:">
+              <el-select v-model="form.value" placeholder="请选择负责人" style="width: 100%;">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="是否检索:" >
+              <el-switch
+                v-model="form.delivery"
+                active-color="#13ce66"
+                inactive-color="#ff4949">
+              </el-switch>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="附件:" prop="file">
+              <el-upload class="upload-demo" ref="upload" action="#" :auto-upload="false" :show-file-list="true"
+                :on-change="onChange" multiple :on-preview="handlePreview" :on-remove="handleRemove"
+                :file-list="fileList">
+                <i class="el-icon-upload2" style="font-size: 18px;"></i>
+              </el-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="handleClose" size="small">取 消</el-button>
+        <el-dropdown v-if="form.isLook" split-button type="primary" @click="submit" size="small">
+          <span>{{ btn.label }}</span>
+          <el-dropdown-menu slot="dropdown" class="text-align_center">
+            <el-dropdown-item v-for="item in btnObj" :key="item.label" @click.native="onChangeFamily(item)">{{ item.label
+            }}</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
+      </span>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+      dialogVisible: false,
+      title: '',
+      form: {},
+      rules: {
+        name: [{ required: true, message: '请输入项目名称', trigger: 'blur' },],
+      },
+      btnObj: [
+        {
+          label: '同意创建',
+          value: 1
+        },
+        {
+          label: '取消创建',
+          value: 4
+        },
+        {
+          label: '缺少材料',
+          value: 5
+        }
+      ],
+      btn: {
+        label: '同意创建',
+        value: 1
+      },
+      options: [],
+      fileList: [],
+    };
+  },
+  watch: {},
+  computed: {},
+  created() { },
+  mounted() { },
+  methods: {
+    onChange(file, fileList) { },
+    handlePreview(file, fileList) { },
+    handleRemove(file, fileList) { },
+    // 切换按钮
+    onChangeFamily(val) {
+      this.btn = val
+    },
+    //打开弹窗
+    open(form,val) {
+      this.form = JSON.parse(JSON.stringify(form))
+      this.form.isLook=val
+      // if(this.form.id){
+      //     this.title = '编辑任务'
+      // }else{
+      //     this.title = '创建任务'
+      // }
+      if (this.form.isLook) {
+        this.title = '处理任务'
+      } else {
+        this.title = '查看任务'
+      }
+      this.dialogVisible = true
+    },
+    //关闭弹窗
+    handleClose() {
+      this.form = {}
+      this.dialogVisible = false
+    },
+    //提交数据
+    submit() {
+      this.dialogVisible = false
+    }
+  },
+
+};
+</script>
+<style lang="scss" scoped></style>

+ 166 - 0
src/views/patentMining/components/dialog/handleTask2.vue

@@ -0,0 +1,166 @@
+<template>
+  <!-- 处理挖掘任务2(分配任务) -->
+  <div class="handleTask2">
+    <el-dialog ref="dialog" :title="title" :visible.sync="dialogVisible" width="800px" :before-close="handleClose"
+      :close-on-click-modal="false">
+
+      <el-upload class="upload-demo" ref="upload" action="#" :auto-upload="false" :show-file-list="false"
+        :on-change="onChange" multiple :on-preview="handlePreview" :on-remove="handleRemove" :file-list="fileList">
+        <el-button size="small" type="primary">上传文件</el-button>
+      </el-upload>
+
+      <el-table class="elTable" :data="tableData" border style="width: 100%" header-row-class-name="custom-table-header">
+        <el-table-column prop="name" label="文件名称" align="center"></el-table-column>
+        <el-table-column prop="time" label="文件上传时间" align="center"> </el-table-column>
+        <el-table-column prop="type" label="文件类型" align="center"> </el-table-column>
+        <el-table-column label="操作" align="center" width="140">
+          <el-button @click="deleteFile" size="small" type="text" style="color: red;">删除</el-button>
+        </el-table-column>
+      </el-table>
+      <div class="explain">
+        <span>说明:</span>
+        <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="textarea"></el-input>
+      </div>
+
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="handleClose" size="small">取 消</el-button>
+        <el-button @click="handleSave" size="small" type="primary">保 存</el-button>
+        <el-button @click="submit" size="small" type="primary">提交审核</el-button>
+
+      </span>
+    </el-dialog>
+
+
+    <el-dialog title="审核任务" :visible.sync="auditTask" width="600px" :before-close="auditTaskClose"
+      :close-on-click-modal="false">
+      <el-form :model="examineForm" status-icon :rules="examineRules" ref="examineForm" label-width="120px"
+        class="demo-ruleForm">
+        <el-form-item label="任务名称:" prop="name">
+          <el-input v-model="examineForm.name" placeholder="请输入任务名称"></el-input>
+        </el-form-item>
+        <el-form-item label="审核人:" prop="examineId">
+          <el-select v-model="examineForm.examineId" placeholder="请选择审核人" style="width: 100%;">
+            <el-option v-for="item in examinePerson" :key="item.value" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="任务备注:" prop="remark">
+          <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="examineForm.remark"></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="auditTaskClose" size="small">取 消</el-button>
+        <el-button @click="sure" size="small" type="primary">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+      title: '',
+      tableData: [
+        {
+          name: '创新文件',
+          time: '2023-10-8',
+          type: 'excel',
+        }
+      ],
+      dialogVisible: false,
+      auditTask: false,
+      fileList: [],
+      textarea: '',
+      examineForm: {},
+      examinePerson: [],
+      examineRules: {
+        name: [{ required: true, message: '请输入任务名称', trigger: 'blur' },],
+        examineId: [{ required: true, message: '请选择审核人', trigger: 'change' },],
+      }
+    };
+  },
+  watch: {},
+  computed: {},
+  created() { },
+  mounted() { },
+  methods: {
+    // 删除文件
+    deleteFile(row) { },
+    // 上传文件
+    onChange(file, fileList) { },
+    handlePreview(file, fileList) { },
+    handleRemove(file, fileList) { },
+    //打开弹窗
+    open(row, val) {
+      // let row = JSON.parse(JSON.stringify(row))
+      // if(this.form.id){
+      //     this.title = '编辑任务'
+      // }else{
+      //     this.title = '创建任务'
+      // }
+      this.tableData[0].isLook = val
+      this.title = '任务名称:' + row.name
+      this.dialogVisible = true
+    },
+    //关闭弹窗
+    handleClose() {
+      this.dialogVisible = false
+    },
+    //提交数据
+    submit() {
+      this.examineForm.name = this.$refs.dialog.title.split(':')[1]
+      // this.examineForm.name =
+      this.auditTask = true
+    },
+    // 保存
+    handleSave() { },
+    // 审核弹窗确定
+    sure() {
+      this.$refs.examineForm.validate((valid) => {
+        if (valid) {
+          this.handleClose()
+          this.auditTaskClose()
+        } else {
+          this.$message.error('信息未输入完整')
+        }
+      });
+    },
+    // 审核弹窗关闭
+    auditTaskClose() {
+      this.$refs.examineForm.resetFields()
+      this.examineForm = {}
+      this.auditTask = false
+    },
+  },
+
+};
+</script>
+<style lang="scss">
+.handleTask2 {
+  .el-dialog__body {
+    padding: 10px 20px;
+  }
+}
+</style>
+<style lang="scss" scoped>
+.handleTask2 {
+  .handleTask2Dialog {
+    background: red;
+  }
+
+  .upload-demo {
+    float: right;
+    margin-bottom: 10px;
+  }
+
+  .explain {
+    margin-top: 10px;
+
+    span {
+      font-size: 16px;
+    }
+  }
+}</style>

+ 127 - 0
src/views/patentMining/components/dialog/uploadFile.vue

@@ -0,0 +1,127 @@
+<template>
+  <div class="uploadFile">
+    <el-dialog :title="title" :visible.sync="dialogVisible" width="600px" :before-close="handleClose"
+      :close-on-click-modal="false" label-width="300px">
+      <el-form :model="form" status-icon :rules="rules" ref="form" label-width="120px" class="demo-ruleForm">
+        <el-form-item label="文件名称:" prop="name">
+          <el-input v-model="form.name" placeholder="请输入文件名称"></el-input>
+        </el-form-item>
+        <el-form-item label="是否为最终文件:" prop="delivery" style="width: 20px;">
+          <el-switch v-model="form.delivery" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
+        </el-form-item>
+        <el-form-item label="文件类型:">
+          <el-select v-model="form.type" placeholder="请选择文件类型" style="width: 100%;">
+            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="发生时间:">
+          <el-date-picker v-model="form.time" value-format="yyyy-MM-dd" type="date" placeholder="选择日期"
+            style="width: 100%;">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="是否审核:" prop="delivery">
+          <el-switch v-model="form.delivery2" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
+        </el-form-item>
+        <template v-if="form.delivery2">
+          <el-form-item label="审核人:">
+            <el-select v-model="form.type" placeholder="请选择审核人" style="width: 100%;">
+              <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="审核备注:">
+            <el-input v-model="form.remark2" type="textarea" placeholder="请输入内容"></el-input>
+          </el-form-item>
+        </template>
+        
+        <el-form-item label="附件:" prop="delivery">
+          <el-upload ref="upload" class="upload-file" drag action="#" :auto-upload="false" :show-file-list="true"
+            :on-change="onChange" :on-remove="handleRemove" :on-preview="handlePreview">
+            <i :class="fileList.length != 0 ? 'el-icon-upload' : 'el-icon-refresh'"></i>
+            <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+            <div class="el-upload__tip" slot="tip"></div>
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="备注:">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="handleClose" size="small">取 消</el-button>
+        <el-button @click="submit" size="small" type="primary">确 定</el-button>
+
+      </span>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+      dialogVisible: false,
+      title: '',
+      form: {},
+      rules: {
+        name: [{ required: true, message: '请输入文件名称', trigger: 'blur' },],
+      },
+      options: [],
+      value: '',
+      delivery: '',
+      fileList: [],
+    };
+  },
+  watch: {},
+  computed: {},
+  created() { },
+  mounted() { },
+  methods: {
+    onChange(file, fileList) { },
+    handlePreview(file, fileList) { },
+    handleRemove(file, fileList) { },
+    // 切换按钮
+    onChangeFamily(val) {
+      this.btn = val
+    },
+    //打开弹窗
+    open(row) {
+      if (row.id) {
+        this.title = '编辑文件'
+      } else {
+        this.title = '上传文件'
+      }
+      // this.title = '上传文件'
+      this.dialogVisible = true
+    },
+    //关闭弹窗
+    handleClose() {
+      this.$refs.form.resetFields()
+      this.form = {}
+      this.dialogVisible = false
+    },
+    //提交数据
+    submit() {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.handleClose()
+        } else {
+          this.$message.error('信息未输入完整')
+        }
+      });
+    }
+  },
+
+};
+</script>
+<style lang="scss">
+.uploadFile {
+  .el-dialog__body {
+    padding: 0px 20px;
+  }
+}
+</style>
+<style lang="scss" scoped></style>

+ 235 - 0
src/views/patentMining/components/excavateTask/excavateTask.vue

@@ -0,0 +1,235 @@
+<template>
+  <!-- 挖掘任务 -->
+  <div class="excavateTask">
+    <el-container>
+      <el-header style="display: flex;justify-content: space-between;align-items: center;">
+        <div>
+          <mySearch :SearchFields="searchFiled" @search="search" :searchValue="searchOption"></mySearch>
+        </div>
+        <div style="display:flex;margin-right:10px">
+          <el-button type="primary" size="small" @click="createTask">创建任务</el-button>
+        </div>
+      </el-header>
+      <el-main>
+        <el-table :data="tableData" style="width: 100%;" border header-row-class-name="custom-table-header">
+          <el-table-column label="#" align="center" width="80px">
+            <template slot-scope="scope">
+              <div>
+                {{ (queryParams.current - 1) * queryParams.size + scope.$index + 1 }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="name" label="任务名称" align="center"></el-table-column>
+          <el-table-column prop="taskType" label="任务类型" align="center">
+            <template slot-scope="scope">
+              <div>
+                {{ taskType[scope.row.taskType] }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="createPerson" label="发起人" align="center"></el-table-column>
+          <el-table-column prop="handlePerson" label="处理人" align="center"></el-table-column>
+          <el-table-column prop="createTime" label="创建时间" align="center"></el-table-column>
+          <el-table-column prop="endTime" label="截止时间" align="center"></el-table-column>
+          <el-table-column prop="status" label="状态" align="center"></el-table-column>
+          <el-table-column label="操作" align="center" width="180px">
+            <template slot-scope="scope">
+              <div>
+                <el-dropdown split-button type="primary" size="small" @command="handleCommand($event, scope.row)"
+                  @click="handleTask(scope.row)">
+                  <span v-if="scope.row.status == '已完成' || scope.row.handlePerson != userInfo.name">查 看</span>
+                  <span v-else>处 理</span>
+                  <el-dropdown-menu slot="dropdown">
+                    <el-dropdown-item command="1">查看审核记录</el-dropdown-item>
+                    <el-dropdown-item command="2" style="color: red;text-align: center;">删除</el-dropdown-item>
+                  </el-dropdown-menu>
+                </el-dropdown>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-main>
+      <el-footer>
+        <div>
+          <el-pagination background layout="total, prev, pager, next, jumper" :current-page.sync="queryParams.current"
+            :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="queryParams.total">
+          </el-pagination>
+        </div>
+      </el-footer>
+    </el-container>
+
+    <createTask ref="createTaskDialog"></createTask>
+    <handleTask1 ref="handleTask1Dialog"></handleTask1>
+    <!-- <handleTask2 ref="handleTask2Dialog"></handleTask2> -->
+    <handleTask2 ref="handleTask2Dialog"></handleTask2>
+    <auditRecords ref="auditRecords"></auditRecords>
+  </div>
+</template>
+
+<script>
+import createTask from '../dialog/createTask.vue'
+import handleTask1 from '../dialog/handleTask1.vue'
+import handleTask2 from '../dialog/handleTask2.vue'
+import auditRecords from '../dialog/auditRecords.vue'
+export default {
+  components: {
+    createTask,
+    handleTask1,
+    handleTask2,
+    auditRecords,
+  },
+  data() {
+    return {
+      tableData: [
+        {
+          name: '加热器专利挖掘1',
+          taskType: '1',
+          createPerson: '朱豪',
+          handlePerson: '张三',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '未完成'
+        },
+        {
+          name: '加热器专利挖掘2',
+          taskType: '1',
+          createPerson: '朱豪',
+          handlePerson: '朱豪',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '未完成'
+        },
+        {
+          name: '加热器专利挖掘3',
+          taskType: '2',
+          createPerson: '张三',
+          handlePerson: '朱豪',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '未完成'
+        },
+        {
+          name: '加热器专利挖掘4',
+          taskType: '3',
+          createPerson: '朱豪',
+          handlePerson: '朱豪',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '未完成',
+          taskPath: '创新点梳理',
+          endTime: '2023-10-10',
+        },
+        {
+          name: '加热器专利挖掘5',
+          taskType: '1',
+          createPerson: '张三',
+          handlePerson: '朱豪',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '已完成'
+        },
+        {
+          name: '加热器专利挖掘6',
+          taskType: '1',
+          createPerson: '朱豪',
+          handlePerson: '张三',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '已完成'
+        },
+      ],
+      taskType: {
+        1: '项目审核任务',
+        2: '文件分配任务',
+        3: '文件审核任务',
+      },
+      queryParams: {
+        current: 1,
+        size: 10,
+        total: 0,
+      },
+      searchFiled: [
+        {
+          label: '任务名称',
+          value: 'taskName',
+          type: 1,
+          placeholder: '请输入任务名称'
+        },
+        {
+          label: '创建人',
+          value: 'createPerson',
+          type: 1,
+          placeholder: '请输入创建人名称'
+        },
+      ],
+      searchOption: {}
+    }
+  },
+  computed: {
+    userInfo() {
+      return this.$store.state.user.userinfo
+    },
+  },
+  mounted() {
+    // this.getList()
+  },
+  methods: {
+    //处理任务 
+    handleTask(row) {
+      if (row.status == '已完成' || row.handlePerson != this.userInfo.name) {
+        if (row.taskType == '1') {
+          this.$refs.handleTask1Dialog.open(row,false)
+        } else if (row.taskType == '2') {
+          this.$refs.handleTask2Dialog.open(row,false)
+        }
+      } else {
+        if (row.taskType == '1') {
+          this.$refs.handleTask1Dialog.open(row,true)
+        } else if (row.taskType == '2') {
+          this.$refs.handleTask2Dialog.open(row,true)
+        } else {
+          let router = this.$router.resolve({
+            path: '/handleExamine',
+            query: {
+              row: JSON.stringify(row)
+            }
+          })
+          window.open(router.href, '_blank')
+        }
+      }
+    },
+    handleCommand(ev, row) {
+      switch (ev) {
+        case '1'://查看审核记录
+          this.$refs.auditRecords.open()
+          break;
+        case '2'://删除任务
+
+          break;
+
+        default:
+          break;
+      }
+    },
+    // 左侧搜索
+    search() {
+
+    },
+    // 创建任务事件
+    createTask() {
+      this.$refs.createTaskDialog.open({})
+    },
+    // 初始化请求数据
+    getList() { },
+    // 分页
+    handleCurrentChange(val) {
+      // this.queryParams.current = val
+      // this.getList()
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.excavateTask {}
+</style>

+ 28 - 0
src/views/patentMining/components/excavateTask/index.vue

@@ -0,0 +1,28 @@
+<template>
+  <div>
+    <excavateTask style="height: 100%;"></excavateTask>
+  </div>
+</template>
+
+<script>
+import excavateTask from './excavateTask.vue'
+export default {
+  components: {
+    excavateTask
+  },
+  data() {
+    return {
+
+    }
+  },
+  computed: {},
+  mounted() {
+
+  },
+  methods: {
+
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 128 - 0
src/views/patentMining/components/fileMessage.vue

@@ -0,0 +1,128 @@
+<template>
+  <!-- 详情文件 -->
+  <div class="fileMessage">
+    <el-container>
+      <el-header style="display: flex;justify-content: space-between;align-items: center;">
+        <div>
+          <mySearch :SearchFields="searchFiled" @search="search" :searchValue="searchOption" ></mySearch>
+        </div>
+        <div style="display:flex;margin-right:10px">
+          <!-- <el-button-group class="margin-left_10">
+                    <el-button :type="queryShowType === '0' ? 'primary' : ''" @click="onChange2('0')" size="small">列表</el-button>
+                    <el-button :type="queryShowType === '1' ? 'primary' : ''" @click="onChange2('1')" size="small">卡片</el-button>
+                  </el-button-group> -->
+          <el-button type="primary" size="small" @click="uploadFile">上传文件</el-button>
+        </div>
+      </el-header>
+      <el-main>
+        <el-table :data="tableData" style="width: 100%;" border header-row-class-name="custom-table-header">
+          <el-table-column label="#" align="center" width="100px">
+            <template slot-scope="scope">
+              <div>
+                {{ (queryParams.current - 1) * queryParams.size + scope.$index + 1 }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="fileName" label="文件名称" align="center">
+            <!-- <template slot-scope="scope">
+              <div>
+                <el-link type="primary" @click="toDetails(scope.row)">{{ scope.row.name }}</el-link>
+              </div>
+            </template> -->
+          </el-table-column>
+          <el-table-column prop="uploader" label="文件上传人" align="center"></el-table-column>
+          <el-table-column prop="status" label="文件状态" align="center"></el-table-column>
+          <el-table-column prop="uploadTime" label="文件上传时间" align="center"></el-table-column>
+          <el-table-column prop="type" label="文件类型" align="center"></el-table-column>
+          <el-table-column prop="endFile" label="是否最终文件" align="center"></el-table-column>
+          <el-table-column label="操作" align="center" width="200px">
+            <template slot-scope="scope">
+              <div>
+                <el-button type="primary" size="small" @click="handleEdit(scope.row)">编辑</el-button>
+                <el-button type="danger" size="small" @click="handleDelete(scope.row)">删除</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-main>
+      <el-footer>
+        <div>
+          <el-pagination background layout="total, prev, pager, next, jumper" :current-page.sync="queryParams.current"
+            :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="queryParams.total">
+          </el-pagination>
+        </div>
+      </el-footer>
+    </el-container>
+
+    <uploadFile ref="uploadFile"></uploadFile>
+  </div>
+</template>
+
+<script>
+import uploadFile from './dialog/uploadFile.vue'
+export default {
+  components: {
+    uploadFile
+  },
+  data() {
+    return {
+      tableData: [
+        {
+          fileName:'加热器',
+          uploader:'朱豪',
+          status:'处理中',
+          uploadTime:'2023-9-28 17:09',
+          type:'',
+          endFile: '否',
+          id:1
+        }
+      ],
+      queryParams: {
+        current: 1,
+        size: 10,
+        total: 0,
+      },
+      searchFiled: [
+        {
+          label: '文件名称',
+          value: 'fileName',
+          type: 1,
+          placeholder: '请输入文件名称'
+        },
+        {
+          label: '上传人',
+          value: 'createPerson',
+          type: 1,
+          placeholder: '请输入上传人名称'
+        },
+      ],
+      searchOption: {}  
+    }
+  },
+  mounted() {
+    
+  },
+  methods: {
+    // 搜索
+    search(){},
+    // 上传文件
+    uploadFile() { 
+      this.$refs.uploadFile.open({})
+    },
+    // 编辑
+    handleEdit(row) {
+      this.$refs.uploadFile.open(row)
+    },
+    // 删除
+    handleDelete(row) { 
+      
+    },
+    // 分页
+    handleCurrentChange(val) {
+      
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 160 - 0
src/views/patentMining/components/handleExamine/handleExamine.vue

@@ -0,0 +1,160 @@
+<template>
+  <div class="handleExamine">
+    <myView style="height: 100%;width: 100%;" position="row">
+      <div slot="left" style="height: 100%;width:100%;padding: 20px 10px 0 10px;">
+        <div>任务详情:</div>
+        <el-divider></el-divider>
+        <el-descriptions title="" :column="2" size="" border style="margin-bottom: 20px;">
+          <el-descriptions-item>
+            <template slot="label">
+              <i class="el-icon-user"></i> 任务名称
+            </template>
+            {{ row.name }}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label">
+              <i class="el-icon-mobile-phone"></i> 所属项目
+            </template>
+            {{ row.name }}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label">
+              <i class="el-icon-location-outline"></i> 所属流程
+            </template>
+            {{ row.taskPath }}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label">
+              <i class="el-icon-tickets"></i> 截止时间
+            </template>
+            {{ row.endTime }}
+          </el-descriptions-item>
+        </el-descriptions>
+
+        <el-table :data="tableData" border>
+          <el-table-column prop="name" label="文件名称" align="center"></el-table-column>
+          <el-table-column prop="time" label="文件上传时间" align="center"> </el-table-column>
+          <el-table-column prop="type" label="文件类型" align="center"> </el-table-column>
+          <el-table-column label="操作" align="center">
+            <template slot-scope="scope">
+              <div>
+                <el-dropdown split-button type="primary" size="small" @command="handleCommand($event, scope.row)"
+                  @click="handleQuote(scope.row)">
+                  <span>引 用</span>
+                  <el-dropdown-menu slot="dropdown">
+                    <el-dropdown-item command="1">预览</el-dropdown-item>
+                    <el-dropdown-item command="2">下载</el-dropdown-item>
+                  </el-dropdown-menu>
+                </el-dropdown>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="div_margin">说明:</div>
+        <el-input type="textarea" :rows="3" readonly v-model="row.textarea"></el-input>
+      </div>
+      <div slot="right" style="height: 100%;width:100%;padding: 20px 10px 0 10px;">
+        <div>审核:</div>
+        <el-divider></el-divider>
+        <el-upload class="upload_demo" ref="upload" action="#" :auto-upload="false" :show-file-list="false"
+          :on-change="onChange" multiple :on-preview="handlePreview" :on-remove="handleRemove" :file-list="fileList">
+          <el-button size="small" type="primary">上传文件</el-button>
+        </el-upload>
+        <el-table :data="examineData" border style="width: 100%" header-row-class-name="custom-table-header">
+          <el-table-column prop="name" label="文件名称" align="center"></el-table-column>
+          <el-table-column prop="time" label="文件上传时间" align="center"> </el-table-column>
+          <el-table-column prop="type" label="文件类型" align="center"> </el-table-column>
+          <el-table-column label="操作" align="center">
+            <el-button @click="deleteFile" size="small" type="text" style="color: red;">删除</el-button>
+          </el-table-column>
+        </el-table>
+        <div class="div_margin">下一个审核人:</div>
+        <el-select v-model="nextPersonId" placeholder="请选择下一个审核人" style="width: 100%;">
+          <el-option v-for="item in personOptions" :key="item.value" :label="item.label" :value="item.value">
+          </el-option>
+        </el-select>
+        <div class="div_margin">审核意见:</div>
+        <el-input type="textarea" :rows="3" v-model="reviewComments" style="margin-bottom: 20px;"></el-input>
+        <el-button type="primary" size="small" @click="sure" style="float: right;">确 认</el-button>
+      </div>
+    </myView>
+  </div>
+</template>
+
+<script>
+export default {
+  props: ['row'],
+  data() {
+    return {
+      tableData: [
+        {
+          name: '创新文件',
+          time: '2023-10-8',
+          type: 'excel',
+        }
+      ],//任务详情文件
+      examineData: [
+        {
+          name: '创新文件2',
+          time: '2023-10-10',
+          type: 'excel',
+        }
+      ],//审核文件
+      reviewComments: '',//评审意见
+      nextPersonId: '',//下一个审核人
+      personOptions: '',//下一个审核人数组
+      fileList: [],//文件数组
+    }
+  },
+  mounted() {
+
+  },
+  methods: {
+    // 审核确认
+    sure() { },
+    // 删除文件
+    deleteFile(row) { },
+    // 上传文件
+    onChange(file, fileList) { },
+    handlePreview(file, fileList) { },
+    handleRemove(file, fileList) { },
+    // 引用
+    handleQuote(row) { },
+    // 引用下拉菜单胡处理
+    handleCommand(ev, row) {
+      switch (ev) {
+        case '1'://预览
+
+          break;
+        case '2'://下载
+
+          break;
+
+        default:
+          break;
+      }
+    },
+  },
+}
+</script>
+
+<style lang="scss">
+.handleExamine {
+  .el-divider--horizontal {
+    margin: 10px 0;
+  }
+}
+</style>
+<style lang="scss" scoped>
+.handleExamine {
+  .upload_demo {
+    display: flex;
+    justify-content: flex-end;
+    margin-bottom: 10px;
+  }
+
+  .div_margin {
+    margin: 20px 0 10px 0;
+  }
+}
+</style>

+ 28 - 0
src/views/patentMining/components/handleExamine/index.vue

@@ -0,0 +1,28 @@
+<template>
+  <div>
+    <handleExamine :row=row style="height: 100%;"></handleExamine>
+  </div>
+</template>
+
+<script>
+import handleExamine from './handleExamine.vue'
+export default {
+  components: {
+    handleExamine,
+  },
+  data() {
+    return {
+      
+    }
+  },
+  computed: {
+    row() {
+      return JSON.parse(this.$route.query.row)
+    }
+  },
+  mounted() { },
+  method:{},
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 33 - 0
src/views/patentMining/components/mixins/index.js

@@ -0,0 +1,33 @@
+import { checkVisual } from "@/views/home/components/mixins";
+export default{
+    mixins:[checkVisual],
+    props:{
+        tableData: {//数据
+            type: Array,
+            default: () => {
+              return [{ name: '123', eventNumber: '手机', projectNumber: '专题库一', projectNumber1: [{ name: '事件一' }]},]
+            }
+          },
+        queryParams: {//分页信息
+            type: Object,
+            default: () => {
+              return {
+                size: 10,
+                current: 1,
+              }
+            }
+        },
+    },  
+    computed:{
+
+    },
+    methods: {
+        // 点击名称等事件
+        handleItem(row,key) {
+        },
+        //操作列事件
+        handleCommand(option,row){
+            this.$emit('option', { option, row })
+        },
+    },
+}

+ 126 - 0
src/views/patentMining/components/projectPath.vue

@@ -0,0 +1,126 @@
+<template>
+  <!-- 项目流程 -->
+  <div class="projectPath" style="width: 100%;height:100%;">
+    <span>项目流程</span>
+    <el-divider></el-divider>
+    <svg viewBox="0 0 1800 400" width="100%" height="100%">
+      <g transform=translate(0,0) class="svgG">
+        <rect width="200" height="120" :fill="getColor('创新点流程')" @click="toFilePage('创新点流程')"> </rect>
+        <text x="30" y="65">创新点流程</text>
+        <circle cx="150" cy="60" r="16" stroke-width="1" stroke="#fff" :fill="getColor('创新点流程')" />
+        <text :x="getNumber('创新点流程') >9? '140':'145'" y="65" fill="#fff">{{ getNumber('创新点流程') }}</text>
+        <line x1="200" y1="60" x2="350" y2="60" stroke='#333'></line>
+        <polygon points="350,55,360,60,350,65"></polygon>
+      </g>
+      <g transform="translate(360,0)" class="svgG">
+        <rect width="200" height="120" :fill="getColor('查新检索')" @click="toFilePage('查新检索')"> </rect>
+        <text x="30" y="65">查新检索</text>
+        <circle cx="150" cy="60" r="15" stroke-width="1" stroke="#fff" :fill="getColor('查新检索')" />
+        <text :x="getNumber('查新检索') >9? '140':'145'" y="65" fill="#fff">{{ getNumber('查新检索') }}</text>
+        <line x1="200" y1="60" x2="350" y2="60" stroke='#333'></line>
+        <polygon points="350,55,360,60,350,65"></polygon>
+      </g>
+      <g transform="translate(720,0)" class="svgG">
+        <rect width="200" height="120" :fill="getColor('保护主题规划')" @click="toFilePage('保护主题规划')"> </rect>
+        <text x="30" y="65">保护主题规划</text>
+        <circle cx="150" cy="60" r="15" stroke-width="1" stroke="#fff" :fill="getColor('保护主题规划')" />
+        <text x="145" y="65" fill="#fff">{{ getNumber('保护主题规划') }}</text>
+        <line x1="200" y1="60" x2="350" y2="60" stroke='#333'></line>
+        <polygon points="350,55,360,60,350,65"></polygon>
+      </g>
+      <g transform="translate(1080,0)" class="svgG">
+        <rect width="200" height="120" :fill="getColor('独权撰写')" @click="toFilePage('独权撰写')"> </rect>
+        <text x="30" y="65">独权撰写</text>
+        <circle cx="150" cy="60" r="15" stroke-width="1" stroke="#fff" :fill="getColor('独权撰写')" />
+        <text x="145" y="65" fill="#fff">{{ getNumber('独权撰写') }}</text>
+        <line x1="200" y1="60" x2="350" y2="60" stroke='#333'></line>
+        <polygon points="350,55,360,60,350,65"></polygon>
+      </g>
+      <g transform="translate(1440,0)" class="svgG">
+        <rect width="200" height="120" :fill="getColor('从权撰写')" @click="toFilePage('从权撰写')"> </rect>
+        <text x="30" y="65">从权撰写</text>
+        <circle cx="150" cy="60" r="15" stroke-width="1" stroke="#fff" :fill="getColor('从权撰写')" />
+        <text x="145" y="65" fill="#fff">{{ getNumber('从权撰写') }}</text>
+        <line x1="100" y1="120" x2="100" y2="190" stroke='#333'></line>
+        <polygon points="95,190,100,200,105,190"></polygon>
+      </g>
+      <!-- <g transform="translate(1080,200)" class="svgG">
+        <rect width="200" height="120" :fill="getColor('从权撰写')" @click="toFilePage('从权撰写')">  </rect>
+        <text x="30" y="65">从权撰写</text>
+        <circle cx="150" cy="60" r="15" stroke-width="1" stroke="#fff" :fill="getColor('从权撰写')" />
+        <text x="145" y="65" fill="#fff">{{ getNumber('从权撰写') }}</text>
+        <line x1="0" y1="60" x2="-150" y2="60" stroke='#333'></line>
+        <polygon points="-150,55,-160,60,-150,65"></polygon>
+      </g> -->
+      <g transform="translate(1440,200)" class="svgG">
+        <rect width="200" height="120" :fill="getColor('申请文件定稿')" @click="toFilePage('申请文件定稿')"> </rect>
+        <text x="30" y="65">申请文件定稿</text>
+        <circle cx="150" cy="60" r="15" stroke-width="1" stroke="#fff" :fill="getColor('申请文件定稿')" />
+        <text x="145" y="65" fill="#fff">{{ getNumber('申请文件定稿') }}</text>
+        <line x1="0" y1="60" x2="-150" y2="60" stroke='#333'></line>
+        <polygon points="-150,55,-160,60,-150,65"></polygon>
+      </g>
+      <g transform="translate(1080,200)" class="svgG">
+        <rect width="200" height="120" :fill="getColor('说明书规划撰写')" @click="toFilePage('说明书规划撰写')"> </rect>
+        <text x="15" y="65" xml:space='preserve'>说明书规划撰写
+        </text>
+        <circle cx="150" cy="60" r="15" stroke-width="1" stroke="#fff" :fill="getColor('说明书规划撰写')" />
+        <text x="145" y="65" fill="#fff">{{ getNumber('说明书规划撰写') }}</text>
+      </g>
+
+    </svg>
+
+
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      numObj: {
+        '创新点流程':12,
+        '查新检索': 0,
+        '保护主题规划': 0,
+        '独权撰写': 0,
+        '从权撰写': 0,
+        '申请文件定稿': 0,
+        '说明书规划撰写': 0,
+      },
+    }
+  },
+  computed: {},
+  mounted() {
+
+  },
+  methods: {
+    // 获取文件数量
+    getNumber(str) {
+      return this.numObj[str]
+    },
+    // 获取背景颜色
+    getColor(str) {
+     return this.getNumber(str)>0?'#5ed325':'pink'
+    },
+    // 跳转文件列表界面
+    toFilePage(str) {
+      console.log(str);
+    },
+  },
+}
+</script>
+
+<style lang="scss">
+.projectPath {
+  .el-divider--horizontal {
+    margin: 10px 0;
+  }
+}
+</style>
+<style lang="scss" scoped>
+.projectPath{
+  .svgG{
+    cursor: pointer;
+  }
+}
+</style>

+ 75 - 0
src/views/patentMining/components/view/commonTable.vue

@@ -0,0 +1,75 @@
+<template>
+  <div>
+    <el-table :data="tableData" border style="width: 100%" header-row-class-name="custom-table-header">
+      <el-table-column label="#" align="center" width="100px">
+        <template slot-scope="scope">
+          <div>
+            {{ (queryParams.current - 1) * queryParams.size + scope.$index + 1 }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="name" label="项目名称" align="center">
+        <template slot-scope="scope">
+          <div>
+            <el-link type="primary" @click="toDetails(scope.row)">{{ scope.row.name }}</el-link>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="type" label="产出" align="center"></el-table-column>
+      <el-table-column prop="type" label="技术方向" align="center"></el-table-column>
+      <el-table-column prop="type" label="技术关键词" align="center"></el-table-column>
+      <el-table-column prop="type" label="相关竞争对手" align="center"></el-table-column>
+      <el-table-column prop="status" label="状态" align="center"></el-table-column>
+      <el-table-column prop="createPerson" label="创建人" align="center"></el-table-column>
+      <el-table-column label="操作" align="center" width="200px">
+        <template slot-scope="scope">
+          <div>
+            <el-dropdown split-button type="primary" size="small" @command="handleCommand($event, scope.row)">
+              <span @click="handleCommand('e', scope.row)">编辑</span>
+              <el-dropdown-menu slot="dropdown" style="text-align: center;">
+                <el-dropdown-item divided class="color-red" command="1" >删除</el-dropdown-item>
+              </el-dropdown-menu>
+            </el-dropdown>
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+  
+<script>
+import mixins from '../mixins'
+export default {
+  mixins:[mixins],
+  components: {},
+  props: {
+    
+  },
+  data() {
+    return {
+
+    };
+  },
+  watch: {},
+  computed: {},
+  created() { },
+  mounted() { },
+  methods: {
+    // 跳转详情页面
+    toDetails(row) {
+      let router=this.$router.resolve({
+        path: '/details',
+        query: {
+          name: row.name,
+          type: row.type,
+          status: row.status,
+          createPerson: row.createPerson,
+        }
+      })
+      window.open(router.href,'_blank')
+    },
+
+  },
+};
+</script>
+<style lang="scss" scoped></style>

+ 144 - 0
src/views/patentMining/index.vue

@@ -0,0 +1,144 @@
+<template>
+    <div>
+      <el-container>
+          <el-header>
+              <div>
+                <mySearch style="width:500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption" :disabled="!$permission('/workspace/project/check')"></mySearch>  
+              </div>
+              <div style="display:flex;margin-right:10px">
+                  <el-button-group class="margin-left_10" v-if="['可视化'].indexOf(isOperate) == -1">
+                    <el-button :type="viewType === 'commonTable' ? 'primary' : ''" @click="onChange2('commonTable')" size="small">列表</el-button>
+                    <el-button :type="viewType === 'commonCard' ? 'primary' : ''" @click="onChange2('commonCard')" size="small">卡片</el-button>
+                  </el-button-group>
+                  <el-dropdown trigger="click" split-button type="primary" size="small">
+                      <span @click="handleAdd">创建项目</span>
+                      <el-dropdown-menu slot="dropdown" class="text-align_center">
+                      </el-dropdown-menu>
+                  </el-dropdown>
+              </div>
+          </el-header>
+          <el-main>
+              <component :is="viewType" v-bind="$attrs" v-on="$listeners" :isOperate="isOperate" :tableData="dataList" :group="group" :queryParams="queryParams" @option="handleOption" @sort="handleSort"></component> 
+          </el-main>
+          <el-footer class="pagination">
+              <div>
+                  <el-pagination
+                      background
+                      layout="total, prev, pager, next, jumper"
+                      :current-page.sync="queryParams.current"
+                      :page-size.sync="queryParams.size"
+                      @current-change="handleCurrentChange"
+                      :total="total">
+                  </el-pagination>
+              </div>
+          </el-footer>
+      </el-container>
+      <addAndEditProject ref="addAndEditProject"></addAndEditProject>
+
+    </div>
+</template>
+  
+<script>
+  import commonTable from './components/view/commonTable.vue';
+  import addAndEditProject from './components/dialog/addAndEditProject.vue';
+  export default {
+    components: {
+      commonTable,
+      addAndEditProject
+    },
+    props: {
+      isOperate:''
+    },
+    data() {
+      return {
+          //当前组件名称
+          viewType:'commonTable',
+          //专利挖掘项目数据集合
+          dataList:[
+            {
+              name: 'xxx有限公司',
+              type: '本公司专利数据库',
+              status: '进行中',
+              createPerson: '朱豪',
+              id:1,
+            }
+          ],
+          //分页
+          queryParams:{
+              size:10,
+              current:0,
+          },
+          //分组
+          group:'',
+          //排序
+          sort:{},
+          //总数
+          total:0,
+          //检索字段
+          searchFiled:[
+              {
+                  label:'项目名称',
+                  value:'name',
+                  type:1,
+                  placeholder:'请输入项目名称'
+              },
+              {
+                  label:'创建人',
+                  value:'createPerson',
+                  type:1,
+                  placeholder:'请输入创建人名称'
+              },
+          ],
+          //检索条件
+          searchOption:{}
+      };
+    },
+    watch: {},
+    computed: {},
+    created() {},
+    mounted() {},
+    methods: {
+      //获取检索组件传过来的数据
+      search(val){
+  
+      },
+      //排序
+      handleSort(sort) {
+        this.sort = { ...sort }
+        this.getList()
+      },
+      //操作列
+      handleOption({ option, row }) {
+        switch (option) {
+          case '0'://设置定时任务
+              this.$refs.addAndEditDB.open(row,true)
+              break;
+          case '1'://删除
+              break;
+          case 'e'://编辑
+              this.$refs.addAndEditProject.open(row)
+            break;
+        }
+      },
+      //分页
+      handleCurrentChange(val) {
+        this.queryParams.current = val;
+        this.getList();
+      },
+      //获取专利挖掘项目数据列表
+      getList(){
+  
+      },
+      //添加其他企业专利数据库
+      handleAdd(){
+          this.$refs.addAndEditProject.open({})
+      },
+      //切换视图
+      onChange2(val){
+        this.viewType = val
+      },
+    },
+  };
+  </script>
+  <style lang="scss" scoped>
+  </style>

+ 1 - 1
src/views/product/components/commodity/commodity.vue

@@ -43,7 +43,7 @@
             <div>
               <el-dropdown split-button type="primary" size="small" @click="handleCommand('0')"
                 @command="handleCommand($event)">
-                <p>删除</p>
+                <span>删除</span>
                 <el-dropdown-menu slot="dropdown">
                   <el-dropdown-item>
                     <el-dropdown placement="left-start" @command="handleCommand($event)">

+ 1 - 1
src/views/product/components/framework/view/table.vue

@@ -22,7 +22,7 @@
         <template slot-scope="scope">
           <el-dropdown split-button type="primary" size="small" @click="handleCommand('0', scope.row)"
             @command="handleCommand($event, scope.row)">
-            <p>编 辑</p>
+            <span>编 辑</span>
             <el-dropdown-menu slot="dropdown" style="text-align:center">
               <el-dropdown-item command="1">预览图片</el-dropdown-item>
               <el-dropdown-item command="2" divided style="color:red">删 除</el-dropdown-item>

+ 1 - 1
src/views/product/components/index.vue

@@ -21,7 +21,7 @@
           </el-button-group> -->
           <div  style="margin:0 10px;">
             <el-dropdown trigger="click" split-button type="primary" size="small" >
-              <P @click="handleCommand('0')">新增类别</P>
+              <span @click="handleCommand('0')">新增类别</span>
               <el-dropdown-menu slot="dropdown" class="text-align_center">
                 <el-dropdown-item>
                   <el-dropdown trigger="hover" placement="left-start" @command="handleCommand($event)">

+ 1 - 1
src/views/product/components/view/categoryTable.vue

@@ -35,7 +35,7 @@
         <template slot-scope="scope">
           <el-dropdown split-button type="primary" size="small" @click="handleCommand('0', scope.row)"
             @command="handleCommand($event, scope.row)">
-            <p>编 辑</p>
+            <span>编 辑</span>
             <el-dropdown-menu slot="dropdown" style="text-align:center">
               <el-dropdown-item command="1">趋势图</el-dropdown-item>
               <el-dropdown-item command="2">预览图片</el-dropdown-item>

+ 1 - 1
src/views/product/components/view/productTable.vue

@@ -27,7 +27,7 @@
         <template slot-scope="scope">
           <el-dropdown split-button type="primary" size="small" @click="handleCommand('0', scope.row)"
             @command="handleCommand($event, scope.row)">
-            <p>编 辑</p>
+            <span>编 辑</span>
             <el-dropdown-menu slot="dropdown" style="text-align:center">
               <el-dropdown-item command="1">预览图片</el-dropdown-item>
               <el-dropdown-item command="2">产品架构</el-dropdown-item>

+ 65 - 26
src/views/project/components/drawer/form.vue

@@ -3,34 +3,38 @@
     <el-drawer class="custom-drawer-form" :title="title" size="800px" append-to-body :visible.sync="drawer" direction="rtl" :before-close="close" destroy-on-close>
         <el-container>
             <el-main>
-              <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm">
-                <el-form-item label="专题库名称" prop="name">
+              <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="130px" label-position="left" class="demo-ruleForm">
+                <el-form-item label="专题库名称" prop="name">
                   <el-input v-model="ruleForm.name" placeholder="请输入专题库名称"></el-input>
                 </el-form-item>
                 <template>
                   <div>
-                    <el-form-item label="委托方:" prop="name" v-if="userinfo.tenantType == 1">
-                      <el-autocomplete
-                        style="width:100%"
-                        v-model="ruleForm.clientName"
-                        :fetch-suggestions="querySearch"
-                        @input="input"
-                        placeholder="请输入内容"
-                        :trigger-on-focus="false"
-                        @select="handleChange"
-                      >
-                      <el-button slot="append" icon="el-icon-search" @click="handleSelect"></el-button>
-                      </el-autocomplete>
+                    <el-form-item label="委托方" prop="name" v-if="userinfo.tenantType == 1">
+                      
+                      <mySelectButton size='large' style="width:100%" @click="handleSelect">
+                        <div slot="select" style="width:100%">
+                          <el-autocomplete
+                            style="width:100%"
+                            v-model="ruleForm.clientName"
+                            :fetch-suggestions="querySearch"
+                            @input="input"
+                            placeholder="请输入内容"
+                            :trigger-on-focus="false"
+                            @select="handleChange"
+                          >
+                          </el-autocomplete>
+                        </div>
+                      </mySelectButton>
                     </el-form-item>
-                    <el-form-item label="委托部门:" prop="name" v-else>
+                    <el-form-item label="委托部门" prop="name" v-else>
                       <mySelectTree style="width:100%" v-model="ruleForm.departmentId" :options="departmentList"></mySelectTree>
                     </el-form-item>
                   </div>
                 </template>
-                <el-form-item label="负责部门" prop="departmentId">
+                <el-form-item label="负责部门" prop="departmentId">
                   <mySelectTree style="width:100%" v-model="ruleForm.departmentId" :options="departmentList"></mySelectTree>
                 </el-form-item>
-                <el-form-item label="负责人" prop="person">
+                <el-form-item label="负责人" prop="person">
                   <el-select style="width:100%" v-model="ruleForm.personnelId" filterable remote clearable placeholder="请选择" :loading="loading" v-SelectLazyLoading="lazyLoading" :remote-method="remoteMethod">
                     <el-option
                       v-for="item in personnelList"
@@ -41,12 +45,12 @@
                     </el-option>
                   </el-select>
                 </el-form-item>
-                <el-form-item label="应用场景" prop="scenarioList">
+                <el-form-item label="应用场景" prop="scenarioList">
                   <el-checkbox-group v-model="ruleForm.scenarioList" @change="onChange">
                     <el-checkbox v-for="item in commonData.ENTERPRISE_APPLICATION_SCENARIO" :key="item.value" :label="parseInt(item.value)">{{ item.label }}</el-checkbox>
                   </el-checkbox-group>
                 </el-form-item>
-                <el-form-item label="调查类型" prop="typeList" v-if="show==true">
+                <el-form-item label="调查类型" prop="typeList" v-if="show==true">
                   <el-checkbox-group v-model="ruleForm.typeList">
                     <template v-for="(item, index) in dictAssociateData">
                       <el-checkbox :label="parseInt(item.dictChildValue)">
@@ -65,7 +69,7 @@
                     </div>
                   </el-checkbox-group>
                 </el-form-item>
-                <el-form-item label="产品类别/产品" prop="productId" v-if="$permission('/workspace/product')">
+                <el-form-item label="产品类别/产品" prop="productId" v-if="$permission('/workspace/product')">
                   <div>
                     <mySelectButton size='large' style="width:100%">
                       <div slot="select" style="width:100%">
@@ -76,24 +80,24 @@
                 </el-form-item>
                 <el-row :gutter="24">
                   <el-col :span="12">
-                    <el-form-item label="合同号" prop="contractNo">
+                    <el-form-item label="合同号" prop="contractNo">
                       <el-input v-model="ruleForm.contractNo" placeholder="请输入合同号"></el-input>
                     </el-form-item>
                   </el-col>
                   <el-col :span="12">
-                    <el-form-item label="内部案卷" prop="innerFile">
+                    <el-form-item label="内部案卷" prop="innerFile">
                       <el-input v-model="ruleForm.innerFile" placeholder="请输入内部案卷"></el-input>
                     </el-form-item>
                   </el-col>
                 </el-row>
                 <el-row :gutter="24">
                   <el-col :span="12">
-                    <el-form-item label="委案日" prop="caseDate">
+                    <el-form-item label="委案日" prop="caseDate">
                       <el-date-picker v-model="ruleForm.caseDate" value-format="yyyy-MM-dd" type="date" placeholder="请选择委案日" class="width_100"></el-date-picker>
                     </el-form-item>
                   </el-col>
                   <el-col :span="12">
-                    <el-form-item label="处理状态" prop="status">
+                    <el-form-item label="处理状态" prop="status">
                       <el-select v-model="ruleForm.status" placeholder="请输入处理状态" class="width_100">
                         <el-option value="0" label="处理中"></el-option>
                         <el-option value="1" label="已完成"></el-option>
@@ -101,12 +105,15 @@
                     </el-form-item>
                   </el-col>
                 </el-row>
-                <el-form-item label="备注" prop="remark">
+                <el-form-item label="备注" prop="remark">
                   <el-input v-model="ruleForm.remark" placeholder="请输入备注" type="textarea"></el-input>
                 </el-form-item>
               </el-form>
             </el-main>
-            <el-footer></el-footer>
+            <el-footer class="footer-common" v-if="($permission('/workspace/project/modify')||$permission('/workspace/project/add')) && ($r(ruleForm.id,[2])||userinfo.id == ruleForm.createBy)">
+              <el-button @click="close">取 消</el-button>
+              <el-button type="primary" @click="submit" :loading="loading">确 定</el-button>
+            </el-footer>
         </el-container>
     </el-drawer>
 
@@ -278,6 +285,38 @@ export default {
         }
         this.moreData = !this.moreData
       },
+      //提交数据
+      submit() {
+        this.$refs.ruleForm.validate((valid) => {
+          if (valid) {
+            this.show=false
+            this.loading = true
+            if (this.ruleForm.id) {
+              this.$api.editProject(this.ruleForm).then(response => {
+                this.loading = false
+                this.$message.success('编辑成功')
+                this.$emit('submit', 0)
+                this.close()
+              }).catch(error => {
+                this.loading = false
+              })
+            } else {
+              this.$api.addProject(this.ruleForm).then(response => {
+                this.loading = false
+                let permissions = this.permissions
+                permissions[response.data] = 0
+                this.$store.commit('SET_PERMISSIONS', permissions)
+                this.$message.success('新增成功')
+                this.$emit('submit', 1)
+                this.close()
+              }).catch(error => {
+                this.show=true
+                this.loading = false
+              })
+            }
+          }
+        })
+      },
   },
 };
 </script>

+ 1 - 1
src/views/project/components/view/table.vue

@@ -21,7 +21,7 @@
           <template slot-scope="scope">
             <el-dropdown split-button type="primary" size="small" @click="handleCommand('e',scope.row)"
               @command="handleCommand($event,scope.row)">
-              <p>编 辑</p>
+              <span>编 辑</span>
               <el-dropdown-menu slot="dropdown" style="text-align:center">
                 <el-dropdown-item>
                   <el-dropdown @command="handleCommand($event,scope.row)" placement="left-start">

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

@@ -29,7 +29,7 @@
                   <el-button :type="queryShowType === '1' ? 'primary' : ''" @click="onChange2('1')" size="small">卡片</el-button>
                 </el-button-group>
                 <el-dropdown trigger="click" split-button type="primary" size="small">
-                    <p @click="handleAdd" v-disabled="!$permission('/workspace/project/add')">新增专题库</p>
+                    <span @click="handleAdd" v-disabled="!$permission('/workspace/project/add')">新增专题库</span>
                     <el-dropdown-menu slot="dropdown" class="text-align_center">
                         <el-dropdown-item @click.native="handleExport">导出列表</el-dropdown-item>
                         <el-dropdown-item @click.native="handleImport" :disabled="!$permission('/workspace/project/import')">导入数据包</el-dropdown-item>

+ 2 - 2
src/views/report/components/view/table.vue

@@ -20,8 +20,8 @@
         <el-table-column v-if="['首页'].indexOf(isOperate) == -1" label="操作" align="center" width="150px">
         <template slot-scope="scope">
           <el-dropdown @command="handleCommand($event, scope.row)" split-button type="primary" size="small"  @click="handleCommand('e',scope.row)">
-            <p v-if="$reportPermission(scope.row.id,[0,1])">编辑</p>
-            <p v-else>查看</p>
+            <span v-if="$reportPermission(scope.row.id,[0,1])">编辑</span>
+            <span v-else>查看</span>
             <el-dropdown-menu slot="dropdown" class="text-align_center">
               <el-dropdown-item command="0" v-if="$reportPermission(scope.row.id,[0,1])">分享</el-dropdown-item>
               <el-dropdown-item command="1" v-if="[2,3].includes(scope.row.status) && $reportPermission(scope.row.id,[0,1])">导出报告</el-dropdown-item>

+ 8 - 1
src/views/visual/components/drawer/eventDrawer.vue

@@ -1,6 +1,6 @@
 <template>
     <div>
-      <el-drawer class="custom-drawer-form" size="1100px" :with-header="false" :visible.sync="drawer" direction="rtl" :before-close="close" destroy-on-close append-to-body>
+      <el-drawer class="custom-drawer-form" size="900px" :with-header="false" :visible.sync="drawer" direction="rtl" :before-close="close" destroy-on-close append-to-body>
           <div style="padding:10px;height:100%">
             <questionIndex :applicationScenario="getQuestionId(params.scenarioName)" isOperate='可视化'></questionIndex>
           </div>
@@ -17,8 +17,11 @@
     props: {},
     data() {
       return {
+          //控制弹窗是否显示
           drawer:false,
+          //事件的信息
           params:{},
+          //事件数量
           QuestionTotal:[]
       };
     },
@@ -26,9 +29,11 @@
     computed: {},
     created() {},
     mounted() {
+        //获取事件数量
         this.getEventNumber()
     },
     methods: {
+        //获取当前应用场景数据
         getQuestionId(type){
             if(this.QuestionTotal.length>0){
                 var a= this.QuestionTotal.find(item=>{return item.applicationScenarioName == type})
@@ -45,6 +50,7 @@
                 }
             })
         },
+        //打开抽屉
         open(scenarioName, typeName, question){
           this.params = {
               scenarioName:scenarioName, 
@@ -53,6 +59,7 @@
           }
           this.drawer = true
         },
+        //关闭抽屉
         close(){
             this.$emit('close')
             this.drawer = false

+ 2 - 2
src/views/visual/components/drawer/titleDrawer.vue

@@ -15,12 +15,12 @@
 <script>
   import Project from '@/views/project/index.vue'
   import Report from '@/views/report/components/index.vue'
-//   import patentMining from './components/patentMining.vue'
+  import patentMining from '@/views/patentMining/index.vue'
   export default {
     components: {
       Project,
       Report,
-    //   patentMining
+      patentMining
     },
     props: {},
     data() {