Kaynağa Gözat

事件,报告,可视化页面

zhuliu 1 yıl önce
ebeveyn
işleme
f2e5d02eeb

+ 613 - 0
public/专利培育布局A1.svg

@@ -0,0 +1,613 @@
+<svg id="SvgjsSvg1006" width="100%" height="100%" viewBox="0 0 1250 841.15625" 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="SvgjsMarker1051" 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="SvgjsPath1052" d="M0,0 L13,4.5 L0,9 L0,0" fill="#3084e5" stroke="#3084e5" stroke-width="1"></path>
+          </marker>
+          <marker id="SvgjsMarker1073" 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="SvgjsPath1074" d="M0,0 L13,4.5 L0,9 L0,0" fill="#3084e5" stroke="#3084e5" stroke-width="1"></path>
+          </marker>
+          <marker id="SvgjsMarker1083" 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="SvgjsPath1084" d="M0,0 L13,4.5 L0,9 L0,0" fill="#3084e5" stroke="#3084e5" stroke-width="1"></path>
+          </marker>
+          <marker id="SvgjsMarker1155" 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="SvgjsPath1156" d="M0,0 L13,4.5 L0,9 L0,0" fill="#d45a6a" stroke="#d45a6a" stroke-width="1"></path>
+          </marker>
+          <marker id="SvgjsMarker1159" 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="SvgjsPath1160" d="M0,0 L13,4.5 L0,9 L0,0" fill="#d45a6a" stroke="#d45a6a" stroke-width="1"></path>
+        </marker>
+        <marker id="SvgjsMarker1175" 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="SvgjsPath1176" d="M0,0 L13,4.5 L0,9 L0,0" fill="#d45a6a" stroke="#d45a6a" stroke-width="1"></path>
+        </marker>
+        <marker id="SvgjsMarker1213" 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="SvgjsPath1214" d="M0,0 L13,4.5 L0,9 L0,0" fill="#d45a6a" stroke="#d45a6a" stroke-width="1"></path>
+        </marker>
+        <marker id="SvgjsMarker1217" 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="SvgjsPath1218" d="M0,0 L13,4.5 L0,9 L0,0" fill="#d45a6a" stroke="#d45a6a" stroke-width="1"></path>
+        </marker>
+        <marker id="SvgjsMarker1221" 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="SvgjsPath1222" d="M0,0 L13,4.5 L0,9 L0,0" fill="#d45a6a" stroke="#d45a6a" stroke-width="1"></path>
+        </marker>
+        <marker id="SvgjsMarker1259" 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="SvgjsPath1260" d="M0,0 L13,4.5 L0,9 L0,0" fill="#d45a6a" stroke="#d45a6a" stroke-width="1"></path>
+        </marker>
+        <marker id="SvgjsMarker1283" 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="SvgjsPath1284" d="M0,0 L13,4.5 L0,9 L0,0" fill="#d45a6a" stroke="#d45a6a" stroke-width="1"></path>
+        </marker>
+        <marker id="SvgjsMarker1301" 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="SvgjsPath1302" d="M0,0 L13,4.5 L0,9 L0,0" fill="#d45a6a" stroke="#d45a6a" stroke-width="1"></path>
+        </marker>
+        <marker id="SvgjsMarker1305" 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="SvgjsPath1306" d="M0,0 L13,4.5 L0,9 L0,0" fill="#d45a6a" stroke="#d45a6a" stroke-width="1"></path>
+        </marker>
+      </defs>
+      <rect id="svgbackgroundid" width="1250" height="841.15625" fill="transparent"></rect>
+      <rect id="SvgjsRect1009" width="1250" height="841.15625" fill="url(#pattern_mark_0)"></rect>
+      <rect id="SvgjsRect1010" width="1250" height="841.15625" fill="url(#pattern_mark_1)"></rect>
+      <!-- 专利培育布局块 -->
+      <g id="SvgjsG1011" transform="translate(351.671875,25)" onmouseenter="vm.svgOnMouseenter(event,{type:'titleA1',width:'490'})" onmouseleave="vm.svgOnMouseleave(event,{type:'titleA1',width:'490'})">
+        <path id="SvgjsPath1012" d="M 0 4Q 0 0 4 0L 510 0Q 514 0 514 4L 514 96Q 514 100 510 100L 4 100Q 0 100 0 96Z"
+          stroke="rgba(17,172,175,1)" 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="494px" 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="257">
+              <tspan id="SvgjsTspan1016" style="text-decoration:;">专利培育布局</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <!-- 专利培育布局事件数量 -->
+      <g id="SvgjsG1017" transform="translate(801.9218750000006,56.00001525878906)" 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>
+      </g>
+      <!-- 产业/行业专利调查块 -->
+      <g id="SvgjsG1023" transform="translate(433.671875,199.33334859212238)" onClick="vm.handleClick('产业/行业专利调查')">
+        <path id="SvgjsPath1024" d="M 0 4Q 0 0 4 0L 346 0Q 350 0 350 4L 350 76Q 350 80 346 80L 4 80Q 0 80 0 76Z"
+          stroke="{{产业/行业专利调查,#3084e5}}" stroke-width="1.5" fill-opacity="1" fill="{{产业/行业专利调查,#3084e5}}"></path>
+        <g id="SvgjsG1025"><text id="SvgjsText1026" font-family="微软雅黑" text-anchor="middle" font-size="24px"
+            width="330px" 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="175">
+              <tspan id="SvgjsTspan1028" style="text-decoration:;">产业/行业专利调查</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <!-- 布局优化策略块 -->
+      <g id="SvgjsG1029" transform="translate(405.17187499999955,736.1666208903006)" onClick="vm.handleClick('布局优化策略')">
+        <path id="SvgjsPath1030" d="M 0 4Q 0 0 4 0L 346 0Q 350 0 350 4L 350 76Q 350 80 346 80L 4 80Q 0 80 0 76Z"
+          stroke="{{布局优化策略,#3084e5}}" stroke-width="1.5" fill-opacity="1" fill="{{布局优化策略,#3084e5}}"></path>
+        <g id="SvgjsG1031"><text id="SvgjsText1032" font-family="微软雅黑" text-anchor="middle" font-size="24px"
+            width="330px" 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="SvgjsTspan1033" dy="30" x="175">
+              <tspan id="SvgjsTspan1034" style="text-decoration:;">布局优化策略</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <!-- 布局优化策略左侧星星 -->
+      <g id="SvgjsG1035" transform="translate(413.8385416666665,753.6666208903005)">
+        <path id="SvgjsPath1036" 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="SvgjsG1037"><text id="SvgjsText1038" 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 id="SvgjsG1039" transform="translate(422.1718749999998,761.9999542236338)">
+        <path id="SvgjsPath1040"
+          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(48,132,229,1)" stroke-width="1.5" fill-opacity="1" fill="#3084e5"></path>
+        <g id="SvgjsG1041"><text id="SvgjsText1042" 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="SvgjsG1043" transform="translate(733.3385416666665,218.50001525878906)">
+        <path id="SvgjsPath1044"
+          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="SvgjsG1045"><text id="SvgjsText1046" 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="SvgjsTspan1047" dy="22" x="21.5">
+              <tspan id="SvgjsTspan1048" style="text-decoration:;">{{ 产业/行业专利调查, 2 }}</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1049">
+        <path id="SvgjsPath1050"
+          d="M608.3385416666667 171.33334859212238L608.3385416666667 154.33334859212238L1021.2274305555566 154.33334859212238L1021.2274305555566 196.90001525878893"
+          stroke="#3084e5" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1051)"></path>
+      </g>
+      <!-- 产业/行业调查块 -->
+      <g id="SvgjsG1053" transform="translate(842.3385416666667,199.33334859212238)" onmouseenter="vm.svgOnMouseenter(event,{type:'9',width:'375'})" onmouseleave="vm.svgOnMouseleave(event,{type:'9',width:'375'})"
+          onClick="vm.handleClick('产业/行业调查')">
+        <path id="SvgjsPath1054" d="M 0 4Q 0 0 4 0L 346 0Q 350 0 350 4L 350 76Q 350 80 346 80L 4 80Q 0 80 0 76Z"
+          stroke="{{产业/行业调查,#3084e5}}" stroke-width="1.5" fill-opacity="1" fill="{{产业/行业调查,#3084e5}}"></path>
+        <g id="SvgjsG1055"><text id="SvgjsText1056" font-family="微软雅黑" text-anchor="middle" font-size="24px"
+            width="330px" 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="SvgjsTspan1057" dy="30" x="175">
+              <tspan id="SvgjsTspan1058" style="text-decoration:;">产业/行业调查</tspan>
+            </tspan>
+          </text></g>
+      </g>
+       <!-- 产业/行业调查专题库数量 -->
+      <g id="SvgjsG1059" transform="translate(1143.5052083333335,218.50001525878903)">
+        <path id="SvgjsPath1060"
+          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="SvgjsG1061"><text id="SvgjsText1062" 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="SvgjsTspan1063" dy="22" x="21.5">
+              <tspan id="SvgjsTspan1064" style="text-decoration:;">{{ 产业/行业调查, 2 }}</tspan>
+            </tspan>
+          </text></g>
+      </g>
+     <!-- 政策与市场环境分析块 -->
+      <g id="SvgjsG1065" transform="translate(25.005208333333258,199.33334859212238)" onmouseenter="vm.svgOnMouseenter(event,{type:'10',width:'325'})" onmouseleave="vm.svgOnMouseleave(event,{type:'10',width:'325'})"
+        onClick="vm.handleClick('政策与市场环境分析')">
+        <path id="SvgjsPath1066" d="M 0 4Q 0 0 4 0L 346 0Q 350 0 350 4L 350 76Q 350 80 346 80L 4 80Q 0 80 0 76Z"
+          stroke="{{政策与市场环境分析,#3084e5}}" stroke-width="1.5" fill-opacity="1" fill="{{政策与市场环境分析,#3084e5}}"></path>
+        <g id="SvgjsG1067"><text id="SvgjsText1068" font-family="微软雅黑" text-anchor="middle" font-size="24px"
+            width="330px" 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="SvgjsTspan1069" dy="30" x="175">
+              <tspan id="SvgjsTspan1070" style="text-decoration:;">政策与市场环境分析</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1071">
+        <path id="SvgjsPath1072"
+          d="M608.671875 125.75L608.671875 162.33334096272793L608.6718749999999 162.33334096272793L608.6718749999999 196.96668192545587"
+          stroke="#3084e5" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1073)"></path>
+      </g>
+      <!-- 政策与市场环境分析专题库数量 -->
+      <g id="SvgjsG1075" transform="translate(323.17187499999955,218.50001525878903)">
+        <path id="SvgjsPath1076"
+          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="SvgjsG1077"><text id="SvgjsText1078" 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="SvgjsTspan1079" dy="22" x="21.5">
+              <tspan id="SvgjsTspan1080" style="text-decoration:;">{{ 政策与市场环境分析, 2 }}</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1081">
+        <path id="SvgjsPath1082"
+          d="M607.9218750000006 154.5L200.00520833333326 154.5L200.00520833333326 196.6333485921224" stroke="#3084e5"
+          stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1083)"></path>
+      </g>
+      <g id="SvgjsG1085" transform="translate(118.33854166666674,172.33334859212238)">
+        <path id="SvgjsPath1086" d="M 0 0L 100 0L 100 40L 0 40Z" stroke="none" fill="none"></path>
+        <g id="SvgjsG1087"><text id="SvgjsText1088" 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="SvgjsG1089" transform="translate(621.9218750000006,154.33334859212238)">
+        <path id="SvgjsPath1090" d="M 0 0L 180 0L 180 40L 0 40Z" stroke="none" fill="none"></path>
+        <g id="SvgjsG1091"><text id="SvgjsText1092" font-family="微软雅黑" text-anchor="middle" font-size="14px"
+            width="180px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
+            family="微软雅黑" size="14px" weight="400" font-style="" opacity="1" y="-0.25" transform="rotate(0)">
+            <tspan id="SvgjsTspan1093" dy="17" x="90">
+              <tspan id="SvgjsTspan1094" style="text-decoration:;fill: rgb(51, 35, 62);">了解专利技术的现有发展情</tspan>
+            </tspan>
+            <tspan id="SvgjsTspan1095" dy="17" x="90">
+              <tspan id="SvgjsTspan1096" style="text-decoration:;fill: rgb(51, 35, 62);">况</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1097" transform="translate(201.0885416666663,159.33334859212238)">
+        <path id="SvgjsPath1098" d="M 0 0L 208.5833333333337 0L 208.5833333333337 40L 0 40Z" stroke="none" fill="none">
+        </path>
+        <g id="SvgjsG1099"><text id="SvgjsText1100" font-family="微软雅黑" text-anchor="middle" font-size="14px"
+            width="209px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
+            family="微软雅黑" size="14px" weight="400" font-style="" opacity="1" y="-0.25" transform="rotate(0)">
+            <tspan id="SvgjsTspan1101" dy="17" x="104.5">
+              <tspan id="SvgjsTspan1102" style="text-decoration:;fill: rgb(51, 35, 62);">了解目标国家/地区对该技术相关</tspan>
+            </tspan>
+            <tspan id="SvgjsTspan1103" dy="17" x="104.5">
+              <tspan id="SvgjsTspan1104" style="text-decoration:;fill: rgb(51, 35, 62);">产业发展态度、机遇及风险</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1105" transform="translate(1026.0052083333344,154.33334859212238)">
+        <path id="SvgjsPath1106" d="M 0 0L 198.6666666666656 0L 198.6666666666656 40L 0 40Z" stroke="none" fill="none">
+        </path>
+        <g id="SvgjsG1107"><text id="SvgjsText1108" font-family="微软雅黑" text-anchor="middle" font-size="14px"
+            width="199px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
+            family="微软雅黑" size="14px" weight="400" font-style="" opacity="1" y="-0.25" transform="rotate(0)">
+            <tspan id="SvgjsTspan1109" dy="17" x="99.5">
+              <tspan id="SvgjsTspan1110" style="text-decoration:;fill: rgb(51, 35, 62);">了解该技术的产业发展概况、产</tspan>
+            </tspan>
+            <tspan id="SvgjsTspan1111" dy="17" x="99.5">
+              <tspan id="SvgjsTspan1112" style="text-decoration:;fill: rgb(51, 35, 62);">品情况、企业合作情况</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <!-- 重点技术专利调查块 -->
+      <g id="SvgjsG1113" transform="translate(646.671875,329.16666666666686)" onmouseenter="vm.svgOnMouseenter(event,{type:'3',width:'325'})" onmouseleave="vm.svgOnMouseleave(event,{type:'3',width:'325'})"
+        onClick="vm.handleClick('重点技术专利调查')">
+        <path id="SvgjsPath1114" d="M 0 4Q 0 0 4 0L 346 0Q 350 0 350 4L 350 76Q 350 80 346 80L 4 80Q 0 80 0 76Z"
+          stroke="{{重点技术专利调查,#d45a6a}}" stroke-width="1.5" fill-opacity="1" fill="{{重点技术专利调查,#d45a6a}}"></path>
+        <g id="SvgjsG1115"><text id="SvgjsText1116" font-family="微软雅黑" text-anchor="middle" font-size="24px"
+            width="330px" 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="SvgjsTspan1117" dy="30" x="175">
+              <tspan id="SvgjsTspan1118" style="text-decoration:;">重点技术专利调查</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1119" transform="translate(655.338541666667,346.66666666666686)">
+        <path id="SvgjsPath1120" 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="SvgjsG1121"><text id="SvgjsText1122" 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 id="SvgjsG1123" transform="translate(664.0052083333334,355.00000000000017)">
+        <path id="SvgjsPath1124"
+          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="SvgjsG1125"><text id="SvgjsText1126" 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="SvgjsG1127" transform="translate(944.3385416666665,350)">
+        <path id="SvgjsPath1128"
+          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="SvgjsG1129"><text id="SvgjsText1130" 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="SvgjsTspan1131" dy="22" x="21.5">
+              <tspan id="SvgjsTspan1132" style="text-decoration:;">{{ 重点技术专利调查, 2 }}</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <!-- 公司调查块 -->
+      <g id="SvgjsG1133" transform="translate(218.33854166666674,329.16666666666686)" onmouseenter="vm.svgOnMouseenter(event,{type:'1',width:'325'})" onmouseleave="vm.svgOnMouseleave(event,{type:'1',width:'325'})"
+        onClick="vm.handleClick('公司调查')">
+        <path id="SvgjsPath1134" d="M 0 4Q 0 0 4 0L 346 0Q 350 0 350 4L 350 76Q 350 80 346 80L 4 80Q 0 80 0 76Z"
+          stroke="{{公司调查,#d45a6a}}" stroke-width="1.5" fill-opacity="1" fill="{{公司调查,#d45a6a}}"></path>
+        <g id="SvgjsG1135"><text id="SvgjsText1136" font-family="微软雅黑" text-anchor="middle" font-size="24px"
+            width="330px" 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="SvgjsTspan1137" dy="30" x="175">
+              <tspan id="SvgjsTspan1138" style="text-decoration:;">公司调查</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1139" transform="translate(227.0052083333337,345.00000000000034)">
+        <path id="SvgjsPath1140" 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="SvgjsG1141"><text id="SvgjsText1142" 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 id="SvgjsG1143" transform="translate(235.6718750000001,353.3333333333337)">
+        <path id="SvgjsPath1144"
+          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="SvgjsG1145"><text id="SvgjsText1146" 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="SvgjsG1147" transform="translate(518.0052083333333,348.3333333333335)">
+        <path id="SvgjsPath1148"
+          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="SvgjsG1149"><text id="SvgjsText1150" 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="SvgjsTspan1151" dy="22" x="21.5">
+              <tspan id="SvgjsTspan1152" style="text-decoration:;">{{ 公司调查, 2 }}</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1153">
+        <path id="SvgjsPath1154"
+          d="M596.671875 279.25L596.671875 303.8333333333334L821.671875 303.8333333333334L821.671875 326.46666666666687"
+          stroke="#d45a6a" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1155)"></path>
+      </g>
+      <g id="SvgjsG1157">
+        <path id="SvgjsPath1158" d="M596.671875 303.5L393.33854166666674 303.5L393.33854166666674 326.46666666666687"
+          stroke="#d45a6a" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1159)"></path>
+      </g>
+      <g id="SvgjsG1161" transform="translate(306.671875,275.16666666666686)">
+        <path id="SvgjsPath1162" d="M 0 0L 273 0L 273 28.333333333333144L 0 28.333333333333144Z" stroke="none"
+          fill="none"></path>
+        <g id="SvgjsG1163"><text id="SvgjsText1164" font-family="微软雅黑" text-anchor="middle" font-size="14px"
+            width="273px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
+            family="微软雅黑" size="14px" weight="400" font-style="" opacity="1" y="2.416666666666572"
+            transform="rotate(0)">
+            <tspan id="SvgjsTspan1165" dy="17" x="136.5">
+              <tspan id="SvgjsTspan1166" style="text-decoration:;fill: rgb(51, 35, 62);">了解重点关注企业/潜在竞争企业的专利布局</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1167" transform="translate(609.2552083333333,275.16666666666686)">
+        <path id="SvgjsPath1168" d="M 0 0L 273 0L 273 28.333333333333144L 0 28.333333333333144Z" stroke="none"
+          fill="none"></path>
+        <g id="SvgjsG1169"><text id="SvgjsText1170" font-family="微软雅黑" text-anchor="middle" font-size="14px"
+            width="273px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
+            family="微软雅黑" size="14px" weight="400" font-style="" opacity="1" y="2.416666666666572"
+            transform="rotate(0)">
+            <tspan id="SvgjsTspan1171" dy="17" x="136.5">
+              <tspan id="SvgjsTspan1172" style="text-decoration:;fill: rgb(51, 35, 62);">了解重点关注技术方向的专利布局情况</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1173">
+        <path id="SvgjsPath1174"
+          d="M569.0885416666667 369.16666666666686L607.5052083333334 369.16666666666686L607.5052083333334 369.16666666666686L643.971875 369.16666666666686"
+          stroke="#d45a6a" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1175)"></path>
+      </g>
+      <!-- 定期专利监控公报块 -->
+      <g id="SvgjsG1177" transform="translate(836.3385416666671,476.4999847412115)"  onClick="vm.handleClick('定期专利监控公报')">
+        <path id="SvgjsPath1178" d="M 0 4Q 0 0 4 0L 346 0Q 350 0 350 4L 350 76Q 350 80 346 80L 4 80Q 0 80 0 76Z"
+          stroke="{{定期专利监控公报,#3084e5}}" stroke-width="1.5" fill-opacity="1" fill="{{定期专利监控公报,#3084e5}}"></path>
+        <g id="SvgjsG1179"><text id="SvgjsText1180" font-family="微软雅黑" text-anchor="middle" font-size="24px"
+            width="330px" 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="SvgjsTspan1181" dy="30" x="175">
+              <tspan id="SvgjsTspan1182" style="text-decoration:;">定期专利监控公报</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <!-- 定期专利监控公报专题库数量 -->
+      <g id="SvgjsG1183" transform="translate(1138.0052083333335,495.6666514078782)">
+        <path id="SvgjsPath1184"
+          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="SvgjsG1185"><text id="SvgjsText1186" 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="SvgjsTspan1187" dy="22" x="21.5">
+              <tspan id="SvgjsTspan1188" style="text-decoration:;">{{ 定期专利监控公报, 2 }}</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <!-- 专利挖掘技术交底书块 -->
+      <g id="SvgjsG1189" transform="translate(405.17187499999955,476.4999847412115)" onmouseenter="vm.svgOnMouseenter(event,{type:'12',width:'325'})" onmouseleave="vm.svgOnMouseleave(event,{type:'12',width:'325'})"
+        onClick="vm.handleClick('专利挖掘/技术交底')">
+        <path id="SvgjsPath1190" d="M 0 4Q 0 0 4 0L 346 0Q 350 0 350 4L 350 76Q 350 80 346 80L 4 80Q 0 80 0 76Z"
+          stroke="{{专利挖掘/技术交底,#d45a6a}}" stroke-width="1.5" fill-opacity="1" fill="{{专利挖掘/技术交底,#d45a6a}}"></path>
+        <g id="SvgjsG1191"><text id="SvgjsText1192" font-family="微软雅黑" text-anchor="middle" font-size="24px"
+            width="330px" fill="#ffffff" font-weight="700" align="middle" lineHeight="125%" anchor="middle"
+            family="微软雅黑" size="24px" weight="700" font-style="" opacity="1" y="4" transform="rotate(0)">
+            <tspan id="SvgjsTspan1193" dy="30" x="175">
+              <tspan id="SvgjsTspan1194" style="text-decoration:;">专利挖掘</tspan>
+            </tspan>
+            <tspan id="SvgjsTspan1195" dy="30" x="175">
+              <tspan id="SvgjsTspan1196" style="text-decoration:;">技术交底书</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1197" transform="translate(413.8385416666665,492.333318074545)">
+        <path id="SvgjsPath1198" 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="SvgjsG1199"><text id="SvgjsText1200" 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 id="SvgjsG1201" transform="translate(422.5052083333329,500.66665140787836)">
+        <path id="SvgjsPath1202"
+          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="SvgjsG1203"><text id="SvgjsText1204" 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="SvgjsG1205" transform="translate(706.1718749999998,495.6666514078782)">
+        <path id="SvgjsPath1206"
+          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="SvgjsG1207"><text id="SvgjsText1208" 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="SvgjsTspan1209" dy="22" x="21.5">
+              <tspan id="SvgjsTspan1210" style="text-decoration:;">{{ 专利挖掘, 2 }}</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1211">
+        <path id="SvgjsPath1212"
+          d="M393.33854166666674 409.91666666666686L393.33854166666674 426.8333257039392L580.1718749999995 426.8333257039392L580.1718749999995 473.7999847412115"
+          stroke="#d45a6a" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1213)"></path>
+      </g>
+      <g id="SvgjsG1215">
+        <path id="SvgjsPath1216"
+          d="M821.671875 409.91666666666686L821.671875 426.8333257039392L580.1718749999995 426.8333257039392L580.1718749999995 473.7999847412115"
+          stroke="#d45a6a" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1217)"></path>
+      </g>
+      <g id="SvgjsG1219">
+        <path id="SvgjsPath1220" d="M580.671875 454.5L1011.338541666667 454.5L1011.338541666667 473.7999847412115"
+          stroke="#d45a6a" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1221)"></path>
+      </g>
+      <g id="SvgjsG1223" transform="translate(423.83854166666697,436.4999847412115)">
+        <path id="SvgjsPath1224" d="M 0 0L 144.49999999999977 0L 144.49999999999977 40L 0 40Z" stroke="none"
+          fill="none"></path>
+        <g id="SvgjsG1225"><text id="SvgjsText1226" font-family="微软雅黑" text-anchor="middle" font-size="14px"
+            width="145px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
+            family="微软雅黑" size="14px" weight="400" font-style="" opacity="1" y="-0.25" transform="rotate(0)">
+            <tspan id="SvgjsTspan1227" dy="17" x="72.5">
+              <tspan id="SvgjsTspan1228" style="text-decoration:;fill: rgb(51, 35, 62);">做专利挖掘,找可布局</tspan>
+            </tspan>
+            <tspan id="SvgjsTspan1229" dy="17" x="72.5">
+              <tspan id="SvgjsTspan1230" style="text-decoration:;fill: rgb(51, 35, 62);">专利的技术方向</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1231" transform="translate(601.171875000001,422.8333257039392)">
+        <path id="SvgjsPath1232" d="M 0 0L 235.16666666666606 0L 235.16666666666606 40L 0 40Z" stroke="none"
+          fill="none"></path>
+        <g id="SvgjsG1233"><text id="SvgjsText1234" font-family="微软雅黑" text-anchor="middle" font-size="14px"
+            width="236px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
+            family="微软雅黑" size="14px" weight="400" font-style="" opacity="1" y="8.25" transform="rotate(0)">
+            <tspan id="SvgjsTspan1235" dy="17" x="118">
+              <tspan id="SvgjsTspan1236" style="text-decoration:;fill: rgb(51, 35, 62);">定期了解关注企业/技术的发展情况</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <!-- 技术查新块 -->
+      <g id="SvgjsG1237" transform="translate(405.17187499999955,606.333302815756)" onClick="vm.handleClick('技术查新')">
+        <path id="SvgjsPath1238" d="M 0 4Q 0 0 4 0L 346 0Q 350 0 350 4L 350 76Q 350 80 346 80L 4 80Q 0 80 0 76Z"
+          stroke="{{技术查新,#d45a6a}}" stroke-width="1.5" fill-opacity="1" fill="{{技术查新,#d45a6a}}"></path>
+        <g id="SvgjsG1239"><text id="SvgjsText1240" font-family="微软雅黑" text-anchor="middle" font-size="24px"
+            width="330px" 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="SvgjsTspan1241" dy="30" x="175">
+              <tspan id="SvgjsTspan1242" style="text-decoration:;">技术查新</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1243" transform="translate(413.8385416666665,622.1666361490895)">
+        <path id="SvgjsPath1244" 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="SvgjsG1245"><text id="SvgjsText1246" 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 id="SvgjsG1247" transform="translate(422.5052083333329,630.499969482423)">
+        <path id="SvgjsPath1248"
+          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="SvgjsG1249"><text id="SvgjsText1250" 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="SvgjsG1251" transform="translate(706.1718749999998,623.8333028157563)">
+        <path id="SvgjsPath1252"
+          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="SvgjsG1253"><text id="SvgjsText1254" 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="SvgjsTspan1255" dy="22" x="21.5">
+              <tspan id="SvgjsTspan1256" style="text-decoration:;">{{ 技术查新, 2 }}</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1257">
+        <path id="SvgjsPath1258"
+          d="M580.1718749999995 557.2499847412115L580.1718749999995 581.4166437784838L580.1718749999995 581.4166437784838L580.1718749999995 603.633302815756"
+          stroke="#d45a6a" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1259)"></path>
+      </g>
+      <!-- 专利布局/专利申请块 -->
+      <g id="SvgjsG1261" transform="translate(836.3385416666671,606.333302815756)" onClick="vm.handleClick('专利布局/专利申请')">
+        <path id="SvgjsPath1262" d="M 0 4Q 0 0 4 0L 346 0Q 350 0 350 4L 350 76Q 350 80 346 80L 4 80Q 0 80 0 76Z"
+          stroke="{{专利布局/专利申请,#d45a6a}}" stroke-width="1.5" fill-opacity="1" fill="{{专利布局/专利申请,#d45a6a}}"></path>
+        <g id="SvgjsG1263"><text id="SvgjsText1264" font-family="微软雅黑" text-anchor="middle" font-size="24px"
+            width="330px" 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="SvgjsTspan1265" dy="30" x="175">
+              <tspan id="SvgjsTspan1266" style="text-decoration:;">专利布局/专利申请</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1267" transform="translate(845.005208333334,622.1666361490894)">
+        <path id="SvgjsPath1268" 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="SvgjsG1269"><text id="SvgjsText1270" 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 id="SvgjsG1271" transform="translate(853.6718750000005,630.4999694824229)">
+        <path id="SvgjsPath1272"
+          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="SvgjsG1273"><text id="SvgjsText1274" 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="SvgjsG1275" transform="translate(1137.3385416666674,625.4999694824227)">
+        <path id="SvgjsPath1276"
+          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="SvgjsG1277"><text id="SvgjsText1278" 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="SvgjsTspan1279" dy="22" x="21.5">
+              <tspan id="SvgjsTspan1280" style="text-decoration:;">{{ 专利布局/专利申请, 2 }}</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1281">
+        <path id="SvgjsPath1282"
+          d="M1011.338541666667 557.2499847412115L1011.338541666667 581.4166437784838L1011.338541666667 581.4166437784838L1011.338541666667 603.633302815756"
+          stroke="#d45a6a" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1283)"></path>
+      </g>
+      <g id="SvgjsG1285" transform="translate(450.8385416666663,556.4999847412115)">
+        <path id="SvgjsPath1286" d="M 0 0L 116.1666666666664 0L 116.1666666666664 40L 0 40Z" stroke="none" fill="none">
+        </path>
+        <g id="SvgjsG1287"><text id="SvgjsText1288" font-family="微软雅黑" text-anchor="middle" font-size="14px"
+            width="117px" fill="#323232" font-weight="400" align="middle" lineHeight="125%" anchor="middle"
+            family="微软雅黑" size="14px" weight="400" font-style="" opacity="1" y="-0.25" transform="rotate(0)">
+            <tspan id="SvgjsTspan1289" dy="17" x="58.5">
+              <tspan id="SvgjsTspan1290" style="text-decoration:;fill: rgb(51, 35, 62);">对技术方向做出新</tspan>
+            </tspan>
+            <tspan id="SvgjsTspan1291" dy="17" x="58.5">
+              <tspan id="SvgjsTspan1292" style="text-decoration:;fill: rgb(51, 35, 62);">颖性判别</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <!-- 布局优化策略专题库数量 -->
+      <g id="SvgjsG1293" transform="translate(706.1718749999998,755.3332875569672)">
+        <path id="SvgjsPath1294"
+          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="SvgjsG1295"><text id="SvgjsText1296" 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="SvgjsTspan1297" dy="22" x="21.5">
+              <tspan id="SvgjsTspan1298" style="text-decoration:;">{{ 布局优化策略,2 }}</tspan>
+            </tspan>
+          </text></g>
+      </g>
+      <g id="SvgjsG1299">
+        <path id="SvgjsPath1300"
+          d="M580.1718749999995 687.083302815756L580.1718749999995 711.2499618530283L580.1718749999995 711.2499618530283L580.1718749999995 733.4666208903005"
+          stroke="#d45a6a" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1301)"></path>
+      </g>
+      <g id="SvgjsG1303">
+        <path id="SvgjsPath1304"
+          d="M755.9218749999995 776.1666208903006L1011.338541666667 776.1666208903006L1011.338541666667 689.0333028157561"
+          stroke="#d45a6a" stroke-width="1.5" fill="none" marker-end="url(#SvgjsMarker1305)"></path>
+      </g>
+    </svg>

+ 2 - 1
src/App.vue

@@ -144,8 +144,9 @@ export default {
   // border: 1px solid rgba(124,124,124) !important;
   height: 100%;
   width: 100%;
+  padding-bottom:10px;
   .el-table__body-wrapper{
-    max-height: 100%;
+    max-height: calc(100% - 50px);
     overflow-y: auto;
   }
 }

+ 4 - 1
src/main.js

@@ -42,6 +42,8 @@ Vue.use(directive)
 import Cookies from "js-cookie";
 Vue.prototype.$cookie = Cookies
 
+import vmFunction from './utils/window'
+Vue.use(vmFunction)
 
 Vue.config.productionTip = false
 Vue.prototype.$constants = constants//公用数据
@@ -67,10 +69,11 @@ import i18n from '@/components/language'
   i18n: (key, value) => i18n.t(key, value)// 在注册Element时设置i18n的处理方法
 })
 
-new Vue({
+const vm = new Vue({
   el: '#app',
   router,
   store,
   i18n,
   render: (h) => h(App)
 }).$mount('#app')
+window.vm = vm 

+ 35 - 32
src/router/index.js

@@ -40,19 +40,20 @@ const routes = [
         component: () => import('@/views/home/index.vue'),
       },
       //专题库
-      // {
-      //   path: '/workspace',
-      //   name:'Workspace',
-      //   component:{render(c){return c('router-view')}},
-      //   redirect:'/workspace',
-      //   children:[
-      //     {
-      //       path:'/',
-      //       meta: {
-      //         title: '专题库',
-      //       },
-      //       component: () => import('@/views/workspace/index.vue'),
-      //     },
+      {
+        path: '/project',
+        name:'Project',
+        component:{render(c){return c('router-view')}},
+        redirect:'/project',
+        children:[
+          {
+            path:'/',
+            meta: {
+              title: '专题库',
+              sign:'project'
+            },
+            component: () => import('@/views/project/index.vue'),
+          },
       //     {
       //       path: 'folder',
       //       meta: {
@@ -72,8 +73,8 @@ const routes = [
       //       },
       //       component: () => import('@/views/workspace/folder/articles')
       //     },
-      //   ],
-      // },
+        ],
+      },
       //企业专利数据库
       // {
       //   path: '/enterprisePatentDB',
@@ -207,7 +208,7 @@ const routes = [
             path:'/',
             meta: {
               title: '事件',
-              name:Event,
+              sign:'Event',
             },
             component: () => import('@/views/event/index.vue'),
           }
@@ -395,22 +396,24 @@ const routes = [
       //   ],
       // },
       //场景可视化
-      // {
-      //   path: '/visual',
-      //   meta: {
-      //     // keepAlive: true,
-      //     title: '场景可视化',
-      //   },
-      //   component: () => import('@/views/visual')
-      // },
-      // {
-      //   path: '/visual/:title',
-      //   meta: {
-      //     // keepAlive: false,
-      //     title: '可视化平台',
-      //   },
-      //   component: () => import('@/views/visual/title/index.vue')
-      // },
+      {
+        path: '/visual',
+        name:'visual',
+        meta: {
+          title: '场景可视化',
+          sign:'visual',
+        },
+        component: () => import('@/views/visual')
+      },
+      {
+        path: '/visual/:title',
+        name:'flowPath',
+        meta: {
+          sign:'flowPath',
+          title: '可视化平台',
+        },
+        component: () => import('@/views/visual/title/index.vue')
+      },
       //图表分析
       // {
       //   path: "/analyse",

+ 2 - 3
src/utils/model/svg/Popover.vue

@@ -168,7 +168,7 @@ export default {
       popover.$el.style.position = 'absolute'
 
       if (myPopover == 'myPopover2') {
-        top1 = -150
+        top1 = -50
         if (e.currentTarget.getBoundingClientRect().top < Math.abs(top1)) {
           top1 =-e.currentTarget.getBoundingClientRect().top 
         }
@@ -189,9 +189,8 @@ export default {
         }
       }
 
-
       popover.$el.style.left = left + _left + 'px'
-      popover.$el.style.top = top1 + top2 + _top3 + 10 + 'px'
+      popover.$el.style.top = top1 + top2 + _top3 - 50 + 'px'
       // 显示popover窗口
       popover.doShow()
     },

+ 21 - 13
src/utils/model/svg/customSvg.vue

@@ -4,7 +4,7 @@
     <!-- 用来存放svg -->
     <div class="svgDiv" v-html="html">
     </div>
-    <myPopover :QuestionTotal="QuestionTotal"></myPopover>
+    <myPopover :QuestionTotal="QuestionTotal" @questionId="getQuestion"></myPopover>
   </div>
 </template>
 
@@ -91,25 +91,33 @@ export default {
         }
       })
     },
+    //获取svg内容
     getHtml() {
         var data = this.fileContent
         let reg = new RegExp("\{\{(.+?)\}\}", "g");
         let a = data.match(reg);
         let reg1 = new RegExp("(?<=\{\{)(.*)?(?=\}\})",'g')
-        a.forEach(item => {
-          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'
-          }
-          data = data.replace(item, value);
-        })
+        if(a){
+          a.forEach(item => {
+            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'
+            }
+            data = data.replace(item, value);
+          })
+        }
+        
         this.html = data;
     },
+    //查看单个事件流程图
+    getQuestion(val){
+      console.log(val)
+    }
   },
 }
 </script>

+ 1 - 21
src/utils/model/svg/question.vue

@@ -12,16 +12,6 @@
         <el-table-column label="#" type="index" align="center" width="55">
           <template slot-scope="scope">
             <div>
-              <!-- <el-checkbox-group
-                v-model="checkList"
-                style="display: inline-block"
-              >
-                <el-checkbox
-                  :label="scope.row.id"
-                >
-                  <span>{{ scope.$index + 1 + (queryParams.current - 1) * queryParams.size }}</span>
-                </el-checkbox>
-              </el-checkbox-group> -->
               <span>{{ scope.$index + 1 + (queryParams.current - 1) * queryParams.size }}</span>
             </div>
           </template>
@@ -68,17 +58,8 @@
           sortable="custom"
           show-overflow-tooltip
         ></el-table-column>
-        <!-- <el-table-column label="创建人" prop="createPersonName" align="center" width="200px" show-overflow-tooltip></el-table-column>
-        <el-table-column label="创建时间" prop="createTime" align="center" width="200px" sortable="custom" show-overflow-tooltip></el-table-column> -->
       </el-table>
     </div>
-    <!-- <div style="margin-top:20px;display:flex; justify-content: flex-end;">
-        <el-button type="primary" size="small" style="width:150px" @click="submit">确定</el-button>
-    </div> -->
-    <!-- <div class="pagination">
-        <el-pagination :current-page.sync="queryParams.current" :page-size="queryParams.size" :total="total"
-            @current-change="handleCurrentChange" layout="total, prev, pager, next, jumper" background></el-pagination>
-        </div> -->
   </div>
 </template>
 <script>
@@ -90,7 +71,7 @@ export default {
       checkList: [],
       total: 1,
       queryParams: {
-        current: 1,
+        current: 0,
         size: 10,
       },
       loading: false,
@@ -126,7 +107,6 @@ export default {
       this.getList();
     },
     getList() {
-      // console.log(this.type)
       if(!this.type){
         return false
       }

+ 43 - 0
src/utils/window.js

@@ -0,0 +1,43 @@
+exports.install = function (Vue) {
+
+  Vue.prototype.handleClick = function (val) {
+    const component = findComponentDownward(this, 'myCustomSvg')
+    component.handleClick(val)
+  }
+  Vue.prototype.getQuestionTotal = function (val) {
+    const component = findComponentDownward(this, 'myCustomSvg')
+    component.getQuestionTotal(val)
+  }
+  Vue.prototype.svgOnMouseenter = function (e, val) {
+    const component = findComponentDownward(this, 'myPopover')
+    component.svgOnMouseenter(e, val)
+  }
+  Vue.prototype.svgOnMouseleave = function (e, val) {
+    const component = findComponentDownward(this, 'myPopover')
+    component.svgOnMouseleave(e, val)
+  }
+  Vue.prototype.svgOnClick = function (e, val) {
+    const component = findComponentDownward(this, 'myPopover')
+    component.svgOnClick(e, val)
+  }
+
+}
+
+function findComponentDownward(context, componentName) {
+  const childrens = context.$children
+  let children = null
+
+  if (childrens.length) {
+    for (const child of childrens) {
+      const name = child.$options.name
+      if (name === componentName) {
+        children = child
+        break
+      } else {
+        children = findComponentDownward(child, componentName)
+        if (children) break
+      }
+    }
+  }
+  return children
+}

+ 267 - 0
src/views/client/index.vue

@@ -0,0 +1,267 @@
+<template>
+  <div class="height_100">
+    <el-container>
+      <el-header>
+        <div>
+          <mySearch style="width: 500px" :SearchFields="searchFiled"  @search="search" :searchValue="searchOption"></mySearch>
+        </div>
+        <div>
+            <el-button type="primary" size="small" @click="handleAdd()"> 新增 </el-button>
+        </div>
+      </el-header>
+      <el-main>
+        <div  class="height_100">
+           <el-table v-loading="loading" :data="tableData" border header-row-class-name="custom-table-header">
+            <el-table-column type="index" label="#" width="55" align="center">
+                <template slot-scope="scope">
+                <span>{{ (scope.$index + 1) + ((queryParams.current - 1) * queryParams.size) }}</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="name" label="客户名称" align="center" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="personnelName" label="客户对接人" align="center" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="remark" label="备注" align="center" show-overflow-tooltip></el-table-column>
+            <el-table-column label="操作" align="center" width="150">
+                <template slot-scope="scope">
+                <el-dropdown split-button type="primary" size="small" @click="handleEdit(scope.row)">
+                <p>编辑</p> 
+                    <el-dropdown-menu slot="dropdown" class="text-align_center">
+                    <el-dropdown-item class="color-red" @click.native="handleDelete(scope.row)" divided>删除</el-dropdown-item>
+                    </el-dropdown-menu>
+                </el-dropdown>
+                </template>
+            </el-table-column>
+        </el-table> 
+        </div>
+        
+      </el-main>
+      <el-footer>
+        <div class="pagination">
+            <el-pagination :current-page.sync="queryParams.current" :page-size="queryParams.size" :total="total" @current-change="handleCurrentChange" layout="total, prev, pager, next, jumper" background></el-pagination>
+        </div>
+      </el-footer>
+    </el-container>
+
+    <el-dialog :title="title" :visible.sync="visible" width="500px" :before-close="close" append-to-body>
+      <el-form v-if="visible" :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px" label-position="left">
+        <el-form-item label="客户名称" prop="name">
+          <el-autocomplete
+              style="width:100%"
+                v-model="ruleForm.name"
+                :fetch-suggestions="querySearch"
+                @input="input"
+                placeholder="请输入客户名称"
+                :trigger-on-focus="false"
+                @select="handleChange"
+              >
+              </el-autocomplete>
+        </el-form-item>
+        <el-form-item label="对接人" prop="person">
+              <el-select style="width:100%" v-model="ruleForm.personnelId" filterable placeholder="请选择">
+                <el-option
+                  v-for="item in personnelList"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id">
+                </el-option>
+              </el-select>
+            </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="ruleForm.remark" placeholder="请输入备注" type="textarea"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="close">取 消</el-button>
+        <el-button type="primary" @click="submit" :loading="btnLoading">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {
+    name:''
+  },
+  data() {
+    return {
+        //弹窗显示标识
+        visible: false,
+        //加载
+        loading: false,
+        //按钮加载
+        btnLoading: false,
+        //人员列表
+        personnelList:[],
+        //总客户数
+        total: 0,
+        //客户列表数据
+        tableData: [],
+        //弹窗标题
+        title: '',
+        //分页信息
+        queryParams: {
+            size: 10,
+            current: 1,
+        },
+        //表单信息
+        ruleForm: {},
+        //表单规则
+        rules: {
+            name: [{ required: true, message: '请输入客户名称', trigger: 'blur' },],
+        },
+        //租户列表
+        tenantList:[],
+        //检索字段
+        searchFiled:[
+            {
+                label:'客户名称名称',
+                value:'name',
+                type:1,
+                placeholder:'请输入客户名称'
+            }
+        ],
+        //检索条件
+        searchOption:{
+            name:this.name
+        },
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {
+    this.getList()
+    //获取客户信息(建议改成远程搜索,或者懒加载)
+    this.getPersonnelList()
+    //去除获取所有租户的方法以及相关信息
+    // this.getAllTenantList()
+  },
+  methods: {
+    //检索
+    search(){
+
+    },
+    //改为通过接口获取数据
+    querySearch(queryString, cb) {
+        var tenantList = this.tenantList;
+        var results = (queryString ? tenantList.filter(this.createFilter(queryString)) : tenantList).map(item=>{
+          return {
+            value:item.name,
+            name:item.name,
+            id:item.id
+          }
+        });
+        // 调用 callback 返回建议列表的数据
+        cb(results);
+      },
+      createFilter(queryString) {
+        return (tenantList) => {
+          return (tenantList.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
+        };
+      },
+      //获取所有租户信息
+      getAllTenantList(){
+        this.$api.getAllTenantList().then(response=>{
+          this.tenantList = response.data
+        })
+      },
+        //输入事件
+        input() {
+            this.$set(this.ruleForm, 'tenantId', null)
+        },
+        //切换选择客户名称
+        handleChange(row) {
+            this.$set(this.ruleForm, 'tenantId', row.id)
+            this.$set(this.ruleForm, 'name', row.name)
+        },
+      //打开新增客户弹窗
+        handleAdd() {
+            this.title = '新增客户'
+            this.visible = true
+            this.ruleForm = {}
+        },
+        //打开编辑客户弹窗
+        handleEdit(row) {
+            this.title = '编辑客户'
+            this.visible = true
+            this.ruleForm = { ...row }
+        },
+        //关闭弹窗
+        close() {
+            this.visible = false
+        },
+        //获取所有人员信息(最好使用远程搜索)
+        getPersonnelList(){
+            this.$api.getPermissionPersonnelList().then((response)=>{
+                this.personnelList=response.data
+            })
+        },
+        //获取客户信息
+        getList() {
+            this.loading = true
+            this.$api.getAdminClientList(this.queryParams).then(response => {
+                this.tableData = response.data.records
+                this.total = response.data.total
+                this.loading = false
+            }).catch(error => {
+                this.loading = false
+            })
+        },
+        //分页
+        handleCurrentChange(val) {
+            this.queryParams.current = val;
+            this.getList();
+        },
+        //提交信息
+        submit() {
+            this.$refs.ruleForm.validate((valid) => {
+                if (valid) {
+                this.btnLoading = true
+                if (this.ruleForm.id) {
+                    this.$api.editAdminClient(this.ruleForm).then(response => {
+                    this.$message.success('编辑成功')
+                    this.btnLoading = false
+                    this.getList()
+                    this.close()
+                    }).catch(error => {
+                    this.btnLoading = false
+                    })
+                } else {
+                    this.$api.addAdminClient(this.ruleForm).then(response => {
+                    this.$message.success('新增成功')
+                    this.btnLoading = false
+                    this.getList()
+                    this.close()
+                    }).catch(error => {
+                    this.btnLoading = false
+                    })
+                }
+                } else {
+                // console.log('error submit!!');
+                return false;
+                }
+            });
+        },
+        //删除客户
+        handleDelete(row) {
+            this.$confirm('确认删除本条数据吗?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                this.loading = true
+                this.$api.deleteAdminClient({ id: row.id }).then(response => {
+                this.$message.success('删除成功')
+                this.loading = false
+                this.getList()
+                }).catch(error => {
+                this.loading = false
+                })
+            })
+        }
+  }
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 5 - 2
src/views/event/components/index.vue

@@ -78,7 +78,10 @@ export default {
     mergeTable,
     addEvent
   },
-  props: {},
+  props: {
+    eventName:'',
+    applicationScenario:null
+  },
   data() {
     return {
         //检索字段
@@ -121,7 +124,7 @@ export default {
         //加载中
         loading:false,
         //事件的数据集合
-        tableData:[],
+        tableData:[{}],
         //分页信息
         queryParams:{
             current:1,

+ 5 - 2
src/views/layout/components/UserBar.vue

@@ -93,7 +93,10 @@
       </div>
     </el-dialog>
     <el-dialog width="1000px" :title="clientTitle" :visible.sync="clientVisible" :before-close="close">
+      <div style="height:600px">
         <ClientManage></ClientManage>
+      </div>
+        
     </el-dialog>
     <Set-Style ref="setStyle"></Set-Style>
   </div>
@@ -102,7 +105,7 @@
 <script>
 import { mapGetters } from "vuex";
 import SetStyle from "./setStyle.vue";
-import ClientManage from './client/index.vue'
+import ClientManage from '@/views/client/index.vue'
 export default {
   components:{
     SetStyle,
@@ -152,7 +155,7 @@ export default {
         {
           value:'1',
           label:'专题库',
-          path:'/workspace',
+          path:'/project',
         },
         {
           value:'4',

+ 0 - 216
src/views/layout/components/client/index.vue

@@ -1,216 +0,0 @@
-<template>
-  <div class="admin-client">
-    <el-form :inline="true">
-      <el-form-item label="用户名">
-        <el-input v-model="queryParams.name" size="small" placeholder="请输入用户名"></el-input>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="" size="small" @click="getList">查询</el-button>
-        <el-button type="primary" size="small" @click="handleAdd()">新增</el-button>
-      </el-form-item>
-    </el-form>
-    <el-table v-loading="loading" :data="tableData" border header-row-class-name="custom-table-header">
-      <el-table-column type="index" label="#" width="55" align="center">
-        <template slot-scope="scope">
-          <span>{{ (scope.$index + 1) + ((queryParams.current - 1) * queryParams.size) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column prop="name" label="客户名称" align="center" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="personnelName" label="客户对接人" align="center" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="remark" label="备注" align="center" show-overflow-tooltip></el-table-column>
-      <el-table-column label="操作" align="center" width="150">
-        <template slot-scope="scope">
-          <el-dropdown split-button type="primary" size="small" @click="handleEdit(scope.row)">
-           <p>编辑</p> 
-            <el-dropdown-menu slot="dropdown" class="text-align_center">
-              <el-dropdown-item class="color-red" @click.native="handleDelete(scope.row)" divided>删除</el-dropdown-item>
-            </el-dropdown-menu>
-          </el-dropdown>
-        </template>
-      </el-table-column>
-    </el-table>
-    <div class="pagination">
-      <el-pagination :current-page.sync="queryParams.current" :page-size="queryParams.size" :total="total" @current-change="handleCurrentChange" layout="total, prev, pager, next, jumper" background></el-pagination>
-    </div>
-    <el-dialog :title="title" :visible.sync="visible" width="500px" :before-close="close" append-to-body>
-      <el-form v-if="visible" :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px" label-position="left">
-        <el-form-item label="客户名称" prop="name">
-          <el-autocomplete
-              style="width:100%"
-                v-model="ruleForm.name"
-                :fetch-suggestions="querySearch"
-                @input="input"
-                placeholder="请输入客户名称"
-                :trigger-on-focus="false"
-                @select="handleChange"
-              >
-              </el-autocomplete>
-        </el-form-item>
-        <el-form-item label="对接人" prop="person">
-              <el-select style="width:100%" v-model="ruleForm.personnelId" filterable placeholder="请选择">
-                <el-option
-                  v-for="item in personnelList"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id">
-                </el-option>
-              </el-select>
-            </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="ruleForm.remark" placeholder="请输入备注" type="textarea"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="close">取 消</el-button>
-        <el-button type="primary" @click="submit" :loading="btnLoading">确 定</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-export default {
-  components: {
-  },
-  data() {
-    return {
-      visible: false,
-      loading: false,
-      btnLoading: false,
-      personnelList:[],
-      total: 0,
-      tableData: [],
-      title: '',
-      queryParams: {
-        size: 10,
-        current: 1,
-        name: ''
-      },
-      ruleForm: {},
-      rules: {
-        name: [{ required: true, message: '请输入客户名称', trigger: 'blur' },],
-      },
-      tenantList:[],
-    }
-  },
-  mounted() {
-    this.getList()
-    this.getPersonnelList()
-    this.getAllTenantList()
-  },
-  methods: {
-    querySearch(queryString, cb) {
-        var tenantList = this.tenantList;
-        var results = (queryString ? tenantList.filter(this.createFilter(queryString)) : tenantList).map(item=>{
-          return {
-            value:item.name,
-            name:item.name,
-            id:item.id
-          }
-        });
-        // 调用 callback 返回建议列表的数据
-        cb(results);
-      },
-      createFilter(queryString) {
-        return (tenantList) => {
-          return (tenantList.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
-        };
-      },
-      getAllTenantList(){
-        this.$api.getAllTenantList().then(response=>{
-          this.tenantList = response.data
-        })
-      },
-      input() {
-        this.$set(this.ruleForm, 'tenantId', null)
-      },
-      handleChange(row) {
-        this.$set(this.ruleForm, 'tenantId', row.id)
-        this.$set(this.ruleForm, 'name', row.name)
-      },
-    handleAdd() {
-      this.title = '新增客户'
-      this.visible = true
-      this.ruleForm = {}
-    },
-    handleEdit(row) {
-      this.title = '编辑客户'
-      this.visible = true
-      this.ruleForm = { ...row }
-    },
-    close() {
-      this.visible = false
-    },
-    getPersonnelList(){
-      this.$api.getPermissionPersonnelList().then((response)=>{
-        this.personnelList=response.data
-      })
-    },
-    getList() {
-      this.loading = true
-      this.$api.getAdminClientList(this.queryParams).then(response => {
-        this.tableData = response.data.records
-        this.total = response.data.total
-        this.loading = false
-      }).catch(error => {
-        this.loading = false
-      })
-    },
-    handleCurrentChange(val) {
-      this.queryParams.current = val;
-      this.getList();
-    },
-    submit() {
-      this.$refs.ruleForm.validate((valid) => {
-        if (valid) {
-          this.btnLoading = true
-          if (this.ruleForm.id) {
-            this.$api.editAdminClient(this.ruleForm).then(response => {
-              this.$message.success('编辑成功')
-              this.btnLoading = false
-              this.getList()
-              this.close()
-            }).catch(error => {
-              this.btnLoading = false
-            })
-          } else {
-            this.$api.addAdminClient(this.ruleForm).then(response => {
-              this.$message.success('新增成功')
-              this.btnLoading = false
-              this.getList()
-              this.close()
-            }).catch(error => {
-              this.btnLoading = false
-            })
-          }
-        } else {
-          // console.log('error submit!!');
-          return false;
-        }
-      });
-    },
-    handleDelete(row) {
-      this.$confirm('确认删除本条数据吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        this.loading = true
-        this.$api.deleteAdminClient({ id: row.id }).then(response => {
-          this.$message.success('删除成功')
-          this.loading = false
-          this.getList()
-        }).catch(error => {
-          this.loading = false
-        })
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.admin-client {
-
-}
-</style>

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

@@ -201,7 +201,7 @@ export default {
     height: calc(100%);
     background: white;
     #view {
-      height: calc(100% - 0px)
+      height: calc(100% - 10px)
     }
   }
 }

+ 129 - 0
src/views/project/components/TotalChart.vue

@@ -0,0 +1,129 @@
+<template>
+  <div class="project-total-chart" v-if="show">
+    <div id="total-scenario" class="chart-content" :style="{ width }"></div>
+    <div id="total-type" class="chart-content" :style="{ width }"></div>
+    <div id="total-client" class="chart-content" :style="{ width }"></div>
+    <div id="total-create" class="chart-content" :style="{ width }"></div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      chartData: {},
+      show: false,
+      fullWidth: document.documentElement.clientWidth,
+      width: 0,
+    };
+  },
+  created() {
+    window.addEventListener("resize", this.handleResize);
+  },
+  watch: {
+    fullWidth() {
+      this.refresh();
+    },
+  },
+  mounted() {},
+  methods: {
+    handleResize(event) {
+      this.fullWidth = document.documentElement.clientWidth;
+    },
+    refresh() {
+      this.show = true;
+      this.width = this.fullWidth / 4 - 10 + "px";
+      this.$nextTick(() => {
+        this.initChart1(this.chartData.scenario, "scenario", "应用场景");
+        this.initChart1(this.chartData.type, "type", "调查类型");
+        this.initChart1(this.chartData.client, "client", "委托方");
+        this.initChart1(this.chartData.create, "create", "创建月份");
+      });
+    },
+    initData(data) {
+      this.chartData = data;
+      this.refresh();
+    },
+    initChart(id) {
+      const chartDom = document.getElementById(`total-${id}`);
+      return this.$echarts.init(chartDom);
+    },
+    initChart1(data, key, name) {
+      this.initChart(key).setOption(
+        key === "create"
+          ? {
+              xAxis: {
+                type: "category",
+                data: Object.keys(data).map((key) => key),
+              },
+              yAxis: {
+                type: "value",
+              },
+              title: {
+                text: name,
+                bottom: 0,
+                left: "center",
+                textStyle: {
+                  fontSize: 14,
+                  fontWeight: 100,
+                  fontFamily: "宋体",
+                },
+              },
+              series: [
+                {
+                  data: Object.keys(data).map((key) => data[key]),
+                  type: "line",
+                },
+              ],
+            }
+          : {
+              tooltip: {
+                trigger: "item",
+              },
+              title: {
+                text: name,
+                bottom: 0,
+                left: "center",
+                textStyle: {
+                  fontSize: 14,
+                  fontWeight: 100,
+                  fontFamily: "宋体",
+                },
+              },
+              series: [
+                {
+                  name: "",
+                  label: {
+                    show: false,
+                    position: "center",
+                  },
+
+                  type: "pie",
+                  radius: key === "client" ? "70%" : ["40%", "70%"],
+                  data: Object.keys(data).map((key) => {
+                    return { value: data[key], name: key };
+                  }),
+                },
+              ],
+            }
+      );
+    },
+  },
+};
+</script>
+
+<style lang="scss">
+.project-total-chart {
+  text-align: center;
+  display: flex;
+  flex-direction: row;
+  justify-content: space-around;
+  .chart-content {
+    display: inline-block;
+    height: 250px;
+  }
+  .name {
+    display: inline-block;
+  }
+}
+</style>

+ 39 - 0
src/views/project/components/drawer/form.vue

@@ -0,0 +1,39 @@
+<template>
+  <div>
+    <el-drawer class="custom-drawer-form" :title="title" size="800px" append-to-body :visible.sync="drawer" direction="rtl" :before-close="close" destroy-on-close>
+        <el-container>
+            <el-main></el-main>
+            <el-footer></el-footer>
+        </el-container>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+        title:'',
+        drawer:false,
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {
+    //打开弹窗
+    open(){
+        this.drawer = true
+    },
+    //关闭弹窗
+    close(){
+        this.drawer = false
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

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

@@ -0,0 +1,33 @@
+import { downLoad2, renderSize } from '@/utils'
+export const workspaceOptions = {
+  props: {
+    tableData: {//数据
+        type: Array,
+        default: () => {
+          return [{ name: '123', eventNumber: 2, projectNumber: 3, projectNumber1: [{ name: '场景一' }, {name:'场景二'}]},]
+        }
+      },
+      queryParams: {//分页信息
+        type: Object,
+        default: () => {
+          return {
+            size: 10,
+            current: 1,
+          }
+        }
+      },
+  },
+  methods: {
+    renderSize,
+    handleClick(row) {
+      const router = this.$router.resolve({
+        path: '/workspace/folder',
+        query: {
+          id: row.id,
+        }
+      })
+      this.$s.setSession('projectName',row.name)
+      window.open(router.href, '_blank');
+    }
+  }
+}

+ 65 - 0
src/views/project/components/view/MergeTable.vue

@@ -0,0 +1,65 @@
+<template>
+  <div class="workspace-merge-table">
+    <el-table :data="tableData" header-row-class-name="custom-table-header" @expand-change="expandChange" >
+      <el-table-column type="expand">
+        <template slot-scope="props">
+          <Table :data="showData[props.row.index]" :params="params" :field="field" @option="handleOption" />
+        </template>
+      </el-table-column>
+      <el-table-column v-for="column in columnList" :label="column.label" :prop="column.prop" show-overflow-tooltip></el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+import { workspaceOptions } from "./mixins";
+import { formatDate, formatTableDate } from "@/utils";
+import Table from "./table";
+
+export default {
+  props: {
+    commonData: Object,
+    params: Object,
+    field: []
+  },
+  mixins: [workspaceOptions],
+  components: {
+    Table
+  },
+  data() {
+    return {
+      columnList: [],
+      tableData: [],
+      showData: []
+    }
+  },
+  watch: {
+    
+  },
+  mounted() {
+    this.initData()
+  },
+  methods: {
+    //操作列
+    handleOption(data) {
+      this.$emit('option', data)
+    },
+    //展开行
+    expandChange(row, expandedRows) {
+     
+    },
+    initData() {
+     
+     
+    },
+  
+     
+  }
+}
+</script>
+
+<style lang="scss">
+.workspace-merge-table {
+
+}
+</style>

+ 127 - 0
src/views/project/components/view/card.vue

@@ -0,0 +1,127 @@
+<template>
+    <div class="common-project-card">
+      <el-row :gutter="24">
+        <el-col :span="6" v-for="(item, index) in tableData" class="c">
+          <el-card shadow="never">
+            <div slot="header" class="clearfix">
+              <span># {{ (index + 1) + ((queryParams.current - 1) * queryParams.size) }}</span>
+              <el-dropdown class="float_right" @command="handleCommand($event, item)" trigger="click" size="small">
+                <span class="el-dropdown-link">
+                  <i class="el-icon-more el-icon--right"></i>
+                </span>
+                <el-dropdown-menu slot="dropdown" class="text-align_center">
+                  <el-dropdown-item command="e" @click="handleEdit(item)" >
+                    <!-- <p @click="handleEdit(item)" v-if="$permission('/workspace/project/modify') && ($r(item.id,[2])||userinfo.id == item.createBy)">编辑</p> -->
+                    <!-- <span>编辑</span> -->
+                    <span v-if="$permission('/workspace/project/modify') && ($r(item.id,[2])||userinfo.id == item.createBy)">编辑</span>
+                    <span v-else>查看</span>
+                  </el-dropdown-item>
+                  <el-dropdown-item command="0" :disabled="!($permission('/workspace/project/patent_import')&& $r(item.id,[1,2]))">
+                    <el-dropdown @command="handleCommand($event, item)" placement="right-start">
+                      <span class="el-dropdown-link"> 专利导入 </span>
+                      <el-dropdown-menu  class="children_item">
+                          <el-dropdown-item command="7"> Excel导入 </el-dropdown-item>
+                          <el-dropdown-item command="8">专利号导入 </el-dropdown-item>
+                          <!-- <el-dropdown-item command="9"> 网站导入 </el-dropdown-item> -->
+                          <el-dropdown-item command="11" v-if="$permission('/workspace/common/retrieval')"> 检索条件导入 </el-dropdown-item>
+                      </el-dropdown-menu>
+                    </el-dropdown>
+                  </el-dropdown-item>
+                  <el-dropdown-item command="12">任务清单</el-dropdown-item>
+                <el-dropdown-item command="1">分配参与者</el-dropdown-item>
+                <el-dropdown-item command="2" :disabled="!$permission('/workspace/project/report_manage')">报告管理</el-dropdown-item>
+                <el-dropdown-item command="6" v-if="item.isCategory == 1&& $permission('/workspace/product')">产品架构</el-dropdown-item>
+                <el-dropdown-item command="10" v-if="$permission('/workspace/event')">事 件</el-dropdown-item>
+                <el-dropdown-item command="5" :disabled="!$permission('/workspace/project/other_accessories')">其它附件</el-dropdown-item>
+                <el-dropdown-item command="3" :disabled="!($permission('/workspace/project/project_share')&&$r(item.id,[2]))">项目分享</el-dropdown-item>
+                <el-dropdown-item command="4" divided class="color-red" :disabled="!($permission('/workspace/project/modify') && ($r(item.id,[2])||userinfo.id == item.createBy))">删除</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
+            </div>
+            <el-form class="i">
+              <el-form-item label="名称">
+                <div class="a">
+                  <el-link :disabled="!$permission('/workspace/folder')" :class="$permission('/workspace/folder')?'':'jinzhi'" type="primary" @click.native="handleClick(item)" :title="item.name">
+                    <span v-if="item.innerFile">{{ item.innerFile }} - </span>
+                    <span>{{ item.name }}</span>
+                  </el-link>
+                </div>
+              </el-form-item>
+              <el-form-item label="委托方">
+                <div class="a" :title="item.clientName">{{ item.clientName }}</div>
+              </el-form-item>
+              <el-form-item label="应用场景">
+                <div class="a" :title="item.scenarioName">
+                  <span v-for="name in item.scenarioName">{{ name }} <br> </span>
+                </div>
+              </el-form-item>
+              <el-form-item label="调查类型">
+                <div class="a" :title="item.typeName">
+                  <span v-for="name in item.typeName">{{ name }} <br> </span>
+                </div>
+              </el-form-item>
+              <el-form-item label="技术主题" style="border-bottom: 0">
+                <div class="a" :title="item.technicalTheme">{{ item.technicalTheme }}</div>
+              </el-form-item>
+            </el-form>
+          </el-card>
+        </el-col>
+      </el-row>
+    </div>
+</template>
+  
+<script>
+  import { mapGetters } from "vuex";
+  import { workspaceOptions } from "../mixins";
+  export default {
+    mixins: [workspaceOptions],
+    data() {
+      return {
+  
+      }
+    },
+    mounted() {
+    },
+    computed: {
+      ...mapGetters(['userinfo'])
+    },
+    methods: {
+      handleCommand(command, row) {
+        this.$emit('option', { option: command, row })
+      }
+    }
+  }
+  </script>
+  
+  <style lang="scss">
+     .jinzhi{
+      cursor: not-allowed;
+      pointer-events:none;
+    }
+  .common-project-card {
+    .c {
+      margin-bottom: 15px;
+      .el-card__header {
+        padding: 10px !important;
+        border-bottom: 1px solid #EBEEF5 !important;
+        font-weight: 500;
+      }
+    }
+    .i {
+      padding: 10px;
+      .a {
+        text-align: right;
+        overflow: hidden;
+        height: 40px;
+      }
+      .el-form-item {
+        margin-bottom: 0 !important;
+        border-bottom: 1px dashed #ddd;
+        .el-form-item__label {
+          color: #000;
+        }
+      }
+    }
+  }
+  </style>
+  

+ 4 - 19
src/views/project/components/view/table.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="eventTable">
+  <div class="height_100">
     <div>
       <el-table :data="tableData" style="width: 100%" header-row-class-name="custom-table-header">
         <el-table-column label="#" width="60" type="index" align="center">
@@ -51,27 +51,15 @@
 </template>
 
 <script>
+import { workspaceOptions } from "../mixins";
 export default {
+  mixins:[workspaceOptions],
   props: {
     isOperate: {//控制显示
       type: String,
       default:''
     },
-    tableData: {//数据
-      type: Array,
-      default: () => {
-        return [{ name: '123', eventNumber: 2, projectNumber: 3, projectNumber1: [{ name: '场景一' }, {name:'场景二'}]},]
-      }
-    },
-    queryParams: {//分页信息
-      type: Object,
-      default: () => {
-        return {
-          size: 10,
-          current: 1,
-        }
-      }
-    },
+    
     column: {//显示栏位管理数组
       type: Array,
       default: () => {
@@ -177,8 +165,5 @@ export default {
 };
 </script>
 <style lang="scss">
-.eventTable {
-
-}
 </style>
 <style lang="scss" scoped></style>

+ 331 - 0
src/views/project/index.vue

@@ -0,0 +1,331 @@
+<template>
+  <div class="workspace">
+    <el-card shadow="never" class="workspace-card nopadding">
+      <div class="query-top">
+        <el-collapse>
+          <el-collapse-item title="图表预览" name="1">
+            <div class="chart-box">
+              <total-chart ref="totalChart" />
+            </div>
+          </el-collapse-item>
+        </el-collapse>
+      </div>
+      <el-container>
+        <el-header>
+            <div>
+              <mySearch style="width:500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption" :disabled="!$permission('/workspace/project/check')"></mySearch>  
+            </div>
+            <div style="display:flex;margin-right:10px">
+                <div>
+                    <span>分组查询:</span>
+                    <el-select v-model="group" :disabled="!$permission('/workspace/project/check')" clearable size="small" @change="onChange" style="width:200px">
+                        <el-option v-for="item in commonData.QUERY_GROUP" :key="item.value" :label="item.label" :value="parseInt(item.value)">
+                        </el-option>
+                    </el-select>
+                </div>
+                <el-button-group class="margin-left_10">
+                  <el-button :type="queryShowType === '0' ? 'primary' : ''" @click="onChange2('0')" size="small">列表</el-button>
+                  <el-button :type="queryShowType === '1' ? 'primary' : ''" @click="onChange2('1')" size="small">卡片</el-button>
+                </el-button-group>
+                <el-dropdown trigger="click" split-button type="primary" size="small">
+                    <p @click="handleAdd" v-disabled="!$permission('/workspace/project/add')">新增专题库</p>
+                    <el-dropdown-menu slot="dropdown" class="text-align_center">
+                        <el-dropdown-item @click.native="handleExport">导出列表</el-dropdown-item>
+                        <el-dropdown-item @click.native="handleImport" :disabled="!$permission('/workspace/project/import')">导入数据包</el-dropdown-item>
+                        <el-dropdown-item @click.native="handleField">显示栏位管理</el-dropdown-item>
+                    </el-dropdown-menu>
+                </el-dropdown>
+            </div>
+        </el-header>
+        <el-main class="workspace-main" >
+            <div v-loading="loading">
+                <component :is="viewType" :tableData="dataList" :common-data="commonData" :group="group" :params="queryParams" :field="fieldList" @option="handleOption" @sort="handleSort"></component>
+            </div>
+          <div style="text-align: center;margin-top:10px">
+            <el-pagination
+                backgroundx
+                layout="total, prev, pager, next, jumper"
+                :current-page.sync="queryParams.current"
+                :page-size.sync="queryParams.size"
+                @current-change="handleCurrentChange"
+                :total="total">
+            </el-pagination>
+          </div>
+        </el-main>
+      </el-container>
+    </el-card>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import TotalChart from "./components/TotalChart";
+import Table from "./components/view/table.vue";
+import Card from "./components/view/card.vue";
+export default {
+  components: {
+    TotalChart,
+    Table,
+    Card
+  },
+  props: {},
+  data() {
+    return {
+        //检索字段
+      searchFiled: [
+        {
+          label: "项目名称",
+          value: "name",
+          type: 1,
+          placeholder: "请输入项目名称",
+        },
+        {
+          label: "技术主题",
+          value: "technicalTheme",
+          type: 1,
+          placeholder: "请输入技术主题",
+        },
+        {
+          label: "负责部门",
+          value: "departmentId",
+          type: 3,
+          placeholder: "请选择负责部门",
+        },
+        {
+          label: "内部案卷",
+          value: "innerFile",
+          type: 1,
+          placeholder: "请输入内部案卷",
+        },
+      ],
+      //检索条件
+      searchOption: {
+        name: localStorage.searchContent,
+      },
+      //专题库数据总数
+      total:0,
+      //分页信息
+      queryParams: {
+        size: 10,
+        current: 1,
+      },
+      //排序
+      sort:{},
+      //分组
+      group:'',
+      //字典项
+      commonData:{},
+      //展示的视图
+      queryShowType: '0',
+      //显示的视图组件
+      viewType: 'Table',
+      //加载
+      loading:false,
+      //专题库数据集合
+      dataList:[],
+      //栏位集合
+      fieldList:[],
+    };
+  },
+  watch: {},
+  computed: {
+    ...mapGetters(['userinfo'])
+  },
+  created() {},
+  mounted() {
+    //获取字典项(接口还是通过字典获取)
+    this.$api.getCommonData({ keys: 'QUERY_GROUP,ENTERPRISE_APPLICATION_SCENARIO,INVESTIGATION_TYPE' }).then(response => {
+      this.commonData = response.data
+    })
+    //获取应用场景统计
+    this.getScenarioAndTypeTotal();
+    //获取专题库列表
+    this.getList()
+  },
+  methods: {
+    //获取应用场景统计
+    getScenarioAndTypeTotal() {
+      this.$api.getScenarioAndTypeTotal().then((response) => {
+        this.queryTotal = response.data;
+        this.$refs.totalChart.initData(response.data);
+      });
+    },
+    //检索
+    search(){
+
+    },
+    //获取专题库列表
+    getList() {
+      if (this.group) {
+        this.queryParams.size = 99999
+      } else {
+        this.queryParams.size = this.queryShowType === '0' ? 10 : 12
+      }
+      var params = this.queryParams
+        params = {
+          ...this.queryParams,
+          ...this.searchOption
+        }
+      this.loading = true
+      this.$api.getProjectListV2(params).then(response => {
+        // console.log(response.data.records,'8888888');
+        this.dataList = response.data.records
+        this.total = response.data.total
+        this.loading = false
+      }).catch(error=>{
+        this.dataList = [{},{}]
+        this.total = 0
+        this.loading = false
+      })
+    },
+    //分页
+    handleCurrentChange(val) {
+      this.queryParams.current = val;
+      this.getList();
+    },
+    //切换分组
+    onChange() {
+      this.queryParams.current = 1
+      this.getList()
+      this.handleChangeView()
+    },
+    //切换视图
+    onChange2(type) {
+      this.queryShowType = type
+      this.onChange()
+    },
+    handleChangeView() {
+      let view = [
+          ['Table', 'Card'],
+          ['MergeTable', 'MergeCard'],
+      ]
+      if (!this.group) {
+        this.viewType = view[0][this.queryShowType]
+      } else {
+        this.viewType = view[1][this.queryShowType]
+      }
+    },
+    //新增专题库
+    handleAdd() {
+      this.$refs.projectFormDrawer.open({
+        update: 0,
+        updateTime: '一天',
+        status: '0',
+        sort: 1,
+        typeList: [],
+        scenarioList: []
+      }, '新增专题库')
+    },
+    //导出列表
+    handleExport() {
+      this.btnLoading = true
+      this.$api.exportProjectList().then(response => {
+        downLoad(response, getFileName('xlsx'))
+        this.btnLoading = false
+      }).catch(error => {
+        this.btnLoading = false
+      })
+    },
+    //导入数据包
+    handleImport() {
+      this.$refs.projectImport.open()
+    },
+    //显示栏位管理
+    handleField() {
+      this.$refs.projectTableField.open(this.projectField)
+    },
+    //操作列
+    handleOption({ option, row }) {
+      this.$store.commit('SET_PROJECT_ID', row.id)
+      switch (option) {
+        case '0':
+          this.handleImportPatent(row)
+          break
+        case '1'://分配参与者
+          this.handleUser(row)
+          break
+        case '2'://报告管理
+          this.handleFile(row, 1)
+          break
+        case '5'://其它附件
+          this.handleFile(row, 0)
+          break
+        case '3'://项目分享
+          this.handleShare(row)
+          break
+        case '4'://删除
+          this.handleDelete(row)
+          break
+        case '6'://产品分类
+          this.frameworkIndex(row)
+          break
+        case '7'://Excel导入
+          this.handleImportPatent(row)
+          break;
+        case '8'://手动导入
+          this.download(row, 8)
+          break;
+        case '9'://网站导入
+          this.download(row, 9)
+          break
+        case '11'://条件导入即接口导入
+          this.importPatent(row)
+          break;
+        case '12'://跳转到任务清单
+          this.toTaskList(row)
+          break;
+        case '10'://问题(事件)
+          this.questionEvent(row)
+          break
+        case 'e'://编辑
+          this.handleEdit(row)
+          break
+      }
+    },
+    //排序
+    handleSort(sort) {
+      this.sort = { ...sort }
+      this.getList()
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>
+<style lang="scss">
+ 
+.workspace {
+  .workspace-card {
+    min-height: 100%;
+    padding-bottom: 15px;
+    .workspace-main {
+      padding-top: 10px;
+      width: 100%;
+    }
+  }
+  .nopadding .el-card__body {
+    padding: 0 !important;
+  }
+  .query-top {
+    border-bottom: 1px solid #bbb;
+    padding-bottom: 10px;
+    .el-collapse {
+      border-bottom: 0 !important;
+      border-top: 0 !important;
+      .el-collapse-item__wrap, .el-collapse-item__header {
+        border-bottom: 0 !important;
+      }
+      .el-collapse-item__header {
+        padding-left: 15px;
+        font-weight: bold;
+      }
+      .is-active .el-collapse-item__wrap {
+        border-top: 1px solid #bbb;
+      }
+    }
+    .chart-box {
+      height: 250px;
+    }
+  }
+}
+</style>

+ 57 - 0
src/views/visual/components/Tips.vue

@@ -0,0 +1,57 @@
+<template>
+  <div class="tips">
+    <table>
+      <tr>
+        <td><div class="tips-t-1">注:</div></td>
+        <td></td>
+      </tr>
+      <tr>
+        <td><div class="tips-i-1"></div></td>
+        <td><div class="tips-b tips-b-1">必选流程</div></td>
+      </tr>
+      <tr>
+        <td></td>
+        <td><div class="tips-b tips-b-2">可选流程</div></td>
+      </tr>
+    </table>
+  </div>
+</template>
+
+<script>
+export default {}
+</script>
+
+<style lang="scss" scoped>
+.tips {
+  div {
+    position: relative !important;
+  }
+  .tips-b {
+    width: 150px;
+    height: 50px;
+    border-radius: 10px;
+    line-height: 50px;
+    color: #ffffff;
+    text-align: center;
+    font-weight: 300;
+    font-size: 20px;
+  }
+  .tips-t-1 {
+    font-weight: 400;
+    font-size: 25px;
+  }
+  .tips-i-1 {
+    width: 28.79px;
+    height: 26.84px;
+    margin-top: -20px;
+    background-image: url("../../../assets/visual/1.png");
+  }
+  .tips-b-1 {
+    background: #d45a6a;
+    margin-bottom: 15px;
+  }
+  .tips-b-2 {
+    background: #3084e5;
+  }
+}
+</style>

+ 125 - 0
src/views/visual/components/components/svgVisual.vue

@@ -0,0 +1,125 @@
+<template>
+    <div class="svgVisualContent">
+      <svg v-if="showCard" width="100%" height="100%" viewBox="0 0 520 1420" fill="white" class="svgVisual">
+        <!-- 八大应用场景 -->
+        <!-- 专利培育布局 -->
+        <g>
+          <rect x="20" y="20" width="480" height="calc(100% - 30px)" rx="20px" ry="20px" :fill="fill"></rect>
+          <g>
+            <!-- 头部图片以及数量 -->
+            <g fill="white" >
+              <image transform="translate(-71, 20)" x="50%" y="20" :xlink:href="require(`@/assets/visual/${headerIcon}`)" height="30" width="30" />
+              <text transform="translate(-10, 45)" x="50%" y="20" font-weight="800" font-size="28px">数量:{{ total }}</text>
+            </g>
+            <!-- 中间图片以及应用场景 -->
+            <g fill="white">
+              <rect v-if="showCard" transform="translate(-80, -190)" x="50%" y="50%" rx="20px" ry="20px" width="160" height="160" fill="#FFFFFF" />
+              <image transform="translate(-60, -170)" x="50%" y="50%"  :xlink:href="require(`@/assets/visual/${contentIcon}`)" height="120" width="120" />
+              <text style="transform:translate(50%, 54%);dominant-baseline:middle;text-anchor:middle;" font-size="32px" font-weight="800">{{ title }}</text>
+            </g>
+            <!-- 已完成 -->
+            <g fill="white">
+              <text transform="translate(-25, -252)" x="30%" y="100%" font-size="32px" style="dominant-baseline:middle;text-anchor:middle;" font-weight="800">{{ statusTotal ? statusTotal.completed : 0 }}</text>
+              <text transform="translate(-25, -192)" x="30%" y="100%" font-size="32px" style="dominant-baseline:middle;text-anchor:middle;">已完成</text>
+            </g>
+            <!-- 中间竖线 -->
+            <g transform="translate(200, 0)">
+              <line transform="translate(-200, -252)" x1="50%" y1="100%" x2="50%" y2="calc(100% + 40px)" :stroke="btnColor" stroke-width="2"/>
+            </g>
+            <!-- 未完成 -->
+            <g fill="white">
+              <text transform="translate(-10, -252)" x="80%" y="100%" font-size="32px"  style="dominant-baseline:middle;text-anchor:middle;" font-weight="800">{{ statusTotal ? statusTotal.unfinished : 0 }}</text>
+              <text transform="translate(-10, -192)" x="80%" y="100%" font-size="32px"  style="dominant-baseline:middle;text-anchor:middle;">未完成</text>
+            </g>
+            <!-- 按钮 -->
+            <g class="btnG">
+              <rect transform="translate(-10, -132)" x="40" y="100%" rx="10" ry="10" width="202" :fill="btnColor" height="92" @click="handleClick(0)" />
+              <text transform="translate(-35, -76)" font-size="32px" x="130" y="100%" fill="white" @click="handleClick(0)">详情</text>
+            </g>
+            <g class="btnG">
+              <rect transform="translate(-232, -132)"  x="100%" y="100%" rx="10" ry="10" width="202" height="92" fill="#FFFFFF" @click="handleClick(1)" />
+              <text transform="translate(-165, -76)" font-size="32px" x="100%" y="100%" fill="black" @click="handleClick(1)">清单</text>
+            </g>
+          </g>
+        </g>
+      </svg>
+      <svg v-else width="100%" height="100%" viewBox="0 0 520 710" fill="white" class="svgVisual">
+        <!-- 八大应用场景 -->
+        <!-- 专利培育布局 -->
+        <g>
+          <rect x="20" y="20" width="480" height="calc(100% - 30px)" rx="20px" ry="20px" :fill="fill"></rect>
+          <g>
+            <!-- 头部图片以及数量 -->
+            <g fill="white" >
+              <image transform="translate(-71, 20)" x="50%" y="20" :xlink:href="require(`@/assets/visual/${headerIcon}`)" height="30" width="30" />
+              <text transform="translate(-10, 45)" x="50%" y="20" font-weight="800" font-size="28px">数量:{{ total }}</text>
+            </g>
+            <!-- 中间图片以及应用场景 -->
+            <g fill="white">
+              <rect v-if="showCard" transform="translate(-80, -190)" x="50%" y="50%" rx="20px" ry="20px" width="160" height="160" fill="#FFFFFF" />
+              <image transform="translate(-60, -170)" x="50%" y="50%"  :xlink:href="require(`@/assets/visual/${contentIcon}`)" height="120" width="120" />
+              <text style="transform:translate(50%, 54%);dominant-baseline:middle;text-anchor:middle;" font-size="32px" font-weight="800">{{ title }}</text>
+            </g>
+            <!-- 已完成 -->
+            <g fill="white">
+              <text transform="translate(-25, -252)" x="30%" y="100%" font-size="32px" style="dominant-baseline:middle;text-anchor:middle;" font-weight="800">{{ statusTotal ? statusTotal.completed : 0 }}</text>
+              <text transform="translate(-25, -192)" x="30%" y="100%" font-size="32px" style="dominant-baseline:middle;text-anchor:middle;">已完成</text>
+            </g>
+            <!-- 中间竖线 -->
+            <g transform="translate(200, 0)">
+              <line transform="translate(-200, -252)" x1="50%" y1="100%" x2="50%" y2="calc(100% + 40px)" :stroke="btnColor" stroke-width="2"/>
+            </g>
+            <!-- 未完成 -->
+            <g fill="white">
+              <text transform="translate(-10, -252)" x="80%" y="100%" font-size="32px"  style="dominant-baseline:middle;text-anchor:middle;" font-weight="800">{{ statusTotal ? statusTotal.unfinished : 0 }}</text>
+              <text transform="translate(-10, -192)" x="80%" y="100%" font-size="32px"  style="dominant-baseline:middle;text-anchor:middle;">未完成</text>
+            </g>
+            <!-- 按钮 -->
+            <g class="btnG">
+              <rect transform="translate(-10, -132)" x="40" y="100%" rx="10" ry="10" width="202" :fill="btnColor" height="92" @click="handleClick(0)" />
+              <text transform="translate(-35, -76)" font-size="32px" x="130" y="100%" fill="white" @click="handleClick(0)">详情</text>
+            </g>
+            <g class="btnG">
+              <rect transform="translate(-232, -132)"  x="100%" y="100%" rx="10" ry="10" width="202" height="92" fill="#FFFFFF" @click="handleClick(1)" />
+              <text transform="translate(-160, -76)" font-size="32px" x="100%" y="100%" fill="black" @click="handleClick(1)">清单</text>
+            </g>
+          </g>
+        </g>
+      </svg>
+  
+    </div>
+</template>
+  
+  <script>
+  export default {
+    props: {
+      total: Number,
+      headerIcon: String,
+      title: String,
+      contentIcon: String,
+      statusTotal: Object,
+      fill: String,
+      btnColor: String,
+      showCard: Boolean,
+    },
+    mounted() {
+  
+    },
+    methods: {
+      handleClick(type) {
+        this.$emit('click', { type, title: this.title })
+      },
+    }
+  }
+  </script>
+  
+  <style lang="scss" scoped>
+  .svgVisualContent{
+  
+    .svgVisual{
+      .btnG{
+        cursor: pointer;
+      }
+    }
+  }
+  </style>

+ 124 - 0
src/views/visual/components/dialog/AboutDialog.vue

@@ -0,0 +1,124 @@
+<template>
+    <el-dialog class="visual-about-dialog" title="" :visible.sync="visible" width="800px" append-to-body destroy-on-close :before-close="close">
+      <div class="visual-about-header">
+        <div>知识产权风控与组织记忆系统</div>
+        <div>Intellectual property risk Control and organizational memory system</div>
+      </div>
+      <div class="visual-about-content">
+        <p>专利制度是企业参与市场竞争特别是国际化竞争所不能绕开的,只有充分的、熟练的掌握并利用好专利制度,才能在市场竞争中游刃有余,进而取得最大化的商业利益、国家利益。</p>
+        <p>知识产权分析是在专利制度的框架下,充分利用现有的产业和专利信息,运用大数据和专利分析的手段与方法进行分析、梳理、总结、判断,发现问题并给出解决问题的方案。</p>
+        <p>本系统为用户提供了一种知识产权风控体系和组织记忆的操作思路和方法,通过解决企业具体问题场景的方式,为用户提供了具有可操作性的参考,并由此协助企业形成自主知识传承、叠加、不断衍化提升并且能够重复再应用的核心智谋知识系统。</p>
+      </div>
+      <div class="visual-about-footer">
+        <div class="visual-about-footer-button" @click="handleClose">
+          <img src="@/assets/visual/4921.png" alt="">
+          <span>下次不再弹出</span>
+        </div>
+      </div>
+    </el-dialog>
+</template>
+  
+<script>
+  export default {
+    data() {
+      return {
+        visible: false
+      }
+    },
+    mounted() {
+    },
+    methods: {
+      open() {
+        const o = this.$s.getStr('o')
+        if (o) {
+          return false
+        }
+        this.visible = true
+      },
+      close() {
+        this.visible = false
+      },
+      handleClose() {
+        this.close()
+        this.$s.setStr('o', true)
+      }
+    }
+  }
+  </script>
+  
+  <style lang="scss">
+  .visual-about-dialog {
+    .el-dialog {
+      left: 50%;
+      top: 50%;
+      transform: translate(-50%, -50%);
+      margin: 0 !important;
+      border-radius: 20px;
+      .el-dialog__headerbtn {
+        width: 40px;
+        height: 40px;
+        border-radius: 10px;
+        background: #deedff;
+        border: 1px solid #fff;
+        .el-dialog__close {
+          color: #3084e5;
+          font-weight: bold;
+        }
+      }
+    }
+    .visual-about-header {
+      text-align: center;
+      div:first-child {
+        font-weight: bold;
+        font-size: 28px;
+        color: #3084e5;
+      }
+      div:last-child {
+        font-weight: 600;
+        font-size: 10px;
+        letter-spacing: 0.07em;
+        text-align: center;
+        color: #33233e;
+      }
+    }
+    .visual-about-content {
+      margin-top: 30px;
+      width: 760px;
+      height: 280px;
+      border-radius: 15px;
+      background: transparent;
+      border: 1px solid #e5e5e5;
+      p {
+        text-indent: 2em;
+        margin: 20px;
+        width: 719px;
+        height: 52px;
+        font-weight: 400;
+        font-size: 16px;
+        line-height: 30px;
+        text-align: left;
+        color: #33233e;
+      }
+    }
+    .visual-about-footer {
+      text-align: right;
+      margin-top: 20px;
+      height: 20px;
+      .visual-about-footer-button {
+        cursor: pointer;
+        float: right;
+        img {
+          position: relative;
+          top: 5px;
+          right: 10px;
+        }
+        span {
+          font-weight: 400;
+          font-size: 16px;
+          text-align: center;
+          color: #33233e;
+        }
+      }
+    }
+  }
+  </style>

+ 64 - 0
src/views/visual/components/drawer/eventDrawer.vue

@@ -0,0 +1,64 @@
+<template>
+    <div>
+      <el-drawer class="custom-drawer-form" size="1100px" :with-header="false" :visible.sync="drawer" direction="rtl" :before-close="close" destroy-on-close append-to-body>
+          <div style="padding:10px;height:100%">
+            <questionIndex :applicationScenario="getQuestionId(params.scenarioName)"></questionIndex>
+          </div>
+      </el-drawer>
+    </div>
+</template>
+  
+<script>
+  export default {
+    name:'eventDrawer',
+    components: {
+        questionIndex:() => import('@/views/event/components/index.vue')
+    },
+    props: {},
+    data() {
+      return {
+          drawer:false,
+          params:{},
+          QuestionTotal:[]
+      };
+    },
+    watch: {},
+    computed: {},
+    created() {},
+    mounted() {
+        this.getEventNumber()
+    },
+    methods: {
+        getQuestionId(type){
+            if(this.QuestionTotal.length>0){
+                var a= this.QuestionTotal.find(item=>{return item.applicationScenarioName == type})
+                if(a){
+                    return a.applicationScenarioValue
+                }
+            }
+        },
+        //获取事件数量
+        async getEventNumber(){
+            await  this.$api.queryApplicationScenarioEventNumber().then(response=>{
+                if(response.code == 200){
+                this.QuestionTotal = response.data
+                }
+            })
+        },
+        open(scenarioName, typeName, question){
+          this.params = {
+              scenarioName:scenarioName, 
+              typeName:typeName, 
+              question:question
+          }
+          this.drawer = true
+        },
+        close(){
+            this.$emit('close')
+            this.drawer = false
+        }
+    },
+  };
+  </script>
+  <style lang="scss">
+  </style>

+ 85 - 0
src/views/visual/components/drawer/titleDrawer.vue

@@ -0,0 +1,85 @@
+<template>
+    <div>
+      <el-drawer class="custom-drawer-form" size="900px" :with-header="false" :visible.sync="drawer" direction="rtl" :before-close="close" destroy-on-close append-to-body>
+          <div style="padding:10px;height:100%">
+              <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' :params="params" style="height:calc(100% - 50px);"></component>
+          </div>
+          
+      </el-drawer>
+    </div>
+</template>
+  
+<script>
+  import Project from '@/views/project/index.vue'
+  import Report from '@/views/report/index.vue'
+//   import patentMining from './components/patentMining.vue'
+  export default {
+    components: {
+      Project,
+      Report,
+    //   patentMining
+    },
+    props: {},
+    data() {
+      return {
+          menu:[
+              {
+                  name:'相关专题库',
+                  components:'Project'
+              },
+              {
+                  name:'相关报告',
+                  components:'Report'
+              },
+             
+          ],
+          drawer:false,
+          params:{},
+          components:'Project',
+      };
+    },
+    watch: {},
+    computed: {},
+    created() {},
+    mounted() {},
+    methods: {
+      open(scenarioName, typeName, question){
+          this.params = {
+              scenarioName:scenarioName, 
+              typeName:typeName, 
+              question:question
+          }
+          if(typeName && typeName.indexOf('专利挖掘')!=-1){
+            this.menu.push(
+              {
+                  name:'专利挖掘',
+                  components:'patentMining'
+              },
+            )
+          }
+          this.drawer = true
+      },
+      close(){
+          this.$emit('close')
+          this.drawer = false
+          this.components='Project',
+          this.menu=[
+              {
+                  name:'相关专题库',
+                  components:'Project'
+              },
+              {
+                  name:'相关报告',
+                  components:'Report'
+              },
+             
+          ]
+      }
+    },
+  };
+  </script>
+  <style lang="scss">
+  </style>

+ 0 - 0
src/views/visual/components/mixins/index.vue


+ 198 - 0
src/views/visual/components/sceneSVG.vue

@@ -0,0 +1,198 @@
+<template>
+  <div class="svgDataDiv">
+    <div v-for="item in svgData" :key="item.id" style="background-color: white">
+      <div v-if="item.children">
+        <svg-visual
+          style="height: 100%; width: 95%"
+          v-for="item1 in item.children"
+          :key="item1.name"
+          :total="total[item1.name]"
+          :status-total="statusTotal[item1.name]"
+          :title="item1.name"
+          :header-icon="item1.headerIcon"
+          :content-icon="item1.contentIcon"
+          :fill="item1.fill"
+          :btnColor="item1.btnColor"
+          :showCard="item1.showCard"
+          @click="handleClick"
+        ></svg-visual>
+      </div>
+      <svg-visual
+        v-else
+        style="height: 100%; width: 95%"
+        :total="total[item.name]"
+        :status-total="statusTotal[item.name]"
+        :title="item.name"
+        :header-icon="item.headerIcon"
+        :content-icon="item.contentIcon"
+        :fill="item.fill"
+        :btnColor="item.btnColor"
+        :showCard="item.showCard"
+        @click="handleClick"
+      ></svg-visual>
+    </div>
+
+    <eventDrawer ref="eventDrawer" @close="closeDrawer"></eventDrawer>
+  </div>
+</template>
+
+<script>
+import svgVisual from './components/svgVisual.vue'
+import eventDrawer from "./drawer/eventDrawer";
+export default {
+  components: {
+    svgVisual,
+    eventDrawer
+  },
+  props: {},
+  data() {
+    return {
+        //应用场景的svg数据
+        svgData: [
+            {
+            id: 1,
+            name: '专利培育布局',
+            headerIcon: "7155.png",
+            contentIcon: "8.png",
+            fill: '#3084E5',
+            btnColor: '#65A4ED',
+            showCard: true,
+            },
+            {
+            id: 2,
+            name: '产品上市/出口风险控制',
+            headerIcon: "7160.png",
+            contentIcon: "7159.png",
+            fill: '#11ACAF',
+            btnColor: '#52C3C4',
+            showCard: true,
+            },
+            {
+            id: 3,
+            name: '',
+            children: [
+                {
+                name: '侵权纠纷',
+                headerIcon: "7161.png",
+                contentIcon: "7162.png",
+                fill: '#11ACAF',
+                btnColor: '#52C3C4',
+                showCard: false,
+                },
+                {
+                name: '专利盘点与运维',
+                headerIcon: "7172.png",
+                contentIcon: "4884.png",
+                fill: '#3084E5',
+                btnColor: '#65A4ED',
+                showCard: false,
+                },
+            ]
+            },
+            {
+            id: 4,
+            name: '',
+            children: [
+                {
+                name: '专利维权',
+                headerIcon: "7163.png",
+                contentIcon: "7164.png",
+                fill: '#3084E5',
+                btnColor: '#65A4ED',
+                showCard: false,
+                },
+                {
+                name: '科技与重大立项专利导航',
+                headerIcon: "7167.png",
+                contentIcon: "9.png",
+                fill: '#11ACAF',
+                btnColor: '#52C3C4',
+                showCard: false,
+                },
+            ]
+            },
+            {
+            id: 5,
+            name: '',
+            children: [
+                {
+                name: 'IPO上市',
+                headerIcon: "7165.png",
+                contentIcon: "7166.png",
+                fill: '#11ACAF',
+                btnColor: '#52C3C4',
+                showCard: false,
+                },
+                {
+                name: '竞争对手威胁应对',
+                headerIcon: "7173.png",
+                contentIcon: "7174.png",
+                fill: '#3084E5',
+                btnColor: '#65A4ED',
+                showCard: false,
+                },
+            ]
+            },
+        ],
+        //应用场景对应事件总数量
+        total: {},
+        //已完成未完成数量
+        statusTotal: {},
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  async mounted() {
+    //获取应用场景对应事件总数量
+    await this.getScenarioTotal()
+    //获取每个应用场景已完成未完成数量
+    await this.getProjectStatusTotal()
+  },
+  methods: {
+    // 应用场景对应事件总数量
+    async getScenarioTotal() {
+      await this.$api.getScenarioAndTypeTotal().then(response => {
+        this.total = response.data.scenario
+      })
+    },
+    // 已完成未完成数量
+    async getProjectStatusTotal() {
+      await this.$api.getProjectStatusTotal().then(response => {
+        this.statusTotal = response.data
+      })
+    },
+    // 详情及清单按钮事件
+    handleClick(data) {
+      const { title, type } = data
+      switch (type) {
+        case 0:
+          this.$router.push({
+            path: `/visual/${encodeURIComponent(title)}`
+          })
+          break
+        case 1:
+          this.$refs.eventDrawer.open(title, null)
+          break
+      }
+    },
+    //关闭弹窗
+    closeDrawer(){
+        //获取应用场景对应事件总数量
+        this.getScenarioTotal()
+        //获取每个应用场景已完成未完成数量
+        this.getProjectStatusTotal()
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.svgDataDiv {
+  max-height: calc(100% - 163px);
+  margin: 0px auto 0;
+  display: flex;
+  flex-direction: row;
+  justify-content: center;
+  max-width: 1420px;
+}
+</style>

+ 66 - 0
src/views/visual/index.vue

@@ -0,0 +1,66 @@
+<template>
+    <div class="visual height_100" >
+      <div class="height_100">
+        <div class="visual-header">
+          <img class="visual-header-logo" src="@/assets/logo-3.png" alt="">
+          <img class="visual-header-title" src="@/assets/visual/7780.png" alt="">
+          <img class="visual-header-subtitle" src="@/assets/visual/7782(1).png" alt="">
+        </div>
+        <!-- <div> -->
+           <sceneSVG></sceneSVG> 
+        <!-- </div> -->
+        
+  
+      </div>
+      <about-dialog ref="aboutDialog" />
+    </div>
+</template>
+
+<script>
+import sceneSVG from './components/sceneSVG.vue';
+import AboutDialog from "./components/dialog/AboutDialog";
+export default {
+  components: {
+    sceneSVG,
+    AboutDialog
+  },
+  props: {},
+  data() {
+    return {
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {},
+};
+</script>
+<style lang="scss" scoped>
+.visual {
+  .visual-header {
+    // padding-top: 20px;
+    img {
+      display: block;
+      margin: 0 auto;
+    }
+    .visual-header-logo {
+      height: 50px;
+      // width: 50px;
+    }
+
+    .visual-header-title {
+      width: 512px;
+      height: 39px;
+      padding-top: 17px;
+    }
+
+    .visual-header-subtitle {
+      width: 433px;
+      height: 12px;
+      padding-top: 25px;
+    }
+  }
+
+}
+</style>

+ 112 - 0
src/views/visual/title/index.vue

@@ -0,0 +1,112 @@
+<template>
+    <div class="visual-title">
+      <el-button type="primary" class="visual-title-back" icon="el-icon-back" @click="handleBack">返回</el-button>
+       <myCustomSvg  class="myCustomSvg" :title="title" :total="total" :QuestionTotal="QuestionTotal" @on-click="handleClick"></myCustomSvg>
+      <tips class="c-tips" />
+      <titleDrawer ref="titleDrawer" @close="close" />
+    </div>
+</template>
+  
+  <script>
+  import Tips from '../components/Tips'
+  import titleDrawer from "../components/drawer/titleDrawer.vue";
+  export default {
+    components: {
+      Tips,
+      titleDrawer,
+    },
+    data() {
+      return {
+        QuestionTotal: [],
+        total: {},
+        title: this.$route.params.title,
+      }
+    },
+    async mounted() {
+      await this.getEventNumber()
+      await this.getProjectTypeTotal()
+    },
+    methods: {
+      handleClick(type) {
+        var question = {
+          questionId: this.questionId,
+          questionName: this.questionName
+        }
+        this.$refs.titleDrawer.open(this.title, type, question)
+      },
+       //获取事件数量
+       async getEventNumber() {
+        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
+            }
+          })
+          return false
+        }
+        await this.$api.getProjectTypeTotal({ scenario: this.title }).then(response => {
+          this.total = response.data
+        })
+      },
+      close() { },
+      // 返回
+      handleBack() {
+        this.$router.push({ path: '/svgIndex' })
+      },
+    },
+  }
+  </script>
+  
+  <style lang="scss">
+  .q-1 {
+    font-weight: normal;
+    font-size: 28px;
+  }
+  
+  .p-1 {
+    text-indent: 2em;
+    color: #000000;
+  }
+  
+  .c-tips {
+    position: absolute;
+    // top: 20px;
+    right:40px;
+    cursor: pointer;
+  }
+  
+  .visual-title {
+    width: 100%;
+    height:100%;
+    position: relative;
+    .visual-title-back {
+      position: absolute;
+      top: 20px;
+      left: 45px;
+      z-index: 999;
+    }
+    .myCustomSvg{
+      position: absolute;
+      left: 0; 
+    //   top: 50px;
+      bottom:0;
+      right:0;
+      margin:auto;
+    }
+  }</style>