瀏覽代碼

场景可视化应对流程以及关联

zhuliu 1 年之前
父節點
當前提交
0b72408924
共有 29 個文件被更改,包括 2462 次插入296 次删除
  1. 265 192
      public/科技与重大立项专利导航A7.svg
  2. 7 1
      src/api/newApi/product.js
  3. 5 1
      src/store/modules/dictMessage.js
  4. 3 0
      src/utils/model/retrieval/search.vue
  5. 9 8
      src/utils/model/svg/customSvg.vue
  6. 63 9
      src/utils/model/svg/mixins.js
  7. 5 5
      src/utils/window.js
  8. 1 0
      src/views/components/dialog/fields.vue
  9. 757 0
      src/views/components/setting/mixins.js
  10. 446 0
      src/views/components/setting/style.vue
  11. 1 1
      src/views/event/components/index.vue
  12. 6 0
      src/views/layout/mixins/index.js
  13. 1 0
      src/views/login/index.vue
  14. 57 8
      src/views/patentMining/components/viewIndex.vue
  15. 2 2
      src/views/product/components/details/components/basicMessage.vue
  16. 1 1
      src/views/product/components/details/components/index.vue
  17. 4 0
      src/views/product/components/details/index.vue
  18. 282 0
      src/views/product/components/echarts/components/MultipleLine/index.vue
  19. 7 0
      src/views/product/components/echarts/components/echarts.js
  20. 231 0
      src/views/product/components/echarts/components/echarts.vue
  21. 32 0
      src/views/product/components/echarts/index.vue
  22. 13 4
      src/views/product/components/market/index.vue
  23. 1 1
      src/views/product/components/mixins/index.js
  24. 2 2
      src/views/product/components/view/productTable.vue
  25. 40 17
      src/views/project/index.vue
  26. 62 5
      src/views/report/components/index.vue
  27. 5 8
      src/views/visual/components/drawer/titleDrawer.vue
  28. 1 1
      src/views/visual/components/sceneSVG.vue
  29. 153 30
      src/views/visual/title/index.vue

+ 265 - 192
public/科技与重大立项专利导航A7.svg

@@ -1,214 +1,287 @@
-  <svg id="SvgjsSvg1006" viewBox="0 0 1350.671875 364.34375" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" version="1.1"
-        xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs">
-        <defs id="SvgjsDefs1007">
-          <pattern patternUnits="userSpaceOnUse" id="pattern_mark_0" width="300" height="300"><text x="150" y="100"
-              fill="rgba(229,229,229,0.8)" font-size="18" transform="rotate(-45, 150, 150)"
-              style="dominant-baseline: middle; text-anchor: middle;"></text></pattern>
-          <pattern patternUnits="userSpaceOnUse" id="pattern_mark_1" width="300" height="300"><text x="150" y="200"
-              fill="rgba(229,229,229,0.8)" font-size="18" transform="rotate(-45, 150, 150)"
-              style="dominant-baseline: middle; text-anchor: middle;"></text></pattern>
-          <marker id="SvgjsMarker1045" markerWidth="13" markerHeight="9" refX="9.5" refY="4.5" viewBox="0 0 13 9"
-            orient="auto" markerUnits="userSpaceOnUse" stroke-dasharray="0,0">
-            <path id="SvgjsPath1046" d="M0,0 L13,4.5 L0,9 L0,0" fill="#3084e5" stroke="#3084e5" stroke-width="1"></path>
-          </marker>
-          <marker id="SvgjsMarker1075" markerWidth="13" markerHeight="9" refX="9.5" refY="4.5" viewBox="0 0 13 9"
-            orient="auto" markerUnits="userSpaceOnUse" stroke-dasharray="0,0">
-            <path id="SvgjsPath1076" d="M0,0 L13,4.5 L0,9 L0,0" fill="#3084e5" stroke="#3084e5" stroke-width="1"></path>
-          </marker>
-          <marker id="SvgjsMarker1085" markerWidth="13" markerHeight="9" refX="9.5" refY="4.5" viewBox="0 0 13 9"
-            orient="auto" markerUnits="userSpaceOnUse" stroke-dasharray="0,0">
-            <path id="SvgjsPath1086" d="M0,0 L13,4.5 L0,9 L0,0" fill="#3084e5" stroke="#3084e5" stroke-width="1"></path>
-          </marker>
-        </defs>
-        <rect id="svgbackgroundid" width="1350.671875" height="364.34375" fill="transparent"></rect>
-        <rect id="SvgjsRect1009" width="1350.671875" height="364.34375" fill="url(#pattern_mark_0)"></rect>
-        <rect id="SvgjsRect1010" width="1350.671875" height="364.34375" fill="url(#pattern_mark_1)"></rect>
-      <!-- 科技与重大立项专利导航块 -->
-      <g id="SvgjsG1011" transform="translate(425.00520833333326,25.010401407877623)" onmouseenter="vm.svgOnMouseenter(event,{type:'titleA7',width:'510'})" onmouseleave="vm.svgOnMouseleave(event,{type:'titleA7',width:'510'})">
-        <path id="SvgjsPath1012" d="M 0 4Q 0 0 4 0L 530 0Q 534 0 534 4L 534 96Q 534 100 530 100L 4 100Q 0 100 0 96Z"
-          stroke="#11acaf'" stroke-width="1.5" fill-opacity="1" fill="#11acaf"></path>
-        <g id="SvgjsG1013"><text id="SvgjsText1014" font-family="微软雅黑" text-anchor="middle" font-size="26px"
-            width="514px" fill="#ffffff" font-weight="700" align="middle" lineHeight="125%" anchor="middle" 
-            family="微软雅黑" size="26px" weight="700" font-style="" opacity="1" y="27.25" transform="rotate(0)">
-            <tspan id="SvgjsTspan1015" dy="32" x="267">
-              <tspan id="SvgjsTspan1016" style="text-decoration:;">科技与重大立项专利导航</tspan>
-            </tspan>
-          </text></g>
-      </g>
-      <!-- 科技与重大立项专利导航事件数量 -->
-      <g id="SvgjsG1017" transform="translate(904.671875,58.010416666666686)" onClick="vm.svgOnClick(event,{type:'question',width:'510',scene:'科技与重大立项专利导航'})">
-        <path id="SvgjsPath1018"
-          d="M 0 20.833333333333332C 0 -6.944444444444444 42.8333333333336 -6.944444444444444 42.8333333333336 20.833333333333332C 42.8333333333336 48.61111111111111 0 48.61111111111111 0 20.833333333333332Z"
-          stroke="rgba(255,255,255,1)" stroke-width="1.5" fill-opacity="1" fill="#ffffff"></path>
-        <g id="SvgjsG1019"><text id="SvgjsText1020" font-family="微软雅黑" text-anchor="middle" font-size="18px"
-            width="23px" fill="#11acaf" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="微软雅黑"
-            size="18px" weight="700" font-style="" opacity="1" y="5.083333333333332" transform="rotate(0)">
-            <tspan id="SvgjsTspan1021" dy="22" x="21.5">
-              <tspan id="SvgjsTspan1022" style="text-decoration:;">{{ 科技与重大立项专利导航, 1 }}</tspan>
-            </tspan>
-          </text></g>
+<svg id="SvgjsSvg1006" width="100%" height="100%"
+  viewBox='0 0 1684.4375 323.09375'
+  xmlns="http://www.w3.org/2000/svg" version="1.1"
+  xmlns:xlink="http://www.w3.org/1999/xlink"
+  xmlns:svgjs="http://svgjs.com/svgjs">
+  <defs id="SvgjsDefs1007">
+    <pattern patternUnits="userSpaceOnUse" id="pattern_mark_0" width="300" height="300">
+      <text x="150" y="100" fill="rgba(229,229,229,0.8)" font-size="18" transform="rotate(-45, 150, 150)" style="dominant-baseline: middle; text-anchor: middle;"></text>
+    </pattern>
+    <pattern patternUnits="userSpaceOnUse" id="pattern_mark_1" width="300" height="300">
+      <text x="150" y="200" fill="rgba(229,229,229,0.8)" font-size="18" transform="rotate(-45, 150, 150)" style="dominant-baseline: middle; text-anchor: middle;"></text>
+    </pattern>
+    <pattern id="SvgjsPattern1061" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse">
+      <image id="SvgjsImage1062" xlink:href="https://cdn.processon.com/64e60c2a7e3221474c6613b5-65545e7997925964fce130b3.svg?e=1700031625&amp;token=trhI0BY8QfVrIGn9nENop6JAc6l5nZuxhjQ62UfM:TAl7ewjEeA6DQpDdKNlWHFvVFdk=" width="40" height="40" preserveAspectRatio="none" crossOrigin="anonymous" x="0" y="0"></image>
+    </pattern>
+    <marker id="SvgjsMarker1081" markerWidth="13" markerHeight="9" refX="9.5" refY="4.5" viewBox="0 0 13 9" orient="auto" markerUnits="userSpaceOnUse" stroke-dasharray="0,0">
+      <path id="SvgjsPath1082" d="M0,0 L13,4.5 L0,9 L0,0" fill="#316292" stroke="#316292" stroke-width="1"></path>
+    </marker>
+    <marker id="SvgjsMarker1085" markerWidth="13" markerHeight="9" refX="9.5" refY="4.5" viewBox="0 0 13 9" orient="auto" markerUnits="userSpaceOnUse" stroke-dasharray="0,0">
+      <path id="SvgjsPath1086" d="M0,0 L13,4.5 L0,9 L0,0" fill="#316292" stroke="#316292" stroke-width="1"></path>
+    </marker>
+    <marker id="SvgjsMarker1089" markerWidth="13" markerHeight="9" refX="9.5" refY="4.5" viewBox="0 0 13 9" orient="auto" markerUnits="userSpaceOnUse" stroke-dasharray="0,0">
+      <path id="SvgjsPath1090" d="M0,0 L13,4.5 L0,9 L0,0" fill="#316292" stroke="#316292" stroke-width="1"></path>
+    </marker>
+    <pattern id="SvgjsPattern1106" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse">
+      <image id="SvgjsImage1107" xlink:href="https://cdn.processon.com/64e60c2a7e3221474c6613b5-65545e7997925964fce130b3.svg?e=1700031625&amp;token=trhI0BY8QfVrIGn9nENop6JAc6l5nZuxhjQ62UfM:TAl7ewjEeA6DQpDdKNlWHFvVFdk=" width="40" height="40" preserveAspectRatio="none" crossOrigin="anonymous" x="0" y="0"></image>
+    </pattern>
+  </defs>
+  <rect id="svgbackgroundid" width="1684.4375" height="323.09375" fill="transparent"></rect>
+  <rect id="SvgjsRect1009" width="1684.4375" height="323.09375" fill="url(#pattern_mark_0)"></rect>
+  <rect id="SvgjsRect1010" width="1684.4375" height="323.09375" fill="url(#pattern_mark_1)"></rect>
+  <!-- 科技与重大立项专利导航块 -->
+  <g id="SvgjsG1011" transform="translate(645.0104166666713,25.010443369547517)" onmouseenter="vm.svgOnMouseenter(event,{type:'titleA7',width:'510'})" onmouseleave="vm.svgOnMouseleave(event,{type:'titleA7',width:'510'})" onClick="vm.handleClick2('科技与重大立项专利导航')">
+    <path id="SvgjsPath1012" d="M 0 4Q 0 0 4 0L 476 0Q 480 0 480 4L 480 65.99998474121105Q 480 69.99998474121105 476 69.99998474121105L 4 69.99998474121105Q 0 69.99998474121105 0 65.99998474121105Z" stroke="rgba(231,79,76,1)" stroke-width="2" fill="none"></path>
+    <g id="SvgjsG1013">
+      <text id="SvgjsText1014" font-family="思源黑体" text-anchor="middle" font-size="26px" width="370px" fill="#e74f4c" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="思源黑体" size="26px" weight="700" font-style="" opacity="1" y="15.166651407877609" transform="rotate(0)">
+        <tspan id="SvgjsTspan1015" dy="32.5" x="195">
+          <tspan id="SvgjsTspan1016" style="">科技与重大立项专利导航</tspan>
+        </tspan>
+      </text>
+    </g>
+
+     <!-- 线 -->
+    <g id="SvgjsG1027" transform="translate(364.635,15.50)" >
+      <path id="SvgjsPath1028" d="M 11 0L 11 40" stroke="#e74f4c" stroke-width="2" fill="none"></path>
+      <path id="SvgjsPath1029" d="M 0 0L 21 0L 21 40L 0 40Z" stroke="none" fill="none"></path>
+    </g>
+    <!-- 栏位 -->
+    <g id="SvgjsG1030" transform="translate(385.84,22.50)" >
+      <path id="SvgjsPath1031" d="M 0 0L 55.66666666666663 0L 55.66666666666663 40L 0 40Z" stroke="none" fill="none"></path>
+      <g id="SvgjsG1032">
+        <text id="SvgjsText1033" font-family="思源黑体" text-anchor="start" font-size="13px" width="56px" fill="#e74f4c" font-weight="700" align="middle" lineHeight="125%" anchor="start" family="思源黑体" size="13px" weight="700" font-style="" opacity="1" y="0.875" transform="rotate(0)">
+          <tspan id="SvgjsTspan1034" dy="16.25" x="0">
+            <tspan id="SvgjsTspan1035" style="">事件:</tspan>
+          </tspan>
+        </text>
       </g>
-      <!-- 产业/行业调查 -->
-      <g id="SvgjsG1023" transform="translate(492.00520833333326,259.34375)" onmouseenter="vm.svgOnMouseenter(event,{type:'9',width:'375'})" onmouseleave="vm.svgOnMouseleave(event,{type:'9',width:'375'})" onClick="vm.handleClick('产业/行业调查')">
-        <path id="SvgjsPath1024" d="M 0 4Q 0 0 4 0L 396 0Q 400 0 400 4L 400 76Q 400 80 396 80L 4 80Q 0 80 0 76Z"
-          stroke="{{产业/行业调查,#d45a6a}}" stroke-width="1.5" fill-opacity="1" fill="{{产业/行业调查,#d45a6a}}"></path>
-        <g id="SvgjsG1025"><text id="SvgjsText1026" font-family="微软雅黑" text-anchor="middle" font-size="24px"
-            width="380px" fill="#ffffff" font-weight="700" align="middle" lineHeight="125%" anchor="middle"
-            family="微软雅黑" size="24px" weight="700" font-style="" opacity="1" y="19" transform="rotate(0)">
-            <tspan id="SvgjsTspan1027" dy="30" x="200">
-              <tspan id="SvgjsTspan1028" style="text-decoration:;">产业/行业调查</tspan>
-            </tspan>
-          </text></g>
+    </g>
+    <!-- 数量 -->
+    <g id="SvgjsG1038" transform="translate(425.96,22.50)">
+      <path id="SvgjsPath1039" d="M 0 0L 45.49999999999966 0L 45.49999999999966 40L 0 40Z" stroke="none" fill="none"></path>
+      <g id="SvgjsG1040">
+        <text id="SvgjsText1041" font-family="思源黑体" text-anchor="end" font-size="13px" width="46px" fill="#e74f4c" font-weight="700" align="middle" lineHeight="125%" anchor="end" family="思源黑体" size="13px" weight="700" font-style="" opacity="1" y="0.875" transform="rotate(0)">
+          <tspan id="SvgjsTspan1042" dy="16.25" x="46">
+            <tspan id="SvgjsTspan1043" style="">{{ 科技与重大立项专利导航, 1 }}</tspan>
+          </tspan>
+        </text>
       </g>
-      <g id="SvgjsG1029" transform="translate(500.6718750000002,275.1770833333335)">
-        <path id="SvgjsPath1030" d="M 0 22.5C 0 -7.5 45 -7.5 45 22.5C 45 52.5 0 52.5 0 22.5Z"
-          stroke="rgba(255,255,255,1)" stroke-width="1.5" fill-opacity="1" fill="#ffffff"></path>
-        <g id="SvgjsG1031"><text id="SvgjsText1032" font-family="微软雅黑" text-anchor="middle" font-size="13px"
-            width="25px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle" family="微软雅黑"
-            size="13px" weight="400" font-style="" opacity="1" y="11.875" transform="rotate(0)"></text></g>
+    </g>
+  </g>
+  <!-- 政策与市场环境分析块 -->
+  <g id="SvgjsG1017" transform="translate(25.01041666667129,228.09375)" onmouseenter="vm.svgOnMouseenter(event,{type:'10',width:'375'})" onmouseleave="vm.svgOnMouseleave(event,{type:'10',width:'375'})" onClick="vm.handleClick('政策与市场环境分析')">
+    <path id="SvgjsPath1018" d="M 0 4Q 0 0 4 0L 426 0Q 430 0 430 4L 430 65.99998474121105Q 430 69.99998474121105 426 69.99998474121105L 4 69.99998474121105Q 0 69.99998474121105 0 65.99998474121105Z" stroke="rgba(49,98,146,1)" stroke-width="2" fill-opacity="1" fill="#ffffff"></path>
+    <g id="SvgjsG1019">
+      <text id="SvgjsText1020" font-family="思源黑体" text-anchor="middle" font-size="24px" width="410px" fill="#767676" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="思源黑体" size="24px" weight="700" font-style="" opacity="1" y="13.999992370605526" transform="rotate(0)"></text>
+    </g>
+    <g id="SvgjsG1021" transform="translate(63.16,17)" >
+      <path id="SvgjsPath1022" d="M 0 0L 252.00000000000023 0L 252.00000000000023 40L 0 40Z" stroke="none" fill="none"></path>
+      <g id="SvgjsG1023">
+        <text id="SvgjsText1024" font-family="思源黑体" text-anchor="middle" font-size="22px" width="253px" fill="#316292" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="思源黑体" size="22px" weight="700" font-style="" opacity="1" y="0.25" transform="rotate(0)">
+          <tspan id="SvgjsTspan1025" dy="27.5" x="126.5">
+            <tspan id="SvgjsTspan1026" style="">政策与市场环境分析</tspan>
+          </tspan>
+        </text>
       </g>
-      <g id="SvgjsG1033" transform="translate(509.33854166666663,283.51041666666686)">
-        <path id="SvgjsPath1034"
-          d="M 17.566666666666674 10.76666666666666L 14.166666666666671 0L 10.766666666666671 10.76666666666666L 0 10.76666666666666L 8.500000000000002 17.566666666666656L 5.100000000000001 28.333333333333314L 14.166666666666671 21.53333333333332L 23.23333333333334 28.333333333333314L 19.83333333333334 17.566666666666656L 28.333333333333343 10.76666666666666Z"
-          stroke="rgba(212,90,106,1)" stroke-width="1.5" fill-opacity="1" fill="#d45a6a"></path>
-        <g id="SvgjsG1035"><text id="SvgjsText1036" font-family="微软雅黑" text-anchor="middle" font-size="13px"
-            width="20px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle" family="微软雅黑"
-            size="13px" weight="400" font-style="" opacity="1" y="4.24999999999999" transform="rotate(0)"></text></g>
+    </g>
+
+      <!-- 线 -->
+    <g id="SvgjsG1027" transform="translate(314.635,15.50)" >
+      <path id="SvgjsPath1028" d="M 11 0L 11 40" stroke="rgba(49,98,146,1)" stroke-width="2" fill="none"></path>
+      <path id="SvgjsPath1029" d="M 0 0L 21 0L 21 40L 0 40Z" stroke="none" fill="none"></path>
+    </g>
+    <!-- 栏位 -->
+    <g id="SvgjsG1030" transform="translate(335.84,17.50)" >
+      <path id="SvgjsPath1031" d="M 0 0L 55.66666666666663 0L 55.66666666666663 40L 0 40Z" stroke="none" fill="none"></path>
+      <g id="SvgjsG1032">
+        <text id="SvgjsText1033" font-family="思源黑体" text-anchor="start" font-size="13px" width="56px" fill="#316292" font-weight="700" align="middle" lineHeight="125%" anchor="start" family="思源黑体" size="13px" weight="700" font-style="" opacity="1" y="0.875" transform="rotate(0)">
+          <tspan id="SvgjsTspan1034" dy="16.25" x="0">
+            <tspan id="SvgjsTspan1035" style="">数据库:</tspan>
+          </tspan>
+          <tspan id="SvgjsTspan1036" dy="16.25" x="0">
+            <tspan id="SvgjsTspan1037" style="">报告:</tspan>
+          </tspan>
+        </text>
       </g>
-      <!-- 产业/行业调查专利数据库数量 -->
-      <g id="SvgjsG1037" transform="translate(835.6718749999998,278.51041666666674)">
-        <path id="SvgjsPath1038"
-          d="M 0 20.833333333333332C 0 -6.944444444444444 42.8333333333336 -6.944444444444444 42.8333333333336 20.833333333333332C 42.8333333333336 48.61111111111111 0 48.61111111111111 0 20.833333333333332Z"
-          stroke="rgba(255,255,255,1)" stroke-width="1.5" fill-opacity="1" fill="#ffffff"></path>
-        <g id="SvgjsG1039"><text id="SvgjsText1040" font-family="微软雅黑" text-anchor="middle" font-size="18px"
-            width="23px" fill="#11acaf" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="微软雅黑"
-            size="18px" weight="700" font-style="" opacity="1" y="5.083333333333332" transform="rotate(0)">
-            <tspan id="SvgjsTspan1041" dy="22" x="21.5">
-              <tspan id="SvgjsTspan1042" style="text-decoration:;">{{ 产业/行业调查, 2 }}</tspan>
-            </tspan>  
-          </text></g>
+    </g>
+    <!-- 数量 -->
+    <g id="SvgjsG1038" transform="translate(376.96,17.50)">
+      <path id="SvgjsPath1039" d="M 0 0L 45.49999999999966 0L 45.49999999999966 40L 0 40Z" stroke="none" fill="none"></path>
+      <g id="SvgjsG1040">
+        <text id="SvgjsText1041" font-family="思源黑体" text-anchor="end" font-size="13px" width="46px" fill="#316292" font-weight="700" align="middle" lineHeight="125%" anchor="end" family="思源黑体" size="13px" weight="700" font-style="" opacity="1" y="0.875" transform="rotate(0)">
+          <tspan id="SvgjsTspan1042" dy="16.25" x="46">
+            <tspan id="SvgjsTspan1043" style="">{{ 政策与市场环境分析, 2 }}</tspan>
+          </tspan>
+          <tspan id="SvgjsTspan1044" dy="16.25" x="42">
+            <tspan id="SvgjsTspan1045" style="">{{ 政策与市场环境分析, 3 }}</tspan>
+          </tspan>
+        </text>
       </g>
-      <g id="SvgjsG1043">
-        <path id="SvgjsPath1044"
-          d="M691.671875 169.34375L1130.1163194444455 169.34375L1130.1163194444455 256.9104166666666" stroke="#3084e5"
-          stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1045)"></path>
+    </g>
+  </g>
+  
+
+    <!-- 产业/行业调查块 -->
+  <g id="SvgjsG1046" transform="translate(625.0104166666713,228.09375)"  onmouseenter="vm.svgOnMouseenter(event,{type:'9',width:'375'})" onmouseleave="vm.svgOnMouseleave(event,{type:'9',width:'375'})" onClick="vm.handleClick('产业/行业调查')">
+    <path id="SvgjsPath1047" d="M 0 4Q 0 0 4 0L 426 0Q 430 0 430 4L 430 65.99998474121105Q 430 69.99998474121105 426 69.99998474121105L 4 69.99998474121105Q 0 69.99998474121105 0 65.99998474121105Z" stroke="rgba(49,98,146,1)" stroke-width="2" fill-opacity="1" fill="#ffffff"></path>
+    <g id="SvgjsG1048">
+      <text id="SvgjsText1049" font-family="思源黑体" text-anchor="middle" font-size="24px" width="410px" fill="#767676" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="思源黑体" size="24px" weight="700" font-style="" opacity="1" y="13.999992370605526" transform="rotate(0)"></text>
+    </g>
+    <g id="SvgjsG1050" transform="translate(63.16,17)">
+      <path id="SvgjsPath1051" d="M 0 0L 252.00000000000023 0L 252.00000000000023 40L 0 40Z" stroke="none" fill="none"></path>
+      <g id="SvgjsG1052">
+        <text id="SvgjsText1053" font-family="思源黑体" text-anchor="middle" font-size="22px" width="253px" fill="#316292" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="思源黑体" size="22px" weight="700" font-style="" opacity="1" y="0.25" transform="rotate(0)">
+          <tspan id="SvgjsTspan1054" dy="27.5" x="126.5">
+            <tspan id="SvgjsTspan1055" style="">产业/行业调查</tspan>
+          </tspan>
+        </text>
       </g>
-      <!-- 产业/行业专利调查块 -->
-      <g id="SvgjsG1047" transform="translate(925.671875,259.34375000000006)" onClick="vm.handleClick('产业/行业专利调查')">
-        <path id="SvgjsPath1048" d="M 0 4Q 0 0 4 0L 396 0Q 400 0 400 4L 400 76Q 400 80 396 80L 4 80Q 0 80 0 76Z"
-          stroke="{{产业/行业专利调查,#d45a6a}}" stroke-width="1.5" fill-opacity="1" fill="{{产业/行业专利调查,#d45a6a}}"></path>
-        <g id="SvgjsG1049"><text id="SvgjsText1050" font-family="微软雅黑" text-anchor="middle" font-size="24px"
-            width="380px" fill="#ffffff" font-weight="700" align="middle" lineHeight="125%" anchor="middle"
-            family="微软雅黑" size="24px" weight="700" font-style="" opacity="1" y="19" transform="rotate(0)">
-            <tspan id="SvgjsTspan1051" dy="30" x="200">
-              <tspan id="SvgjsTspan1052" style="text-decoration:;">产业/行业专利调查</tspan>
-            </tspan>
-          </text></g>
+    </g>
+
+    <!-- 线 -->
+      <g id="SvgjsG1056" transform="translate(314.63,17)">
+        <path id="SvgjsPath1057" d="M 11 0L 11 40" stroke="rgba(49,98,146,1)" stroke-width="2" fill="none"></path>
+        <path id="SvgjsPath1058" d="M 0 0L 21 0L 21 40L 0 40Z" stroke="none" fill="none"></path>
       </g>
-      <g id="SvgjsG1053" transform="translate(939.1718750000001,276.84375)">
-        <path id="SvgjsPath1054" d="M 0 22.5C 0 -7.5 45 -7.5 45 22.5C 45 52.5 0 52.5 0 22.5Z"
-          stroke="rgba(255,255,255,1)" stroke-width="1.5" fill-opacity="1" fill="#ffffff"></path>
-        <g id="SvgjsG1055"><text id="SvgjsText1056" font-family="微软雅黑" text-anchor="middle" font-size="13px"
-            width="25px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle" family="微软雅黑"
-            size="13px" weight="400" font-style="" opacity="1" y="11.875" transform="rotate(0)"></text></g>
+      <!-- //图标 -->
+      <g id="SvgjsG1059" transform="translate(10.66,17)">
+        <path id="SvgjsPath1060" d="M 0 0L 40 0L 40 40L 0 40Z" stroke="none" fill="url(#SvgjsPattern1061)"></path>
       </g>
-      <!-- 产业/行业专利调查专利数据库数量 -->
-      <g id="SvgjsG1057" transform="translate(1271.5052083333342,278.5104166666667)">
-        <path id="SvgjsPath1058"
-          d="M 0 20.833333333333332C 0 -6.944444444444444 42.8333333333336 -6.944444444444444 42.8333333333336 20.833333333333332C 42.8333333333336 48.61111111111111 0 48.61111111111111 0 20.833333333333332Z"
-          stroke="rgba(255,255,255,1)" stroke-width="1.5" fill-opacity="1" fill="#ffffff"></path>
-        <g id="SvgjsG1059"><text id="SvgjsText1060" font-family="微软雅黑" text-anchor="middle" font-size="18px"
-            width="23px" fill="#11acaf" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="微软雅黑"
-            size="18px" weight="700" font-style="" opacity="1" y="5.083333333333332" transform="rotate(0)">
-            <tspan id="SvgjsTspan1061" dy="22" x="21.5">
-              <tspan id="SvgjsTspan1062" style="text-decoration:;">{{产业/行业专利调查, 2 }}</tspan>
+      <!-- 产业/行业调查数量 -->
+      <g id="SvgjsG1063" transform="translate(335.84,18.50)">
+        <path id="SvgjsPath1064" d="M 0 0L 55.66666666666663 0L 55.66666666666663 40L 0 40Z" stroke="none" fill="none"></path>
+        <g id="SvgjsG1065">
+          <text id="SvgjsText1066" font-family="思源黑体" text-anchor="start" font-size="13px" width="56px" fill="#316292" font-weight="700" align="middle" lineHeight="125%" anchor="start" family="思源黑体" size="13px" weight="700" font-style="" opacity="1" y="0.875" transform="rotate(0)">
+            <tspan id="SvgjsTspan1067" dy="16.25" x="0">
+              <tspan id="SvgjsTspan1068" style="">数据库:</tspan>
             </tspan>
-          </text></g>
-      </g>
-      <g id="SvgjsG1063" transform="translate(947.5052083333335,283.51041666666674)">
-        <path id="SvgjsPath1064"
-          d="M 17.566666666666674 10.76666666666666L 14.166666666666671 0L 10.766666666666671 10.76666666666666L 0 10.76666666666666L 8.500000000000002 17.566666666666656L 5.100000000000001 28.333333333333314L 14.166666666666671 21.53333333333332L 23.23333333333334 28.333333333333314L 19.83333333333334 17.566666666666656L 28.333333333333343 10.76666666666666Z"
-          stroke="rgba(212,90,106,1)" stroke-width="1.5" fill-opacity="1" fill="#d45a6a"></path>
-        <g id="SvgjsG1065"><text id="SvgjsText1066" font-family="微软雅黑" text-anchor="middle" font-size="13px"
-            width="20px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle" family="微软雅黑"
-            size="13px" weight="400" font-style="" opacity="1" y="4.24999999999999" transform="rotate(0)"></text></g>
-      </g>
-      <!-- 政策与市场环境分析 -->
-      <g id="SvgjsG1067" transform="translate(25.005208333333314,259.34375)" onmouseenter="vm.svgOnMouseenter(event,{type:'10',width:'375'})" onmouseleave="vm.svgOnMouseleave(event,{type:'10',width:'375'})" onClick="vm.handleClick('政策与市场环境分析')">
-        <path id="SvgjsPath1068" d="M 0 4Q 0 0 4 0L 396 0Q 400 0 400 4L 400 76Q 400 80 396 80L 4 80Q 0 80 0 76Z"
-          stroke="{{ 政策与市场环境分析, #3084e5 }}" stroke-width="1.5" fill-opacity="1" fill="{{ 政策与市场环境分析, #3084e5 }}"></path>
-        <g id="SvgjsG1069"><text id="SvgjsText1070" font-family="微软雅黑" text-anchor="middle" font-size="24px"
-            width="380px" fill="#ffffff" font-weight="700" align="middle" lineHeight="125%" anchor="middle"
-            family="微软雅黑" size="24px" weight="700" font-style="" opacity="1" y="19" transform="rotate(0)">
-            <tspan id="SvgjsTspan1071" dy="30" x="200">
-              <tspan id="SvgjsTspan1072" style="text-decoration:;">政策与市场环境分析</tspan>
+            <tspan id="SvgjsTspan1069" dy="16.25" x="0">
+              <tspan id="SvgjsTspan1070" style="">报告:</tspan>
             </tspan>
-          </text></g>
-      </g>
-      <g id="SvgjsG1073">
-        <path id="SvgjsPath1074"
-          d="M692.0052083333333 125.76040140787762L692.0052083333333 192.3437423706055L692.0052083333333 192.3437423706055L692.0052083333333 256.9770833333334"
-          stroke="#3084e5" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1075)"></path>
+          </text>
+        </g>
       </g>
-      <!-- 政策与市场环境分析专利数据库数量 -->
-      <g id="SvgjsG1077" transform="translate(367.3385416666662,278.51041666666674)">
-        <path id="SvgjsPath1078"
-          d="M 0 20.833333333333332C 0 -6.944444444444444 42.8333333333336 -6.944444444444444 42.8333333333336 20.833333333333332C 42.8333333333336 48.61111111111111 0 48.61111111111111 0 20.833333333333332Z"
-          stroke="rgba(255,255,255,1)" stroke-width="1.5" fill-opacity="1" fill="#ffffff"></path>
-        <g id="SvgjsG1079"><text id="SvgjsText1080" font-family="微软雅黑" text-anchor="middle" font-size="18px"
-            width="23px" fill="#11acaf" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="微软雅黑"
-            size="18px" weight="700" font-style="" opacity="1" y="5.083333333333332" transform="rotate(0)">
-            <tspan id="SvgjsTspan1081" dy="22" x="21.5">
-              <tspan id="SvgjsTspan1082" style="text-decoration:;">{{ 政策与市场环境分析, 2 }}</tspan>
+      <!-- 数量 -->
+      <g id="SvgjsG1071" transform="translate(376.96,18.50)">
+        <path id="SvgjsPath1072" d="M 0 0L 45.49999999999966 0L 45.49999999999966 40L 0 40Z" stroke="none" fill="none"></path>
+        <g id="SvgjsG1073">
+          <text id="SvgjsText1074" font-family="思源黑体" text-anchor="end" font-size="13px" width="46px" fill="#316292" font-weight="700" align="middle" lineHeight="125%" anchor="end" family="思源黑体" size="13px" weight="700" font-style="" opacity="1" y="0.875" transform="rotate(0)">
+            <tspan id="SvgjsTspan1075" dy="16.25" x="46">
+              <tspan id="SvgjsTspan1076" style="">{{ 产业/行业调查, 2 }}</tspan>
+            </tspan>
+            <tspan id="SvgjsTspan1077" dy="16.25" x="42">
+              <tspan id="SvgjsTspan1078" style="">{{ 产业/行业调查, 3 }}</tspan>
             </tspan>
-          </text></g>
+          </text>
+        </g>
       </g>
-      <g id="SvgjsG1083">
-        <path id="SvgjsPath1084"
-          d="M690.671875 169.34375L225.00520833333331 169.67708333333343L225.00520833333331 256.64375" stroke="#3084e5"
-          stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1085)"></path>
+
+  </g>
+
+  <g id="SvgjsG1079">
+    <path id="SvgjsPath1080" d="M840.0104166666713 101.84374618530273L840.0104166666713 164.46874809265137L240.0104166666713 164.46874809265137L240.0104166666713 225.14375" stroke="#316292" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1081)"></path>
+  </g>
+  <g id="SvgjsG1083">
+    <path id="SvgjsPath1084" d="M839.40625 164.59375L839.40625 196.34375L839.40625 196.34375L839.40625 225.14375" stroke="#316292" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1085)"></path>
+  </g>
+  <g id="SvgjsG1087">
+    <path id="SvgjsPath1088" d="M840.40625 164.59375L1440.0104166666713 164.59375L1440.0104166666713 225.14375" stroke="#316292" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1089)"></path>
+  </g>
+
+<!-- 产业/行业专利调查块 -->
+  <g id="SvgjsG1091" transform="translate(1225.0104166666713,228.09375)" onClick="vm.handleClick('产业/行业专利调查',true)">
+    <path id="SvgjsPath1092" d="M 0 4Q 0 0 4 0L 426 0Q 430 0 430 4L 430 65.99998474121105Q 430 69.99998474121105 426 69.99998474121105L 4 69.99998474121105Q 0 69.99998474121105 0 65.99998474121105Z" stroke="rgba(49,98,146,1)" stroke-width="2" fill-opacity="1" fill="#ffffff"></path>
+    <g id="SvgjsG1093">
+      <text id="SvgjsText1094" font-family="思源黑体" text-anchor="middle" font-size="24px" width="410px" fill="#767676" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="思源黑体" size="24px" weight="700" font-style="" opacity="1" y="13.999992370605526" transform="rotate(0)"></text>
+    </g>
+    <g id="SvgjsG1095" transform="translate(63.16,17)" >
+      <path id="SvgjsPath1096" d="M 0 0L 252.00000000000023 0L 252.00000000000023 40L 0 40Z" stroke="none" fill="none"></path>
+      <g id="SvgjsG1097">
+        <text id="SvgjsText1098" font-family="思源黑体" text-anchor="middle" font-size="22px" width="253px" fill="#316292" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="思源黑体" size="22px" weight="700" font-style="" opacity="1" y="0.25" transform="rotate(0)">
+          <tspan id="SvgjsTspan1099" dy="27.5" x="126.5">
+            <tspan id="SvgjsTspan1100" style="">产业/行业专利调查</tspan>
+          </tspan>
+        </text>
       </g>
-      <g id="SvgjsG1087" transform="translate(201.671875,170.34375)">
-        <path id="SvgjsPath1088" d="M 0 0L 100 0L 100 40L 0 40Z" stroke="none" fill="none"></path>
-        <g id="SvgjsG1089"><text id="SvgjsText1090" font-family="微软雅黑" text-anchor="middle" font-size="13px"
-            width="100px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
-            family="微软雅黑" size="13px" weight="400" font-style="" opacity="1" y="9.375" transform="rotate(0)"></text></g>
+    </g>
+      <!-- 线 -->
+      <g id="SvgjsG1101" transform="translate(314.63,17)">
+        <path id="SvgjsPath1102" d="M 11 0L 11 40" stroke="rgba(49,98,146,1)" stroke-width="2" fill="none"></path>
+        <path id="SvgjsPath1103" d="M 0 0L 21 0L 21 40L 0 40Z" stroke="none" fill="none"></path>
       </g>
-      <g id="SvgjsG1091" transform="translate(698.5052083333334,183.84375)">
-        <path id="SvgjsPath1092" d="M 0 0L 180 0L 180 40L 0 40Z" stroke="none" fill="none"></path>
-        <g id="SvgjsG1093"><text id="SvgjsText1094" font-family="微软雅黑" text-anchor="middle" font-size="13px"
-            width="180px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
-            family="微软雅黑" size="13px" weight="400" font-style="" opacity="1" y="0.875" transform="rotate(0)">
-            <tspan id="SvgjsTspan1095" dy="16" x="90">
-              <tspan id="SvgjsTspan1096" style="text-decoration:;fill: rgb(51, 35, 62);">了解立项技术的产业发展现</tspan>
+      <!-- 图标 -->
+      <g id="SvgjsG1104" transform="translate(10.66,17)">
+        <path id="SvgjsPath1105" d="M 0 0L 40 0L 40 40L 0 40Z" stroke="none" fill="url(#SvgjsPattern1106)"></path>
+      </g>
+      <!-- 栏位-->
+      <g id="SvgjsG1126" transform="translate(335.84,12.12)">
+        <path id="SvgjsPath1127" d="M 0 0L 55.66666666666663 0L 55.66666666666663 49.74990081787348L 0 49.74990081787348Z" stroke="none" fill="none"></path>
+        <g id="SvgjsG1128">
+          <text id="SvgjsText1129" font-family="思源黑体" text-anchor="start" font-size="13px" width="56px" fill="#316292" font-weight="700" align="middle" lineHeight="125%" anchor="start" family="思源黑体" size="13px" weight="700" font-style="" opacity="1" y="-2.2500495910632594" transform="rotate(0)">
+            <tspan id="SvgjsTspan1130" dy="16.25" x="0">
+              <tspan id="SvgjsTspan1131" style="">数据库:</tspan>
+            </tspan>
+            <tspan id="SvgjsTspan1132" dy="16.25" x="0">
+              <tspan id="SvgjsTspan1133" style="">报告:</tspan>
             </tspan>
-            <tspan id="SvgjsTspan1097" dy="16" x="90">
-              <tspan id="SvgjsTspan1098" style="text-decoration:;fill: rgb(51, 35, 62);">状,企业合作情况</tspan>
+            <tspan id="SvgjsTspan1134" dy="16.25" x="0">
+              <tspan id="SvgjsTspan1135" style="">挖掘:</tspan>
             </tspan>
-          </text></g>
+          </text>
+        </g>
       </g>
-      <g id="SvgjsG1099" transform="translate(230.2552083333328,183.84375)">
-        <path id="SvgjsPath1100" d="M 0 0L 179.91666666666703 0L 179.91666666666703 40L 0 40Z" stroke="none"
-          fill="none"></path>
-        <g id="SvgjsG1101"><text id="SvgjsText1102" font-family="微软雅黑" text-anchor="middle" font-size="13px"
-            width="180px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
-            family="微软雅黑" size="13px" weight="400" font-style="" opacity="1" y="0.875" transform="rotate(0)">
-            <tspan id="SvgjsTspan1103" dy="16" x="90">
-              <tspan id="SvgjsTspan1104" style="text-decoration:;nullfill: rgb(51, 35, 62);">了解目标国家/地区对立项技术</tspan>
+      <!-- 数量 -->
+      <g id="SvgjsG1136" transform="translate(376.96,10.44)">
+        <path id="SvgjsPath1137" d="M 0 0L 45.49999999999966 0L 45.49999999999966 53.125L 0 53.125Z" stroke="none" fill="none"></path>
+        <g id="SvgjsG1138">
+          <text id="SvgjsText1139" font-family="思源黑体" text-anchor="end" font-size="13px" width="46px" fill="#316292" font-weight="700" align="middle" lineHeight="125%" anchor="end" family="思源黑体" size="13px" weight="700" font-style="" opacity="1" y="-0.5625" transform="rotate(0)">
+            <tspan id="SvgjsTspan1140" dy="16.25" x="46">
+              <tspan id="SvgjsTspan1141" style="">{{产业/行业专利调查, 2 }}</tspan>
             </tspan>
-            <tspan id="SvgjsTspan1105" dy="16" x="90">
-              <tspan id="SvgjsTspan1106" style="text-decoration:;nullfill: rgb(51, 35, 62);">相关产业发展态度及市场环境</tspan>
+            <tspan id="SvgjsTspan1142" dy="16.25" x="46">
+              <tspan id="SvgjsTspan1143" style="">{{产业/行业专利调查, 3 }}</tspan>
             </tspan>
-          </text></g>
-      </g>
-      <g id="SvgjsG1107" transform="translate(1134.3385416666679,183.84375)">
-        <path id="SvgjsPath1108" d="M 0 0L 180 0L 180 40L 0 40Z" stroke="none" fill="none"></path>
-        <g id="SvgjsG1109"><text id="SvgjsText1110" font-family="微软雅黑" text-anchor="middle" font-size="13px"
-            width="180px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
-            family="微软雅黑" size="13px" weight="400" font-style="" opacity="1" y="9.375" transform="rotate(0)">
-            <tspan id="SvgjsTspan1111" dy="16" x="90">
-              <tspan id="SvgjsTspan1112" style="text-decoration:;fill: rgb(51, 35, 62);">了解立项技术的现有专利情况</tspan>
+            <tspan id="SvgjsTspan1144" dy="16.25" x="42">
+              <tspan id="SvgjsTspan1145" style="">{{产业/行业专利调查, 4 }}</tspan>
             </tspan>
-          </text></g>
+          </text>
+        </g>
       </g>
-    </svg>
+  </g>
+  
+  
+
+  <g id="SvgjsG1108" transform="translate(248.40625,177.59375)">
+    <path id="SvgjsPath1109" d="M 0 0L 409 0L 409 29L 0 29Z" stroke="none" fill="none"></path>
+    <g id="SvgjsG1110">
+      <text id="SvgjsText1111" font-family="思源黑体" text-anchor="middle" font-size="15px" width="409px" fill="#323232" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="思源黑体" size="15px" weight="700" font-style="" opacity="1" y="2.125" transform="rotate(0)">
+        <tspan id="SvgjsTspan1112" dy="18.75" x="204.5">
+          <tspan id="SvgjsTspan1113" style="">了解目标国家/地区对立项技术相关产业发展态度及市场环境</tspan>
+        </tspan>
+      </text>
+    </g>
+  </g>
+  <g id="SvgjsG1114" transform="translate(846.40625,174.65625)">
+    <path id="SvgjsPath1115" d="M 0 0L 304 0L 304 34.875L 0 34.875Z" stroke="none" fill="none"></path>
+    <g id="SvgjsG1116">
+      <text id="SvgjsText1117" font-family="思源黑体" text-anchor="middle" font-size="15px" width="304px" fill="#323232" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="思源黑体" size="15px" weight="700" font-style="" opacity="1" y="5.0625" transform="rotate(0)">
+        <tspan id="SvgjsTspan1118" dy="18.75" x="152">
+          <tspan id="SvgjsTspan1119" style="">了解立项技术的产业发展现状,企业合作情况</tspan>
+        </tspan>
+      </text>
+    </g>
+  </g>
+  <g id="SvgjsG1120" transform="translate(1452.4479166666567,172.09375)">
+    <path id="SvgjsPath1121" d="M 0 0L 206.95833333334326 0L 206.95833333334326 40L 0 40Z" stroke="none" fill="none"></path>
+    <g id="SvgjsG1122">
+      <text id="SvgjsText1123" font-family="思源黑体" text-anchor="middle" font-size="15px" width="207px" fill="#323232" font-weight="700" align="middle" lineHeight="125%" anchor="middle" family="思源黑体" size="15px" weight="700" font-style="" opacity="1" y="7.625" transform="rotate(0)">
+        <tspan id="SvgjsTspan1124" dy="18.75" x="103.5">
+          <tspan id="SvgjsTspan1125" style="">了解立项技术的现有专利情况</tspan>
+        </tspan>
+      </text>
+    </g>
+  </g>
+
+
+  
+</svg>

+ 7 - 1
src/api/newApi/product.js

@@ -61,7 +61,7 @@ export default {
    * 修改产品营销数据
    */
   updateProductMarketDat(data) {
-    return axios.post("/xiaoshi/productMarketData/updateProductMarketDat", data);
+    return axios.post("/xiaoshi/productMarketData/updateProductMarketData", data);
   },
   /**
    * 查询产品营销数据
@@ -75,5 +75,11 @@ export default {
   deleteProductMarketData(data) {
     return axios.post("/xiaoshi/productMarketData/deleteProductMarketData", data);
   },
+  /**
+   * 分组查询产品营销数据(趋势图)
+   */
+  groupProductMarketData(data) {
+    return axios.post("/xiaoshi/productMarketData/groupProductMarketData", data);
+  },
   
 };

+ 5 - 1
src/store/modules/dictMessage.js

@@ -3,7 +3,8 @@ export default {
     //公用字典
     dictMessage:[],
     //应用场景
-    scenario:[]
+    scenario:[],
+    matter:[]
   },
 
   mutations: {
@@ -13,6 +14,9 @@ export default {
     SET_Scenario(state,scenario){
       state.scenario=scenario
     },
+    SET_Matter(state,matter){
+      state.matter=matter
+    },
   },
 
   actions: {

+ 3 - 0
src/utils/model/retrieval/search.vue

@@ -126,6 +126,9 @@ export default {
             var field = this.SearchFields.find(item => {
               return item.value == key
             })
+            if(!field){
+              return false
+            }
             if (typeof this.searchValue[key] == 'object') {
               this.searchOptions.push(
                 {

+ 9 - 8
src/utils/model/svg/customSvg.vue

@@ -86,9 +86,9 @@ export default {
       // 展示svg文件
       await fetch(show.value).then(res => res.text()).then(data => {
         this.fileContent = data
-        // if (Object.keys(this.total).length > 0 && Object.keys(this.QuestionTotal).length > 0) {
+        if (Object.keys(this.total).length > 0 && Object.keys(this.QuestionTotal).length > 0) {
           this.getHtml()
-        // }
+        }
       })
     },
     //获取svg内容
@@ -102,16 +102,17 @@ export default {
             var arr = item.match(reg1)[0].split(/\,|\,/)
             if (arr[1].trim() == 1) {
               var value = this.getQuestionTotal(arr[0].trim())
-            } else if (arr[1].trim() == 2) {
-              var value = this.getTotal(arr[0].trim())
-            } else {
-              var num = this.getTotal(arr[0].trim())
-              var value = num>0?arr[1].trim():'#63769b69'
+            } else if(arr[1].trim() == 'color'){
+              var value = this.getColor(arr[0].trim(),arr[1].trim())
+            }else if(arr[1].trim() == 'icon'){
+              var value = this.getIcon(arr[0].trim(),arr[1].trim())
+            }
+            else{
+              var value = this.getTotal(arr[0].trim(),arr[1].trim())
             }
             data = data.replace(item, value);
           })
         }
-        
         this.html = data;
     },
     //查看单个事件流程图

+ 63 - 9
src/utils/model/svg/mixins.js

@@ -2,7 +2,9 @@
 import Question from './question.vue'
 export default {
   props: {
-    total: Object,
+    total: {
+      type:[Array,Object]
+    },
     QuestionTotal:Array,
     questionName:String
   },
@@ -15,21 +17,73 @@ export default {
     return {}
   },
   methods: {
-    handleClick(type) {
-      this.$emit('on-click', type)
+    handleClick(type,val) {
+      this.$emit('on-click', {type,isPatentMining:val})
     },
-    getTotal(type) {
-      const total = this.total[type]
-      if (total) {
-        return total
+    getTotal(title,type) {
+      var total = this.total.find(item=>{
+        return item.name == title
+      })
+      var types = {
+        '2':'projectCount',
+        '3':'reportCount',
+        '4':'patentMiningCount'
+      }
+      if(total){
+        return total.total[types[type]]
+      }else{
+        return 0
+      }
+    },
+    getColor(title){
+      var total = this.total.find(item=>{
+        return item.name == title
+      })
+      if(total){
+        var count = total.total
+        let sign = false
+        for(let key in count){
+          if(count[key]>0){
+            sign = true
+          }
+        }
+        if(sign){
+          return '#316292'
+        }else{
+          return '#767676'
+        }
+      }else{
+        return '#767676'
+      }
+    },
+    getIcon(title){
+      var total = this.total.find(item=>{
+        return item.name == title
+      })
+      if(total){
+        var count = total.total
+        let sign = false
+        for(let key in count){
+          if(count[key]>0){
+            sign = true
+          }
+        }
+        if(sign){
+          return 'url(#SvgjsPattern1061)'
+        }else{
+          return 'url(#SvgjsPattern1100)'
+        }
+      }else{
+        return 'url(#SvgjsPattern1100)'
       }
-      return 0
     },
     getQuestionTotal(type) {
       if(this.QuestionTotal.length>0){
-        const total = this.QuestionTotal.find(item=>{return item.applicationScenarioName == type}).eventNumber
+        const total = this.QuestionTotal.find(item=>{return item.name == type}).count
         if (total) {
           return total
+        }else{
+          return 0
         }
       }
       

+ 5 - 5
src/utils/window.js

@@ -1,12 +1,12 @@
 exports.install = function (Vue) {
 
-  Vue.prototype.handleClick = function (val) {
+  Vue.prototype.handleClick = function (title,type) {
     const component = findComponentDownward(this, 'myCustomSvg')
-    component.handleClick(val)
+    component.handleClick(title,type)
   }
-  Vue.prototype.getQuestionTotal = function (val) {
-    const component = findComponentDownward(this, 'myCustomSvg')
-    component.getQuestionTotal(val)
+  Vue.prototype.handleClick2 = function (title) {
+    const component = findComponentDownward(this, 'flowPath')
+    component.openEventDrawer(title)
   }
   Vue.prototype.svgOnMouseenter = function (e, val) {
     const component = findComponentDownward(this, 'myPopover')

+ 1 - 0
src/views/components/dialog/fields.vue

@@ -7,6 +7,7 @@
       width="300px"
       :before-close="handleClose"
       :close-on-click-modal="false"
+      :append-to-body="true"
     >
       <div>
         <el-checkbox

+ 757 - 0
src/views/components/setting/mixins.js

@@ -0,0 +1,757 @@
+export const settingData = {
+    props: {
+      form: Object
+    },
+   
+  }
+
+export const settingMethod = {
+    data() {
+        return {
+            form:{
+                setting: {
+                  backgroundColor:'rgb(255 255 255)',
+                  text:{
+                    text:'',
+                    show: true,
+                    link:'',
+                    target: 'blank',
+                    subtext: '',
+                    sublink:'',
+                    subtarget: 'blank',
+                    left: 'center',
+                    bottom: 0,
+                    backgroundColor: 'rgba(0,0,0,0)',
+                    borderColor: "#ccc",
+                    borderWidth: 0,
+                    padding: 5,
+                    itemGap: 10,
+                    textStyle:{
+                      fontSize: 14,
+                      fontWeight: false,
+                      color: '#464646',
+                    },
+                    subtextStyle:{
+                      fontSize: 14,
+                      fontWeight: false,
+                      color: '#464646',
+                    }
+                  },
+                  yMin:0,
+                  splitNumber:'',
+                  yMax:'',
+                  type: 2,
+                  showType: 0,
+                  tableType: 0,
+                  theme: "customed",
+                  titleSize: 14,
+                  dataSize: 14,
+                  axisSize: 14,
+                  dataLabel: false,
+                  dataLabel2: false,
+                  dataLabel3: false,
+                  title1Dir: 0,
+                  title1: "",
+                  title2: "",
+                  dataPosition: "top",
+                  fontFamily: "sans-serif",
+                  fontFamily2: "sans-serif",
+                  fontFamily3: "sans-serif",
+                  fontFamily4: "sans-serif",
+                  fontWeight: false,
+                  fontWeight2: false,
+                  nameLocation: "end",
+                  nameLocation2: "end",
+                  width: "100",
+                  height: "500",
+                  widthUnit: "%",
+                  heightUnit: "px",
+                  splitLine: false,
+                  splitLine2: true,
+                  legend: true,
+                  gridTop: "10",
+                  gridLeft: "10",
+                  gridBottom: "10",
+                  gridRight: "10",
+                  labelColor: "#000000",
+                  legendColor: "#000000",
+                  legendLocation: "top",
+                  legendFontSize: "13",
+                  fontSize: "13",
+                  fontSize2: "13",
+                  fontColor: "#000000",
+                  fontColor2: "#000000",
+                  show: true,
+                  show2: true,
+                  interval: true,
+                  interval2: true,
+                  rotate: "0",
+                  rotate2: "0",
+                  paddingTop: 0,
+                  paddingBottom: 0,
+                  paddingRight: 0,
+                  paddingLeft: 0,
+                  paddingTop2: 0,
+                  paddingLeft2: 0,
+                  paddingBottom2: 0,
+                  paddingRight2: 0,
+                  type2: "scroll",
+                  barWidth: "",
+                  scatterSize: "0",
+                  config: {
+                    color: [],
+                    line: {
+                      name: "",
+                      first: "",
+                      second: "",
+                      operator: 0,
+                      enable: false
+                    },
+                    table: []
+                  }
+                },
+                schema: {
+                  x: {
+                    num: 10
+                  },
+                  y: {
+                    num: 10
+                  },
+                },
+                source: {
+                  x: [],
+                  y: []
+                },
+              },
+            selected:{},
+        }
+    },
+    watch:{
+        form(val){
+            // console.log(val)
+        }
+    },
+    methods: {
+        handleAdd() {
+            let table = []
+            for (let i = 0; i < 10; i++) {
+              table.push({
+                min: 0,
+                max: 0,
+                color: null
+              })
+            }
+            this.form = {
+              setting: {
+                type: 2,
+                showType: 0,
+                tableType: 0,
+                theme: "customed",
+                titleSize: 14,
+                dataSize: 14,
+                axisSize: 14,
+                dataLabel: false,
+                dataLabel2: false,
+                dataLabel3: false,
+                title1Dir: 0,
+                title1: "",
+                title2: "",
+                dataPosition: "top",
+                fontFamily: "sans-serif",
+                fontFamily2: "sans-serif",
+                fontFamily3: "sans-serif",
+                fontFamily4: "sans-serif",
+                fontWeight: false,
+                fontWeight2: false,
+                nameLocation: "end",
+                nameLocation2: "end",
+                width: "100",
+                height: "650",
+                widthUnit: "%",
+                heightUnit: "px",
+                splitLine: false,
+                splitLine2: false,
+                legend: true,
+                gridTop: "0",
+                gridLeft: "0",
+                gridBottom: "0",
+                gridRight: "0",
+                labelColor: "#000000",
+                legendColor: "#000000",
+                legendLocation: "top",
+                legendFontSize: "13",
+                fontSize: "13",
+                fontSize2: "13",
+                fontColor: "#000000",
+                fontColor2: "#000000",
+                show: true,
+                show2: true,
+                interval: true,
+                interval2: true,
+                rotate: "0",
+                rotate2: "0",
+                paddingTop: 0,
+                paddingBottom: 0,
+                paddingRight: 0,
+                paddingLeft: 0,
+                paddingTop2: 0,
+                paddingLeft2: 0,
+                paddingBottom2: 0,
+                paddingRight2: 0,
+                type2: "scroll",
+                barWidth: "",
+                scatterSize: "0",
+                config: {
+                  color: [],
+                  line: {
+                    name: "",
+                    first: "",
+                    second: "",
+                    operator: 0,
+                    enable: false
+                  },
+                  table: table
+                }
+              },
+              schema: {
+                x: {
+                  num: 10
+                },
+                y: {
+                  num: 10
+                },
+              },
+              source: {
+                x: [],
+                y: []
+              },
+            }
+            // this.$store.commit('SET_CHART_FORM', form)
+            // this.drawer = true
+          },
+    },
+}
+export const chartOption = {
+    // mixins: [customPage],
+    props: {
+      width: String,
+      height: String
+    },
+    data() {
+      return {}
+    },
+    methods: {
+      async handleScreenshot(id, name) {
+        const canvas = await html2canvas(document.getElementById(id))
+        const base64 = canvas.toDataURL('image/jpg')
+        downLoadBase64(base64, name + '.png')
+      },
+      getDataLabel() {
+        return {
+          show: this.form.setting.dataLabel,
+          fontSize: this.form.setting.dataSize,
+          position: this.form.setting.dataPosition,
+          fontFamily: this.form.setting.fontFamily2,
+          color: this.form.setting.labelColor,
+          formatter: (val) => {
+            switch (val.seriesType) {
+              case 'sunburst':
+                return val.name
+              case 'heatmap':
+                return val.value[2]
+              case 'tree':
+                return val.data.name
+              case 'scatter':
+                return !val.data[2] ? '' : val.data[2]
+              case 'treemap':
+                return `${val.name} (${val.value})`
+              case 'map':
+                return val.value ? `${val.name} \n ${val.value}` : ''
+              default:
+                if (val.value) {
+                  return val.value
+                } else {
+                  return ''
+                }
+            }
+          }
+        }
+      },
+      getAxisName(dimension) {
+        return this.form.setting[dimension]
+      },
+      getAxisData(dimension) {
+        return this.selected[dimension]
+      },
+      getColor(name) {
+        const color = this.form.setting.config.color.find(item => item.name === name);
+        return color ? color.color : undefined
+      },
+      getDataCount(x, y, b = true) {
+        if (b) {
+          if (this.form.schema.x.type === 6) {
+            const xn = getTreeDataList(this.form.source.x, []).find(item => item.name === x)
+            if (xn) {
+              x = xn.id
+            }
+          }
+          if (this.form.schema.y.type === 6) {
+            const yn = getTreeDataList(this.form.source.y, []).find(item => item.name === y)
+            if (yn) {
+              y = yn.id
+            }
+          }
+        }
+        if (x && y) {
+          if (this.count[x]) {
+            return this.count[x][y] || 0
+          } else {
+            return 0
+          }
+        }
+        if (x && !y) {
+          return this.count[x] || 0
+        }
+        if (!x && !y) {
+          return random(0, 100)
+        }
+      },
+      getSeriesData() {
+        let data = [], count = this.count
+        let source = this.selected.x
+        switch (this.$options.name) {
+          case 'CLine':
+          case 'CArea':
+          case 'CBar':
+          case 'CColumn':
+            source.map(s => {
+              const color = this.form.setting.config.color.find(item => item.name === s);
+              data.push({
+                value: this.getDataCount(s),
+                itemStyle: {
+                  color: color ? color.color : undefined
+                }
+              })
+            })
+            break
+          case 'CDoughnut':
+          case 'CPie':
+            source.map(s => {
+              const color = this.form.setting.config.color.find(item => item.name === s);
+              data.push({
+                value: this.getDataCount(s),
+                name: s,
+                label: {
+                  show: this.form.setting.dataLabel,
+                  fontSize: this.form.setting.dataSize,
+                  fontFamily: this.form.setting.fontFamily2,
+                  color: this.form.setting.labelColor,
+                  position: this.form.setting.dataPosition,
+                  formatter: ({ value, name, percent }) => {
+                    let text = ""
+                    if (this.form.setting.dataLabel) {
+                      text += name
+                    }
+                    if (this.form.setting.dataLabel2) {
+                      text += `-${value}件`
+                    }
+                    if (this.form.setting.dataLabel3) {
+                      text += `/${percent}%`
+                    }
+                    return text
+                  }
+                },
+                itemStyle: {
+                  color: color ? color.color : undefined
+                }
+              })
+            })
+            break
+        }
+        return data
+      },
+      getAxisLabel(type, axis) {
+        return  {
+          interval: axis === 'x' ? (this.form.setting.interval ? 0 : undefined) : (this.form.setting.interval2 ? 0 : undefined),
+          rotate: axis === 'x' ? this.form.setting.rotate : this.form.setting.rotate2,
+          color: axis === 'x' ? this.form.setting.fontColor : this.form.setting.fontColor2,
+          show: axis === 'x' ? this.form.setting.show : this.form.setting.show2,
+          fontSize: axis === 'x' ? this.form.setting.fontSize : this.form.setting.fontSize2,
+          fontFamily: axis === 'x' ? this.form.setting.fontFamily : this.form.setting.fontFamily2,
+          fontWeight: (axis === 'x' ? this.form.setting.fontWeight : this.form.setting.fontWeight2) ? 'bold' : 'normal'
+        }
+      },
+      getNameTextStyle(axis) {
+        return {
+          padding: axis === 'x' ? [this.form.setting.paddingTop, this.form.setting.paddingLeft, this.form.setting.paddingBottom, this.form.setting.paddingRight] : [this.form.setting.paddingTop2, this.form.setting.paddingLeft2, this.form.setting.paddingBottom2, this.form.setting.paddingRight2],
+          color: axis === 'x' ? this.form.setting.fontColor : this.form.setting.fontColor2,
+          fontSize: axis === 'x' ? this.form.setting.fontSize : this.form.setting.fontSize2,
+          fontFamily: axis === 'x' ? this.form.setting.fontFamily : this.form.setting.fontFamily2,
+          fontWeight: (axis === 'x' ? this.form.setting.fontWeight : this.form.setting.fontWeight2) ? 'bold' : 'normal'
+        }
+      },
+      dateTimeSort() {
+        let temp = JSON.parse(JSON.stringify(this.selected.x))
+        let data = []
+        let t, y, m
+        temp.map(item => {
+          switch (this.form.schema.x.expand) {
+            case 9:
+            case 12:
+              data.push({
+                name: item,
+                time: new Date(item).getTime()
+              })
+              break
+            case 10:
+              t = item.split('-')
+              y = t[0]
+              m = (parseInt(t[1].replaceAll('Q', '')) - 1) * 3 + 1
+              data.push({
+                name: item,
+                time: new Date(y + '-' + m).getTime()
+              })
+              break
+            case 11:
+              t = item.split('-')
+              y = t[0]
+              m = parseInt(t[1].replaceAll('H', '')) * 6
+              data.push({
+                name: item,
+                time: new Date(y + '-' + m).getTime()
+              })
+              break
+            case 13:
+            case 14:
+            case 15:
+              t = item.split('-')
+              y = t[0]
+              data.push({
+                name: item,
+                time: new Date(y + '-01').getTime()
+              })
+              break
+          }
+        })
+        this.selected.x = data.sort((a, b) => a.time - b.time).map(item => item.name)
+      },
+      get1AxisOption(type, areaStyle) {
+        if (this.form.schema.x.ptype === 2) {
+          this.dateTimeSort()
+        }
+        let xAxis = {
+          name: this.getAxisName('title1'),
+          nameTextStyle: this.getNameTextStyle('x'),
+          type: 'category',
+          data: this.getAxisData('x'),
+          nameLocation: this.form.setting.nameLocation,
+          splitLine: {
+            show: this.form.setting.splitLine
+          },
+          axisLabel: this.getAxisLabel('category', 'x')
+        }
+        let yAxis = {
+          name: this.getAxisName('title2'),
+          nameTextStyle: this.getNameTextStyle('y'),
+          type: 'value',
+          nameLocation: this.form.setting.nameLocation2,
+          splitLine: {
+            show: this.form.setting.splitLine2
+          },
+          axisLabel: this.getAxisLabel('value', 'y')
+        }
+        let series = [{
+          data: this.getSeriesData(),
+          type: type,
+          areaStyle: areaStyle,
+          itemStyle: {
+            color: this.form.setting.config.color[0].color
+          },
+          barWidth: this.form.setting.barWidth,
+          label: this.getDataLabel()
+        }]
+        let grid = {
+          top: this.form.setting.gridTop + '%',
+          left: this.form.setting.gridLeft + '%',
+          right: this.form.setting.gridRight + '%',
+          bottom: this.form.setting.gridBottom + '%',
+          containLabel: true,
+        }
+        return {
+          xAxis,
+          yAxis,
+          series,
+          grid
+        }
+      },
+      get2AxisOption(type, stack) {
+        if (this.form.schema.x.ptype === 2) {
+          this.dateTimeSort()
+        }
+        const enable = this.form.setting.config.line.enable
+        const operator = this.form.setting.config.line.operator
+        let backgroundColor = this.form.setting.backgroundColor
+        // let series = this.selected.data
+        let series = this.selected.y.map(y => {
+            return {
+              name: y,
+              type: type,
+              stack: stack,
+              itemStyle: {
+                color: this.getColor(y)
+              },
+              barWidth: this.form.setting.barWidth,
+              data: this.selected.data.find(item => item.name == y).data,
+              label: this.getDataLabel(),
+              connectNulls:true,
+            }
+          })
+        let xAxis = {
+          name: this.form.setting.title1,
+          nameTextStyle: this.getNameTextStyle('x'),
+          type: 'category',
+          nameLocation: this.form.setting.nameLocation,
+          data: this.selected.x,
+          splitLine: {
+            show: this.form.setting.splitLine
+          },
+          axisLabel: this.getAxisLabel('category', 'x')
+        }
+        let yAxis = {
+          min:this.form.setting.yMin,
+          splitNumber:this.form.setting.splitNumber,
+          // max:this.form.setting.yMax,
+          name: this.form.setting.title2,
+          nameTextStyle: this.getNameTextStyle('y'),
+          type: 'value',
+          nameLocation: this.form.setting.nameLocation2,
+          splitLine: {
+            show: this.form.setting.splitLine2
+          },
+          axisLabel: this.getAxisLabel('value', 'y')
+        }
+        let legend =this.selected.y.length>1? [...this.selected.y]:[]
+        let toolbox = {
+          show: true,
+          right:'50px',
+          feature:{
+            saveAsImage: {
+              show:true,
+              excludeComponents :['toolbox'],
+              pixelRatio: 2
+            },
+            magicType: {
+              show: true,
+              type: [ 'bar', 'stack']
+            },
+            dataZoom:{
+              show:true
+            },
+            dataView:{
+              show: true,
+              lang: ['数据视图', '关闭', '导出Excel'],
+              optionToContent: function(opt){
+                  //axisData是你想定义的表格第一列的数据,我这里设置为柱形图的x轴数据
+                  var axisData = opt.xAxis[0].data;
+                  //tAxis[0]为你想定义的表格第一行的数据
+                  var txisData = [];
+                  if(opt.series.length>1){
+                    txisData.push('产品名称')
+                  }
+                  txisData.push(opt.xAxis[0].name)
+                  txisData.push(opt.yAxis[0].name)
+                  var series = opt.series;
+                  //表头
+                  var tdHeads = '';
+                  var tdBodys = '';
+                  var nameData = txisData;
+                  for (var i = 0; i < nameData.length ; i++) {
+                      tdHeads += '<td style="padding: 0 10px;width:100px">' + nameData[i] + '</ td >';
+                  }
+                  var table = '<table id="Mytable" border="1" class="table table-bordered table-striped table-hover" style="width:100%;text-align:center" ><tbody><tr>' + tdHeads + ' </tr>';
+                
+                  for(var i = 0; i<series.length;i++){
+                    for(var j =0;j<axisData.length;j++){
+                      if(series.length>1){
+                        if(j==0){
+                          tdBodys += '<td rowspan="'+ axisData.length +'" colspan="1">' + series[i].name + '</td>';
+                        }
+                      }
+                      tdBodys += '<td>' + axisData[j] + '</td>';
+                      var temp = series[i].data[j]
+                      if (temp != null && temp != undefined) {
+                          tdBodys += '<td>' + temp + '</td>';
+                      } else {
+                          tdBodys += '<td>'+ " " +'</td>';
+                      }
+                      table += '<tr style="mso-number-format:'+'\@'+';">' + tdBodys + '</tr>';
+                      tdBodys = '';
+                    }
+                   
+                  }
+                  table += '</tbody></table>';
+                  return table;
+              },
+              contentToOption: function (HTMLDomElement, opt) {
+                    // Worksheet名
+                    const worksheet = 'Sheet1'
+                    const url = 'data:application/vnd.ms-excel;base64,'
+
+                    // 下载的表格模板数据
+                    const template = `<html xmlns:o="urn:schemas-microsoft-com:office:office"
+                      xmlns:x="urn:schemas-microsoft-com:office:excel"
+                      xmlns="http://www.w3.org/TR/REC-html40">
+                      <head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
+                      <x:Name>${worksheet}</x:Name>
+                      <x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>
+                      </x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
+                      ${HTMLDomElement.innerHTML}`
+                    // 下载模板
+                    let link = document.createElement('a')
+                    link.setAttribute('href', url + window.btoa(unescape(encodeURIComponent(template))))
+                    link.setAttribute('download', opt.title[0].text+'.xls')
+                    link.click()
+              },
+
+            }
+          }
+        }
+        // if (enable && ([5, 6].indexOf(this.form.setting.type) !== -1)) {
+        //   let name = this.form.setting.config.line.name
+        //   series.push({
+        //     name: name,
+        //     type: 'line',
+        //     yAxisIndex: 1,
+        //     data: getLineDataArr(this.form, this.selected, this.count),
+        //     itemStyle: {
+        //       color: this.form.setting.config.line.color
+        //     },
+        //     label: {
+        //       ...this.getDataLabel(),
+        //       formatter({ value }) {
+        //         return operator === 1 ? `${Math.round(parseFloat(value) * 100)} %` : value
+        //       }
+        //     }
+        //   })
+        //   yAxis.push({
+        //     type: 'value',
+        //     name: name,
+        //   })
+        //   legend.push(name)
+        // }
+        let grid = {
+          top: this.form.setting.gridTop + '%',
+          left: this.form.setting.gridLeft + '%',
+          right: this.form.setting.gridRight + '%',
+          bottom: this.form.setting.gridBottom + '%',
+          containLabel: true
+        }
+        let title = JSON.parse(JSON.stringify(this.form.setting.text))
+        title.textStyle.fontWeight = this.form.setting.text.textStyle.fontWeight?'bold':'normal'
+        title.subtextStyle.fontWeight = this.form.setting.text.subtextStyle.fontWeight?'bold':'normal'
+        return {
+          backgroundColor,
+          title,
+          legend: {
+            show: this.form.setting.legend,
+            data: legend,
+            textStyle: {
+              fontFamily: this.form.setting.fontFamily3,
+              color: this.form.setting.legendColor,
+              fontSize: this.form.setting.legendFontSize
+            },
+            ...this.getLegendLocation(),
+            type: this.form.setting.type2,
+          },
+          grid,
+          xAxis,
+          yAxis,
+          series,
+          toolbox
+        }
+      },
+      getLegendLocation() {
+        let x = ''
+        let y = ''
+        switch (this.form.setting.legendLocation) {
+          case 'top':
+            x = 'center'
+            y = 'top'
+            break
+          case 'left':
+            x = 'left'
+            y = 'center'
+            break
+          case 'bottom':
+            x = 'center'
+            y = 'bottom'
+            break
+          case 'right':
+            x = 'right'
+            y = 'center'
+            break
+        }
+        return {
+          x: x,
+          y: y,
+          orient: ['top', 'bottom'].indexOf(this.form.setting.legendLocation) !== -1 ? 'horizontal' : "vertical",
+        }
+      },
+      dispose(id){
+        const chartDom = document.getElementById(id);
+        const myChart = this.$echarts.init(chartDom);
+        myChart.dispose();
+      },
+      initChart(id, chartOption) {
+        // console.log(id,chartOption)
+        const chartDom = document.getElementById(id);
+        const myChart = this.$echarts.init(chartDom);
+        myChart.clear();
+        myChart.setOption(chartOption)
+        // this.$store.commit('SET_MY_CHART', myChart)
+        return myChart
+      },
+    }
+  }
+  
+  export const chartOptionMixins = {
+    data() {
+        return {
+            // form:{},
+            selected:{}
+        }
+    },
+    mixins: [chartOption],
+    mounted() {
+    //   this.$nextTick(() => {
+    //     this.initChart(this.id, this.getOption())
+    //   })
+    },
+    methods:{
+        setColor(){
+            const defaultColor = [
+                '#5470c6',
+                '#91cc75',
+                '#fac858',
+                '#ee6666',
+                '#73c0de',
+                '#3ba272',
+                '#fc8452',
+                '#9a60b4',
+                '#ea7ccc',
+              ]
+              let index = 0
+              if (this.selected.y.length>0) {
+                this.form.setting.config.color = this.selected.y.map(item => {
+                  if (index >= defaultColor.length) {
+                    index = 0
+                  }
+                  return {
+                    name: item,
+                    color: defaultColor[index++]
+                  }
+                })
+              }
+        }
+    }
+  }

+ 446 - 0
src/views/components/setting/style.vue

@@ -0,0 +1,446 @@
+<template>
+    <div class="custom-analyse-tabs-style">
+      <el-collapse v-model="activeNames">
+        <el-collapse-item title="框架" name="8" v-if="!getShow([30])">
+          <div class="content">
+            <div style="display:flex">
+              <span class="label" style="width:50px">宽度</span>
+              <el-input placeholder="请输入宽度" v-model="form.setting.width" size="small" style="width: calc(100% - 170px);padding-left: 10px;"></el-input>
+              <el-select size="small" v-model="form.setting.widthUnit" placeholder="请选择" style="width: calc(100% - 190px);margin-left: 10px;">
+                <el-option label="百分比" value="%"></el-option>
+                <el-option label="像素" value="px"></el-option>
+              </el-select>
+            </div>
+            <div style="margin-top: 10px;display:flex">
+              <span class="label" style="width:50px">高度</span>
+              <el-input placeholder="请输入高度" v-model="form.setting.height" size="small" style="width: calc(100% - 170px);padding-left: 10px;"></el-input>
+              <el-select size="small" v-model="form.setting.heightUnit" placeholder="请选择" style="width: calc(100% - 190px);margin-left: 10px;">
+                <el-option label="百分比" value="%" disabled></el-option>
+                <el-option label="像素" value="px"></el-option>
+              </el-select>
+            </div>
+            <div style="margin-top: 10px;display:flex">
+              <span>背景色</span><el-color-picker size="small" v-model="form.setting.backgroundColor" style="margin-left: 10px; float:right;"></el-color-picker>
+            </div>
+          </div>
+        </el-collapse-item>
+        <el-collapse-item title="气泡图" name="9" v-if="getShow([])">
+          <div class="content">
+            <span class="label">气泡比例</span>
+            <el-input placeholder="请输入气泡比例" v-model="form.setting.scatterSize" size="small" style="width: calc(100% - 160px);padding-left: 10px;"></el-input>
+          </div>
+        </el-collapse-item>
+        <el-collapse-item title="柱形图" name="7" v-if="getShow([4, 7, 5, 6, 8, 9])">
+          <div class="content">
+            <span class="label">宽度</span>
+            <el-input placeholder="请输入宽度" v-model="form.setting.barWidth" size="small" style="width: calc(100% - 190px);padding-left: 10px;"></el-input>
+          </div>
+        </el-collapse-item>
+        <el-collapse-item title="标签" name="1" v-if="!getShow([30, 19])">
+          <div class="content">
+            <div>
+              <el-checkbox v-model="form.setting.dataLabel">显示标签</el-checkbox>
+              <template v-if="!getShow([13, 12, 20, 18, 21, 23])">
+                <span style="margin-left: 42px;" class="label">位置</span>
+                <el-select size="small" v-model="form.setting.dataPosition" placeholder="请选择" style="width: calc(100% - 160px);margin-left: 10px;">
+                  <el-option v-for="item in positionList" :label="item.label" :value="item.value"></el-option>
+                </el-select>
+              </template>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-select size="small" v-model="form.setting.fontFamily2" placeholder="请选择" style="width: calc(100% - 160px)">
+                <el-option v-for="item in $constants.fontFamily" :label="item.label" :value="item.value"></el-option>
+              </el-select>
+              <el-input size="small" v-model.number="form.setting.dataSize" type="number" placeholder="请输入" style="width: 105px;margin-left: 10px;"></el-input>
+              <el-color-picker size="small" v-model="form.setting.labelColor" style="margin-left: 10px; float:right;"></el-color-picker>
+            </div>
+            <div style="margin-top: 10px;" v-if="getShow([10, 11])">
+              <el-checkbox v-model="form.setting.dataLabel2">显示数值</el-checkbox>
+              <el-checkbox v-model="form.setting.dataLabel3">显示百分比</el-checkbox>
+            </div>
+          </div>
+        </el-collapse-item>
+        <el-collapse-item title="名称" name="10" v-if="!getShow([30, 19])">
+          <div class="content">
+            <el-checkbox v-model="form.setting.text.show">显示名称</el-checkbox>
+              <div style="display:flex;margin-top: 10px;">
+                <span class="label" style="width:80px">主标题名称</span><el-input size="small" v-model="form.setting.text.text" placeholder="请输入" style="margin-left: 10px;"></el-input>
+              </div>
+              <div style="display:flex;margin-top: 10px;">
+                <span class="label" style="width:80px">主标题链接</span><el-input size="small" v-model="form.setting.text.link" placeholder="请输入" style="margin-left: 10px;"></el-input>
+              </div>
+              <div style="margin-top: 10px;">
+              <el-select size="small" v-model="form.setting.text.textStyle.fontFamily" placeholder="请选择" style="width: calc(100% - 160px)">
+                <el-option v-for="item in $constants.fontFamily" :label="item.label" :value="item.value"></el-option>
+              </el-select>
+              <el-input size="small" v-model.number="form.setting.text.textStyle.fontSize" type="number" placeholder="请输入" style="width: 105px;margin-left: 10px;"></el-input>
+              <el-color-picker size="small" v-model="form.setting.text.textStyle.color" style="margin-left: 10px; float:right;"></el-color-picker>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-checkbox v-model="form.setting.text.textStyle.fontWeight">字体加粗</el-checkbox>
+            </div>
+              <div style="margin-top: 10px;" class="title-padding">
+                <span class="label">位置</span>
+                <span class="label" style="margin: 0 5px;">垂直</span>
+                <el-input v-model.number="form.setting.text.bottom" size="small" placeholder="" style="width: 100px;"></el-input>
+                <span class="label" style="margin: 0 5px;">水平</span>
+                <el-input v-model.number="form.setting.text.left" size="small" placeholder="" style="width: 100px;"></el-input>
+            </div>
+            <div style="display:flex;margin-top: 10px;">
+                <span class="label" style="width:80px">副标题名称</span><el-input size="small" v-model="form.setting.text.subtext" placeholder="请输入" style="margin-left: 10px;"></el-input>
+              </div>
+              <div style="display:flex;margin-top: 10px;">
+                <span class="label" style="width:80px">副标题链接</span><el-input size="small" v-model="form.setting.text.sublink" placeholder="请输入" style="margin-left: 10px;"></el-input>
+              </div>
+              <div style="margin-top: 10px;">
+              <el-select size="small" v-model="form.setting.text.subtextStyle.fontFamily" placeholder="请选择" style="width: calc(100% - 160px)">
+                <el-option v-for="item in $constants.fontFamily" :label="item.label" :value="item.value"></el-option>
+              </el-select>
+              <el-input size="small" v-model.number="form.setting.text.subtextStyle.fontSize" type="number" placeholder="请输入" style="width: 105px;margin-left: 10px;"></el-input>
+              <el-color-picker size="small" v-model="form.setting.text.subtextStyle.color" style="margin-left: 10px; float:right;"></el-color-picker>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-checkbox v-model="form.setting.text.subtextStyle.fontWeight">字体加粗</el-checkbox>
+            </div>
+          </div>
+        </el-collapse-item>
+        <el-collapse-item title="颜色" name="2"  v-if="!getShow([20, 18, 21, 23]) && form.setting.config.color &&form.setting.config.color.length>0">
+          <div class="content">
+            <el-container>
+              <el-main style="max-height: 300px;" class="color-config">
+                <template v-if="!getShow([15, 30])">
+                  <div v-for="item in form.setting.config.color" class="color-config-content">
+                    <el-color-picker size="small" v-model="item.color"></el-color-picker>
+                    <span class="name">{{ item.name }}</span>
+                  </div>
+                  <div v-if="form.setting.config.line.enable" class="color-config-content">
+                    <el-color-picker size="small" v-model="form.setting.config.line.color"></el-color-picker>
+                    <span class="name">{{ form.setting.config.line.name }}</span>
+                  </div>
+                </template>
+                <template v-else>
+                  <div v-for="(item, index) in form.setting.config.table">
+                    <el-color-picker size="small" v-model="item.color"></el-color-picker>
+                    <div style="float: right; padding-right: 20px;">
+                      <el-input v-model="item.min" style="width: 80px;" size="small"></el-input>
+                      <span class="o-code">≤</span><span>数值</span><span class="o-code">≤</span>
+                      <el-input v-model="item.max" style="width: 80px;" size="small"></el-input>
+                    </div>
+                  </div>
+                </template>
+              </el-main>
+            </el-container>
+          </div>
+        </el-collapse-item>
+        <el-collapse-item title="图例" name="3" v-if="getShow([5, 6, 8, 9, 10, 11])">
+          <div class="content">
+            <div>
+              <el-checkbox v-model="form.setting.legend">显示图例</el-checkbox>
+              <span class="label" style="margin-left: 42px;">位置</span>
+              <el-select size="small" v-model="form.setting.legendLocation" style="width: calc(100% - 160px);margin-left: 10px;">
+                <el-option value="top" label="上"></el-option>
+                <el-option value="left" label="左"></el-option>
+                <el-option value="bottom" label="下"></el-option>
+                <el-option value="right" label="右"></el-option>
+              </el-select>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-select size="small" v-model="form.setting.fontFamily3" placeholder="请选择" style="width: calc(100% - 160px)">
+                <el-option v-for="item in $constants.fontFamily" :label="item.label" :value="item.value"></el-option>
+              </el-select>
+              <el-input size="small" v-model.number="form.setting.legendFontSize" type="number" placeholder="请输入" style="width: 105px;margin-left: 10px;"></el-input>
+              <el-color-picker size="small" v-model="form.setting.legendColor" style="margin-left: 10px; float:right;"></el-color-picker>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-select size="small" v-model="form.setting.type2" style="width: calc(100% - 160px)">
+                <el-option value="scroll" label="滚动图例"></el-option>
+                <el-option value="plain" label="普通图例"></el-option>
+              </el-select>
+            </div>
+          </div>
+        </el-collapse-item>
+        <el-collapse-item title="距离" name="4" v-if="!getShow([30, 22, 17, 19, 12, 20, 18, 21, 23, 13])">
+          <div class="content">
+            <div>
+              <span class="label">顶部</span>
+              <el-input size="small" v-model="form.setting.gridTop" style="width: 240px;margin-left: 10px;"></el-input>
+              <span style="margin-left: 10px;">%</span>
+            </div>
+            <div style="margin-top: 10px;">
+              <span class="label">底部</span>
+              <el-input size="small" v-model="form.setting.gridBottom" style="width: 240px;margin-left: 10px;"></el-input>
+              <span style="margin-left: 10px;">%</span>
+            </div>
+            <div style="margin-top: 10px;">
+              <span class="label">左侧</span>
+              <el-input size="small" v-model="form.setting.gridLeft" style="width: 240px;margin-left: 10px;"></el-input>
+              <span style="margin-left: 10px;">%</span>
+            </div>
+            <div style="margin-top: 10px;">
+              <span class="label">右侧</span>
+              <el-input size="small" v-model="form.setting.gridRight" style="width: 240px;margin-left: 10px;"></el-input>
+              <span style="margin-left: 10px;">%</span>
+            </div>
+          </div>
+        </el-collapse-item>
+        <el-collapse-item title="X轴" name="5" v-if="getShow([1, 3, 4, 7, 5, 6, 8, 9, 2, 15, 14])">
+          <div class="content">
+            <div>
+              <el-checkbox v-model="form.setting.show">显示坐标轴</el-checkbox>
+              <el-checkbox v-model="form.setting.splitLine" v-if="!getShow([14])">显示背景线</el-checkbox>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-select size="small" v-model="form.setting.fontFamily" placeholder="请选择" style="width: calc(100% - 160px)">
+                <el-option v-for="item in $constants.fontFamily" :label="item.label" :value="item.value"></el-option>
+              </el-select>
+              <el-input size="small" v-model.number="form.setting.fontSize" type="number" placeholder="请输入" style="width: 105px;margin-left: 10px;"></el-input>
+              <el-color-picker size="small" v-model="form.setting.fontColor" style="margin-left: 10px; float:right;"></el-color-picker>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-checkbox v-model="form.setting.fontWeight">字体加粗</el-checkbox>
+              <span class="label" style="margin-left: 15px;">标题位置</span>
+              <el-select size="small" v-model="form.setting.nameLocation" style="width: calc(100% - 160px);margin-left: 10px;">
+                <el-option value="start" label="左"></el-option>
+                <el-option value="middle" label="中"></el-option>
+                <el-option value="end" label="右"></el-option>
+              </el-select>
+            </div>
+            <div style="margin-top: 10px;">
+              <span class="label">标题</span>
+              <el-input size="small" v-model="form.setting.title1" placeholder="请输入" style="width: calc(100% - 37px);margin-left: 10px;"></el-input>
+            </div>
+            <div style="margin-top: 10px;" class="title-padding">
+              <span class="label">位移</span>
+              <span class="label" style="margin: 0 5px;">上</span>
+              <el-input v-model.number="form.setting.paddingTop" size="small" placeholder="" style="width: 45px;"></el-input>
+              <span class="label" style="margin: 0 5px;">左</span>
+              <el-input v-model.number="form.setting.paddingLeft" size="small" placeholder="" style="width: 45px;"></el-input>
+              <span class="label" style="margin: 0 5px;">下</span>
+              <el-input v-model.number="form.setting.paddingBottom" size="small" placeholder="" style="width: 45px;"></el-input>
+              <span class="label" style="margin: 0 5px;">右</span>
+              <el-input v-model.number="form.setting.paddingRight" size="small" placeholder="" style="width: 45px;"></el-input>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-checkbox v-model="form.setting.interval">完整显示</el-checkbox>
+              <span class="label" style="margin-left: 15px;">倾斜角度</span>
+              <el-input size="small" v-model="form.setting.rotate" placeholder="请输入" style="width: calc(100% - 160px);margin-left: 10px;"></el-input>
+            </div>
+          </div>
+        </el-collapse-item>
+        <el-collapse-item title="Y轴" name="6" v-if="getShow([1, 3, 4, 7, 5, 6, 8, 9, 2, 15, 14])">
+          <div class="content">
+            <div style="display:flex">
+              <el-checkbox v-model="form.setting.show2">显示坐标轴</el-checkbox>
+              <el-checkbox v-model="form.setting.splitLine2" v-if="!getShow([14])">显示背景线</el-checkbox>
+            </div>
+            <div style="display:flex;margin-top:10px">
+              <div style="display:flex"><span style="width:100px">最小值:</span><el-input size="small" v-model="form.setting.yMin"></el-input></div>
+              <div style="display:flex;align-item:center;margin-left:10px"><span style="width:100px">值间隔:</span><el-input size="small" v-model="form.setting.splitNumber"></el-input></div>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-select size="small" v-model="form.setting.fontFamily2" placeholder="请选择" style="width: calc(100% - 160px)">
+                <el-option v-for="item in $constants.fontFamily" :label="item.label" :value="item.value"></el-option>
+              </el-select>
+              <el-input size="small" v-model.number="form.setting.fontSize2" type="number" placeholder="请输入" style="width: 105px;margin-left: 10px;"></el-input>
+              <el-color-picker size="small" v-model="form.setting.fontColor2" style="margin-left: 10px; float:right;"></el-color-picker>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-checkbox v-model="form.setting.fontWeight2">字体加粗</el-checkbox>
+              <span class="label" style="margin-left: 15px;">标题位置</span>
+              <el-select size="small" v-model="form.setting.nameLocation2" style="width: calc(100% - 160px);margin-left: 10px;">
+                <el-option value="end" label="上"></el-option>
+                <el-option value="middle" label="中"></el-option>
+                <el-option value="start" label="下"></el-option>
+              </el-select>
+            </div>
+            <div style="margin-top: 10px;">
+              <span class="label">标题</span>
+              <el-input size="small" v-model="form.setting.title2" placeholder="请输入" style="width: calc(100% - 37px);margin-left: 10px;"></el-input>
+            </div>
+            <div style="margin-top: 10px;" class="title-padding">
+              <span class="label">位移</span>
+              <span class="label" style="margin: 0 5px;">上</span>
+              <el-input v-model.number="form.setting.paddingTop2" size="small" placeholder="" style="width: 45px;"></el-input>
+              <span class="label" style="margin: 0 5px;">左</span>
+              <el-input v-model.number="form.setting.paddingLeft2" size="small" placeholder="" style="width: 45px;"></el-input>
+              <span class="label" style="margin: 0 5px;">下</span>
+              <el-input v-model.number="form.setting.paddingBottom2" size="small" placeholder="" style="width: 45px;"></el-input>
+              <span class="label" style="margin: 0 5px;">右</span>
+              <el-input v-model.number="form.setting.paddingRight2" size="small" placeholder="" style="width: 45px;"></el-input>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-checkbox v-model="form.setting.interval2">完整显示</el-checkbox>
+              <span class="label" style="margin-left: 15px;">倾斜角度</span>
+              <el-input size="small" v-model="form.setting.rotate2" placeholder="请输入" style="width: calc(100% - 160px);margin-left: 10px;"></el-input>
+            </div>
+          </div>
+        </el-collapse-item>
+        <el-collapse-item title="坐标" name="6" v-if="getShow([17, 22])">
+          <div class="content">
+            <div>
+              <el-checkbox v-model="form.setting.show">显示</el-checkbox>
+              <el-checkbox v-model="form.setting.fontWeight">字体加粗</el-checkbox>
+            </div>
+            <div style="margin-top: 10px;">
+              <el-select size="small" v-model="form.setting.fontFamily" placeholder="请选择" style="width: calc(100% - 160px)">
+                <el-option v-for="item in $constants.fontFamily" :label="item.label" :value="item.value"></el-option>
+              </el-select>
+              <el-input size="small" v-model.number="form.setting.fontSize" type="number" placeholder="请输入" style="width: 105px;margin-left: 10px;"></el-input>
+              <el-color-picker size="small" v-model="form.setting.fontColor" style="margin-left: 10px; float:right;"></el-color-picker>
+            </div>
+          </div>
+        </el-collapse-item>
+      </el-collapse>
+    </div>
+</template>
+  
+<script>
+  import {settingData} from "./mixins";
+  import { detectionChartType } from "@/utils/chart";
+  
+  export default {
+    mixins: [settingData],
+    components: {
+     
+    },
+    data() {
+      return {
+        activeNames: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9','10'],
+        chartIcon: [],
+        positionList: [],
+      }
+    },
+    mounted() {
+      this.chartIcon = JSON.parse(JSON.stringify(this.$constants.chartType))
+      this.chartIcon.map(item => {
+        let { op, cg } = detectionChartType(item, this.form)
+        if (op && cg) {
+          cg = false
+        //   this.$store.dispatch('resetSettingColor')
+        }
+        if (op) {
+          this.$set(item, 'disable', true)
+          this.$set(item, 'active', false)
+        }
+        if (cg) {
+          this.$set(item, 'disable', false)
+          this.$set(item, 'active', true)
+        }
+      })
+    //   this.getPositionList()
+    },
+    methods: {
+      getShow(arr) {
+        return arr.indexOf(this.form.setting.type) !== -1
+      },
+      getPositionList() {
+        if ([10, 11].indexOf(this.form.setting.type) !== -1) {
+          this.positionList = [
+            { label: '外侧', value: 'outside' },
+            { label: '内部', value: 'inside' },
+            { label: '中心', value: 'center' },
+          ]
+        } else {
+          this.positionList = [
+            { label: '上', value: 'top' },
+            { label: '左', value: 'left' },
+            { label: '右', value: 'right' },
+            { label: '下', value: 'bottom' },
+            { label: '内', value: '' },
+          ]
+        }
+      },
+      handleClick(item) {
+        if (item.disable) {
+          return false
+        }
+        const chartType = this.$constants.chartType.find(c => c.value === this.form.setting.type)
+        if (item.value === 21 || this.form.setting.type === 21) {
+          this.$store.commit('SET_RELOAD_DATA', true)
+        }
+        if (item.value === 22 && chartType.type === 1) {
+          this.$store.commit('SET_RELOAD_DATA', true)
+        }
+        if (!chartType) {
+          this.$store.commit('SET_RELOAD_DATA', true)
+        }
+        if ((this.form.schema.x.type === 6 || this.form.schema.y.type === 6) && chartType) {
+          if (chartType.value === 30 && item.value !== 30) {
+            this.$store.commit('SET_RELOAD_DATA', true)
+          }
+          if (chartType.value !== 30 && item.value === 30) {
+            this.$store.commit('SET_RELOAD_DATA', true)
+          }
+          if (chartType.value === 20 && item.value !== 20) {
+            this.$store.commit('SET_RELOAD_DATA', true)
+          }
+          if (chartType.value !== 20 && item.value === 20) {
+            this.$store.commit('SET_RELOAD_DATA', true)
+          }
+        }
+        this.form.setting.type = item.value
+        this.chartIcon.map(c => {
+          if (c.value === item.value) {
+            this.$set(c, 'active', true)
+          } else {
+            this.$set(c, 'active', false)
+          }
+        })
+        // this.$store.dispatch('getItemSettingColor', [])
+        this.form.setting.dataPosition = ''
+        this.getPositionList()
+      },
+    }
+  }
+  </script>
+  
+  <style lang="scss">
+  .custom-analyse-tabs-style {
+    .el-collapse {
+      border-top: transparent !important;
+    }
+    .el-collapse-item__header {
+      font-weight: bold !important;
+      padding: 0 20px !important;
+      border-bottom: 1px solid #EBEEF5 !important;
+    }
+    .el-form-item {
+      padding: 0 15px;
+      margin-bottom: 0 !important;
+    }
+    .el-collapse {
+      border-top: 0 !important;
+    }
+    .color-config {
+      padding: 0 !important;
+      .o-code {
+        margin: 0 5px;
+        display: inline-block;
+      }
+      .color-config-content {
+        line-height: 50px;
+        position: relative;
+        .name {
+          margin-left: 10px;
+          font-size: 14px;
+          top: -10px;
+          position: absolute;
+        }
+      }
+    }
+    .title-padding {
+      .el-input__inner {
+        padding: 0 10px !important;
+      }
+    }
+    .el-collapse-item__content {
+      padding-bottom: 0 !important;
+    }
+    .content {
+      padding: 20px;
+    }
+    .label {
+      color: #6b6868;
+    }
+  }
+  </style>

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

@@ -95,7 +95,7 @@ export default {
       searchFiled: [],
       //检索条件
       searchOption: {
-        scenarioId:this.scenarioId,
+        scenarioNames:this.scenarioId,
         name:this.eventName
       },
       //分组的值

+ 6 - 0
src/views/layout/mixins/index.js

@@ -49,6 +49,12 @@ export const commonData={
       this.$api.getScenario().then(response => {
         this.$store.commit("SET_Scenario",response.data.data)
       })
+    },
+    //获取调查类型
+    getMatter(){
+      this.$api.getMatter([]).then(response => {
+        this.$store.commit("SET_Matter",response.data.data)
+      })
     }
   }
 }

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

@@ -247,6 +247,7 @@ export default {
             this.DictMessage()
             this.getUserInfo()
             this.getScenario()
+            this.getMatter()
       }).catch(error => {
         this.getCode()
         this.btnLoading = false

+ 57 - 8
src/views/patentMining/components/viewIndex.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="patentMiningIndex">
-    <el-container>
+    <el-container v-if="showView">
       <el-header>
         <div id="step1">
           <mySearch style="width:500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption"
@@ -63,7 +63,9 @@ export default {
     commonCard
   },
   props: {
-    isOperate: ''
+    isOperate: '',
+    matterId:{},
+    scenarioId:{}
   },
   data() {
     return {
@@ -104,7 +106,10 @@ export default {
         },
       ],
       //检索条件
-      searchOption: {},
+      searchOption: {
+        scenarioNames:this.scenarioId,
+        matterNames:this.matterId
+      },
       // table栏位信息
       columnList: [],
       //显示视图
@@ -114,7 +119,35 @@ export default {
     };
   },
   watch: {},
-  computed: {},
+  computed: {
+    scene(){
+      var a = this.$store.state.dictMessage.scenario.map(item=>{
+        return {
+          label:item.name,
+          value:item.id
+        }
+      })
+      var obj = this.searchFiled.find(item=>{return item.label == '应用场景'})
+      if(obj){
+        obj.options = a
+      }
+      return this.$store.state.dictMessage.scenario
+    },
+    matter() {
+      var a = this.$store.state.dictMessage.matter.map(item => {
+        return {
+          label: item.name,
+          value: item.id
+        }
+      })
+      var obj = this.searchFiled.find(item => { return item.label == '调查类型' })
+      if (obj) {
+        obj.options = a
+      }
+      return this.$store.state.dictMessage.matter || []
+    }
+
+  },
   created() { },
   async mounted() {
     // 获取table栏位
@@ -154,12 +187,28 @@ export default {
             value: 'value',
             type: 'type',
           })
+           //为应用场景添加选项
+           var obj = this.searchFiled.find(item=>{return item.label == '应用场景'})
+          if(obj){
+            obj.options = this.scene.map(item=>{
+              return {
+                label:item.name,
+                value:item.id
+              }
+            })
+          }
+          var obj = this.searchFiled.find(item=>{return item.label == '调查类型'})
+          if(obj){
+            obj.options = this.matter.map(item=>{
+              return {
+                label:item.name,
+                value:item.id
+              }
+            })
+          }
         }
       })
-      this.showView = false
-      this.$nextTick(() => {
-        this.showView = true
-      })
+      this.showViews()
     },
     // 新增、编辑成功信息
     isSuccess(val) {

+ 2 - 2
src/views/product/components/details/components/basicMessage.vue

@@ -1,6 +1,6 @@
 <template>
   <div v-loading="loading">
-    <el-form v-if="type == '产品类别'" :model="row" label-width="110px" style="margin:0 auto;width:50%">
+    <el-form v-if="type == '3'" :model="row" label-width="110px" style="margin:0 auto;width:50%">
         <el-form-item label="类别名称" prop="name">
           <myTooltip :content="row.name" >
             <div class="noWrap" v-html="$commonJS.getColumnData(row, {type:'String',value:'name'})"></div>
@@ -128,7 +128,7 @@ export default {
     if(Object.keys(this.row).length>0){
       return false
     }
-    if(this.type == '产品类别'){
+    if(this.type == '3'){
       this.getProductCategory()
     }else{
       this.getProduct()

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

@@ -59,7 +59,7 @@ import market from '../../market/index.vue'
     },
     methods: {
         getMenu(){
-            if(this.type == '产品类别'){
+            if(this.type == '3'){
                 this.menu = [
                     {
                         label:'基本信息',

+ 4 - 0
src/views/product/components/details/index.vue

@@ -17,15 +17,19 @@ export default {
   },
   watch: {},
   computed: {
+    //类型2是产品,3是产品类别
     type(){
         return this.$route.query.type
     },
+    //产品或者产品类别id
     id(){
         return this.$route.query.id
     },
+    //产品或者产品类别名称
     name(){
         return this.$route.query.name
     },
+    //产品或者产品类别许可费率
     licenseRate(){
         return this.$route.query.licenseRate
     }

+ 282 - 0
src/views/product/components/echarts/components/MultipleLine/index.vue

@@ -0,0 +1,282 @@
+<template>
+  <div style="margin-top:20px" >
+    <div style="display:flex;justify-content: flex-end;cursor: pointer;margin-bottom: -27px;margin-right:8px" :style="{ width: widths }">
+      <div class="set2">
+        <div>
+          <i class="el-icon-refresh" style="font-size:18px;" @click="review"></i>
+        </div>
+        <p class="text">还原</p>
+      </div>
+      <div class="set">
+        <div>
+          <i class="el-icon-setting" style="font-size: 18px;" @click="set"></i>
+        </div>
+        <p class="text">设置图表格式</p>
+      </div>
+      
+    </div>
+    <div :id="domId" :style="{ width: widths , height:heights }" ></div>
+    <el-drawer
+            title="图表配置"
+            :visible.sync="drawer"
+            direction="rtl"
+            :before-close="handleClose"
+            size="500px">
+            <div style="width:500px">
+               <Style :form="form"></Style> 
+            </div>
+            
+        </el-drawer>
+  </div>
+  
+</template>
+
+<script>
+import {chartOptionMixins,settingMethod} from '@/views/workspace/components/setting/mixins'
+import Style from '@/views/workspace/components/setting/style.vue'
+var that = this
+export default {
+  name: "CMultipleLine",
+  components:{
+        Style
+    },
+  mixins:[chartOptionMixins,settingMethod],
+  props: {
+    width: {
+      type: String,
+      default: '100%'
+    },
+    height: {
+      type: String,
+      default: '500px'
+    },
+    domId:{
+      default: 'multipleLine'
+    },
+   NewForm:{
+   }
+  },
+  data() {
+    return {
+      widths:'100%',
+      heights:'500px',
+      drawer:false,
+      changeColor:true,
+      id:this.domId,
+      relation:{},
+      name:'',
+      // domId: 'multipleLine',
+      chartData:[]
+    }
+  },
+  computed:{
+    formSetting(){
+      return this.form.setting
+    },
+  },
+  watch:{
+    formSetting(val){
+      this.dispose(this.id)
+      this.heights = val.height + val.heightUnit
+      this.widths = val.width + val.widthUnit
+      var a = this.getOption2()
+      this.$nextTick(() => {
+        this.initChart(this.id, a)
+      })
+   }
+  },
+  mounted() {
+    
+  },
+  
+  methods: {
+    handleClose(){
+      this.form = JSON.parse(JSON.stringify(this.form))
+      this.drawer = false
+    },
+    set(){
+      this.drawer = true
+      // this.$emit('form',this.form)
+    },
+    open(chartData,name,relation,timeUnit){
+      this.chartData = chartData
+      this.relation = relation
+      this.name = name
+      var a = this.getOption(name,relation,timeUnit)
+      this.$nextTick(() => {
+        this.initChart(this.id, a)
+      })
+    },
+  review(){
+      this.dispose(this.id)
+      var a = this.getOption2()
+      this.$nextTick(() => {
+          this.initChart(this.id, a)
+        })
+    },
+  getOption2(){
+    this.changeColor = false
+    let {backgroundColor,title,legend, xAxis, yAxis, series, grid,toolbox } = this.get2AxisOption('line', '')
+      // console.log(legend, xAxis, yAxis, series, grid)
+      return {
+        backgroundColor,
+        title,
+        tooltip: {
+          trigger: 'axis'
+        },
+        legend,
+        grid: grid,
+        xAxis: xAxis,
+        yAxis: yAxis,
+        series: series,
+        toolbox:toolbox
+      }
+  },
+    getOption(name,relation,timeUnit) {
+      this.form.setting.text.text = name
+      this.form.setting.title1 = relation.xStr
+      this.form.setting.title2 = relation.yStr+'/万元'
+      // var chartDom1 = document.getElementById(this.domId) 
+      // var myChart1 = this.$echarts.init(chartDom1)
+      var timeList = []
+      var productNameList = []
+      var data = []
+      this.chartData.forEach(item => {
+        productNameList.push(item.productName)
+        data.push({
+          name:item.productName,
+          type:'line',
+          connectNulls:true,
+          saleVOS:item.saleVOS,
+          data:[]
+        })
+        item.saleVOS.forEach(item1=>{
+          var index = timeList.findIndex(i=>{
+            return item1[relation.x] == i
+          })
+          if(index == -1){
+            timeList.push(item1[relation.x])
+          }
+        })
+      });
+      timeList = timeList.sort((a,b)=>{
+          if(timeUnit == 0){
+            return Date.parse(a.replace(/-/g, "/")) - Date.parse(b.replace(/-/g, "/"))
+          }else if(timeUnit==1){
+            return  Date.parse(a.match(/(\d{1,3})+(?:\.\d+)?/g).join('/'))-Date.parse(b.match(/(\d{1,3})+(?:\.\d+)?/g).join('/'))
+          }else{
+            return Date.parse(a.substring(0,a.length-1))-Date.parse(b.substring(0,b.length-1))
+          }
+        }),
+      data.forEach(item=>{
+        if(item.saleVOS && item.saleVOS.length>0){
+          item.saleVOS.forEach(item2=>{
+            var index = timeList.findIndex(i=>{
+              return item2[relation.x] == i
+            })
+            item.data[index] = item2[relation.y]
+          })
+        }
+        
+      });
+      
+      this.selected = {
+        x:timeList,
+        y:productNameList,
+        data:data
+      }
+      if(this.changeColor){
+        this.setColor()
+      }
+      
+      // console.log(this.selected)
+      let {backgroundColor, title, legend, xAxis, yAxis, series, grid,toolbox } = this.get2AxisOption('line', '')
+      // console.log(legend, xAxis, yAxis, series, grid)
+      return {
+        backgroundColor,
+        title,
+        tooltip: {
+          trigger: 'axis'
+        },
+        legend,
+        grid: grid,
+        xAxis: xAxis,
+        yAxis: yAxis,
+        series: series,
+        toolbox:toolbox,
+       
+      }
+   
+      
+      // var option = {
+      //   title: {
+      //     text: name,
+      //     bottom:0,
+      //     left:'center'
+      //   },
+      //   tooltip: {
+      //     trigger: 'axis'
+      //   },
+      //   legend: {
+      //     data: productNameList.length>1?productNameList:[],
+      //   },
+      //   grid: {
+      //     left: '3%',
+      //     right: '4%',
+      //     bottom: '40',
+      //     containLabel: true
+      //   },
+      //   toolbox: {
+      //     feature: {
+      //       saveAsImage: {}
+      //     }
+      //   },
+      //   xAxis: {
+      //     type: 'category',
+      //     data: timeList,
+      //     name: '时间',
+      //     nameLocation: "end"
+      //   },
+      //   yAxis: {
+      //     type: 'value',
+      //     name: '销售额/万元',
+      //     nameLocation: "end"
+      //   },
+      //   series: data
+      // };
+      // myChart1.clear();
+      // myChart1.setOption(option);
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+  .text{
+    display: none;
+    font-size: 12px;
+    color: #4099c6;
+    position: absolute;
+    top: 10px;
+    left: -30px;
+    z-index: 999;
+    width: 200px;
+  }
+  .set{
+    position: relative;
+    // margin-bottom:-200%;
+    z-index: 999;
+    // padding: 10px 0;
+  }
+  .set2{
+    margin-right:6px;
+    position: relative;
+    z-index: 999;
+  }
+  .set2:hover .text{
+    left:0;
+    display: block;
+  }
+  .set:hover .text{
+    display: block;
+  }
+</style>

+ 7 - 0
src/views/product/components/echarts/components/echarts.js

@@ -0,0 +1,7 @@
+import MultipleLine from "./MultipleLine";
+
+export const commonMethods = {
+    components:{
+        MultipleLine
+    }
+}

+ 231 - 0
src/views/product/components/echarts/components/echarts.vue

@@ -0,0 +1,231 @@
+<template>
+    <div style="height:100%;padding:20px">
+        <div>
+            <div style="display:flex;justify-content: space-between;">
+                <el-form :inline="true">
+                <el-form-item label="时间">
+                    <el-select v-model="queryParams.timeUnit" @change="changeEcharts()"  placeholder="请选择时间">
+                        <el-option
+                            v-for="item in timeList"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="地区">
+                    <el-select v-model="queryParams.area" @change="changeEcharts()" clearable  placeholder="请选择地区">
+                        <el-option
+                            v-for="item in areaList"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="公司" v-if="type == 1">
+                    <el-select v-model="queryParams.companyName" @change="changeEcharts()" clearable  placeholder="请选择公司">
+                        <el-option
+                            v-for="item in companyList"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="趋势图">
+                    <el-select v-model="queryParams.relation" @change="changeRelation()"  placeholder="请选择公司">
+                        <el-option
+                            v-for="item in relationList"
+                            :key="item.value"
+                            :label="item.label.xStr+'与'+item.label.yStr"
+                            :value="item.value">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <!-- <div>
+                <el-button type="primary" @click="setting">配置</el-button>
+            </div> -->
+            </div>
+
+            
+        </div>
+        <div>
+            <component v-if="type == 1" :is="component" :ref="components" :domId="components" :NewForm="form"  @form="getForm"></component>
+            <component :is='component' :ref="component"  :NewForm="form" @form="getForm"></component>  
+            
+        </div>  
+        <el-drawer
+            title="图表配置"
+            :visible.sync="drawer"
+            direction="rtl"
+            :before-close="handleClose"
+            size="500px">
+            <div style="width:500px">
+               <Style :form="form"></Style> 
+            </div>
+            
+        </el-drawer>
+    </div>
+</template>
+<script>
+import { commonMethods } from './echarts'
+import Style from '@/views/components/setting/style.vue'
+export default {
+    mixins:[commonMethods],
+    props:['id','type','name'],
+    components:{
+        Style
+    },
+    data() {
+        return {
+            form:{},
+            drawer:false,
+            height:'400px',
+            ChartData:[],
+            component:'MultipleLine',
+            components:'MultipleLineAll',
+            queryParams:{
+                timeUnit:0,
+                relation:1
+            },
+            relationList:[
+                {
+                    label:{
+                        x:'marketDate',
+                        xStr:'时间',
+                        y:'saleTotalMoney',
+                        yStr:'销售额'
+                    },
+                    value:1
+                },
+                {
+                    label:{
+                        x:'marketDate',
+                        xStr:'时间',
+                        y:'customLicenseMoney',
+                        yStr:'自定义许可费'
+                    },
+                    value:2
+                },
+            ],
+            timeList:[
+                {
+                    value:0,
+                    label:'月'
+                },
+                {
+                    value:1,
+                    label:'季度'
+                },
+                {
+                    value:2,
+                    label:'年'
+                },
+            ],
+            areaList:[],
+            companyList:[],
+        }
+    },
+    watch:{
+        id(val){
+            this.init()
+        },
+        type(val){},
+        name(){}
+    },
+    mounted() {
+        // this.handleAdd()
+        this.init()
+    },
+    methods: {
+        getForm(val){
+            this.form = val
+            this.drawer = true
+        },
+        handleClose(){
+            this.form = JSON.parse(JSON.stringify(this.form))
+            this.drawer = false
+        },
+        setting(){
+            this.drawer = true
+        },
+        changeRelation(){
+            var relation = this.relationList.find(i=>{
+                return i.value == this.queryParams.relation
+            })
+            var name = this.name + (this.type==3?'产品类别':'产品') + '趋势图'
+           if(this.type==1){
+                this.$refs[this.components].open(this.chartData.filter(item=>{
+                    return item.productId==0
+                }),'趋势总图',relation.label,this.queryParams.timeUnit)
+                this.$refs[this.component].open(this.chartData.filter(item=>{
+                    return item.productId!=0
+                }),name,relation.label,this.queryParams.timeUnit)
+            }else{
+                this.$refs[this.component].open([this.chartData],name,relation.label,this.queryParams.timeUnit)
+            }
+        },
+        async changeEcharts(){
+           var chartData =await this.getData()
+           this.chartData = chartData?chartData:[]
+          this.changeRelation()
+            
+           
+        },
+       async init(){
+            const [chartData,areaList] = await Promise.allSettled([this.getData(),this.getAreaList()])
+            this.chartData = chartData.status =='fulfilled'?chartData.value:[]
+            this.areaList= areaList.status =='fulfilled'?areaList.value.map(item=>{
+                return {
+                    value:item,
+                    label:item
+                }
+            }):[]
+            if(this.type == 3){
+                this.getCompanyList()
+            }
+            this.changeRelation()
+            
+            
+        },
+       async getData(){
+            if(this.type == 3){
+                this.queryParams.categoryId = this.id
+                this.queryParams.categoryArea = this.queryParams.area
+                return await this.$api.showTrend(this.queryParams)
+                    .then( async response=>await response.data)
+            }else if(this.type == 2){
+                this.queryParams.productId = this.id
+                this.queryParams.saleArea = this.queryParams.area
+                return await this.$api.ProductShowTrend(this.queryParams).then( async response=>await response.data)
+            }
+           
+            
+        },
+        getAreaList(){
+            var params = {}
+            if(this.type == 1){
+                params.categoryId = this.id
+            }else{
+                params.productId = this.id
+            }
+            return this.$api.getAreaList(params).then(response=> response.data)
+        },
+        getCompanyList(){
+             this.$api.getCompanyList({id:this.id}).then(response=>{
+                if(response.code == 200){
+                     this.companyList=response.data?response.data.map(item=>{
+                        return {
+                            value:item,
+                            label:item
+                        }
+                    }):[]
+                }
+            }
+            )
+        }
+    },
+}
+</script>

+ 32 - 0
src/views/product/components/echarts/index.vue

@@ -0,0 +1,32 @@
+<template>
+    <div>
+        <chart :id="id" :type="type" :name="name"></chart>
+    </div>
+</template>
+<script>
+import chart from './components/echarts.vue'
+export default{
+    components:{
+        chart
+    },
+    data() {
+        return {
+            
+        }
+    },
+    computed:{
+        //产品或者产品类别id
+        id(){
+            return this.$route.query.id
+        },
+        //趋势图类型2是产品,3是产品类别
+        type(){
+            return this.$route.query.type
+        },
+        //产品或者产品类别名称
+        name(){
+            return this.$route.query.name
+        }
+    }
+}
+</script>

+ 13 - 4
src/views/product/components/market/index.vue

@@ -44,10 +44,10 @@
           <el-table-column label="许可参考值" prop="reference" align="center">
             <template slot-scope="scope">
               <div>
-                <span>{{ scope.row.licenseRate == 0 || scope.row.licenseRate
+                <span>{{ licenseRate == 0 || licenseRate
                     ? (
                         Number(scope.row.saleMoney) *
-                        Number(scope.row.licenseRate)
+                        Number(licenseRate)
                       ).toFixed(2)
                     : ""
                 }}</span>
@@ -125,7 +125,11 @@ export default {
         loading:false
     };
   },
-  watch: {},
+  watch: {
+    id(){
+      this.getList()
+    }
+  },
   computed: {},
   created() {},
   mounted() {
@@ -166,7 +170,11 @@ export default {
     },
     //编辑
     handleEdit(row){
-        this.$refs.addEditMarket.open(row)
+      var form = {
+        ...row,
+        licenseRate:this.licenseRate
+      }
+      this.$refs.addEditMarket.open(form)
     },
     //获取新增编辑的信息
     getSubmitMessage(val){
@@ -185,6 +193,7 @@ export default {
             this.$api.deleteProductMarketData(ids).then(response=>{
                 if(response.code == 200){
                     this.$message.success('删除成功!')
+                    this.getList()
                 }
             }).catch(error=>{
                 this.$message.success('删除失败!')

+ 1 - 1
src/views/product/components/mixins/index.js

@@ -15,7 +15,7 @@ export default {
                 {
                   path: '/productDetails',
                   query: {
-                    type:type=='2'?'产品':'产品类别',
+                    type:type,
                     id:row.id,
                     name:row.name,
                     licenseRate:row.licenseRate

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

@@ -171,7 +171,7 @@ export default {
           var str = this.$commonJS.objectToString(this.searchOption) 
           let params = {
             ...this.queryParams,
-            searchQuery:str?' AND ':'' + `category_id=${this.row.id}`,//检索条件
+            searchQuery:(str?(str+' AND '):'') + `category_id=${this.row.id}`,//检索条件
             orderDTOList: this.sort,//排序
           }
         this.getList2(params,1)
@@ -247,7 +247,7 @@ export default {
       var str = this.$commonJS.objectToString(this.searchOption) 
       let params = {
         ...this.queryParams,
-        searchQuery:str?' AND ':'' + `category_id=${this.row.id}`,//检索条件
+        searchQuery:(str?(str+' AND '):'') + `category_id=${this.row.id}`,//检索条件
         orderDTOList: this.sort,//排序
       }
       this.isMore = false;

+ 40 - 17
src/views/project/index.vue

@@ -11,7 +11,7 @@
         </el-collapse>
       </div>
       <div class="height_100">
-        <el-container>
+        <el-container v-if="showView">
           <el-header>
             <div id="step1">
               <mySearch style="width:500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption"
@@ -100,14 +100,19 @@ export default {
 
   },
   props: {
-    isOperate: ''
+    isOperate: '',
+    matterId:{},
+    scenarioId:{}
   },
   data() {
     return {
       //检索字段
       searchFiled: [],
       //检索条件
-      searchOption: {},
+      searchOption: {
+        scenarioNames:this.scenarioId,
+        matterNames:this.matterId
+      },
       //专利数据库数据总数
       total: 0,
       //分页信息
@@ -157,13 +162,26 @@ export default {
         obj.options = a
       }
       return this.$store.state.dictMessage.scenario || []
+    },
+    matter() {
+      var a = this.$store.state.dictMessage.matter.map(item => {
+        return {
+          label: item.name,
+          value: item.id
+        }
+      })
+      var obj = this.searchFiled.find(item => { return item.label == '调查类型' })
+      if (obj) {
+        obj.options = a
+      }
+      return this.$store.state.dictMessage.matter || []
     }
   },
   created() { },
   async mounted() {
     this.fieldList = await this.$commonJS.getCustomField('patentProject')
     //获取检索字段和分组字段
-    this.getColumn()
+    await this.getColumn()
     //获取应用场景统计
     // if ([2].indexOf(this.isOperate) == -1) {
     //   this.getScenarioAndTypeTotal();
@@ -188,7 +206,7 @@ export default {
     //获取检索字段和分组字段
     async getColumn() {
       let params = ['patentProject']
-      await this.$api.getParamsCommon(params).then(res => {
+      await this.$api.getParamsCommon(params).then(async res => {
         if (res.code == 200) {
           // 分组字段
           let conditionDTOList = JSON.parse(JSON.stringify(res.data[0].conditionDTOList))
@@ -202,23 +220,28 @@ export default {
             value: 'value',
             type: 'type',
           })
+          //为应用场景添加选项
+          var obj = this.searchFiled.find(item=>{return item.label == '应用场景'})
+          if(obj){
+            obj.options = this.commonData.map(item=>{
+              return {
+                label:item.name,
+                value:item.id
+              }
+            })
+          }
           var obj = this.searchFiled.find(item=>{return item.label == '调查类型'})
-          if (obj) {
-            this.$api.getMatter([]).then(response => {
-              obj.options = response.data.data.map(item=>{
-                return {
-                  label:item.name,
-                  value:item.id
-                }
-              })
+          if(obj){
+            obj.options = this.matter.map(item=>{
+              return {
+                label:item.name,
+                value:item.id
+              }
             })
           }
         }
       })
-      this.showView = false
-      this.$nextTick(() => {
-        this.showView = true
-      })
+      this.showViews()
     },
     //获取应用场景统计
     getScenarioAndTypeTotal() {

+ 62 - 5
src/views/report/components/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="height_100">
-    <el-container>
+    <el-container v-if="showView">
       <el-header>
         <div id="step1">
           <mySearch style="width:500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption">
@@ -72,7 +72,9 @@ export default {
     fields,
   },
   props: {
-    isOperate: ''
+    isOperate: '',
+    matterId:{},
+    scenarioId:{}
   },
   data() {
     return {
@@ -98,7 +100,9 @@ export default {
 
       //检索条件
       searchOption: {
-        name: localStorage.searchContent
+        name: localStorage.searchContent,
+        scenarioNames:this.scenarioId,
+        matterNames:this.matterId
       },
       //分组的值
       groupingValue: '',
@@ -130,6 +134,7 @@ export default {
       columnList: [],
       // 子组件新增、编辑报告成功发送的字符串
       handleMessage: '',
+      showView:false,
     };
   },
   watch: {},
@@ -181,6 +186,32 @@ export default {
       }
       return []
 
+    },
+    scene(){
+      var a = this.$store.state.dictMessage.scenario.map(item=>{
+        return {
+          label:item.name,
+          value:item.id
+        }
+      })
+      var obj = this.searchFiled.find(item=>{return item.label == '应用场景'})
+      if(obj){
+        obj.options = a
+      }
+      return this.$store.state.dictMessage.scenario
+    },
+    matter() {
+      var a = this.$store.state.dictMessage.matter.map(item => {
+        return {
+          label: item.name,
+          value: item.id
+        }
+      })
+      var obj = this.searchFiled.find(item => { return item.label == '调查类型' })
+      if (obj) {
+        obj.options = a
+      }
+      return this.$store.state.dictMessage.matter || []
     }
   },
   created() { },
@@ -191,8 +222,16 @@ export default {
     await this.getColumn()
     //获取报告清单
     this.getList()
+    this.showViews()
   },
   methods: {
+    //显示视图?
+    showViews() {
+      this.showView = false
+      this.$nextTick(() => {
+        this.showView = true
+      })
+    },
     // 显示栏位管理组件返回数据
     getFieldList(val) {
       this.columnList = val
@@ -224,11 +263,29 @@ export default {
             let obj = this.searchFiled.find(item2 => {
               return item2.label == item
             })
-            console.log(obj);
             if (obj) {
               this.handleSearchArray(obj)
             }
           })
+           //为应用场景添加选项
+           var obj = this.searchFiled.find(item=>{return item.label == '应用场景'})
+          if(obj){
+            obj.options = this.scene.map(item=>{
+              return {
+                label:item.name,
+                value:item.id
+              }
+            })
+          }
+          var obj = this.searchFiled.find(item=>{return item.label == '调查类型'})
+          if(obj){
+            obj.options = this.matter.map(item=>{
+              return {
+                label:item.name,
+                value:item.id
+              }
+            })
+          }
         }
       })
       this.showView = false
@@ -304,7 +361,7 @@ export default {
         }
       }).catch(error => {
         this.dataList = []
-        this.data.total = 0
+        this.total = 0
         this.loading = false
         this.$message.error(error.message)
       })

+ 5 - 8
src/views/visual/components/drawer/titleDrawer.vue

@@ -5,7 +5,7 @@
               <el-tabs v-model="components">
                   <el-tab-pane v-for="item in menu" :key="item.components"  :label="item.name" :name="item.components"></el-tab-pane>
               </el-tabs>
-              <component :is='components' style="height:calc(100% - 50px);" :isOperate='2'></component>
+              <component :is='components' style="height:calc(100% - 50px);" :isOperate='2' :scenarioId="[params.scenarioId]" :matterId="[params.matterId]"></component>
           </div>
           
       </el-drawer>
@@ -38,6 +38,7 @@
           ],
           drawer:false,
           components:'Project',
+          params:{}
       };
     },
     watch: {},
@@ -45,13 +46,9 @@
     created() {},
     mounted() {},
     methods: {
-      open(scenarioName, typeName, question){
-          this.params = {
-              scenarioName:scenarioName, 
-              typeName:typeName, 
-              question:question
-          }
-          if(typeName && typeName.indexOf('专利挖掘')!=-1){
+      open(data){
+          this.params = data
+          if(this.params.isPatentMining){
             this.menu.push(
               {
                   name:'专利挖掘',

+ 1 - 1
src/views/visual/components/sceneSVG.vue

@@ -72,7 +72,7 @@ export default {
               "orderType": 1
             }
           ],
-          "groupBy": "scenarioId"
+          "groupBy": "scenarioNames"
         }
       await this.$api.groupEvent(params).then(res => {
         if (res.code == 200) {

+ 153 - 30
src/views/visual/title/index.vue

@@ -4,16 +4,20 @@
        <myCustomSvg  class="myCustomSvg" :title="title" :total="total" :QuestionTotal="QuestionTotal" @on-click="handleClick"></myCustomSvg>
       <tips class="c-tips" />
       <titleDrawer ref="titleDrawer" @close="close" />
+      <eventDrawer ref="eventDrawer" @close="closeDrawer"></eventDrawer>
     </div>
 </template>
   
   <script>
   import Tips from '../components/Tips'
   import titleDrawer from "../components/drawer/titleDrawer.vue";
+  import eventDrawer from "../components/drawer/eventDrawer.vue";
   export default {
+    name:'flowPath',
     components: {
       Tips,
       titleDrawer,
+      eventDrawer
     },
     data() {
       return {
@@ -23,53 +27,172 @@
         total: {},
         //当前的应用场景
         title: this.$route.params.title,
+        queryParams:{
+            "size": 999,
+            "current": 1,
+            "searchQuery": "",
+            "orderDTOList": [
+                {
+                    "orderBy": "createTime",
+                    "orderType": 1
+                }
+            ],
+            "groupBy": "matterNames"
+        },
+        scenarioId:''
       }
+      
+    },
+    computed:{
+      scenario(){
+        return this.$store.state.dictMessage.scenario || []
+      }
+      
     },
     async mounted() {
+      if(this.scenario.length>0){
+        var scenario = this.scenario.find(item=>{
+          return item.name == this.title
+        })
+        if(scenario){
+          this.scenarioId = scenario.id
+          this.queryParams.searchQuery = `scenarioNames=[${scenario.id}]`
+        }else{
+          return false
+        }
+      }
+      
       //获取事件数量
-      // await this.getEventNumber()
-      // //获取应用场景对应项目数量
-      // await this.getProjectTypeTotal()
+      await this.getEventNumber()
+      //获取应用场景对应项目数量
+      await this.init()
     },
     methods: {
+      openEventDrawer(title){
+        this.$refs.eventDrawer.open(title, [this.scenarioId])
+      },
+      closeDrawer(){
+        this.getEventNumber()
+      },
       //点击节点
-      handleClick(type) {
+      handleClick({type,isPatentMining}) {
         var question = {
           questionId: this.questionId,
           questionName: this.questionName
         }
-        this.$refs.titleDrawer.open(this.title, type, question)
+        var matterId = this.total.find(item=>{
+          return item.name == type
+        }).id
+        var data = {
+          scenarioId:this.scenarioId,
+          matterId:matterId,
+          isPatentMining:isPatentMining
+        }
+        this.$refs.titleDrawer.open(data)
       },
        //获取事件数量
-       async getEventNumber() {
-        await this.$api.queryApplicationScenarioEventNumber().then(response => {
-          if (response.code == 200) {
-            this.QuestionTotal = response.data
+      async getEventNumber() {
+        var params = {
+          "current": 1,
+          "size": 10,
+          "searchQuery": `scenarioNames=[${this.scenarioId}]`,
+          "orderDTOList": [
+            {
+              "orderBy": "createTime",
+              "orderType": 1
+            }
+          ],
+          "groupBy": "scenarioNames"
+        }
+      await this.$api.groupEvent(params).then(res => {
+        if (res.code == 200) {
+          if(res.data.data.values.length>0){
+            this.QuestionTotal=res.data.data.values
+          }else{
+            this.QuestionTotal=[
+              {
+                name:this.title,
+                value:this.scenarioId,
+                count:0
+              }
+            ]
           }
-        })
+          
+        }
+      }).catch(err => {
+        this.QuestionTotal = [
+          {
+            name:this.title,
+            value:this.scenarioId,
+            count:0
+          }
+        ]
+      })
+        // await this.$api.queryApplicationScenarioEventNumber().then(response => {
+        //   if (response.code == 200) {
+        //     this.QuestionTotal = response.data
+        //   }
+        // })
       },
       //获取应用场景下流程节点对应项目数量
-      async getProjectTypeTotal() {
-        this.show = true
-        if (this.questionName) {
-          var params = {
-            applicationScenario: this.QuestionTotal.find(item => { return item.applicationScenarioName == this.title }).applicationScenarioValue,
-            eventId: this.questionId
-          }
-          await this.$api.queryInvestigationTypeProjectNumber(params).then(response => {
-            if (response.code == 200) {
-              var total = {}
-              response.data.map(item => {
-                total[item.investigationTypeName] = item.projectNumber
-              })
-              this.total = total
-            }
+      async init() {
+        var matter = []
+        await this.$api.getMatter([this.scenarioId]).then(response => {
+          matter = response.data.data
+        })
+        const [ProjectTotal,ReportTotal,PatentMiningTotal] = await Promise.allSettled([this.getProjectTotal(),this.getReportTotal(),this.getPatentMiningTotal()])
+        var projectTotal = ProjectTotal.status =='fulfilled'?ProjectTotal.value:[]
+        var reportTotal = ReportTotal.status =='fulfilled'?ReportTotal.value:[]
+        var patentMiningTotal = PatentMiningTotal.status =='fulfilled'?PatentMiningTotal.value:[]
+        for(var i = 0;i<matter.length;i++){
+          let total = {}
+          let project = projectTotal.find(item=>{
+            return item.value == matter[i].id
           })
-          return false
+          total.projectCount = project?project.count:0
+          let report = reportTotal.find(item=>{
+            return item.value == matter[i].id
+          })
+          total.reportCount = report?report.count:0
+          let patentMining = patentMiningTotal.find(item=>{
+            return item.value == matter[i].id
+          })
+          total.patentMiningCount = patentMining?patentMining.count:0
+          matter[i].total = total
         }
-        await this.$api.getProjectTypeTotal({ scenario: this.title }).then(response => {
-          this.total = response.data
-        })
+        this.total = matter
+        // this.show = true
+        // if (this.questionName) {
+        //   var params = {
+        //     applicationScenario: this.QuestionTotal.find(item => { return item.applicationScenarioName == this.title }).applicationScenarioValue,
+        //     eventId: this.questionId
+        //   }
+        //   await this.$api.queryInvestigationTypeProjectNumber(params).then(response => {
+        //     if (response.code == 200) {
+        //       var total = {}
+        //       response.data.map(item => {
+        //         total[item.investigationTypeName] = item.projectNumber
+        //       })
+        //       this.total = total
+        //     }
+        //   })
+        //   return false
+        // }
+        // await this.$api.getProjectTypeTotal({ scenario: this.title }).then(response => {
+        //   this.total = response.data
+        // })
+      },
+      //获取每个调查类型的数据库数量
+      async getProjectTotal(){
+        return await this.$api.groupPatentProject(this.queryParams).then( async response=>await response.data.data.values)
+      },
+      //获取每个调查类型的报告数量
+      async getReportTotal(){
+        return await this.$api.groupReportProject(this.queryParams).then( async response=>await response.data.data.values)
+      },
+      //获取每个调查类型的挖掘数量
+      async getPatentMiningTotal(){
+        return await this.$api.groupPatentDigProject(this.queryParams).then( async response=>await response.data.data.values)
       },
       //关闭抽屉弹窗回调
       close() { },
@@ -114,7 +237,7 @@
       
       position: absolute;
       left: 0; 
-    //   top: 50px;
+      // top: 50px;
       bottom:0;
       right:0;
       margin:auto;