Browse Source

SEO管理重构

zq940222 5 months ago
parent
commit
46216e4b05

+ 38 - 0
src/assets/seo/NO1.svg

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#F5D968;}
+	.st1{fill:#DB7C2E;}
+</style>
+<g>
+	<path class="st0" d="M102.5,14.7L26.1,58c-1.6,0.9-2.6,2.6-2.6,4.4l-0.7,87.9c0,1.8,0.9,3.5,2.5,4.4l75.7,44.5
+		c1.6,0.9,3.5,0.9,5.1,0l76.4-43.3c1.6-0.9,2.6-2.6,2.6-4.4l0.7-87.9c0-1.8-0.9-3.5-2.5-4.4l-75.7-44.5
+		C106,13.8,104,13.8,102.5,14.7z M162.2,144l-56,31.8c-1.6,0.9-3.5,0.9-5.1,0l-55.5-32.7c-1.6-0.9-2.5-2.6-2.5-4.4l0.5-64.4
+		c0-1.8,1-3.5,2.6-4.4l56-31.8c1.6-0.9,3.5-0.9,5.1,0l55.5,32.7c1.6,0.9,2.5,2.6,2.5,4.4l-0.5,64.4
+		C164.8,141.4,163.8,143.1,162.2,144z"/>
+	<g>
+		<path class="st1" d="M78.4,131.4h19.4V82.8H81.5v-9.5c9-1.5,15.2-3.4,21-6.5h13.3v64.6h16.9v12.4H78.5L78.4,131.4L78.4,131.4z"/>
+	</g>
+	<path class="st1" d="M77.1,1.3L77.1,1.3c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1
+		c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2
+		s-0.1,0.1-0.1,0.2s-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2s-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2
+		c0,0.1,0,0.1-0.1,0.2c0,0.1,0,0.1-0.1,0.2c0,0.1,0,0.1,0,0.2c0,0.1,0,0.1,0,0.2s0,0.1,0,0.2s0,0.1,0,0.2c0,0.1,0,0.1,0,0.2
+		s0,0.1,0,0.2s0,0.1,0,0.2c0,0.1,0,0.1,0,0.2s0,0.1,0,0.2s0,0.1,0,0.2c0,0.1,0,0.1,0.1,0.2c0,0.1,0,0.1,0.1,0.2
+		c0,0.1,0.1,0.1,0.1,0.2s0,0.1,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2s0.1,0.1,0.1,0.2l0,0l0,0c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2
+		s0.1,0.1,0.1,0.2s0.1,0.1,0.1,0.2C75.9,8,76,8,76,8c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1
+		c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1
+		c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0,0.2,0.1c0.1,0,0.1,0,0.2,0.1c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0
+		c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0l0,0L69.6,27L48.1,14c2.4-2.6,2.9-6.5,1.1-9.7
+		c-2.3-4-7.3-5.4-11.3-3.1s-5.4,7.3-3.1,11.3c1.9,3.3,5.7,4.8,9.2,3.9L43.1,42l-21-0.4c0.8-1.3,0.8-2.9,0-4.3l0,0
+		c-1.2-2.1-3.8-2.8-5.9-1.6l0,0c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2l-0.1,0.1
+		c-0.1,0.1-0.1,0.1-0.2,0.2l-0.1,0.1c-0.1,0.1-0.2,0.2-0.2,0.3c0,0,0,0,0,0.1c-0.1,0.1-0.1,0.2-0.2,0.3l0,0
+		c-0.1,0.1-0.1,0.2-0.2,0.3l0,0c-0.1,0.1-0.1,0.2-0.2,0.4l0,0c0,0.1-0.1,0.3-0.1,0.4l0,0c0,0.1-0.1,0.2-0.1,0.4l0,0
+		c0,0.1,0,0.3,0,0.4l0,0c0,0.1,0,0.2,0,0.4l0,0c0,0.1,0,0.2,0,0.4c0,0,0,0,0,0.1s0,0.2,0.1,0.3v0.1c0,0.1,0.1,0.2,0.1,0.3v0.1
+		c0,0.1,0.1,0.2,0.1,0.3c0,0,0,0.1,0.1,0.1c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2l0,0l0,0c0,0.1,0.1,0.1,0.1,0.1
+		c0,0.1,0.1,0.2,0.1,0.2s0,0,0.1,0.1s0.1,0.2,0.2,0.3l0,0c1,1.2,2.6,1.7,4.1,1.3l0,0c0.1,0,0.3-0.1,0.4-0.1h0.1
+		c0.1,0,0.2-0.1,0.3-0.1s0.1-0.1,0.2-0.1c0.1,0,0.2-0.1,0.2-0.1l0,0l0,0c0,0,0.1,0,0.1-0.1l24.8,27.3l47.1-26.8l-10.9-35
+		c1.8-1.3,2.4-3.7,1.3-5.7l0,0C81.8,0.8,79.2,0.1,77.1,1.3z"/>
+</g>
+</svg>

+ 41 - 0
src/assets/seo/NO2.svg

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#7CBFBF;}
+	.st1{fill:#B1DEE0;}
+</style>
+<g>
+	<g>
+		<path class="st0" d="M80.4,135.2C100.9,116.8,113,102.6,113,91c0-7.7-4.2-12.2-11.3-12.2c-5.5,0-10.1,3.6-13.9,7.8l-8.2-8.2
+			c6.9-7.3,13.7-11.4,24-11.4c14.3,0,23.8,9.2,23.8,23.3c0,13.7-11.3,28.4-25.1,41.8c3.8-0.4,8.8-0.8,12.2-0.8H131v12.6H80.4V135.2z
+			"/>
+	</g>
+	<g>
+		<path class="st1" d="M102.7,14.6L26.2,57.9c-1.6,0.9-2.6,2.6-2.6,4.4l-0.7,88c0,1.8,0.9,3.5,2.5,4.4l75.8,44.6
+			c1.6,0.9,3.5,0.9,5.1,0l76.5-43.4c1.6-0.9,2.6-2.6,2.6-4.4l0.7-88c0-1.8-0.9-3.5-2.5-4.4l-75.8-44.6
+			C106.3,13.7,104.3,13.7,102.7,14.6z M162.6,144.1l-56.1,31.8c-1.6,0.9-3.5,0.9-5.1,0l-55.6-32.7c-1.6-0.9-2.5-2.6-2.5-4.4
+			l0.5-64.5c0-1.8,1-3.5,2.6-4.4L102.5,38c1.6-0.9,3.5-0.9,5.1,0l55.6,32.7c1.6,0.9,2.5,2.6,2.5,4.4l-0.5,64.5
+			C165.2,141.5,164.2,143.2,162.6,144.1z"/>
+		<path class="st0" d="M76.9,1.2L76.9,1.2c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1s-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1
+			c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2
+			c0,0.1-0.1,0.1-0.1,0.2s-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2s0,0.1-0.1,0.2
+			c0,0.1,0,0.1-0.1,0.2c0,0.1,0,0.1,0,0.2s0,0.1,0,0.2s0,0.1,0,0.2c0,0.1,0,0.1,0,0.2s0,0.1,0,0.2s0,0.1,0,0.2c0,0.1,0,0.1,0,0.2
+			s0,0.1,0,0.2s0,0.1,0,0.2c0,0.1,0,0.1,0,0.2s0,0.1,0.1,0.2c0,0.1,0,0.1,0.1,0.2C75,6.3,75,6.4,75,6.5c0,0.1,0,0.1,0.1,0.2
+			c0,0.1,0.1,0.1,0.1,0.2s0.1,0.1,0.1,0.2l0,0l0,0c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2s0.1,0.1,0.1,0.2s0.1,0.1,0.1,0.2
+			C75.7,8,75.8,8,75.8,8C76,8,76,8,76.1,8.1c0,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1s0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1
+			c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0,0.2,0.1
+			C78,9,78,9,78.1,9.1c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0
+			c-0.1,0.1-0.1,0.1,0,0.1c0.1,0,0.1,0,0.2,0l0,0L69.3,27L47.7,14c2.4-2.6,2.9-6.5,1.1-9.7c-2.3-4-7.3-5.4-11.3-3.1
+			s-5.4,7.3-3.1,11.3c1.9,3.3,5.7,4.8,9.2,3.9l-0.8,25.8l-21-0.4c0.8-1.3,0.8-2.9,0-4.3l0,0c-1.2-2.1-3.8-2.8-5.9-1.6l0,0
+			c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2l-0.1,0.1c-0.1,0.1-0.1,0.1-0.2,0.2l-0.1,0.1
+			c-0.1,0.1-0.2,0.2-0.2,0.3c0,0,0,0,0,0.1c-0.1,0.1-0.1,0.2-0.2,0.3l0,0c-0.1,0.1-0.1,0.2-0.2,0.3l0,0c-0.1,0.1-0.1,0.2-0.2,0.4
+			l0,0c0,0.1-0.1,0.3-0.1,0.4l0,0c0,0.1-0.1,0.2-0.1,0.4l0,0c0,0.1,0,0.3,0,0.4l0,0c0,0.1,0,0.2,0,0.4l0,0c0,0.1,0,0.2,0,0.4
+			c0,0,0,0,0,0.1s0,0.2,0.1,0.3v0.1c0,0.1,0.1,0.2,0.1,0.3V41c0,0.1,0.1,0.2,0.1,0.3c0,0,0,0.1,0.1,0.1c0,0.1,0.1,0.1,0.1,0.2
+			c0,0.1,0.1,0.1,0.1,0.2l0,0l0,0c0,0.1,0.1,0.1,0.1,0.1c0,0.1,0.1,0.2,0.1,0.2s0,0,0.1,0.1c0.1,0.1,0.1,0.2,0.2,0.3l0,0
+			c1,1.2,2.6,1.7,4.1,1.3l0,0c0.1,0,0.3-0.1,0.4-0.1h0.1c0.1,0,0.2-0.1,0.3-0.1c0.1,0,0.1-0.1,0.2-0.1s0.2-0.1,0.2-0.1l0,0l0,0
+			c0,0,0.1,0,0.1-0.1l24.8,27.3l47.2-26.8L81.5,8.5c1.8-1.3,2.4-3.7,1.3-5.7l0,0C81.6,0.7,79,0,76.9,1.2z"/>
+	</g>
+</g>
+</svg>

+ 43 - 0
src/assets/seo/NO3.svg

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#9E5243;}
+	.st1{fill:#ED997C;}
+</style>
+<g>
+	<g>
+		<path class="st0" d="M76,134.8l7-9.5c4.5,4.4,10,7.8,16.8,7.8c7.7,0,12.9-3.8,12.9-10.5c0-7.4-4.4-12-20.8-12V99.8
+			c13.9,0,18.4-4.8,18.4-11.5c0-5.9-3.7-9.4-10.1-9.5c-5.4,0.1-9.8,2.7-14.3,6.7l-7.6-9.2c6.5-5.7,13.8-9.3,22.6-9.3
+			c14.6,0,24.5,7.1,24.5,20.1c0,8.2-4.6,14.1-12.6,17.2v0.5c8.6,2.3,15.1,8.7,15.1,18.6c0,13.9-12.1,21.9-26.5,21.9
+			C89.3,145.4,81.3,140.9,76,134.8z"/>
+	</g>
+	<g>
+		<path class="st1" d="M102.7,14.7L26.3,58c-1.6,0.9-2.6,2.6-2.6,4.4L23,150.3c0,1.8,0.9,3.5,2.5,4.4l75.7,44.5
+			c1.6,0.9,3.5,0.9,5.1,0l76.4-43.3c1.6-0.9,2.6-2.6,2.6-4.4l0.7-87.9c0-1.8-0.9-3.5-2.5-4.4l-75.7-44.5
+			C106.2,13.8,104.3,13.8,102.7,14.7z M162.5,144l-56,31.8c-1.6,0.9-3.5,0.9-5.1,0l-55.5-32.7c-1.6-0.9-2.5-2.6-2.5-4.4l0.5-64.4
+			c0-1.8,1-3.5,2.6-4.4l56-31.9c1.6-0.9,3.5-0.9,5.1,0l55.5,32.7c1.6,0.9,2.5,2.6,2.5,4.4l-0.5,64.4
+			C165.1,141.4,164.1,143.1,162.5,144z"/>
+		<path class="st0" d="M77.1,1.3L77.1,1.3c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1
+			c-0.1,0-0.1,0.1-0.2,0.1s-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2
+			c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2s-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2s-0.1,0.1-0.1,0.2
+			c0,0.1,0,0.1-0.1,0.2c0,0.1,0,0.1-0.1,0.2c0,0.1,0,0.1,0,0.2s0,0.1,0,0.2s0,0.1,0,0.2s0,0.1,0,0.2c0,0.1,0,0.1,0,0.2s0,0.1,0,0.2
+			s0,0.1,0,0.2c0,0.1,0,0.1,0,0.2s0,0.1,0,0.2s0,0.1,0,0.2c0,0.1,0,0.1,0.1,0.2c0,0.1,0,0.1,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2
+			c0,0.1,0,0.1,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2s0.1,0.1,0.1,0.2l0,0l0,0c0,0.1,0.1,0.1,0.1,0.2s0.1,0.1,0.1,0.2s0.1,0.1,0.1,0.2
+			c0,0.1,0.1,0.1,0.1,0.2C75.9,8,76,8,76,8c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1
+			c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0.1,0.2,0.1
+			c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.1,0,0.2,0.1c0.1,0,0.1,0,0.2,0.1c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0
+			c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0l0,0L69.6,27L48,14c2.4-2.6,2.9-6.5,1.1-9.7
+			c-2.3-4-7.3-5.4-11.3-3.1s-5.4,7.3-3.1,11.3c1.9,3.3,5.7,4.8,9.2,3.9l-1,25.9l-21-0.4c0.8-1.3,0.8-2.9,0-4.3l0,0
+			c-1.2-2.1-3.8-2.8-5.9-1.6l0,0c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2l-0.1,0.1
+			c-0.1,0.1-0.1,0.1-0.2,0.2L15,36.8c-0.1,0.1-0.2,0.2-0.2,0.3c0,0,0,0,0,0.1c-0.1,0.1-0.1,0.2-0.2,0.3l0,0
+			c-0.1,0.1-0.1,0.2-0.2,0.3l0,0c-0.1,0.1-0.1,0.2-0.2,0.4l0,0c0,0.1-0.1,0.3-0.1,0.4l0,0c0,0.1-0.1,0.2-0.1,0.4l0,0
+			c0,0.1,0,0.3,0,0.4l0,0c0,0.1,0,0.2,0,0.4l0,0c0,0.1,0,0.2,0,0.4c0,0,0,0,0,0.1s0,0.2,0.1,0.3v0.1c0,0.1,0.1,0.2,0.1,0.3v0.1
+			c0,0.1,0.1,0.2,0.1,0.3c0,0,0,0.1,0.1,0.1c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2l0,0l0,0c0,0.1,0.1,0.1,0.1,0.1
+			c0,0.1,0.1,0.2,0.1,0.2s0,0,0.1,0.1s0.1,0.2,0.2,0.3l0,0c1,1.2,2.6,1.7,4.1,1.3l0,0c0.1,0,0.3-0.1,0.4-0.1h0.1
+			c0.1,0,0.2-0.1,0.3-0.1s0.1-0.1,0.2-0.1c0.1,0,0.2-0.1,0.2-0.1l0,0l0,0c0,0,0.1,0,0.1-0.1l24.8,27.3l47.1-26.8L81.7,8.6
+			c1.8-1.3,2.4-3.7,1.3-5.7l0,0C81.8,0.8,79.1,0.1,77.1,1.3z"/>
+	</g>
+</g>
+</svg>

+ 25 - 0
src/assets/seo/changweici.svg

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#58CBA8;}
+</style>
+<title>指定词备份</title>
+<desc>Created with Sketch.</desc>
+<g id="页面-1">
+	<g id="指定词备份">
+		<path id="形状" class="st0" d="M159.9,0.8H40c-14.7,0-26.7,12-26.7,26.9v144.6c0,14.8,12,26.9,26.7,26.9h120
+			c14.7,0,26.7-12,26.7-26.9V27.7C186.6,12.8,174.6,0.8,159.9,0.8z M173.4,172.2c0,7.4-6,13.4-13.3,13.4H40c-7.4,0-13.3-6-13.3-13.4
+			V27.7c0-7.4,6-13.4,13.3-13.4h120c7.4,0,13.3,6,13.3,13.4V172.2z"/>
+		<path id="路径" class="st0" d="M49.3,88.1H124c3.7,0,6.6-2.9,6.6-6.7c0-3.8-3-6.7-6.6-6.7H49.3c-3.7,0-6.6,3-6.6,6.7
+			C42.5,85.1,45.5,88.1,49.3,88.1z"/>
+		<path id="路径_1_" class="st0" d="M150.6,36.1H49.3c-3.7,0-6.6,2.9-6.6,6.7c0,3.8,2.9,6.7,6.6,6.7h101.4c3.7,0,6.6-2.9,6.6-6.7
+			C157.2,39,154.4,36.1,150.6,36.1z"/>
+		<path id="路径_2_" class="st0" d="M137.3,113.2h-88c-3.7,0-6.6,3-6.6,6.7l0,0c0,3.8,2.9,6.7,6.6,6.7h88c3.7,0,6.6-3,6.6-6.7l0,0
+			C143.9,116.2,141,113.2,137.3,113.2z"/>
+		<path id="路径_3_" class="st0" d="M149,151.8H49.3c-3.7,0-6.6,3-6.6,6.7l0,0c0,3.8,2.9,6.7,6.6,6.7H149c3.7,0,6.6-3,6.6-6.7l0,0
+			C155.6,154.7,152.8,151.8,149,151.8z"/>
+	</g>
+</g>
+</svg>

+ 27 - 0
src/assets/seo/dachengshijian.svg

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#F0B357;}
+</style>
+<title>日历备份</title>
+<desc>Created with Sketch.</desc>
+<g id="页面-1">
+	<g id="日历备份">
+		<path id="形状" class="st0" d="M172.5,200h-145C12.5,200,0,187.5,0,172.5V40c0-15,12.5-27.5,27.5-27.5h10c3.8,0,6.2,2.5,6.2,6.2
+			v18.8c0,7.5,5,12.5,12.5,12.5s12.5-5,12.5-12.5V18.7c-1.2-3.7,2.5-6.2,5-6.2h50c3.8,0,6.3,2.5,6.3,6.2v18.8
+			c0,7.5,5,12.5,12.5,12.5S155,45,155,37.5V18.7c0-3.7,2.5-6.2,6.2-6.2h11.2c15,0,27.5,12.5,27.5,27.5v133.8
+			C200,187.5,187.5,200,172.5,200z M27.5,25c-8.8,0-15,6.2-15,15v133.8c0,7.5,6.2,13.8,15,13.8h146.2c7.5,0,15-6.2,15-15V40
+			c-1.2-8.8-7.5-15-16.2-15h-5v12.5c0,13.8-11.2,25-25,25s-25-11.2-25-25V25H80v12.5c0,13.8-11.2,25-25,25s-25-11.2-25-25V25H27.5z"
+			/>
+		<path id="路径" class="st0" d="M88.8,159.7L88.8,159.7L88.8,159.7c1.4,1.3,3.2,2,5.3,2c2,0,3.9-0.8,5.3-2h0l0,0
+			c0.2-0.2,0.4-0.4,0.6-0.6l58.2-58.2c3.1-3.1,3.1-8.1,0-11.1c-3.1-3.1-8.1-3.1-11.1,0l-52.9,52.9l-30.6-30.6
+			c-3.1-3.1-8.1-3.1-11.1,0c-3.1,3.1-3.1,8.1,0,11.1l35.9,35.9C88.4,159.3,88.6,159.5,88.8,159.7z"/>
+		<path id="路径_1_" class="st0" d="M55,43.7c-2.5,0-6.2-2.5-6.2-6.2V6.2C48.8,2.5,52.5,0,55,0c2.5,0,6.2,2.5,6.2,6.2v31.2
+			C61.2,41.2,58.7,43.7,55,43.7z"/>
+		<path id="路径_2_" class="st0" d="M142.5,43.7c-3.8,0-6.2-2.5-6.2-6.2V6.2c0-3.7,2.5-6.2,6.2-6.2s6.2,2.5,6.2,6.2v31.2
+			C148.8,41.2,146.2,43.7,142.5,43.7z"/>
+	</g>
+</g>
+</svg>

+ 34 - 0
src/assets/seo/dachengtianshu.svg

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#58CBA8;}
+</style>
+<title>分期-出行天数备份</title>
+<desc>Created with Sketch.</desc>
+<g id="页面-1">
+	<g id="分期_xFF0D_出行天数备份">
+		<path id="形状" class="st0" d="M172.5,200h-145C12.5,200,0,187.5,0,172.5V40c0-15,12.5-27.5,27.5-27.5h10c3.8,0,6.2,2.5,6.2,6.2
+			v18.8c0,7.5,5,12.5,12.5,12.5s12.5-5,12.5-12.5V18.7c-1.2-3.7,2.5-6.2,5-6.2h50c3.8,0,6.3,2.5,6.3,6.2v18.8
+			c0,7.5,5,12.5,12.5,12.5S155,45,155,37.5V18.7c0-3.7,2.5-6.2,6.2-6.2h11.2c15,0,27.5,12.5,27.5,27.5v133.8
+			C200,187.5,187.5,200,172.5,200z M27.5,25c-8.8,0-15,6.2-15,15v133.8c0,7.5,6.2,13.8,15,13.8h146.2c7.5,0,15-6.2,15-15V40
+			c-1.2-8.8-7.5-15-16.2-15h-5v12.5c0,13.8-11.2,25-25,25s-25-11.2-25-25V25H80v12.5c0,13.8-11.2,25-25,25s-25-11.2-25-25V25H27.5z"
+			/>
+		<path id="路径" class="st0" d="M55,43.7c-2.5,0-6.2-2.5-6.2-6.2V6.2C48.8,2.5,52.5,0,55,0c2.5,0,6.2,2.5,6.2,6.2v31.2
+			C61.2,41.2,58.7,43.7,55,43.7z"/>
+		<path id="路径_1_" class="st0" d="M142.5,43.7c-3.8,0-6.2-2.5-6.2-6.2V6.2c0-3.7,2.5-6.2,6.2-6.2s6.2,2.5,6.2,6.2v31.2
+			C148.8,41.2,146.2,43.7,142.5,43.7z"/>
+		<polygon id="路径_2_" class="st0" points="37.5,81.2 56.2,81.2 56.2,100 37.5,100 		"/>
+		<polygon id="路径_3_" class="st0" points="68.8,81.2 87.5,81.2 87.5,100 68.8,100 		"/>
+		<polygon id="路径_4_" class="st0" points="100,81.2 118.8,81.2 118.8,100 100,100 		"/>
+		<polygon id="路径_5_" class="st0" points="131.2,81.2 150,81.2 150,100 131.2,100 		"/>
+		<polygon id="路径_6_" class="st0" points="37.5,112.5 56.2,112.5 56.2,131.2 37.5,131.2 		"/>
+		<polygon id="路径_7_" class="st0" points="68.8,112.5 87.5,112.5 87.5,131.2 68.8,131.2 		"/>
+		<polygon id="路径_8_" class="st0" points="100,112.5 118.8,112.5 118.8,131.2 100,131.2 		"/>
+		<polygon id="路径_9_" class="st0" points="131.2,112.5 150,112.5 150,131.2 131.2,131.2 		"/>
+		<polygon id="路径_10_" class="st0" points="37.5,143.7 56.2,143.7 56.2,162.5 37.5,162.5 		"/>
+		<polygon id="路径_11_" class="st0" points="68.8,143.7 87.5,143.7 87.5,162.5 68.8,162.5 		"/>
+	</g>
+</g>
+</svg>

+ 1 - 0
src/assets/seo/fangwenliang.svg

@@ -0,0 +1 @@
+<svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M415.7 587.3c-59.6 0-115.6-23.2-157.7-65.3-42.1-42.1-65.3-98.2-65.3-157.7s23.2-115.6 65.3-157.7 98.2-65.3 157.7-65.3 115.6 23.2 157.7 65.3c42.1 42.1 65.3 98.2 65.3 157.7S615.5 479.9 573.4 522c-42.1 42.1-98.2 65.3-157.7 65.3z m0-386.2c-89.9 0-163.1 73.2-163.1 163.1 0 89.9 73.2 163.1 163.1 163.1 89.9 0 163.1-73.2 163.1-163.1-0.1-89.9-73.2-163.1-163.1-163.1z" fill="#333333" /><path d="M767.5 879.1h-60c0-77.9-30.4-151.2-85.5-206.3s-128.4-85.5-206.3-85.5-151.2 30.4-206.3 85.5-85.5 128.4-85.5 206.3h-60c0-47.5 9.3-93.6 27.7-136.9 17.7-41.9 43.1-79.5 75.4-111.8 32.3-32.3 69.9-57.7 111.8-75.4 43.4-18.4 89.5-27.7 136.9-27.7s93.6 9.3 136.9 27.7c41.9 17.7 79.5 43.1 111.8 75.4 32.3 32.3 57.7 69.9 75.4 111.8 18.4 43.3 27.7 89.4 27.7 136.9z" fill="#333333" /><path d="M714.5 519.9l-26.2-54c51.5-25.1 83.6-72.4 83.6-123.4 0-78-73.2-141.4-163.1-141.4v-60c58.9 0 114.5 20.5 156.4 57.8 43 38.1 66.6 89.2 66.6 143.6 0 74.2-44.9 142.2-117.3 177.4z" fill="#F0C900" /><path d="M960.5 814.7h-60c0-70.4-23.9-138.7-67.2-192.3-42.6-52.6-101.4-88.2-165.7-100l10.9-59C756.9 477.9 828.4 521 880 584.7c51.9 64.2 80.5 145.9 80.5 230z" fill="#F0C900" /></svg>

+ 13 - 0
src/assets/seo/lianjieshu.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="200px" height="200px" viewBox="0 0 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 63 (92445) - https://sketch.com -->
+    <title>链接数备份 3</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="链接数备份-3" fill="#ED997C" fill-rule="nonzero">
+            <path d="M196.7,46.3 L153.7,3.3 C149.3,-1.1 142,-1.1 137.6,3.3 L83.9,57 C79.5,61.4 79.5,68.7 83.9,73.1 L83.9,73.1 L92,81.2 C93.5,82.7 95.9,82.7 97.4,81.2 L102.8,75.8 C104.3,74.3 104.3,71.9 102.8,70.4 L97.4,65 L145.7,16.7 L183.3,54.3 L135,102.6 L129.6,97.2 C128.1,95.7 125.7,95.7 124.2,97.2 L118.8,102.6 C117.3,104.1 117.3,106.5 118.8,108 L126.9,116.1 L126.9,116.1 C129.1,118.3 132,119.4 135,119.4 C137.9,119.4 140.8,118.3 143.1,116.1 L196.8,62.4 C201.1,58 201.1,50.7 196.7,46.3 Z" id="路径"></path>
+            <path d="M57,143 C58.5,144.5 60.4,145.2 62.4,145.2 C64.3,145.2 66.3,144.5 67.8,143 L143,67.8 C146,64.8 146,60 143,57.1 C140,54.1 135.2,54.1 132.3,57.1 L57,132.2 C54.1,135.2 54.1,140 57,143 Z" id="路径"></path>
+            <path d="M116.1,126.8 L108,118.7 C106.5,117.2 104.1,117.2 102.6,118.7 L97.2,124.1 C95.7,125.6 95.7,128 97.2,129.5 L102.6,134.9 L54.3,183.2 L16.7,145.6 L65,97.3 L70.4,102.7 C71.9,104.2 74.3,104.2 75.8,102.7 L81.2,97.3 C82.7,95.8 82.7,93.4 81.2,91.9 L73.1,83.8 L73.1,83.8 C68.7,79.4 61.4,79.4 57,83.8 L3.3,137.6 C1.1,139.8 0,142.6 0,145.7 C0,148.7 1.2,151.6 3.3,153.7 L46.3,196.7 C48.5,198.9 51.3,200 54.4,200 L54.4,200 C57.4,200 60.3,198.8 62.5,196.7 L116.2,143 C120.6,138.5 120.6,131.3 116.1,126.8 Z" id="路径"></path>
+        </g>
+    </g>
+</svg>

+ 29 - 0
src/assets/seo/shengyufuwutianshu.svg

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#7C98FC;}
+</style>
+<title>日期 (1)备份</title>
+<desc>Created with Sketch.</desc>
+<g id="页面-1">
+	<g id="日期-_x28_1_x29_备份">
+		<path id="形状" class="st0" d="M145,200c-29,0-52.5-23.5-52.5-52.5c0-29,23.5-52.5,52.5-52.5c29,0,52.5,23.5,52.5,52.5
+			C197.5,176.5,174,200,145,200z M145,105c-23.5,0-42.5,19-42.5,42.5s19,42.5,42.5,42.5s42.5-19,42.5-42.5S168.5,105,145,105z
+			 M166.4,164.8l-25.9-10.1c0,0,0,0,0,0c-0.3-0.1-0.5-0.3-0.7-0.5c-0.3-0.2-0.6-0.3-0.8-0.5c-0.6-0.6-1-1.4-1.2-2.2
+			c-0.1-0.4-0.2-0.8-0.2-1.2v-25.3c0-2.7,2.2-4.8,4.8-4.8h0.4c2.7,0,4.8,2.2,4.8,4.8v22.1l22,8.6c2.4,0.9,3.6,3.8,2.7,6.3
+			C171.4,164.4,168.8,165.7,166.4,164.8z M152.5,35c0-5.5-4.5-10-10-10h-10V15h10c11,0,20,9,20,20v52.5c-3.2-0.9-6.6-1.6-10-2V35z
+			 M122.7,40h-0.4c-2.7,0-4.8-2.2-4.8-4.8V4.8c0-2.7,2.2-4.8,4.8-4.8h0.4c2.7,0,4.8,2.2,4.8,4.8v30.4C127.5,37.9,125.4,40,122.7,40z
+			 M52.5,15h60v10h-60V15z M42.7,40h-0.4c-2.7,0-4.8-2.2-4.8-4.8V4.8c0-2.7,2.2-4.8,4.8-4.8h0.4c2.7,0,4.8,2.2,4.8,4.8v30.4
+			C47.5,37.9,45.4,40,42.7,40z M42.5,69.8v0.5c0,2.6-2.1,4.7-4.7,4.7h-0.5c-2.6,0-4.7-2.1-4.7-4.7v-0.5c0-2.6,2.1-4.7,4.7-4.7h0.5
+			C40.4,65,42.5,67.1,42.5,69.8z M37.8,105h-0.5c-2.6,0-4.7-2.1-4.7-4.7v-0.5c0-2.6,2.1-4.7,4.7-4.7h0.5c2.6,0,4.7,2.1,4.7,4.7v0.5
+			C42.5,102.9,40.4,105,37.8,105z M42.5,130.3c0,2.6-2.1,4.7-4.7,4.7h-0.5c-2.6,0-4.7-2.1-4.7-4.7v-0.5c0-2.6,2.1-4.7,4.7-4.7h0.5
+			c2.6,0,4.7,2.1,4.7,4.7V130.3z M57.3,125h29.4c-1.2,3.2-2.3,6.5-3,10H57.3c-2.7,0-4.8-2.2-4.8-4.8v-0.4
+			C52.5,127.2,54.7,125,57.3,125z M52.5,70.3v-0.6c0-2.6,2.1-4.7,4.7-4.7h75.7c2.6,0,4.7,2.1,4.7,4.7v0.6c0,2.6-2.1,4.7-4.7,4.7
+			H57.2C54.6,75,52.5,72.9,52.5,70.3z M57.3,105c-2.7,0-4.8-2.2-4.8-4.8v-0.4c0-2.7,2.2-4.8,4.8-4.8h53.9c-4.4,2.8-8.4,6.2-11.9,10
+			L57.3,105L57.3,105z M12.5,35v130c0,5.5,4.5,10,10,10h66.4c1.7,3.6,3.8,6.9,6.2,10.1H22.5c-11,0-20-9-20-20V35c0-11,9-20,20-20h10
+			v10h-10C17,25,12.5,29.4,12.5,35z"/>
+	</g>
+</g>
+</svg>

+ 21 - 0
src/assets/seo/wenzhangshu.svg

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#71B1EC;}
+</style>
+<title>文章数备份 5</title>
+<desc>Created with Sketch.</desc>
+<g id="页面-1">
+	<g id="文章数备份-5">
+		<path id="形状" class="st0" d="M32.2,154.8h110.3v6.4c0,14.6,3.5,21.2,10.6,22.4c6.2-1,10.8-6.4,10.8-12.7V36.8
+			c-0.4-19.3,7.8-30.6,23.8-30.6v12.9c-7.8,0-11.2,4.7-10.9,17.6V171c0,12.8-9.4,23.7-22,25.5v0.3h-129C11.5,196.8,0,185.2,0,171
+			v-16.1h19.4V29c0-14.3,11.5-25.8,25.8-25.8h131c15.4,0,23.8,10.1,23.8,27.5v30.5h-29.6V48.3h16.7V30.7c0-10.7-3.2-14.6-10.9-14.6
+			h-131c-7.1,0-12.9,5.8-12.9,12.9L32.2,154.8L32.2,154.8z M58.8,183.9H134c-2.2-4.4-3.6-9.8-4.1-16.1h-117v3.2
+			c0,7.1,5.8,12.9,12.9,12.9H58.8z M54.2,69.4c-3.6,0-6.4-2.9-6.4-6.4s2.9-6.4,6.4-6.4h87.1c3.6,0,6.4,2.9,6.4,6.4s-2.9,6.4-6.4,6.4
+			H54.2z M54.3,104.9c-3.6,0-6.4-2.9-6.4-6.4s2.9-6.4,6.4-6.4h44.1c3.6,0,6.4,2.9,6.4,6.4s-2.9,6.4-6.4,6.4
+			C98.3,104.9,54.3,104.9,54.3,104.9z"/>
+	</g>
+</g>
+</svg>

+ 23 - 0
src/assets/seo/xunpanshu.svg

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#7C98FC;}
+</style>
+<title>询盘数</title>
+<desc>Created with Sketch.</desc>
+<g id="页面-1">
+	<g id="询盘数">
+		<path id="形状" class="st0" d="M181.4,173.1H59c-10.2,0-18.3-8.3-18.3-18.3V83.5c0-10.2,8.3-18.3,18.3-18.3h122.4
+			c10.2,0,18.3,8.3,18.3,18.3v71.3C199.7,164.7,191.6,173.1,181.4,173.1z M59,75.4c-4.3,0-7.8,3.5-7.8,7.8v71.3
+			c0,4.3,3.5,7.8,7.8,7.8h122.4c4.3,0,7.8-3.5,7.8-7.8v-71c0-4.3-3.5-7.8-7.8-7.8H59V75.4z"/>
+		<path id="路径" class="st0" d="M120.3,124.4c-1.1,0-1.9-0.3-2.7-0.8L69.2,92.6c-2.4-1.6-3.2-4.8-1.6-7.3
+			c1.6-2.4,4.8-3.2,7.3-1.6l45.5,29.1l45.5-29.1c2.4-1.6,5.7-0.8,7.3,1.6c1.6,2.4,0.8,5.7-1.6,7.3L123,123.5
+			C122.2,124.1,121.1,124.4,120.3,124.4L120.3,124.4z"/>
+		<path id="路径_1_" class="st0" d="M18.9,134.8c-10.2,0-18.6-8.3-18.6-18.3V45.2c0-10.2,8.3-18.3,18.3-18.3H141
+			c10.2,0,18.3,8.3,18.3,18.3c0,3-2.4,5.4-5.4,5.4s-5.4-2.4-5.4-5.4c0-4.3-3.5-7.8-7.8-7.8H18.9c-4.3,0-7.8,3.5-7.8,7.8v71.3
+			c0,4.3,3.5,7.8,7.8,7.8c3,0,5.4,2.4,5.4,5.4S21.8,134.8,18.9,134.8z"/>
+	</g>
+</g>
+</svg>

+ 27 - 0
src/assets/seo/zhidingci.svg

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#F0B357;}
+</style>
+<title>全部备份</title>
+<desc>Created with Sketch.</desc>
+<g id="页面-1">
+	<g id="全部备份">
+		<path id="形状" class="st0" d="M142,25H35.7C22.6,25,12,35.7,12,48.7v127.2c0,13,10.6,23.7,23.7,23.7H142
+			c13,0,23.7-10.6,23.7-23.7V48.6C165.7,35.6,155.1,25,142,25z M153.9,175.8c0,6.5-5.3,11.8-11.8,11.8H35.7
+			c-6.5,0-11.8-5.3-11.8-11.8V48.6c0-6.5,5.3-11.8,11.8-11.8H142c6.5,0,11.8,5.3,11.8,11.8V175.8z"/>
+		<path id="路径" class="st0" d="M43.9,101.7h66.2c3.3,0,5.9-2.6,5.9-5.9c0-3.3-2.6-5.9-5.9-5.9H43.9c-3.3,0-5.9,2.6-5.9,5.9
+			C38.1,99.2,40.6,101.7,43.9,101.7z"/>
+		<path id="路径_1_" class="st0" d="M86.5,56.1H43.9c-3.3,0-5.9,2.6-5.9,5.9s2.6,5.9,5.9,5.9h42.6c3.3,0,5.9-2.6,5.9-5.9
+			S89.8,56.1,86.5,56.1z"/>
+		<path id="路径_2_" class="st0" d="M43.9,169.1h66.2c3.3,0,5.9-2.6,5.9-5.9c0-3.3-2.6-5.9-5.9-5.9H43.9c-3.3,0-5.9,2.6-5.9,5.9
+			C38.1,166.5,40.6,169.1,43.9,169.1z"/>
+		<path id="路径_3_" class="st0" d="M86.5,123.3H43.9c-3.3,0-5.9,2.6-5.9,5.9c0,3.3,2.6,5.9,5.9,5.9h42.6c3.3,0,5.9-2.6,5.9-5.9
+			C92.4,125.9,89.8,123.3,86.5,123.3z"/>
+		<path id="路径_4_" class="st0" d="M164.4,0.4H58.1C46.3,0.4,36.6,9,34.7,20.2h12.1c1.6-4.6,6-8,11.1-8h106.4
+			c6.5,0,11.8,5.3,11.8,11.8v127.2c0,4.3-2.3,8.1-5.8,10.1v12.7c10-2.7,17.6-11.9,17.6-22.9V24.1C188,11.1,177.4,0.4,164.4,0.4z"/>
+	</g>
+</g>
+</svg>

+ 64 - 0
src/views/adweb/serp/SeoKpiStatistics.api.ts

@@ -0,0 +1,64 @@
+import {defHttp} from '/@/utils/http/axios';
+import { useMessage } from "/@/hooks/web/useMessage";
+
+const { createConfirm } = useMessage();
+
+enum Api {
+  list = '/serp/seoKpiStatistics/list',
+  save='/serp/seoKpiStatistics/add',
+  edit='/serp/seoKpiStatistics/edit',
+  deleteOne = '/serp/seoKpiStatistics/delete',
+  deleteBatch = '/serp/seoKpiStatistics/deleteBatch',
+  importExcel = '/serp/seoKpiStatistics/importExcel',
+  exportXls = '/serp/seoKpiStatistics/exportXls',
+}
+/**
+ * 导出api
+ * @param params
+ */
+export const getExportUrl = Api.exportXls;
+/**
+ * 导入api
+ */
+export const getImportUrl = Api.importExcel;
+/**
+ * 列表接口
+ * @param params
+ */
+export const list = (params) =>
+  defHttp.get({url: Api.list, params});
+
+/**
+ * 删除单个
+ */
+export const deleteOne = (params,handleSuccess) => {
+  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
+    handleSuccess();
+  });
+}
+/**
+ * 批量删除
+ * @param params
+ */
+export const batchDelete = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认删除',
+    content: '是否删除选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}
+/**
+ * 保存或者更新
+ * @param params
+ */
+export const saveOrUpdate = (params, isUpdate) => {
+  let url = isUpdate ? Api.edit : Api.save;
+  return defHttp.post({url: url, params});
+}

+ 227 - 0
src/views/adweb/serp/SeoKpiStatistics.data.ts

@@ -0,0 +1,227 @@
+import {BasicColumn} from '/@/components/Table';
+import {FormSchema} from '/@/components/Table';
+import { rules} from '/@/utils/helper/validator';
+import { render } from '/@/utils/common/renderUtils';
+import { getWeekMonthQuarterYear } from '/@/utils';
+//列表数据
+export const columns: BasicColumn[] = [
+   {
+    title: '站点code或营销方案code',
+    align:"center",
+    dataIndex: 'hostCode'
+   },
+   {
+    title: '营销方案name',
+    align:"center",
+    dataIndex: 'planName'
+   },
+   {
+    title: '0营销方案,1站点',
+    align:"center",
+    dataIndex: 'type'
+   },
+   {
+    title: '指标名称',
+    align:"center",
+    dataIndex: 'kpiName'
+   },
+   {
+    title: '指标code',
+    align:"center",
+    dataIndex: 'kpiCode'
+   },
+   {
+    title: '指标目标',
+    align:"center",
+    dataIndex: 'kpiTarget'
+   },
+   {
+    title: '已完成目标',
+    align:"center",
+    dataIndex: 'finishTarget'
+   },
+   {
+    title: '0未完成、1完成',
+    align:"center",
+    dataIndex: 'finishStatus'
+   },
+   {
+    title: '完成时间',
+    align:"center",
+    dataIndex: 'finishTime'
+   },
+   {
+    title: '完成人的id',
+    align:"center",
+    dataIndex: 'finishUid'
+   },
+   {
+    title: '服务开始时间',
+    align:"center",
+    dataIndex: 'startTime'
+   },
+   {
+    title: '服务结束时间',
+    align:"center",
+    dataIndex: 'endTime'
+   },
+   {
+    title: '比重,总和为100',
+    align:"center",
+    dataIndex: 'proportion'
+   },
+   {
+    title: '排序',
+    align:"center",
+    dataIndex: 'sort'
+   },
+   {
+    title: '套餐id',
+    align:"center",
+    dataIndex: 'planId'
+   },
+   {
+    title: '对应套餐绑定表ID',
+    align:"center",
+    dataIndex: 'historyId'
+   },
+];
+//查询数据
+export const searchFormSchema: FormSchema[] = [
+];
+//表单数据
+export const formSchema: FormSchema[] = [
+  {
+    label: '站点code或营销方案code',
+    field: 'hostCode',
+    component: 'Input',
+  },
+  {
+    label: '营销方案name',
+    field: 'planName',
+    component: 'Input',
+  },
+  {
+    label: '0营销方案,1站点',
+    field: 'type',
+    component: 'InputNumber',
+  },
+  {
+    label: '指标名称',
+    field: 'kpiName',
+    component: 'Input',
+  },
+  {
+    label: '指标code',
+    field: 'kpiCode',
+    component: 'Input',
+    dynamicRules: ({model,schema}) => {
+          return [
+                 { required: true, message: '请输入指标code!'},
+          ];
+     },
+  },
+  {
+    label: '指标目标',
+    field: 'kpiTarget',
+    component: 'InputNumber',
+  },
+  {
+    label: '已完成目标',
+    field: 'finishTarget',
+    component: 'InputNumber',
+  },
+  {
+    label: '0未完成、1完成',
+    field: 'finishStatus',
+    component: 'InputNumber',
+  },
+  {
+    label: '完成时间',
+    field: 'finishTime',
+    component: 'DatePicker',
+    componentProps: {
+       showTime: true,
+       valueFormat: 'YYYY-MM-DD HH:mm:ss'
+     },
+  },
+  {
+    label: '完成人的id',
+    field: 'finishUid',
+    component: 'Input',
+  },
+  {
+    label: '服务开始时间',
+    field: 'startTime',
+    component: 'DatePicker',
+    componentProps: {
+       showTime: true,
+       valueFormat: 'YYYY-MM-DD HH:mm:ss'
+     },
+  },
+  {
+    label: '服务结束时间',
+    field: 'endTime',
+    component: 'DatePicker',
+    componentProps: {
+       showTime: true,
+       valueFormat: 'YYYY-MM-DD HH:mm:ss'
+     },
+  },
+  {
+    label: '比重,总和为100',
+    field: 'proportion',
+    component: 'InputNumber',
+  },
+  {
+    label: '排序',
+    field: 'sort',
+    component: 'InputNumber',
+  },
+  {
+    label: '套餐id',
+    field: 'planId',
+    component: 'Input',
+  },
+  {
+    label: '对应套餐绑定表ID',
+    field: 'historyId',
+    component: 'Input',
+  },
+	// TODO 主键隐藏字段,目前写死为ID
+	{
+	  label: '',
+	  field: 'id',
+	  component: 'Input',
+	  show: false
+	},
+];
+
+// 高级查询数据
+export const superQuerySchema = {
+  hostCode: {title: '站点code或营销方案code',order: 0,view: 'text', type: 'string',},
+  planName: {title: '营销方案name',order: 1,view: 'text', type: 'string',},
+  type: {title: '0营销方案,1站点',order: 2,view: 'number', type: 'number',},
+  kpiName: {title: '指标名称',order: 3,view: 'text', type: 'string',},
+  kpiCode: {title: '指标code',order: 4,view: 'text', type: 'string',},
+  kpiTarget: {title: '指标目标',order: 5,view: 'number', type: 'number',},
+  finishTarget: {title: '已完成目标',order: 6,view: 'number', type: 'number',},
+  finishStatus: {title: '0未完成、1完成',order: 7,view: 'number', type: 'number',},
+  finishTime: {title: '完成时间',order: 8,view: 'datetime', type: 'string',},
+  finishUid: {title: '完成人的id',order: 9,view: 'text', type: 'string',},
+  startTime: {title: '服务开始时间',order: 10,view: 'datetime', type: 'string',},
+  endTime: {title: '服务结束时间',order: 11,view: 'datetime', type: 'string',},
+  proportion: {title: '比重,总和为100',order: 12,view: 'number', type: 'number',},
+  sort: {title: '排序',order: 13,view: 'number', type: 'number',},
+  planId: {title: '套餐id',order: 15,view: 'text', type: 'string',},
+  historyId: {title: '对应套餐绑定表ID',order: 16,view: 'text', type: 'string',},
+};
+
+/**
+* 流程表单调用这个方法获取formSchema
+* @param param
+*/
+export function getBpmFormSchema(_formData): FormSchema[]{
+  // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema
+  return formSchema;
+}

+ 1356 - 0
src/views/adweb/serp/SeoKpiStatisticsList.vue

@@ -0,0 +1,1356 @@
+<template>
+  <div class="seo_keywords_rank_wrap">
+    <a-row class="r1" style="margin: 20px;">
+      <a-col :span="24">
+        <span class="t1" >{{siteinfo.length > 1 ? '请选择站点:' : '套餐:'}}</span>
+        <select-site v-if="siteinfo.length > 1" @comMethods="changeSite"  selectWidth="300px" />
+        <span style="margin-left: 16px" class="t1">{{ (selectSiteInfo.planName  && selectSiteInfo.planType !== "STATIONCONSTRUCTION") ? selectSiteInfo.planName : '暂无SEO推广套餐~' }}
+          <a-popover placement="bottom" v-show="selectSiteInfo.planName  && selectSiteInfo.planType !== 'STATIONCONSTRUCTION'">
+            <template #content>
+              <span v-show="comprehenInfo.specifyKeywordNum != null">
+                 指定词数:{{ comprehenInfo.specifyKeywordNum | last }}&nbsp;
+              </span>
+             <span v-show="comprehenInfo.longTailKeywordNum != null">
+                 关键词数:{{ comprehenInfo.longTailKeywordNum | last }}&nbsp;
+              </span>
+              <span v-show="comprehenInfo.outerLinkNum != null">
+                  外链数:{{ comprehenInfo.outerLinkNum | last }}&nbsp;
+              </span>
+              <span v-show="comprehenInfo.articleNum != null">
+                  文章数:{{ comprehenInfo.articleNum | last }}
+              </span>
+            </template>
+            <img src="https://cutomer-static-bucket.s3.cn-northwest-1.amazonaws.com.cn/public/material/220803883dfy/document/changjianwenti_1676606434975.png" alt="issue" width="25px" height="25px"/>
+          </a-popover>
+        </span>
+      </a-col>
+    </a-row>
+    <a-row class="r2" type="flex" justify="center" align="middle">
+      <a-col :span="4">
+        <p class="t1"><img src="../../../assets/seo/zhidingci.svg"/>指定词</p>
+        <p class="t2" v-if="comprehenInfo.specifyKeywordNum == null">
+          -
+        </p>
+        <p class="t2" v-else>
+          <a @click="changeKeywordType()">{{ comprehenInfo.specifyKeywordNum }}</a>
+        </p>
+      </a-col>
+      <a-col :span="4">
+        <p class="t1"><img src="../../../assets/seo/changweici.svg"/>关键词</p>
+        <p class="t2" v-if="comprehenInfo.longTailKeywordNum == null">
+          -
+        </p>
+        <p class="t2" v-else>
+          <a @click="longChangeKeywordType()">{{ comprehenInfo.longTailKeywordNum }}</a>
+        </p>
+      </a-col>
+      <a-col :span="4">
+        <p class="t1"><img src="../../../assets/seo/lianjieshu.svg"/>外链数</p>
+        <p class="t2" v-if="comprehenInfo.outerLinkNum == null">
+          -
+        </p>
+        <p class="t2" >
+          <span>{{ comprehenInfo.outerLinkNum }}</span>
+        </p>
+      </a-col>
+      <a-col :span="4">
+        <p class="t1"><img src="../../../assets/seo/wenzhangshu.svg"/>文章数</p>
+        <p class="t2" v-if="comprehenInfo.articleNum == null">
+          -
+        </p>
+        <p class="t2">
+          <span>{{ comprehenInfo.articleNum }}</span>
+        </p>
+      </a-col>
+      <a-col :span="4">
+        <p class="t1"><img src="../../../assets/seo/xunpanshu.svg"/>询盘数</p>
+        <p class="t2" v-if="comprehenInfo.enquiryNum == null">
+          -
+        </p>
+        <p class="t2" v-else>
+          <router-link :to="{path:'/inquiry/list'}">
+            {{ comprehenInfo.enquiryNum }}
+          </router-link>
+        </p>
+      </a-col>
+      <a-col :span="4">
+        <!--  只有当客户存在访问量指标且大于0才展示-->
+        <p class="t1"><img src="../../../assets/seo/fangwenliang.svg"/>访问量</p>
+        <p class="t2" v-if="comprehenInfo.uvNum == null">
+          -
+        </p>
+        <p class="t2" v-else>
+          <router-link :to="{path:'/adweb/insight/flowAnalysis',query:{dateType:'All'}}">
+            {{ comprehenInfo.uvNum }}
+          </router-link>
+        </p>
+      </a-col>
+    </a-row>
+
+    <a-row class="r3" type="flex"  :gutter="16">
+      <a-col :span="8" v-if="comprehenInfo.specifyKeywordNum != null || isBuildVersion">
+        <div class="wrap">
+          <p class="t1">指定词排名</p>
+          <div class="content">
+            <div class="d1"><img src="../../../assets/seo/NO1.svg"/>1-10位</div>
+            <div class="d2"><a @click="getTableInfoRank(3,1)">{{ rankInfo.appointKeyword.firstNum | filtr_null }}</a>个
+            </div>
+          </div>
+          <div class="content">
+            <div class="d1"><img src="../../../assets/seo/NO2.svg"/>11-30位</div>
+            <div class="d2"><a @click="getTableInfoRank(7,1)">{{
+                rankInfo.appointKeyword.secondNum | filtr_null }}</a>个
+            </div>
+          </div>
+          <div class="content">
+            <div class="d1"><img src="../../../assets/seo/NO3.svg"/>31-100位</div>
+            <div class="d2"><a @click="getTableInfoRank(8,1)">{{
+                rankInfo.appointKeyword.thirdType | filtr_null}}</a>个
+            </div>
+          </div>
+        </div>
+      </a-col>
+      <a-col :span="8" v-if="comprehenInfo.longTailKeywordNum != null || isBuildVersion">
+        <div class="wrap">
+          <p class="t1">关键词排名</p>
+          <div class="content">
+            <div class="d1"><img src="../../../assets/seo/NO1.svg"/>1-10位</div>
+            <div class="d2">
+              <a @click="longGetTableInfoRank(3)">{{ rankInfo.longTailKeyword.firstNum | filtr_null}}</a>个
+            </div>
+          </div>
+          <div class="content">
+            <div class="d1"><img src="../../../assets/seo/NO2.svg"/>11-30位</div>
+            <div class="d2"><a @click="longGetTableInfoRank(7)">{{
+                rankInfo.longTailKeyword.secondNum | filtr_null}}</a>个
+            </div>
+          </div>
+          <div class="content">
+            <div class="d1"><img src="../../../assets/seo/NO3.svg"/>31-100位</div>
+            <div class="d2"><a @click="longGetTableInfoRank(8)">{{
+                rankInfo.longTailKeyword.thirdType | filtr_null}}</a>个
+            </div>
+          </div>
+        </div>
+      </a-col>
+      <a-col :span="8">
+        <div class="wrap">
+          <p class="t1">服务情况</p>
+          <div class="content">
+            <div class="d1"><img src="../../../assets/seo/dachengshijian.svg"/>达成时间</div>
+            <div class="d2 d3"><span>{{
+                rankInfo.serverTime.reachStandardTime != null ? rankInfo.serverTime.reachStandardTime.substring(0,10) : '-'
+              }}</span></div>
+          </div>
+          <template v-if=" rankInfo.serverTime.planServiceEndStatus === 1">
+            <div class="content">
+              <div class="d1"><img src="../../../assets/seo/dachengtianshu.svg"/>服务天数</div>
+              <div class="d2 d3"><span>{{getServiceDays(rankInfo.serverTime.planStartTime)}}</span>天</div>
+            </div>
+          </template>
+          <template v-else>
+            <div class="content">
+              <div class="d1"><img src="../../../assets/seo/dachengtianshu.svg"/>达成天数</div>
+              <div class="d2 d3"><span>{{
+                  rankInfo.serverTime.reachStandardDays | filtr_null  }}</span>天</div>
+            </div>
+          </template>
+          <div class="content">
+            <div class="d1"><img src="../../../assets/seo/shengyufuwutianshu.svg"/>剩余服务天数</div>
+            <div class="d2 d3"><span>{{
+                rankInfo.serverTime.remainServerDays | filtr_null}}</span>天</div>
+          </div>
+        </div>
+      </a-col>
+    </a-row>
+    <a-row>
+
+    </a-row>
+    <a-row class="r4" v-if="comprehenInfo.specifyKeywordNum != null">
+      <a-card title="指定词" :bordered="false" style="width: 100%" >
+        <a-col :span="24">
+          <a-row  class="table-tool-wrap" type="flex">
+            <a-col :span="8">
+              <ul>
+                <li :class="{active:show==1}" @click="getTableInfoRank(1)">全部</li>
+                <li :class="{active:show==3}" @click="getTableInfoRank(3)">第一页</li>
+                <li :class="{active:show==4}" @click="getTableInfoRank(4)">前三页</li>
+                <li :class="{active:show==5}" @click="getTableInfoRank(5)">前五页</li>
+                <li :class="{active:show==6}" @click="getTableInfoRank(6)">前十页</li>
+              </ul>
+            </a-col>
+            <a-col :span="16" style="text-align: right">
+              <a-button type="link" @click="rankingClick" :style="rankingButtonStatus == false ? 'border-style: none;color: black !important;': 'border-style: none;color: #544BEB !important;'">
+                按排名<a-icon :type="rankingButtonArrow" v-if="rankingButtonStatus"/>
+              </a-button>
+              <a-button type="link" :style="wordsButtonStatus == false ? 'margin-right: 16px;border-style: none;color: black !important;': 'margin-right: 16px;border-style: none;color: #544BEB !important;'" @click="wordsClick">
+                按字数<a-icon :type="wordsButtonArrow" v-if="wordsButtonStatus"/>
+              </a-button>
+
+              <a-input
+                placeholder="请输入关键词"
+                style="width: 200px;margin-right: 8px"
+                v-model="keywords"
+              >
+              </a-input>
+              <a-button type="primary" preIcon="ant-design:search-outlined" style="margin-right: 8px" @click="setTable">
+                查询
+              </a-button>
+
+              <a-button  ghost type="primary" preIcon="ant-design:reload-outlined" @click="searchReset">
+                重置
+              </a-button>
+
+              <a-button ghost type="primary"  @click="handleExportXlsLU('关键词排名',1)" style="margin-left: 8px" :loading="excelLoading">导出Excel</a-button>
+            </a-col>
+          </a-row>
+        </a-col>
+
+        <a-col :span="24">
+          <a-table
+            ref="table"
+            size="middle"
+            :scroll="{x:true}"
+            rowKey="id"
+            :columns="columns"
+            :dataSource="dataSource"
+            :pagination="ipagination"
+            :loading="loading"
+            class="j-table-force-nowrap"
+
+            @change="handleTableChange">
+            <template slot='dataNo' slot-scope="text, record, rowIndex">
+              {{(ipagination.current - 1) * ipagination.pageSize + rowIndex + 1}}
+            </template>
+
+            <template class="title" slot="keywords" slot-scope="text,record">
+              <span style="white-space:pre">{{ text }}</span>
+              <span v-if="comprehenInfo.specifyKeywordNum != null && comprehenInfo.longTailKeywordNum != null">
+                <a-tag v-if="record.keywordType == 1" color="blue" style="margin-left: 8px">指定</a-tag>
+              </span>
+            </template>
+            <template slot="keywordsLength" slot-scope="text,record">
+              <span >{{ text }}</span>
+            </template>
+
+            <template class="tag" slot="tag" slot-scope="text, record, rowIndex">
+              <a-popover v-if="text != 0" placement="bottom"   overlayClassName="self-pop">
+                <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 1 && text <= 10 " src="../../../assets/seo/NO1.svg"/>
+                <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 11 && text <= 20 "src="../../../assets/seo/NO2.svg"/>
+                <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 21 && text <= 30 " src="../../../assets/seo/NO3.svg"/>
+                <template slot="content">
+                  <p style="margin-bottom: 0">第{{ parseInt((text-1)/10) + 1 }}页,总排名{{ text}}</p>
+                </template>
+                <span style="cursor: default;margin-left: 5px">{{text}}</span>
+              </a-popover>
+              <span v-else>
+                  <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 1 && text <= 10 " src="../../../assets/seo/NO1.svg"/>
+                  <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 11 && text <= 20 "src="../../../assets/seo/NO2.svg"/>
+                  <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 21 && text <= 30 " src="../../../assets/seo/NO3.svg"/>
+                {{text}}</span>
+            </template>
+            <template slot="action" slot-scope="text,record">
+              <a-button  size="small" @click="gotoSearch(record.keywords)" type="primary">去查询</a-button>
+            </template>
+
+          </a-table>
+        </a-col>
+      </a-card>
+    </a-row>
+
+    <a-row class="r4" style="margin-top: 10px" v-if="comprehenInfo.longTailKeywordNum != null">
+      <a-card title="关键词" :bordered="false" style="width: 100%">
+        <a-col :span="24">
+          <a-row  class="table-tool-wrap" type="flex">
+            <a-col :span="8">
+              <ul>
+                <li :class="{active:longShow==1}" @click="longGetTableInfoRank(1)">全部</li>
+                <li :class="{active:longShow==3}" @click="longGetTableInfoRank(3)">第一页</li>
+                <li :class="{active:longShow==4}" @click="longGetTableInfoRank(4)">前三页</li>
+                <li :class="{active:longShow==5}" @click="longGetTableInfoRank(5)">前五页</li>
+                <li :class="{active:longShow==6}" @click="longGetTableInfoRank(6)">前十页</li>
+              </ul>
+            </a-col>
+            <a-col :span="16" style="text-align: right">
+              <a-button type="link" @click="longRankingClick" :style="longRankingButtonStatus == false ? 'border-style: none;color: black !important;': 'border-style: none;color: #544BEB !important;'">
+                按排名<a-icon :type="longRankingButtonArrow" v-if="longRankingButtonStatus"/>
+              </a-button>
+              <a-button type="link" :style="longWordsButtonStatus == false ? 'margin-right: 16px;border-style: none;color: black !important;': 'margin-right: 16px;border-style: none;color: #544BEB !important;'" @click="longWordsClick">
+                按字数<a-icon :type="longWordsButtonArrow" v-if="longWordsButtonStatus"/>
+              </a-button>
+
+              <a-input
+                placeholder="请输入关键词"
+                style="width: 200px;margin-right: 8px"
+                v-model="longKeywords"
+              >
+              </a-input>
+              <a-button type="primary" preIcon="ant-design:search-outlined" style="margin-right: 8px" @click="longSetTable">
+                查询
+              </a-button>
+
+              <a-button  ghost type="primary" preIcon="ant-design:reload-outlined" @click="longSearchReset">
+                重置
+              </a-button>
+
+              <a-button ghost type="primary"  @click="handleExportXlsLU('关键词排名',2)" style="margin-left: 8px" :loading="longExcelLoading">导出Excel</a-button>
+            </a-col>
+          </a-row>
+        </a-col>
+
+        <a-col :span="24">
+          <a-table
+            ref="table"
+            size="middle"
+            :scroll="{x:true}"
+            rowKey="id"
+            :columns="longColumns"
+            :dataSource="longDataSource"
+            :pagination="longIpagination"
+            :loading="longLoading"
+            class="j-table-force-nowrap"
+
+            @change="handleLongTableChange">
+            <template slot='dataNo' slot-scope="text, record, rowIndex">
+              {{(longIpagination.current - 1) * longIpagination.pageSize + rowIndex + 1}}
+            </template>
+
+            <template class="title" slot="keywords" slot-scope="text,record">
+              <span style="white-space:pre">{{ text }}</span>
+              <span v-if="comprehenInfo.specifyKeywordNum != null && comprehenInfo.longTailKeywordNum != null">
+                <a-tag v-if="record.keywordType == 1" color="blue" style="margin-left: 8px">指定</a-tag>
+                <!--              <a-tag v-if="record.keywordType == 2" color="green" style="margin-left: 8px">长尾</a-tag>-->
+              </span>
+            </template>
+            <template slot="keywordsLength" slot-scope="text,record">
+              <span >{{ text }}</span>
+            </template>
+
+            <template class="tag" slot="tag" slot-scope="text, record, rowIndex">
+              <a-popover v-if="text != 0" placement="bottom"   overlayClassName="self-pop">
+                <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 1 && text <= 10 " src="../../../assets/seo/NO1.svg"/>
+                <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 11 && text <= 20 "src="../../../assets/seo/NO2.svg"/>
+                <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 21 && text <= 30 " src="../../../assets/seo/NO3.svg"/>
+                <template slot="content">
+                  <p style="margin-bottom: 0">第{{ parseInt((text-1)/10) + 1 }}页,总排名{{ text}}</p>
+                </template>
+                <span style="cursor: default;margin-left: 5px">{{text}}</span>
+              </a-popover>
+              <span v-else>
+                  <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 1 && text <= 10 " src="../../../assets/seo/NO1.svg"/>
+                  <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 11 && text <= 20 "src="../../../assets/seo/NO2.svg"/>
+                  <img style="width: 18px;position: relative;top: -2px;" v-if="text >= 21 && text <= 30 " src="../../../assets/seo/NO3.svg"/>
+                {{text}}</span>
+            </template>
+            <template slot="action" slot-scope="text,record">
+              <a-button  size="small" @click="gotoSearch(record.keywords)" type="primary">去查询</a-button>
+            </template>
+
+          </a-table>
+        </a-col>
+      </a-card>
+    </a-row>
+
+  </div>
+
+</template>
+
+<script>
+import { getAction, downFile} from '@/api/manage/manage'
+import selectSite from '@/components/adweb/selectSite.vue';
+import { filterObj } from '/@/utils/common/compUtils';
+
+export default {
+  name: 'SeoKpiStatisticsList',
+  components: {
+    selectSite
+  },
+  data() {
+    return {
+      siteinfo: [],
+      selectSiteInfo: {},
+      siteCode: '',
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'rowIndex',
+          key: 'rowIndex',
+          width: 40,
+          align: 'center',
+          fixed: 'left',
+          scopedSlots: { customRender: 'dataNo' },
+
+        },
+        {
+          title: '关键词',
+          dataIndex: 'keywords',
+          key: 'keywords',
+          fixed: 'left',
+          scopedSlots: { customRender: 'keywords' },
+          width: 350,
+        },
+      ],
+      longColumns: [
+        {
+          title: '序号',
+          dataIndex: 'rowIndex',
+          key: 'rowIndex',
+          width: 40,
+          align: 'center',
+          fixed: 'left',
+          scopedSlots: { customRender: 'dataNo' },
+
+        },
+        {
+          title: '关键词',
+          dataIndex: 'keywords',
+          key: 'keywords',
+          fixed: 'left',
+          scopedSlots: { customRender: 'keywords' },
+          width: 350,
+        },
+      ],
+      show: 1,
+      keywordType: undefined,
+      keywords: '',
+      url: {
+        list: '/serp/seoKeywords/keywordList'
+      },
+      ipagination: {
+        pageSize: 10,
+        pageSizeOptions: ['10','15', '30', '50'],
+      },
+      disableMixinCreated: true,
+      comprehenInfo: {},
+      rankInfo: {
+        appointKeyword: {},
+        longTailKeyword: {},
+        serverTime:{}
+      },
+      isBuildVersion:false,
+      excelLoading:false,
+      queryParam:{
+        buttonColmn : 'words',
+        buttonSort :'asc'
+      },
+      baseInfo:{
+        createTime: "",
+      },
+      routerQuery:{},
+      /* 排序参数 */
+      isorter:{
+        column: 'keywords',
+        order: 'desc',
+      },
+      rankingButtonArrow: 'arrow-up',
+      wordsButtonArrow: 'arrow-up',
+      rankingButtonStatus: false,
+      wordsButtonStatus: true,
+      longIpagination:{
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10','15', '30', '50'],
+        showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 共" + total + "条"
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+      longQueryParam:{
+        buttonColmn : 'words',
+        buttonSort :'asc'
+      },
+      longDataSource:[],
+      longLoading:false,
+      longExcelLoading: false,
+      longKeywords: '',
+      longShow: 1,
+      /* 排序参数 */
+      longIsorter:{
+        column: 'keywords',
+        order: 'desc',
+      },
+      longRankingButtonArrow: 'arrow-up',
+      longWordsButtonArrow: 'arrow-up',
+      longRankingButtonStatus: false,
+      longWordsButtonStatus: true,
+      /* 筛选参数 */
+      filters: {},
+    }
+  },
+  mounted() {
+    this.getSiteInfo()
+  },
+  filters: {
+    first: function (value) {
+      if (value && value != null) {
+        let a = value.split('/')
+        return a[0]
+      } else {
+        return '- '
+      }
+    },
+    last: function (value) {
+      if (value && value != null) {
+        let a = value.split('/')
+        return a[1]
+      } else {
+        return ' -'
+      }
+    },
+    filtr_null: function (value) {
+      if (value != null) {
+        return value
+      } else {
+        return '- '
+      }
+    },
+  },
+  watch: {
+    '$route.query': {
+      handler: function (val) {
+        this.routerQuery = val
+      },
+      immediate: true // 初次变化立即查询
+    }
+  },
+
+  methods: {
+    filterOption(input, option) {
+      return (
+        option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      )
+    },
+    getAllInfo() {
+      this.getComprehenInfo()
+    },
+    resetAllInfo(){
+      this.comprehenInfo = {}
+      this.rankInfo.appointKeyword = {}
+      this.rankInfo.longTailKeyword = {}
+      this.rankInfo.serverTime = {}
+      this.dataSource = []
+      this.ipagination.current = 1
+      this.ipagination.total = 0
+      this.longDataSource = []
+      this.longIpagination.current = 1
+      this.longIpagination.total = 0
+    },
+
+    //由于页面的业务关联很多,故将所有的查询条件封装
+    setTableQuery() {
+      this.queryParam.userFlag = this.siteCode
+      console.log(this.queryParam)
+      if(this.show == 3){
+        this.queryParam.rankStart = '1'
+        this.queryParam.rankEnd = '10'
+      }
+      else if(this.show == 4){
+        this.queryParam.rankStart = '1'
+        this.queryParam.rankEnd = '30'
+
+      }
+      else if(this.show == 5){
+        this.queryParam.rankStart = '1'
+        this.queryParam.rankEnd = '50'
+      }
+      else if(this.show == 6){
+        this.queryParam.rankStart = '1'
+        this.queryParam.rankEnd = '100'
+      }
+      else if(this.show == 7){
+        this.queryParam.rankStart = '11'
+        this.queryParam.rankEnd = '30'
+      }
+      else if(this.show == 8){
+        this.queryParam.rankStart = '31'
+        this.queryParam.rankEnd = '100'
+      }else{
+        this.queryParam.rankStart = undefined
+        this.queryParam.rankEnd = undefined
+      }
+      this.queryParam.keywordType = this.keywordType
+      this.queryParam.keywords = this.keywords
+      this.loadData(1)
+    },
+    setTable(){
+      this.queryParam.reachStandard = undefined
+      this.setTableQuery()
+    },
+
+    searchReset() {
+      this.show = 1
+      this.queryParam.reachStandard = undefined
+      this.keywords = ''
+      this.rankingButtonStatus = false
+      this.rankingButtonArrow = ''
+      this.wordsButtonStatus = true
+      this.wordsButtonArrow = 'arrow-up'
+
+      this.queryParam.buttonColmn = 'words';
+      this.queryParam.buttonSort = 'desc';
+      this.setTableQuery()
+    },
+
+    loadData(arg) {
+      let that = this
+      let a = []
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      var params = this.getQueryParams()//查询条件
+      params.historyId = that.selectSiteInfo.historyId;
+      params.keywordType = 1;
+      this.loading = true
+      getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          let alldata  = res.result.records
+          if(alldata.length > 0){
+            for(let i in alldata){
+              let rankInfo = alldata[i].rankInfo;
+              a.push({
+                id:alldata[i].id,
+                keywords:alldata[i].keywords,
+                keywordType:alldata[i].keywordType,
+                keywordsLength:alldata[i].keywordsLength,
+                rankInfo:rankInfo,
+                ...rankInfo
+              })
+            }
+            this.dataSource = a;
+            this.getTableColums()
+            this.ipagination.total = res.result.total
+          }else{
+            this.dataSource = a;
+            this.ipagination.total = 0
+          }
+
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+      })
+    },
+
+    //判断是否是建站版或者无SEO套餐
+    calcIsBuildVersion(){
+      if(this.selectSiteInfo.planId == null || this.selectSiteInfo.planId == '' || this.selectSiteInfo.planName == '建站版' || this.selectSiteInfo.planType == 'STATIONCONSTRUCTION' || this.selectSiteInfo == {}){
+        this.isBuildVersion = true
+      }else{
+        this.isBuildVersion = false
+      }
+    },
+
+    //先执行获取site信息,只有在获取到siteCode之后,才能执行以下方法
+    getSiteInfo() {
+      let that = this
+      getAction('/serp/seoKpiStatistics/getAllSitesBySeo').then(function (res) {
+        if (res.code == 200) {
+          that.siteinfo = res.result
+          if(res.result.length > 0){
+            let isInSite = false
+            for (let i in res.result) {
+              if (localStorage.getItem('siteCode') !== null && res.result[i].code === localStorage.getItem('siteCode')) {
+                isInSite = true
+                that.selectSiteInfo = res.result[i]
+              }
+            }
+            if (localStorage.getItem('siteCode') !== null && isInSite) {
+              that.siteCode = localStorage.getItem('siteCode')
+            } else {
+              that.siteCode = res.result[0].code
+              that.selectSiteInfo = res.result[0]
+              localStorage.setItem('siteCode', res.result[0].code)
+            }
+          }
+          //如果是从客户案例过来的数据,直接走下面方法
+          if(that.routerQuery.code){
+            let rowData = {}
+            for(let i in res.result){
+              if(that.routerQuery.code === res.result[i].code){
+                rowData = res.result[i]
+              }
+            }
+            localStorage.setItem('siteCode', that.routerQuery.code)
+            that.show = 3
+            that.longShow = 3
+            that.siteCode = that.routerQuery.code
+            that.keywordType = Number(that.routerQuery.keywordType)
+            that.selectSiteInfo = rowData
+            that.getAllInfo()
+            return;
+          }
+          that.resetAllInfo()
+          that.calcIsBuildVersion()
+          if(that.isBuildVersion){
+            return
+          }
+          that.getAllInfo()
+        } else {
+          that.$message.error('获取站点code失败,请刷新重试')
+        }
+      })
+    },
+
+    handleTableChange(pagination, filters, sorter) {
+      //分页、排序、筛选变化时触发
+      //TODO 筛选
+      if (Object.keys(sorter).length > 0 && sorter.column) {
+        this.isorter.column = sorter.field;
+        this.isorter.order = "ascend" === sorter.order ? "asc" : "desc"
+      } else{
+        this.isorter.column = '';
+        this.isorter.order = '';
+      }
+      this.ipagination = pagination;
+      this.loadData();
+    },
+    getQueryParams() {
+      //获取查询条件
+      let sqp = {}
+      if(this.superQueryParams){
+        sqp['superQueryParams']=encodeURI(this.superQueryParams)
+        sqp['superQueryMatchType'] = this.superQueryMatchType
+      }
+      var param = Object.assign(sqp, this.queryParam, this.isorter ,this.filters);
+      param.field = this.getQueryField();
+      param.pageNo = this.ipagination.current;
+      param.pageSize = this.ipagination.pageSize;
+      return filterObj(param);
+    },
+    getQueryField() {
+      //TODO 字段权限控制
+      var str = "id,";
+      this.columns.forEach(function (value) {
+        str += "," + value.dataIndex;
+      });
+      return str;
+    },
+
+    //切换站点
+    changeSite(value, e) {
+      this.getSiteInfo()
+      this.selectSiteInfo = e.info
+      this.siteCode = value
+      this.keywordType = undefined
+      this.queryParam.reachStandard = undefined
+      this.keywords = ''
+      this.show = 1
+      // localStorage.setItem('siteCode', value)
+      this.resetAllInfo()
+      this.calcIsBuildVersion()
+
+      if(this.isBuildVersion){
+        return
+      }
+      this.getAllInfo()
+    },
+
+    //获取关键词等五个指标
+    getComprehenInfo() {
+      let that = this
+      let d = {
+        userFlag: that.siteCode,
+        historyId: that.selectSiteInfo.historyId ? that.selectSiteInfo.historyId : ''
+      }
+      getAction('/serp/seoKpiStatistics/comprehensiveInfo', d).then(res => {
+        if (res.code == 200) {
+          that.comprehenInfo = res.result
+          console.log(res.result)
+        }
+      }).finally(()=>{
+        this.getRankInfo()
+        this.setTableQuery()
+        this.longSetTableQuery()
+      })
+
+    },
+
+    //获取三个list的数据
+    getRankInfo() {
+      let that = this
+      let d = {
+        siteCode: that.siteCode,
+        historyId: that.selectSiteInfo.historyId ? that.selectSiteInfo.historyId : ''
+      }
+      getAction('/serp/seoKpiStatistics/getRankInfo', d).then(res => {
+        if (res.code == 200) {
+          this.rankInfo.appointKeyword = res.result.appointKeyword
+          this.rankInfo.longTailKeyword = res.result.longTailKeyword
+          this.rankInfo.serverTime = res.result.serverTime
+        }
+      })
+    },
+
+    //动态处理表格列
+    getTableColums() {
+      let that = this
+      that.columns = [
+        {
+          title: '序号',
+          dataIndex: 'rowIndex',
+          key: 'rowIndex',
+          width: 40,
+          align: 'center',
+          fixed: 'left',
+          scopedSlots: { customRender: 'dataNo' },
+
+        },
+        {
+          title: '关键词',
+          dataIndex: 'keywords',
+          key: 'keywords',
+          fixed: 'left',
+          scopedSlots: { customRender: 'keywords' },
+          width: 350,
+        },
+      ]
+      let obj = that.dataSource[0].rankInfo
+      let dateInfo = Object.keys(obj)
+      dateInfo.sort().reverse()
+      for (let i in dateInfo) {
+        that.columns.push({
+          title: dateInfo[i],
+          dataIndex: dateInfo[i],
+          key: dateInfo[i],
+          scopedSlots: { customRender: 'tag' },
+          align: 'center'
+        })
+      }
+      that.columns.push({
+        title: '操作',
+        dataIndex: 'action',
+        key: 'action',
+        align: 'center',
+        scopedSlots: { customRender: 'action' },
+        fixed:'right',
+        width: 50
+      },)
+    },
+
+    //点击排名数量事件
+    getTableInfoRank(d,keywordType) {
+      this.show = d
+      this.queryParam.reachStandard = undefined
+      if(keywordType){
+        this.keywordType = keywordType
+      }
+      this.setTableQuery()
+    },
+
+    //点击第一行五个指标的种类
+    changeKeywordType(){
+      this.queryParam.reachStandard = 1
+      this.queryParam.rankStart = undefined
+      this.queryParam.rankEnd = undefined
+      this.show = 1
+      this.setTableQuery()
+    },
+
+    //表格内的去查询按钮
+    gotoSearch(word){
+      window.open("https://www.google.com/search?q=" + word, '_blank');
+    },
+
+    handleExportXlsLU(fileName,keywordType){
+      let that = this
+      let param = {
+        userFlag: that.queryParam.userFlag,
+        historyId: that.selectSiteInfo.historyId ? that.selectSiteInfo.historyId : '',
+        keywordType: keywordType
+      }
+      if (param.siteId === 0) {
+        this.$message.warning("请先选择站点!");
+        return;
+      }
+      if(keywordType == 1){
+        this.excelLoading = true;
+      }else{
+        this.longExcelLoading = true;
+      }
+
+      downFile("/serp/seoKeywords/exportExcel",param).then((data)=>{
+        if(keywordType == 1){
+          this.excelLoading = false;
+        }else{
+          this.longExcelLoading = false;
+        }
+        if (!data) {
+          this.$message.warning("文件下载失败")
+          return
+        }
+        if (data.size == 0) {
+          this.$message.warning("当前站点未有关键词数据,文件导出失败")
+          return
+        }
+        if (typeof window.navigator.msSaveBlob !== 'undefined') {
+          window.navigator.msSaveBlob(new Blob([data],{type: 'application/vnd.ms-excel'}), fileName+'.xlsx')
+        }else{
+          let url = window.URL.createObjectURL(new Blob([data],{type: 'application/vnd.ms-excel'}))
+          let link = document.createElement('a')
+          link.style.display = 'none'
+          link.href = url
+          link.setAttribute('download', fileName+'.xlsx')
+          document.body.appendChild(link)
+          link.click()
+          document.body.removeChild(link); //下载完成移除元素
+          window.URL.revokeObjectURL(url); //释放掉blob对象
+        }
+      })
+    },
+
+    getServiceDays(planStartTime) {
+      return moment().diff(moment(planStartTime), 'days') + 1;
+    },
+
+    //按排名排序
+    rankingClick(){
+      let that = this;
+      if(that.rankingButtonStatus == false){
+        that.rankingButtonStatus = true
+        that.rankingButtonArrow = 'arrow-up'
+        that.wordsButtonStatus = false
+        that.wordsButtonArrow = ''
+
+        that.queryParam.buttonColmn = 'ranking';
+        that.queryParam.buttonSort = 'asc';
+      } else if(that.rankingButtonStatus == true && that.rankingButtonArrow == 'arrow-up'){
+        that.rankingButtonArrow = 'arrow-down'
+
+        that.queryParam.buttonColmn = 'ranking';
+        that.queryParam.buttonSort = 'desc';
+      }else if(that.rankingButtonArrow == 'arrow-down'){
+        that.rankingButtonStatus = false
+        that.queryParam.buttonColmn = '';
+        that.queryParam.buttonSort = '';
+      }
+      that.setTableQuery()
+    },
+
+    //按字数排序
+    wordsClick(){
+      let that = this;
+      if(that.wordsButtonStatus == false){
+        that.wordsButtonStatus = true
+        that.wordsButtonArrow = 'arrow-up'
+        that.rankingButtonStatus = false
+        that.rankingButtonArrow = ''
+
+        that.queryParam.buttonColmn = 'words';
+        that.queryParam.buttonSort = 'asc';
+      } else if(that.wordsButtonStatus == true && that.wordsButtonArrow == 'arrow-up'){
+        that.wordsButtonArrow = 'arrow-down'
+
+        that.queryParam.buttonColmn = 'words';
+        that.queryParam.buttonSort = 'desc';
+      }else if(that.wordsButtonArrow == 'arrow-down'){
+        that.wordsButtonStatus = false
+        that.queryParam.buttonColmn = '';
+        that.queryParam.buttonSort = '';
+      }
+      that.setTableQuery()
+    },
+
+    //-----一下全是长尾词列表功能方法
+    longLoadData(arg) {
+      let that = this
+      let a = []
+      if (arg === 1) {
+        this.longIpagination.current = 1
+      }
+      var params = this.getLongQueryParams()//查询条件
+      params.historyId = that.selectSiteInfo.historyId;
+      params.keywordType = 2
+      this.longLoading = true
+      getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          let alldata  = res.result.records
+          if(alldata.length > 0){
+            for(let i in alldata){
+              let rankInfo = alldata[i].rankInfo;
+              a.push({
+                id:alldata[i].id,
+                keywords:alldata[i].keywords,
+                keywordType:alldata[i].keywordType,
+                keywordsLength:alldata[i].keywordsLength,
+                rankInfo:rankInfo,
+                ...rankInfo
+              })
+            }
+            this.longDataSource = a;
+            this.longGetTableColums()
+            this.longIpagination.total = res.result.total
+          }else{
+            this.longDataSource = a;
+            this.longIpagination.total = 0
+          }
+
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.longLoading = false
+      })
+    },
+
+    //动态处理表格列
+    longGetTableColums() {
+      let that = this
+      that.longColumns = [
+        {
+          title: '序号',
+          dataIndex: 'rowIndex',
+          key: 'rowIndex',
+          width: 40,
+          align: 'center',
+          fixed: 'left',
+          scopedSlots: { customRender: 'dataNo' },
+
+        },
+        {
+          title: '关键词',
+          dataIndex: 'keywords',
+          key: 'keywords',
+          fixed: 'left',
+          scopedSlots: { customRender: 'keywords' },
+          width: 350,
+          // sorter: (a, b) => a.keywords - b.keywords,
+          // defaultSortOrder: 'ascend',
+        },
+        // {
+        //   title: '关键词长度',
+        //   dataIndex: 'keywordsLength',
+        //   key: 'keywordsLength',
+        //   fixed: 'left',
+        //   width: 40,
+        //   scopedSlots: { customRender: 'keywordsLength' },
+        // },
+      ]
+      let obj = that.longDataSource[0].rankInfo
+      let dateInfo = Object.keys(obj)
+      dateInfo.sort().reverse()
+      for (let i in dateInfo) {
+        that.longColumns.push({
+          title: dateInfo[i],
+          dataIndex: dateInfo[i],
+          key: dateInfo[i],
+          scopedSlots: { customRender: 'tag' },
+          align: 'center'
+        })
+      }
+      that.longColumns.push({
+        title: '操作',
+        dataIndex: 'action',
+        key: 'action',
+        align: 'center',
+        scopedSlots: { customRender: 'action' },
+        fixed:'right',
+        width: 50
+      },)
+    },
+
+    //由于页面的业务关联很多,故将所有的查询条件封装
+    longSetTableQuery() {
+      let that = this;
+      that.longQueryParam.userFlag = this.siteCode
+      console.log(that.longQueryParam)
+      if(that.longShow == 3){
+        that.longQueryParam.rankStart = '1'
+        that.longQueryParam.rankEnd = '10'
+      }
+      else if(that.longShow == 4){
+        that.longQueryParam.rankStart = '1'
+        that.longQueryParam.rankEnd = '30'
+
+      }
+      else if(that.longShow == 5){
+        that.longQueryParam.rankStart = '1'
+        that.longQueryParam.rankEnd = '50'
+      }
+      else if(that.longShow == 6){
+        that.longQueryParam.rankStart = '1'
+        that.longQueryParam.rankEnd = '100'
+      }
+      else if(that.longShow == 7){
+        that.longQueryParam.rankStart = '11'
+        that.longQueryParam.rankEnd = '30'
+      }
+      else if(that.longShow == 8){
+        that.longQueryParam.rankStart = '31'
+        that.longQueryParam.rankEnd = '100'
+      }else{
+        that.longQueryParam.rankStart = undefined
+        that.longQueryParam.rankEnd = undefined
+      }
+      that.longQueryParam.keywords = that.longKeywords
+      that.longLoadData(1)
+    },
+
+    longSetTable(){
+      this.longQueryParam.reachStandard = undefined
+      this.longSetTableQuery()
+    },
+
+    longSearchReset() {
+      this.longShow = 1
+      this.longQueryParam.reachStandard = undefined
+      this.longKeywords = ''
+      this.longRankingButtonStatus = false
+      this.longRankingButtonArrow = ''
+      this.longWordsButtonStatus = true
+      this.longWordsButtonArrow = 'arrow-up'
+      this.longQueryParam.buttonColmn = 'words'
+      this.longQueryParam.buttonSort = 'asc'
+      this.longSetTableQuery()
+    },
+
+    //点击排名数量事件
+    longGetTableInfoRank(d) {
+      this.longShow = d
+      this.longQueryParam.reachStandard = undefined
+      this.longSetTableQuery()
+    },
+
+    //点击第一行五个指标的种类
+    longChangeKeywordType(){
+      this.longQueryParam.reachStandard = 1
+      this.longQueryParam.rankStart = undefined
+      this.longQueryParam.rankEnd = undefined
+      this.longShow = 1
+      this.longSetTableQuery()
+    },
+
+    handleLongTableChange(pagination, filters, sorter) {
+      //分页、排序、筛选变化时触发
+      //TODO 筛选
+      if (Object.keys(sorter).length > 0 && sorter.column) {
+        this.longIsorter.column = sorter.field;
+        this.longIsorter.order = "ascend" == sorter.order ? "asc" : "desc"
+      } else{
+        this.longIsorter.column = '';
+        this.longIsorter.order = '';
+      }
+      this.longIpagination = pagination;
+      this.longLoadData();
+    },
+
+    getLongQueryParams() {
+      //获取查询条件
+      let sqp = {}
+      var param = Object.assign(sqp, this.longQueryParam, this.longIsorter ,this.filters);
+      param.field = this.getLongQueryField();
+      param.pageNo = this.longIpagination.current;
+      param.pageSize = this.longIpagination.pageSize;
+      return filterObj(param);
+    },
+    getLongQueryField() {
+      //TODO 字段权限控制
+      var str = "id,";
+      this.longColumns.forEach(function (value) {
+        str += "," + value.dataIndex;
+      });
+      return str;
+    },
+
+    //按排名排序
+    longRankingClick(){
+      let that = this;
+      if(that.longRankingButtonStatus == false){
+        that.longRankingButtonStatus = true
+        that.longRankingButtonArrow = 'arrow-up'
+        that.longWordsButtonStatus = false
+        that.longWordsButtonArrow = ''
+
+        that.longQueryParam.buttonColmn = 'ranking';
+        that.longQueryParam.buttonSort = 'asc';
+      } else if(that.longRankingButtonStatus == true && that.longRankingButtonArrow == 'arrow-up'){
+        that.longRankingButtonArrow = 'arrow-down'
+
+        that.longQueryParam.buttonColmn = 'ranking';
+        that.longQueryParam.buttonSort = 'desc';
+      }else if(that.longRankingButtonArrow == 'arrow-down'){
+        that.longRankingButtonStatus = false
+        that.longQueryParam.buttonColmn = '';
+        that.longQueryParam.buttonSort = '';
+      }
+      that.longSetTableQuery()
+    },
+
+    //按字数排序
+    longWordsClick(){
+      let that = this;
+      if(that.longWordsButtonStatus == false){
+        that.longWordsButtonStatus = true
+        that.longWordsButtonArrow = 'arrow-up'
+        that.longRankingButtonStatus = false
+        that.longRankingButtonArrow = ''
+
+        that.longQueryParam.buttonColmn = 'words';
+        that.longQueryParam.buttonSort = 'asc';
+      } else if(that.longWordsButtonStatus == true && that.longWordsButtonArrow == 'arrow-up'){
+        that.longWordsButtonArrow = 'arrow-down'
+
+        that.longQueryParam.buttonColmn = 'words';
+        that.longQueryParam.buttonSort = 'desc';
+      }else if(that.longWordsButtonArrow == 'arrow-down'){
+        that.longWordsButtonStatus = false
+        that.longQueryParam.buttonColmn = '';
+        that.longQueryParam.buttonSort = '';
+      }
+      that.longSetTableQuery()
+    },
+  }
+}
+</script>
+
+<style lang="less">
+.self-pop{
+  .ant-popover-inner-content{
+    background: rgb(245,243,254);
+    p{
+      font-size: 13px;
+    }
+  }
+  .ant-popover-arrow{
+    border-color: rgb(245,243,254) !important;
+  }
+}
+</style>
+
+<style lang="less" scoped>
+.r1 {
+  color: #fff;
+
+  .ant-select {
+    color: #fff;
+  }
+
+  .t1 {
+    color: @primary-color;
+    font-size: 18px;
+    margin-right: 5px;
+  }
+}
+
+.r2 {
+  background: #fff;
+  border-radius: 10px;
+  padding: 30px;
+  margin: 20px;
+
+  .ant-col {
+    text-align: center;
+    color: #000;
+
+    img {
+      width: 13px;
+      margin: -3px 5px 0 0;
+    }
+
+    .t1 {
+      font-size: 14px;
+    }
+
+    .t2 {
+      font-size: 27px;
+      margin-bottom: 0;
+      font-weight: 500;
+    }
+  }
+}
+
+.r3 {
+  padding-left: 20px;
+  padding-right: 20px;
+  .wrap {
+    padding: 20px;
+    background: #fff;
+    border-radius: 10px;
+    margin-bottom: 10px;
+
+    .t1 {
+      color: #000;
+      font-size: 14px;
+      font-weight: 500;
+    }
+
+    .content {
+      display: block;
+      overflow: hidden;
+      line-height: 1;
+      border-bottom: 1px solid #ddd;
+      padding: 20px 0;
+
+      &:last-child {
+        border-bottom: none;
+        padding-bottom: 0;
+      }
+
+      .d1 {
+        float: left;
+        width: 50%;
+        line-height: 25px;
+        color: #000;
+
+        img {
+          width: 15px;
+          margin: -4px 5px 0 0;
+        }
+      }
+
+      .d2 {
+        float: right;
+        width: 50%;
+        text-align: right;
+
+        &.d3 {
+          span {
+            color: #000;
+          }
+        }
+
+        a {
+          font-size: 25px;
+          font-weight: 500;
+        }
+      }
+    }
+  }
+}
+
+.r4 {
+  padding: 20px;
+  margin-left: 20px;
+  margin-right: 20px;
+  background: #fff;
+  border-radius: 10px;
+
+  .table-tool-wrap {
+    margin-bottom: 15px;
+
+    ul {
+      list-style-type: none;
+      display: block;
+      overflow: hidden;
+      margin: 0;
+      padding: 0;
+
+      li {
+        float: left;
+        margin: 0 10px;
+        color: #333;
+        font-size: 14px;
+        font-weight: 500;
+        cursor: pointer;
+        text-decoration: underline;
+        &.active {
+          color: @primary-color;
+        }
+      }
+    }
+  }
+
+}
+</style>

+ 26 - 0
src/views/adweb/serp/V20241009_1__menu_insert_SeoKpiStatistics.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/serp文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
+VALUES ('2024100903234840360', NULL, 'seo_kpi_statistics', '/serp/seoKpiStatisticsList', 'serp/SeoKpiStatisticsList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-10-09 15:23:36', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024100903234840361', '2024100903234840360', '添加seo_kpi_statistics', NULL, NULL, 0, NULL, NULL, 2, 'serp:seo_kpi_statistics:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-10-09 15:23:36', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024100903234840362', '2024100903234840360', '编辑seo_kpi_statistics', NULL, NULL, 0, NULL, NULL, 2, 'serp:seo_kpi_statistics:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-10-09 15:23:36', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024100903234840363', '2024100903234840360', '删除seo_kpi_statistics', NULL, NULL, 0, NULL, NULL, 2, 'serp:seo_kpi_statistics:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-10-09 15:23:36', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024100903234840364', '2024100903234840360', '批量删除seo_kpi_statistics', NULL, NULL, 0, NULL, NULL, 2, 'serp:seo_kpi_statistics:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-10-09 15:23:36', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024100903234840365', '2024100903234840360', '导出excel_seo_kpi_statistics', NULL, NULL, 0, NULL, NULL, 2, 'serp:seo_kpi_statistics:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-10-09 15:23:36', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024100903234840366', '2024100903234840360', '导入excel_seo_kpi_statistics', NULL, NULL, 0, NULL, NULL, 2, 'serp:seo_kpi_statistics:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-10-09 15:23:36', NULL, NULL, 0, 0, '1', 0);

+ 70 - 0
src/views/adweb/serp/components/SeoKpiStatisticsForm.vue

@@ -0,0 +1,70 @@
+<template>
+    <div style="min-height: 400px">
+        <BasicForm @register="registerForm"></BasicForm>
+        <div style="width: 100%;text-align: center" v-if="!formDisabled">
+            <a-button @click="submitForm" pre-icon="ant-design:check" type="primary">提 交</a-button>
+        </div>
+    </div>
+</template>
+
+<script lang="ts">
+    import {BasicForm, useForm} from '/@/components/Form/index';
+    import {computed, defineComponent} from 'vue';
+    import {defHttp} from '/@/utils/http/axios';
+    import { propTypes } from '/@/utils/propTypes';
+    import {getBpmFormSchema} from '../SeoKpiStatistics.data';
+    import {saveOrUpdate} from '../SeoKpiStatistics.api';
+    
+    export default defineComponent({
+        name: "SeoKpiStatisticsForm",
+        components:{
+            BasicForm
+        },
+        props:{
+            formData: propTypes.object.def({}),
+            formBpm: propTypes.bool.def(true),
+        },
+        setup(props){
+            const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
+                labelWidth: 150,
+                schemas: getBpmFormSchema(props.formData),
+                showActionButtonGroup: false,
+                baseColProps: {span: 24}
+            });
+
+            const formDisabled = computed(()=>{
+                if(props.formData.disabled === false){
+                    return false;
+                }
+                return true;
+            });
+
+            let formData = {};
+            const queryByIdUrl = '/serp/seoKpiStatistics/queryById';
+            async function initFormData(){
+                let params = {id: props.formData.dataId};
+                const data = await defHttp.get({url: queryByIdUrl, params});
+                formData = {...data}
+                //设置表单的值
+                await setFieldsValue(formData);
+                //默认是禁用
+                await setProps({disabled: formDisabled.value})
+            }
+
+            async function submitForm() {
+                let data = getFieldsValue();
+                let params = Object.assign({}, formData, data);
+                console.log('表单数据', params)
+                await saveOrUpdate(params, true)
+            }
+
+            initFormData();
+            
+            return {
+                registerForm,
+                formDisabled,
+                submitForm,
+            }
+        }
+    });
+</script>

+ 68 - 0
src/views/adweb/serp/components/SeoKpiStatisticsModal.vue

@@ -0,0 +1,68 @@
+<template>
+  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
+      <BasicForm @register="registerForm"/>
+  </BasicModal>
+</template>
+
+<script lang="ts" setup>
+    import {ref, computed, unref} from 'vue';
+    import {BasicModal, useModalInner} from '/@/components/Modal';
+    import {BasicForm, useForm} from '/@/components/Form/index';
+    import {formSchema} from '../SeoKpiStatistics.data';
+    import {saveOrUpdate} from '../SeoKpiStatistics.api';
+    // Emits声明
+    const emit = defineEmits(['register','success']);
+    const isUpdate = ref(true);
+    const isDetail = ref(false);
+    //表单配置
+    const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
+        //labelWidth: 150,
+        schemas: formSchema,
+        showActionButtonGroup: false,
+        baseColProps: {span: 24}
+    });
+    //表单赋值
+    const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
+        //重置表单
+        await resetFields();
+        setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
+        isUpdate.value = !!data?.isUpdate;
+        isDetail.value = !!data?.showFooter;
+        if (unref(isUpdate)) {
+            //表单赋值
+            await setFieldsValue({
+                ...data.record,
+            });
+        }
+        // 隐藏底部时禁用整个表单
+       setProps({ disabled: !data?.showFooter })
+    });
+    //设置标题
+    const title = computed(() => (!unref(isUpdate) ? '新增' : !unref(isDetail) ? '详情' : '编辑'));
+    //表单提交事件
+    async function handleSubmit(v) {
+        try {
+            let values = await validate();
+            setModalProps({confirmLoading: true});
+            //提交表单
+            await saveOrUpdate(values, isUpdate.value);
+            //关闭弹窗
+            closeModal();
+            //刷新列表
+            emit('success');
+        } finally {
+            setModalProps({confirmLoading: false});
+        }
+    }
+</script>
+
+<style lang="less" scoped>
+	/** 时间和数字输入框样式 */
+  :deep(.ant-input-number) {
+    width: 100%;
+  }
+
+  :deep(.ant-calendar-picker) {
+    width: 100%;
+  }
+</style>

+ 3 - 0
src/views/adweb/serp/components/useSeoKpiStatics.ts

@@ -0,0 +1,3 @@
+
+
+