Просмотр исходного кода

style:修改时间选择器样式、统计页面背景图调整、统计图图表调整

443166679@qq.com 1 год назад
Родитель
Сommit
efeb135bcf
31 измененных файлов с 1333 добавлено и 731 удалено
  1. 224 0
      common/chart/mixture_chart.vue
  2. 155 0
      common/chart/ring_chart.vue
  3. 5 3
      components/en-utils/en-nav/en-nav.vue
  4. 94 41
      package-lock.json
  5. 124 109
      pages/statistics/components/capital_stat.vue
  6. 188 148
      pages/statistics/components/general_stat.vue
  7. 23 20
      pages/statistics/module/head_data.vue
  8. 151 110
      pages/statistics/module/head_filter.vue
  9. 8 8
      pages/statistics/module/stat_age_chart.vue
  10. 47 31
      pages/statistics/module/stat_capital.vue
  11. 49 32
      pages/statistics/module/stat_gather.vue
  12. 12 12
      pages/statistics/module/stat_industry.vue
  13. 20 13
      pages/statistics/module/stat_single_data.vue
  14. 74 60
      pages/statistics/statistics.vue
  15. 8 0
      static/css/common.css
  16. 3 0
      static/css/default-color.scss
  17. 12 12
      static/css/login.css
  18. BIN
      static/img/statistics/Group 2113.png
  19. 0 0
      static/img/statistics/stat-calendar.png
  20. 0 0
      static/img/statistics/stat-down.png
  21. 0 0
      static/img/statistics/stat-loan.png
  22. BIN
      static/img/statistics/stat-noloan.png
  23. 0 0
      static/img/statistics/stat-num.png
  24. 0 0
      static/img/statistics/stat-sign.png
  25. 0 0
      static/img/statistics/stat-up.png
  26. BIN
      static/img/statistics/task-four.png
  27. BIN
      static/img/statistics/task-one.png
  28. BIN
      static/img/statistics/task-two.png
  29. 10 9
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue
  30. 16 13
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue
  31. 110 110
      yarn.lock

+ 224 - 0
common/chart/mixture_chart.vue

@@ -0,0 +1,224 @@
+<template>
+	<view class="charts-box">
+		<qiun-data-charts type="mix" :opts="opts" :canvas2d='isCanvas2d' :canvasId='canvasId' :chartData="chartData" />
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			canvasId: {
+				type: String,
+				default: ''
+			}
+		},
+		data() {
+			return {
+				chartData: {},
+				//这里的 opts 是图表类型 type="mix" 的全部配置参数,您可以将此配置复制到 config-ucharts.js 文件中下标为 ['mix'] 的节点中来覆盖全局默认参数。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
+				opts: {
+					timing: "easeOut",
+					duration: 1000,
+					rotate: false,
+					rotateLock: false,
+					color: ["#EEF2FA"],
+					padding: [15, 15, 0, 15],
+					fontSize: 13,
+					fontColor: "#666666",
+					dataLabel: false,
+					dataPointShape: false,
+					dataPointShapeType: "solid",
+					touchMoveLimit: 60,
+					enableScroll: false,
+					enableMarkLine: false,
+					legend: {
+						show: false,
+						position: "bottom",
+						float: "center",
+						padding: 5,
+						margin: 5,
+						backgroundColor: "rgba(0,0,0,0)",
+						borderColor: "rgba(0,0,0,0)",
+						borderWidth: 0,
+						fontSize: 13,
+						fontColor: "#666666",
+						lineHeight: 11,
+						hiddenColor: "#CECECE",
+						itemGap: 10
+					},
+					xAxis: {
+						disableGrid: true,
+						disabled: false,
+						axisLine: false,
+						axisLineColor: "#CCCCCC",
+						calibration: false,
+						fontColor: "#666666",
+						fontSize: 13,
+						lineHeight: 20,
+						marginTop: 20,
+						rotateLabel: false,
+						rotateAngle: 45,
+						itemCount: 5,
+						boundaryGap: "center",
+						splitNumber: 5,
+						gridColor: "#CCCCCC",
+						gridType: "solid",
+						dashLength: 4,
+						gridEval: 1,
+						scrollShow: false,
+						scrollAlign: "left",
+						scrollColor: "#A6A6A6",
+						scrollBackgroundColor: "#EFEBEF",
+						title: "",
+						titleFontSize: 13,
+						titleOffsetY: 0,
+						titleOffsetX: 0,
+						titleFontColor: "#666666",
+						format: ""
+					},
+					yAxis: {
+						disabled: false,
+						disableGrid: true,
+						splitNumber: 4,
+						gridType: "dash",
+						dashLength: 4,
+						gridColor: "#CCCCCC",
+						padding: 10,
+						showTitle: false,
+						data: [{
+								position: "left",
+								title: "折线",
+								calibration: false,
+								type: "value",
+								axisLineColor: "#ffffff"
+							},
+							{
+								position: "right",
+								min: 0,
+								max: 200,
+								title: "柱状图",
+								textAlign: "left",
+								disabled: false,
+								axisLineColor: "#FFFFFF"
+							},
+							{
+								position: "right",
+								min: 0,
+								max: 200,
+								title: "点",
+								textAlign: "left",
+								calibration: false,
+								disabled: true,
+								axisLineColor: "#FFFFFF"
+							}
+						]
+					},
+					extra: {
+						mix: {
+							column: {
+								width: 30,
+								seriesGap: 2,
+								barBorderCircle: false,
+								barBorderRadius: [
+									5,
+									5,
+									0,
+									0
+								],
+								linearOpacity: 0.5,
+								colorStop: 0
+							},
+							area: {
+								opacity: 0.2,
+								gradient: false
+							},
+							line: {
+								width: 2
+							}
+						},
+						tooltip: {
+							showBox: true,
+							showArrow: true,
+							showCategory: false,
+							borderWidth: 0,
+							borderRadius: 0,
+							borderColor: "#000000",
+							borderOpacity: 0.7,
+							bgColor: "#000000",
+							bgOpacity: 0.7,
+							gridType: "solid",
+							dashLength: 4,
+							gridColor: "#CCCCCC",
+							boxPadding: 3,
+							fontSize: 13,
+							lineHeight: 20,
+							fontColor: "#FFFFFF",
+							legendShow: true,
+							legendShape: "auto",
+							splitLine: true,
+							horizentalLine: false,
+							xAxisLabel: false,
+							yAxisLabel: false,
+							labelBgColor: "#FFFFFF",
+							labelBgOpacity: 0.7,
+							labelFontColor: "#666666"
+						},
+						markLine: {
+							type: "solid",
+							dashLength: 4,
+							data: []
+						}
+					}
+				}
+			};
+		},
+		onReady() {
+			this.getServerData();
+		},
+		methods: {
+			getServerData() {
+				//模拟从服务器获取数据时的延时
+				setTimeout(() => {
+					//模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
+					let res = {
+						categories: ["2018", "2019", "2020", "2021", "2022"],
+						series: [{
+								name: "柱1",
+								index: 1,
+								type: "column",
+								data: [160, {
+									"value": 90,
+								}, 100, 150, 90]
+							},
+							{
+								name: "曲线",
+								type: "line",
+								style: "curve",
+								color: "#FFD023",
+								disableLegend: true,
+								data: [70, 50, 85, 130, 64]
+							},
+							{
+								name: "曲线",
+								type: "line",
+								style: "curve",
+								color: "#0CAF60",
+								disableLegend: true,
+								data: [50, 20, 60, 100, 20]
+							}
+						]
+					};
+					this.chartData = JSON.parse(JSON.stringify(res));
+				}, 500);
+			},
+		}
+	};
+</script>
+
+<style scoped>
+	/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
+	.charts-box {
+		width: 100%;
+		height: 300px;
+	}
+</style>

+ 155 - 0
common/chart/ring_chart.vue

@@ -0,0 +1,155 @@
+<template>
+	<view class="charts-box" :style="[{width},{height},]">
+		<qiun-data-charts type="ring" :opts="opts" :chartData="chartData" />
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			width: {
+				type: String,
+				default: '200rpx'
+			},
+			height: {
+				type: String,
+				default: '200rpx'
+			},
+			canvasId: {
+				type: String,
+				default: ''
+			},
+			bgChartColor: {
+				type: Array,
+				default: () => ["#00BF8A", "#2B7DFA"]
+			},
+		},
+		data() {
+			return {
+				chartData: {},
+				//这里的 opts 是图表类型 type="ring" 的全部配置参数,您可以将此配置复制到 config-ucharts.js 文件中下标为 ['ring'] 的节点中来覆盖全局默认参数。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
+				opts: {
+					timing: "easeOut",
+					duration: 1000,
+					rotate: false,
+					rotateLock: false,
+					color: ["#00BF8A", "#2B7DFA"],
+					padding: [5, 5, 5, 5],
+					fontSize: 13,
+					fontColor: "#666666",
+					dataLabel: false,
+					dataPointShape: true,
+					dataPointShapeType: "solid",
+					touchMoveLimit: 60,
+					enableScroll: false,
+					enableMarkLine: false,
+					legend: {
+						show: false,
+						position: "right",
+						lineHeight: 25,
+						float: "center",
+						padding: 5,
+						margin: 5,
+						backgroundColor: "rgba(0,0,0,0)",
+						borderColor: "rgba(0,0,0,0)",
+						borderWidth: 0,
+						fontSize: 13,
+						fontColor: "#666666",
+						hiddenColor: "#CECECE",
+						itemGap: 10
+					},
+					title: {
+						name: "",
+						fontSize: 15,
+						color: "#666666",
+						offsetX: 0,
+						offsetY: 0
+					},
+					subtitle: {
+						name: "",
+						fontSize: 20,
+						color: "#7cb5ec",
+						offsetX: 0,
+						offsetY: 0
+					},
+					extra: {
+						ring: {
+							ringWidth: 12,
+							activeOpacity: 0.5,
+							activeRadius: 10,
+							offsetAngle: 0,
+							labelWidth: 15,
+							border: true,
+							borderWidth: 3,
+							borderColor: "#FFFFFF",
+							centerColor: "#FFFFFF",
+							customRadius: 0,
+							linearType: "none"
+						},
+						tooltip: {
+							showBox: true,
+							showArrow: true,
+							showCategory: false,
+							borderWidth: 0,
+							borderRadius: 0,
+							borderColor: "#000000",
+							borderOpacity: 0.7,
+							bgColor: "#000000",
+							bgOpacity: 0.7,
+							gridType: "solid",
+							dashLength: 4,
+							gridColor: "#CCCCCC",
+							boxPadding: 3,
+							fontSize: 13,
+							lineHeight: 20,
+							fontColor: "#FFFFFF",
+							legendShow: true,
+							legendShape: "auto",
+							splitLine: true,
+							horizentalLine: false,
+							xAxisLabel: false,
+							yAxisLabel: false,
+							labelBgColor: "#FFFFFF",
+							labelBgOpacity: 0.7,
+							labelFontColor: "#666666"
+						}
+					}
+				}
+			};
+		},
+		created() {
+			this.opts.color = this.bgChartColor
+		},
+		onReady() {
+			this.getServerData();
+		},
+		methods: {
+			getServerData() {
+				//模拟从服务器获取数据时的延时
+				setTimeout(() => {
+					//模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
+					let res = {
+						series: [{
+							data: [{
+								"name": "一班",
+								"value": 50
+							}, {
+								"name": "二班",
+								"value": 30
+							}]
+						}]
+					};
+					this.chartData = JSON.parse(JSON.stringify(res));
+				}, 500);
+			},
+		}
+	};
+</script>
+
+<style scoped>
+	/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
+	.charts-box {
+		width: 100%;
+		height: 300px;
+	}
+</style>

+ 5 - 3
components/en-utils/en-nav/en-nav.vue

@@ -4,8 +4,10 @@
 			<view class="left" :style="[{color},{paddingTop}]" v-if="back" @click="onBack">
 				<image class="back" src="/static/img/tabBar/nav-back.png"></image>
 			</view>
-			<view class="title" :style="[{marginLeft:justify == 'left'?'30rpx':0},{fontSize}]">
-				<uni-icons class="m-r10" type="calendar" size="22" color="#fff" v-if="is_icons"></uni-icons>
+			<view class="title row center" :style="[{marginLeft:justify == 'left'?'30rpx':0},{fontSize}]">
+				<image class="wh-36 m-r20" src="/static/img/statistics/stat-calendar.png" mode="aspectFill"
+					v-if="is_icons">
+				</image>
 				<text>{{title}}</text>
 			</view>
 		</view>
@@ -48,7 +50,7 @@
 					nav_path: ''
 				}, {
 					bg_path: '',
-					nav_path: ''
+					nav_path: 'https://wealfavor-1257406827.cos.ap-beijing.myqcloud.com/new-xcx/statistics/statistics-bg2.png'
 				}],
 			}
 		},

+ 94 - 41
package-lock.json

@@ -1,148 +1,201 @@
 {
+  "name": "wh-new-xcx",
+  "lockfileVersion": 3,
   "requires": true,
-  "lockfileVersion": 1,
-  "dependencies": {
-    "@babel/parser": {
+  "packages": {
+    "": {
+      "dependencies": {
+        "animate.css": "^4.1.1",
+        "js-base64": "^3.7.2",
+        "js-md5": "^0.8.3",
+        "jweixin-module": "^1.2.0",
+        "uni-read-pages": "^1.0.5",
+        "uni-simple-router": "^2.0.7",
+        "uploading-oss": "^1.0.3",
+        "wecomjsdk": "^1.0.2"
+      },
+      "devDependencies": {
+        "@types/html5plus": "^1.0.2",
+        "@types/uni-app": "^1.4.4",
+        "vue-waterfall-easy": "^2.4.4"
+      }
+    },
+    "node_modules/@babel/parser": {
       "version": "7.19.0",
       "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
       "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==",
-      "dev": true
+      "dev": true,
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
     },
-    "@types/html5plus": {
+    "node_modules/@types/html5plus": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/@types/html5plus/-/html5plus-1.0.2.tgz",
       "integrity": "sha512-OklP5lrmLq8/6TUOLgWc0LndUVvAiTWX5dnyoCFhIUtFW9opWsnCtG/UxPgeuC28Rv2XNbFfft/hEEI39P/4Ag==",
       "dev": true
     },
-    "@types/uni-app": {
+    "node_modules/@types/uni-app": {
       "version": "1.4.4",
       "resolved": "https://registry.npmjs.org/@types/uni-app/-/uni-app-1.4.4.tgz",
       "integrity": "sha512-ZTXnrCTblZyoLIoKbTv1Whz1nxrTcM7vg0qGXzDpXP8m9MqdjKt48N3FffQT1IsJWNkxbvJ1Eg5UHDaq+k+oBQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "vue": "^2.6.8"
       }
     },
-    "@vue/compiler-sfc": {
+    "node_modules/@vue/compiler-sfc": {
       "version": "2.7.10",
       "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.10.tgz",
       "integrity": "sha512-55Shns6WPxlYsz4WX7q9ZJBL77sKE1ZAYNYStLs6GbhIOMrNtjMvzcob6gu3cGlfpCR4bT7NXgyJ3tly2+Hx8Q==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@babel/parser": "^7.18.4",
         "postcss": "^8.4.14",
         "source-map": "^0.6.1"
       }
     },
-    "animate.css": {
+    "node_modules/animate.css": {
       "version": "4.1.1",
       "resolved": "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz",
       "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ=="
     },
-    "crypto-js": {
+    "node_modules/crypto-js": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
       "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
     },
-    "csstype": {
+    "node_modules/csstype": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
       "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==",
       "dev": true
     },
-    "js-base64": {
+    "node_modules/js-base64": {
       "version": "3.7.5",
       "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz",
       "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA=="
     },
-    "js-md5": {
+    "node_modules/js-md5": {
       "version": "0.8.3",
       "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.8.3.tgz",
       "integrity": "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ=="
     },
-    "jweixin-module": {
+    "node_modules/jweixin-module": {
       "version": "1.6.0",
       "resolved": "https://registry.npmmirror.com/jweixin-module/-/jweixin-module-1.6.0.tgz",
       "integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
     },
-    "nanoid": {
+    "node_modules/nanoid": {
       "version": "3.3.4",
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
       "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
-      "dev": true
+      "dev": true,
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
     },
-    "picocolors": {
+    "node_modules/picocolors": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
       "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
       "dev": true
     },
-    "postcss": {
+    "node_modules/postcss": {
       "version": "8.4.16",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
       "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
       "dev": true,
-      "requires": {
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        }
+      ],
+      "dependencies": {
         "nanoid": "^3.3.4",
         "picocolors": "^1.0.0",
         "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
       }
     },
-    "source-map": {
+    "node_modules/source-map": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
       "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "source-map-js": {
+    "node_modules/source-map-js": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
       "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "uni-read-pages": {
+    "node_modules/uni-read-pages": {
       "version": "1.0.5",
       "resolved": "https://registry.npmmirror.com/uni-read-pages/-/uni-read-pages-1.0.5.tgz",
-      "integrity": "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA=="
+      "integrity": "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA==",
+      "hasInstallScript": true
     },
-    "uni-simple-router": {
+    "node_modules/uni-simple-router": {
       "version": "2.0.7",
       "resolved": "https://registry.npmmirror.com/uni-simple-router/-/uni-simple-router-2.0.7.tgz",
       "integrity": "sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA=="
     },
-    "uploading-oss": {
+    "node_modules/uploading-oss": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/uploading-oss/-/uploading-oss-1.0.3.tgz",
       "integrity": "sha512-aqHh5NCOBcrA4d8yCIKR7B9GrKzH88X7gL8BSvIw18pi79AgWnhDkCoyjQmDqzTvjQqYfKwyFTEgnafzMx/GbQ==",
-      "requires": {
+      "dependencies": {
         "crypto-js": "^4.1.1",
         "js-base64": "^2.6.4"
-      },
-      "dependencies": {
-        "js-base64": {
-          "version": "2.6.4",
-          "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz",
-          "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
-        }
       }
     },
-    "vue": {
+    "node_modules/uploading-oss/node_modules/js-base64": {
+      "version": "2.6.4",
+      "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz",
+      "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
+    },
+    "node_modules/vue": {
       "version": "2.7.10",
       "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.10.tgz",
       "integrity": "sha512-HmFC70qarSHPXcKtW8U8fgIkF6JGvjEmDiVInTkKZP0gIlEPhlVlcJJLkdGIDiNkIeA2zJPQTWJUI4iWe+AVfg==",
+      "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@vue/compiler-sfc": "2.7.10",
         "csstype": "^3.1.0"
       }
     },
-    "vue-waterfall-easy": {
+    "node_modules/vue-waterfall-easy": {
       "version": "2.4.4",
       "resolved": "https://registry.npmjs.org/vue-waterfall-easy/-/vue-waterfall-easy-2.4.4.tgz",
       "integrity": "sha512-5OkpT2FPNC3rHBy858zk/nmJxqdPaGmj/KVbmA6dgcvtsovKMa+zuf/Z7F+S2NnObeavpIBztTWgcH3S42ZD+g==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 6.0.0",
+        "npm": ">= 3.0.0"
+      }
     },
-    "wecomjsdk": {
+    "node_modules/wecomjsdk": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/wecomjsdk/-/wecomjsdk-1.0.2.tgz",
       "integrity": "sha512-nPbrTcA5P8IOY/gQJJ3/AtXE2zSqJIQB156RUAQ2+RvwvJmcR66p7hpZtCjbtKefvyDO0LJBdEFqfjRR72zjIw=="

+ 124 - 109
pages/statistics/components/capital_stat.vue

@@ -1,14 +1,15 @@
 <template>
 	<view class="">
-    <HeadData  :money-data="moneyData"></HeadData>
+		<HeadData :money-data="moneyData"></HeadData>
 		<StatLoanChart ref="outObj" :genre="1" :leftText="'放款汇总占比'"></StatLoanChart>
 		<StatLoanChart ref="putObj" :genre="2" :leftText="'回款汇总占比'"></StatLoanChart>
-		<stat_gather is_group :leftText="'汇总明细'"  :out-list="outList" :put-list="putList"></stat_gather>
+		<stat_gather is_group is_subsection :leftText="'汇总明细'" :out-list="outList" :put-list="putList"></stat_gather>
 		<view class="sys-background-fff r-30">
 			<StatCapital :leftColor="0" :rightColor="1" :leftText="'任务资金汇总'" :tabulate-data="sysPassageData">
 			</StatCapital>
 			<view class="view_line"></view>
-			<StatRanking ref="rankingObj" :is_margin_top="false" :is_type="2" :leftText="'个人业绩排行'" :data-list="userList"></StatRanking>
+			<StatRanking ref="rankingObj" :is_margin_top="false" :is_type="2" :leftText="'个人业绩排行'"
+				:data-list="userList"></StatRanking>
 		</view>
 		<StatSituation ref="situationObj" :date-type-obj="dateTypeObj" :type="1"></StatSituation>
 	</view>
@@ -19,125 +20,139 @@
 	import StatRanking from "../module/stat_ranking.vue"
 	import StatCapital from "../module/stat_capital.vue"
 	import StatSituation from "../module/stat_situation.vue"
-  import HeadData from "@/pages/statistics/module/head_data.vue";
-  import {getDepartmentMoney, getRanking, getSysPassage} from "@/api/statistics";
-  import md5 from "js-md5";
-  import Stat_gather from "@/pages/statistics/module/stat_gather.vue";
+	import HeadData from "@/pages/statistics/module/head_data.vue";
+	import {
+		getDepartmentMoney,
+		getRanking,
+		getSysPassage
+	} from "@/api/statistics";
+	import md5 from "js-md5";
+	import Stat_gather from "@/pages/statistics/module/stat_gather.vue";
 
 	export default {
-    props:{
-      'dateTypeObj':{
-        default:()=>{
-          return {
-            dateType:4,
-            selectDate:'2023-02-25',
-            money_type:1,
-            censusUserType:0,
-            product_id:5,
-          }
-        }
-      }
-    },
+		props: {
+			'dateTypeObj': {
+				default: () => {
+					return {
+						dateType: 4,
+						selectDate: '2023-02-25',
+						money_type: 1,
+						censusUserType: 0,
+						product_id: 5,
+					}
+				}
+			}
+		},
 		components: {
-      Stat_gather,
-      HeadData,
+			Stat_gather,
+			HeadData,
 			StatLoanChart,
 			StatRanking,
 			StatCapital,
 			StatSituation
 		},
-    watch:{
-      'dateTypeObj':function () {
-        this.initData()
-      }
-    },
-    mounted() {
-      this.initData()
-    },
+		watch: {
+			'dateTypeObj': function() {
+				this.initData()
+			}
+		},
+		mounted() {
+			this.initData()
+		},
 		data() {
 			return {
-        moneyData:{
-          out_money: 0,
-          out_num: 0,
-          put_money: 0,
-          put_num: 0,
-        },
-        outList:[],
-        putList:[],
-        sendMd5:'',
-        sysPassageData:{
-          consume_money: 0,
-          consume_num: "0",
-          consume_ratio: 0,
-          pledge_money: 0,
-          pledge_num: "0",
-          pledge_ratio: 0,
-          list:[{name: "", ratio: 0, value: 0, labelText: ""},{name: "", ratio: 0, value: 0, labelText: ""}]
-        },
-        userList:[]
+				moneyData: {
+					out_money: 0,
+					out_num: 0,
+					put_money: 0,
+					put_num: 0,
+				},
+				outList: [],
+				putList: [],
+				sendMd5: '',
+				sysPassageData: {
+					consume_money: 0,
+					consume_num: "0",
+					consume_ratio: 0,
+					pledge_money: 0,
+					pledge_num: "0",
+					pledge_ratio: 0,
+					list: [{
+						name: "",
+						ratio: 0,
+						value: 0,
+						labelText: ""
+					}, {
+						name: "",
+						ratio: 0,
+						value: 0,
+						labelText: ""
+					}]
+				},
+				userList: []
 			}
 		},
-    methods: {
-      setSendMd5(){
-        let str=JSON.stringify(this.dateTypeObj)
-        return md5(str)
-      },
-      initData(){
-        if(this.dateTypeObj.censusUserType>0){
-          let sendMd5=this.setSendMd5()
-          if(sendMd5 !== this.sendMd5){
-            this.sendMd5=sendMd5
-            this.getDepartmentMoney(1)
-            this.getDepartmentMoney(2)
-            this.getSysPassage()
-            this.setUserRanking()
-            this.$refs.situationObj.startList()
-          }
-        }
-      },
-      //管理员-任务资金汇总
-      getSysPassage(){
-        getSysPassage(this.dateTypeObj).then((res)=>{
-          if(res.code === 1){
-            this.sysPassageData = res.data
-          }else{
-            // this.$refs.chartsPieView.setNoList()
-          }
-        })
-      },
-      getDepartmentMoney(money_type){
-        let selectData=this.dateTypeObj
-        selectData.money_type=money_type
-        getDepartmentMoney(selectData).then((res)=>{
-          if(res.code === 1){
-            if(money_type===1){
-              this.moneyData.out_money=res.data.moneyData.loanMoney
-              this.moneyData.out_num=res.data.moneyData.loanNum
-              this.outList=res.data.items
-              this.$refs.outObj.setPeakChartData(this.outList)
-            }else {
-              this.moneyData.put_money=res.data.moneyData.loanMoney
-              this.moneyData.put_num=res.data.moneyData.loanNum
-              this.putList=res.data.items
-              this.$refs.putObj.setPeakChartData(this.putList)
-            }
-          }
+		methods: {
+			setSendMd5() {
+				let str = JSON.stringify(this.dateTypeObj)
+				return md5(str)
+			},
+			initData() {
+				if (this.dateTypeObj.censusUserType > 0) {
+					let sendMd5 = this.setSendMd5()
+					if (sendMd5 !== this.sendMd5) {
+						this.sendMd5 = sendMd5
+						this.getDepartmentMoney(1)
+						this.getDepartmentMoney(2)
+						this.getSysPassage()
+						this.setUserRanking()
+						this.$refs.situationObj.startList()
+					}
+				}
+			},
+			//管理员-任务资金汇总
+			getSysPassage() {
+				getSysPassage(this.dateTypeObj).then((res) => {
+					if (res.code === 1) {
+						this.sysPassageData = res.data
+					} else {
+						// this.$refs.chartsPieView.setNoList()
+					}
+				})
+			},
+			getDepartmentMoney(money_type) {
+				let selectData = this.dateTypeObj
+				selectData.money_type = money_type
+				getDepartmentMoney(selectData).then((res) => {
+					if (res.code === 1) {
+						if (money_type === 1) {
+							this.moneyData.out_money = res.data.moneyData.loanMoney
+							this.moneyData.out_num = res.data.moneyData.loanNum
+							this.outList = res.data.items
+							this.$refs.outObj.setPeakChartData(this.outList)
+						} else {
+							this.moneyData.put_money = res.data.moneyData.loanMoney
+							this.moneyData.put_num = res.data.moneyData.loanNum
+							this.putList = res.data.items
+							this.$refs.putObj.setPeakChartData(this.putList)
+						}
+					}
 
-        })
-      },
-      //设置员工排名
-      setUserRanking(){
-        let fromData = this.dateTypeObj
-        fromData.pageNum = 3
-        getRanking(fromData).then((res)=>{
-          if(res.code === 1) {
-            this.userList = res.data.items
-            console.log(this.userList)
-            this.$refs.rankingObj.setDataList(this.userList)
-          }
-        })
-      },
-    },
+				})
+			},
+			//设置员工排名
+			setUserRanking() {
+				let fromData = this.dateTypeObj
+				fromData.pageNum = 3
+				getRanking(fromData).then((res) => {
+					if (res.code === 1) {
+						this.userList = res.data.items
+						console.log(this.userList)
+						this.$refs.rankingObj.setDataList(this.userList)
+					}
+				})
+			},
+		},
 	}
 </script>
 

+ 188 - 148
pages/statistics/components/general_stat.vue

@@ -1,15 +1,18 @@
 <template>
 	<view class="">
-    <HeadData  :money-data="moneyData"></HeadData>
-    <stat_finance_chart :money-data="moneyData"></stat_finance_chart>
-    <stat-finance :date-type-obj="dateTypeObj"></stat-finance>
+		<HeadData :money-data="moneyData"></HeadData>
+		<stat_finance_chart :money-data="moneyData"></stat_finance_chart>
+		<stat-finance :date-type-obj="dateTypeObj"></stat-finance>
 		<view class="sys-background-fff r-30">
-			<StatCapital :leftColor="0" :rightColor="1" :leftText="'任务资金汇总'" :tabulate-data="sysPassageData"></StatCapital>
+			<StatCapital :leftColor="0" :rightColor="1" :leftText="'任务资金汇总'" :tabulate-data="sysPassageData">
+			</StatCapital>
 			<view class="view_line"></view>
-      <StatCapital :leftColor="1" :rightColor="2" :leftText="'在途资金汇总'" :tabulate-data="sysCapitalMoney"></StatCapital>
+			<StatCapital :leftColor="1" :rightColor="2" :bgChartColor="['#2B7DFA','#ED9A2C']" :leftText="'在途资金汇总'"
+				:tabulate-data="sysCapitalMoney">
+			</StatCapital>
 		</view>
-    <stat-industry></stat-industry>
-    <stat-age-chart></stat-age-chart>
+		<stat-industry></stat-industry>
+		<stat-age-chart></stat-age-chart>
 	</view>
 </template>
 
@@ -18,159 +21,196 @@
 	import StatRanking from "../module/stat_ranking.vue"
 	import StatCapital from "../module/stat_capital.vue"
 	import StatSituation from "../module/stat_situation.vue"
-  import HeadData from "@/pages/statistics/module/head_data.vue";
-  import {getSysCashier,getSysPassage,getCapitalMoney,getSysIndustry,getSysAge} from "@/api/statistics";
-  import Stat_finance_chart from "@/pages/statistics/module/stat_finance_chart.vue";
-  import StatFinance from "@/pages/statistics/module/stat_finance.vue";
-  import md5 from 'js-md5'
-  import StatIndustry from "@/pages/statistics/module/stat_industry.vue";
-  import StatAgeChart from "@/pages/statistics/module/stat_age_chart.vue";
+	import HeadData from "@/pages/statistics/module/head_data.vue";
+	import {
+		getSysCashier,
+		getSysPassage,
+		getCapitalMoney,
+		getSysIndustry,
+		getSysAge
+	} from "@/api/statistics";
+	import Stat_finance_chart from "@/pages/statistics/module/stat_finance_chart.vue";
+	import StatFinance from "@/pages/statistics/module/stat_finance.vue";
+	import md5 from 'js-md5'
+	import StatIndustry from "@/pages/statistics/module/stat_industry.vue";
+	import StatAgeChart from "@/pages/statistics/module/stat_age_chart.vue";
 
 	export default {
-    props:{
-      'dateTypeObj':{
-        default:()=>{
-          return {
-            dateType:4,
-            selectDate:'2023-02-25',
-            money_type:1,
-            censusUserType:0,
-            product_id:5,
-          }
-        }
-      }
-    },
+		props: {
+			'dateTypeObj': {
+				default: () => {
+					return {
+						dateType: 4,
+						selectDate: '2023-02-25',
+						money_type: 1,
+						censusUserType: 0,
+						product_id: 5,
+					}
+				}
+			}
+		},
 		components: {
-      StatAgeChart,
-      StatIndustry,
-      StatFinance,
-      Stat_finance_chart,
-      HeadData,
+			StatAgeChart,
+			StatIndustry,
+			StatFinance,
+			Stat_finance_chart,
+			HeadData,
 			StatLoanChart,
 			StatRanking,
 			StatCapital,
 			StatSituation
 		},
-    watch:{
-      'dateTypeObj':function () {
-        this.initData()
-      }
-    },
-    mounted() {
-      this.initData()
-    },
+		watch: {
+			'dateTypeObj': function() {
+				this.initData()
+			}
+		},
+		mounted() {
+			this.initData()
+		},
 		data() {
-      return {
-        moneyData:{
-          out_money: 0,
-          out_num: 0,
-          put_money: 0,
-          put_num: 0,
-        },
-        sysPassageData:{
-          consume_money: 0,
-          consume_num: "0",
-          consume_ratio: 0,
-          pledge_money: 0,
-          pledge_num: "0",
-          pledge_ratio: 0,
-          list:[{name: "", ratio: 0, value: 0, labelText: ""},{name: "", ratio: 0, value: 0, labelText: ""}]
-        },
-        sysCapitalMoney:{
-          consume_money: 0,
-          consume_num: "0",
-          consume_ratio: 0,
-          pledge_money: 0,
-          pledge_num: "0",
-          pledge_ratio: 0,
-          list:[{name: "", ratio: 0, value: 0, labelText: ""},{name: "", ratio: 0, value: 0, labelText: ""}]
-        },
-        industryList:{},
-        ageList:{},
-        sendMd5:''
-      };
+			return {
+				moneyData: {
+					out_money: 0,
+					out_num: 0,
+					put_money: 0,
+					put_num: 0,
+				},
+				sysPassageData: {
+					consume_money: 0,
+					consume_num: "0",
+					consume_ratio: 0,
+					pledge_money: 0,
+					pledge_num: "0",
+					pledge_ratio: 0,
+					list: [{
+						name: "",
+						ratio: 0,
+						value: 0,
+						labelText: ""
+					}, {
+						name: "",
+						ratio: 0,
+						value: 0,
+						labelText: ""
+					}]
+				},
+				sysCapitalMoney: {
+					consume_money: 0,
+					consume_num: "0",
+					consume_ratio: 0,
+					pledge_money: 0,
+					pledge_num: "0",
+					pledge_ratio: 0,
+					list: [{
+						name: "",
+						ratio: 0,
+						value: 0,
+						labelText: ""
+					}, {
+						name: "",
+						ratio: 0,
+						value: 0,
+						labelText: ""
+					}]
+				},
+				industryList: {},
+				ageList: {},
+				sendMd5: ''
+			};
 		},
-    methods: {
-      setSendMd5(){
-        let str=JSON.stringify(this.dateTypeObj)
-        return md5(str)
-      },
-      initData(){
-        if(this.dateTypeObj.censusUserType>0){
-          let sendMd5=this.setSendMd5()
-          if(sendMd5 !== this.sendMd5){
-            this.sendMd5=sendMd5
-            this.getSysCashier()
-            this.getSysPassage()
-            this.getCapitalMoney()
-            this.getSysIndustry()
-            this.getSysAge()
-          }
-        }
-      },
-      getSysCashier(){
-        getSysCashier(this.dateTypeObj).then((res)=>{
-          if(res.code===1){
-            this.moneyData=res.data
-          }
-        })
-      },
-      //管理员-任务资金汇总
-      getSysPassage(){
-        getSysPassage(this.dateTypeObj).then((res)=>{
-          if(res.code === 1){
-            this.sysPassageData = res.data
-          }else{
-            // this.$refs.chartsPieView.setNoList()
-          }
-        })
-      },
-      //管理员-在途资金汇总
-      getCapitalMoney(){
-        getCapitalMoney(this.dateTypeObj).then((res)=>{
-          if(res.code===1  && res.data.items.length>0){
-            let totalMoney=res.data.items[0].value+res.data.items[1].value
-            this.sysCapitalMoney.consume_money=res.data.items[0].value
-            this.sysCapitalMoney.consume_num=res.data.items[0].total_num
-            this.sysCapitalMoney.consume_ratio=(res.data.items[0].value/totalMoney*100).toFixed(2)
-            this.sysCapitalMoney.pledge_money=res.data.items[1].value
-            this.sysCapitalMoney.pledge_num=res.data.items[1].total_num
-            this.sysCapitalMoney.pledge_ratio=(res.data.items[1].value/totalMoney*100).toFixed(2)
-            this.sysCapitalMoney.list[0]={name: res.data.items[0].name, ratio: this.sysCapitalMoney.consume_ratio, value:  this.sysCapitalMoney.consume_money, labelText: ""}
-            this.sysCapitalMoney.list[1]={name: res.data.items[1].name, ratio: this.sysCapitalMoney.pledge_ratio, value:  this.sysCapitalMoney.pledge_money, labelText: ""}
-          }
-        })
-      },
+		methods: {
+			setSendMd5() {
+				let str = JSON.stringify(this.dateTypeObj)
+				return md5(str)
+			},
+			initData() {
+				if (this.dateTypeObj.censusUserType > 0) {
+					let sendMd5 = this.setSendMd5()
+					if (sendMd5 !== this.sendMd5) {
+						this.sendMd5 = sendMd5
+						this.getSysCashier()
+						this.getSysPassage()
+						this.getCapitalMoney()
+						this.getSysIndustry()
+						this.getSysAge()
+					}
+				}
+			},
+			getSysCashier() {
+				getSysCashier(this.dateTypeObj).then((res) => {
+					if (res.code === 1) {
+						this.moneyData = res.data
+					}
+				})
+			},
+			//管理员-任务资金汇总
+			getSysPassage() {
+				getSysPassage(this.dateTypeObj).then((res) => {
+					if (res.code === 1) {
+						this.sysPassageData = res.data
+					} else {
+						// this.$refs.chartsPieView.setNoList()
+					}
+				})
+			},
+			//管理员-在途资金汇总
+			getCapitalMoney() {
+				getCapitalMoney(this.dateTypeObj).then((res) => {
+					if (res.code === 1 && res.data.items.length > 0) {
+						let totalMoney = res.data.items[0].value + res.data.items[1].value
+						this.sysCapitalMoney.consume_money = res.data.items[0].value
+						this.sysCapitalMoney.consume_num = res.data.items[0].total_num
+						this.sysCapitalMoney.consume_ratio = (res.data.items[0].value / totalMoney * 100).toFixed(
+							2)
+						this.sysCapitalMoney.pledge_money = res.data.items[1].value
+						this.sysCapitalMoney.pledge_num = res.data.items[1].total_num
+						this.sysCapitalMoney.pledge_ratio = (res.data.items[1].value / totalMoney * 100).toFixed(2)
+						this.sysCapitalMoney.list[0] = {
+							name: res.data.items[0].name,
+							ratio: this.sysCapitalMoney.consume_ratio,
+							value: this.sysCapitalMoney.consume_money,
+							labelText: ""
+						}
+						this.sysCapitalMoney.list[1] = {
+							name: res.data.items[1].name,
+							ratio: this.sysCapitalMoney.pledge_ratio,
+							value: this.sysCapitalMoney.pledge_money,
+							labelText: ""
+						}
+					}
+				})
+			},
 
-      // //管理员-行业统计
-      getSysIndustry(){
-        getSysIndustry(this.dateTypeObj).then((res)=>{
-          if(res.code === 1){
-            this.industryList=res.data
-            // let ret = {
-            //   series:[{data:res.data.roseData}]
-            // }
-            // this.$refs.chartsRose.show = true
-            // this.$refs.chartsRose.chartData2 = JSON.parse(JSON.stringify(ret))
-          }else{
-            // this.$refs.chartsRose.setNoList()
-          }
-        })
-      },
+			// //管理员-行业统计
+			getSysIndustry() {
+				getSysIndustry(this.dateTypeObj).then((res) => {
+					if (res.code === 1) {
+						this.industryList = res.data
+						// let ret = {
+						//   series:[{data:res.data.roseData}]
+						// }
+						// this.$refs.chartsRose.show = true
+						// this.$refs.chartsRose.chartData2 = JSON.parse(JSON.stringify(ret))
+					} else {
+						// this.$refs.chartsRose.setNoList()
+					}
+				})
+			},
 
-      //管理员-年龄区域统计
-      getSysAge(){
-        getSysAge(this.dateTypeObj).then((res)=>{
-          if(res.code === 1){
-            this.ageList=res.data
-            // this.$refs.chartsAdminThree.show = true
-            // this.$refs.chartsAdminThree.chartData4 = JSON.parse(JSON.stringify(ret));
-          }else{
-            // this.$refs.chartsAdminThree.setNoList()
-          }
-        })
-      },
-    },
+			//管理员-年龄区域统计
+			getSysAge() {
+				getSysAge(this.dateTypeObj).then((res) => {
+					if (res.code === 1) {
+						this.ageList = res.data
+						// this.$refs.chartsAdminThree.show = true
+						// this.$refs.chartsAdminThree.chartData4 = JSON.parse(JSON.stringify(ret));
+					} else {
+						// this.$refs.chartsAdminThree.setNoList()
+					}
+				})
+			},
+		},
 	}
 </script>
 

+ 23 - 20
pages/statistics/module/head_data.vue

@@ -1,8 +1,8 @@
 <template>
 	<view>
-		<view class="head_data row-justify-sb center m-lr30 m-t30">
+		<view class="head_data row-justify-sb center m-t30">
 			<view class="data_item page-box-bg-fff column-c r-30 p-tb25">
-				<image class="wh-80" src="/static/img/task/task-all.png" mode=""></image>
+				<image class="wh-80" src="/static/img/statistics/stat-up.png" mode=""></image>
 				<view class="row-c p-tb20">
 					<text class="size-40 sys-weight-600 text-color-E83">{{(moneyData.out_money).toFixed(2)}}</text>
 					<text class="size-24 text-color-666 m-l10">万</text>
@@ -10,7 +10,7 @@
 				<text class="num r-10 sys-from-background-color size-24 text-color-666">放款{{moneyData.out_num}}笔</text>
 			</view>
 			<view class="data_item page-box-bg-fff column-c r-30 p-tb25">
-				<image class="wh-80" src="/static/img/task/task-all.png" mode=""></image>
+				<image class="wh-80" src="/static/img/statistics/stat-down.png" mode=""></image>
 				<view class="row-c p-tb20">
 					<text class="size-40 text-color-108 sys-weight-600">{{(moneyData.put_money).toFixed(2)}}</text>
 					<text class="size-24 text-color-666 m-l10">万</text>
@@ -22,25 +22,27 @@
 </template>
 
 <script>
-	import {getSysCashier} from "@/api/statistics";
+	import {
+		getSysCashier
+	} from "@/api/statistics";
 
-  export default {
+	export default {
 		name: 'head_filter',
-    props:{
-      'moneyData':{
-        default:()=>{
-          return {
-            out_money: 0,
-            out_num: 0,
-            put_money: 0,
-            put_num: 0,
-          }
-        }
-      }
-    },
+		props: {
+			'moneyData': {
+				default: () => {
+					return {
+						out_money: 0,
+						out_num: 0,
+						put_money: 0,
+						put_num: 0,
+					}
+				}
+			}
+		},
 
 
-    data() {
+		data() {
 			return {
 
 			};
@@ -52,10 +54,11 @@
 <style lang="scss" scoped>
 	.head_data {
 		text-align: center;
-		
+
 		.data_item {
 			width: 330rpx;
-			.num{
+
+			.num {
 				width: 140rpx;
 				height: 50rpx;
 				line-height: 50rpx;

+ 151 - 110
pages/statistics/module/head_filter.vue

@@ -1,155 +1,177 @@
 <template>
 	<view>
 		<view class="head_filter row-justify-sb center p-lr30">
-			<view class="filter_item r-100  bg-rgba-255" @click="startAnimation(1)">
+			<view class="filter_item r-100  filter-bg" @click="startAnimation(1)">
 				<text class="text-color-fff size-28 sys-weight-600 p-r10">{{newUserTypeName}}</text>
 				<uni-icons :animation="animationData" class="dropdown-icon" :type="type" size="16"
 					color="#fff"></uni-icons>
 			</view>
-			<view class="filter_item last_item r-100 bg-rgba-255" @click="startAnimation(2)">
+			<view class="filter_item last_item r-100 filter-bg" @click="startAnimation(2)">
 				<text class="text-color-fff size-28 sys-weight-600 p-r10">{{dateName}}</text>
 				<uni-icons :animation="animationData" class="dropdown-icon" type="down" size="16"
 					color="#fff"></uni-icons>
 			</view>
-			<view class="filter_item last_item r-100  bg-rgba-255 row-justify-c center">
-				<uni-icons type="calendar" size="18" color="#fff"></uni-icons>
-				<text class="text-color-fff size-28 sys-weight-600 m-l10">2024</text>
+			<view class="last_item">
+				<uni-datetime-picker v-model="daterange" type="daterange" @change="onSelectTime"
+					@touchmove.stop.prevent="moveHandle">
+					<view class="last_item r-100 filter-bg row-justify-c center">
+						<image class="wh-36" src="/static/img/statistics/stat-calendar.png" mode="aspectFill"></image>
+						<text class="text-color-fff size-28 sys-weight-600 m-l16">自定义</text>
+					</view>
+				</uni-datetime-picker>
 			</view>
 		</view>
-		<uni-popup background-color="#fff" ref="popup" type="bottom" border-radius="10px"
+		<uni-popup background-color="#fff" ref="popup" type="bottom" border-radius="10px" @change="onChangePopup"
 			@touchmove.stop.prevent="moveHandle">
-      <view v-if="selectType===1">
-        <EnSelect title="请选择统计类型"  v-model="dateTypeObj.censusUserType" :local-data="userStatusList" ref="system" @onChange="setCensusUserType"></EnSelect>
-      </view>
-      <view v-else>
-        <EnSelect title="请选择统计周期"  v-model="dateTypeObj.dateType" :local-data="dateData" ref="system" @onChange="setDateType"></EnSelect>
-      </view>
-
+			<view v-if="selectType===1">
+				<EnSelect title="请选择统计类型" v-model="dateTypeObj.censusUserType" :local-data="userStatusList" ref="system"
+					@onChange="setCensusUserType"></EnSelect>
+			</view>
+			<view v-else>
+				<EnSelect title="请选择统计周期" v-model="dateTypeObj.dateType" :local-data="dateData" ref="system"
+					@onChange="setDateType"></EnSelect>
+			</view>
 		</uni-popup>
 	</view>
 </template>
 
 <script>
 	import EnSelect from "@/components/en-utils/en-select/en-select.vue";
-  import tools from "@/service/tools";
+	import tools from "@/service/tools";
 
 	export default {
 		name: 'head_filter',
 		components: {
 			EnSelect
 		},
-    props:{
-      userStatusList:{
-        type: Array,
-        default: function () {
-          return []
-        }
-      }
-    },
+		props: {
+			userStatusList: {
+				type: Array,
+				default: function() {
+					return []
+				}
+			}
+		},
 		data() {
 			return {
 				type: 'down',
 				animationData: {},
 				isRote: false,
 				animation: null,
-        newUserTypeName:'',
-        dateName:'年数据',
-        dateData:[{'id':1,'name':'日数据'},{'id':2,'name':'周数据'},{'id':3,'name':'月数据'},{'id':4,'name':'年数据'}],
+				newUserTypeName: '',
+				dateName: '年数据',
+				dateData: [{
+					'id': 1,
+					'name': '日数据'
+				}, {
+					'id': 2,
+					'name': '周数据'
+				}, {
+					'id': 3,
+					'name': '月数据'
+				}, {
+					'id': 4,
+					'name': '年数据'
+				}],
 
-        dateTypeObj:{
-          dateType:4,//时间类型
-          selectDate:'',//自定义的时候传数组,其它传开始日期
-          money_type:1,
-          censusUserType:0,
-          product_id:5,
-        },
-        selectType:1,
-        maxData:'',
+				dateTypeObj: {
+					dateType: 4, //时间类型
+					selectDate: '', //自定义的时候传数组,其它传开始日期
+					money_type: 1,
+					censusUserType: 0,
+					product_id: 5,
+				},
+				selectType: 1,
+				maxData: '',
+				daterange: ''
 
 			};
 		},
-    watch:{
-      'userStatusList':function () {
-        console.log(this.userStatusList)
-        if(this.dateTypeObj.selectDate!==''){
-          this.setCensusUserType(0)
-        }
-      },
-      'dateTypeObj':{
-        deep:true,
-        handler:function (){
-          this.$emit('input',this.dateTypeObj)
-        }
-      }
-    },
-    mounted() {
-      this.getDateStatus()
-    },
+		watch: {
+			'userStatusList': function() {
+				console.log(this.userStatusList)
+				if (this.dateTypeObj.selectDate !== '') {
+					this.setCensusUserType(0)
+				}
+			},
+			'dateTypeObj': {
+				deep: true,
+				handler: function() {
+					this.$emit('input', this.dateTypeObj)
+				}
+			}
+		},
+		mounted() {
+			this.getDateStatus()
+		},
 		methods: {
-      getDateStatus(){
-        let myDate = new Date();
-        let myYear = myDate.getFullYear(); //获取完整的年份(4位,1970-????)
-        let myMonth = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
-        let myToday = myDate.getDate(); //获取当前日(1-31)
-        let time = myYear+'/'+(myMonth>=10?myMonth:'0'+myMonth)+'/'+(myToday>=10?myToday:'0'+myToday)
-        let maxDataTime = new Date(this.maxData.replace(/-/g, "/")).getTime()
-        let myDataTime = new Date(time).getTime()
+			getDateStatus() {
+				let myDate = new Date();
+				let myYear = myDate.getFullYear(); //获取完整的年份(4位,1970-????)
+				let myMonth = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
+				let myToday = myDate.getDate(); //获取当前日(1-31)
+				let time = myYear + '/' + (myMonth >= 10 ? myMonth : '0' + myMonth) + '/' + (myToday >= 10 ? myToday :
+					'0' + myToday)
+				let maxDataTime = new Date(this.maxData.replace(/-/g, "/")).getTime()
+				let myDataTime = new Date(time).getTime()
 
-        if(maxDataTime<myDataTime){
-          this.dateTypeObj.selectDate = this.maxData
-        }else{
-          this.dateTypeObj.selectDate = myYear+'/'+myMonth+'/'+myToday
-        }
-        if(this.dateTypeObj.censusUserType===0){
-          this.setCensusUserType(0)
-        }
-        this.setTimeData( this.dateTypeObj.selectDate,0)
-      },
-      setTimeData(date,num){
-        //时间初始化
-        let ret=null;
-        if(this.dateTypeObj.dateType===1){
-          ret= tools.getStatisticsDate(date,num)
-        }else if(this.dateTypeObj.dateType===2){
-          ret= tools.getNextWeek(date,num)
-        }else if(this.dateTypeObj.dateType===3){
-          ret= tools.dateTypeObj.getNextMonth(date,num)
-        }else if(this.dateTypeObj.dateType===4){
-          ret= tools.getNextYear(date,num)
-        }
-        console.log(ret)
-        if(ret){
-          // let maxDataTime = new Date(this.maxData.replace(/-/g, "/")).getTime()
-          // let time = (ret[1].y + ''+'/') + (ret[1].m + '') + ('/'+ret[1].d + '')
-          // let myDataTime = new Date(time).getTime()
-          this.dateTypeObj.selectDate=ret[0]['y']+'-'+ret[0]['m']+'-'+ret[0]['d'];
-          let timeData=[ret[0]['y']+' | '+ret[0]['m']+'.'+ret[0]['d']];
-          if(ret[0]['y']*1===ret[1]['y']*1){
-            timeData[1]=ret[1]['m']+'.'+ret[1]['d']
-          }else {
-            timeData[1]=ret[1]['y']+' | '+ret[1]['m']+'.'+ret[1]['d']
-          }
-          this.$emit('setTimeDate',timeData)
-        }
-      },
-      setCensusUserType(index){
-        if(this.userStatusList[index]!==undefined){
-          this.dateTypeObj.censusUserType=this.userStatusList[index].id
-          this.newUserTypeName=this.userStatusList[index].name
-          this.endPopup()
-        }
-      },
-      setDateType(index){
-        this.dateTypeObj.dateType=this.dateData[index].id
-        this.dateName=this.dateData[index].name
-        this.getDateStatus()
-        this.endPopup()
-      },
+				if (maxDataTime < myDataTime) {
+					this.dateTypeObj.selectDate = this.maxData
+				} else {
+					this.dateTypeObj.selectDate = myYear + '/' + myMonth + '/' + myToday
+				}
+				if (this.dateTypeObj.censusUserType === 0) {
+					this.setCensusUserType(0)
+				}
+				this.setTimeData(this.dateTypeObj.selectDate, 0)
+			},
+			setTimeData(date, num) {
+				//时间初始化
+				let ret = null;
+				if (this.dateTypeObj.dateType === 1) {
+					ret = tools.getStatisticsDate(date, num)
+				} else if (this.dateTypeObj.dateType === 2) {
+					ret = tools.getNextWeek(date, num)
+				} else if (this.dateTypeObj.dateType === 3) {
+					ret = tools.dateTypeObj.getNextMonth(date, num)
+				} else if (this.dateTypeObj.dateType === 4) {
+					ret = tools.getNextYear(date, num)
+				}
+				console.log(ret)
+				if (ret) {
+					// let maxDataTime = new Date(this.maxData.replace(/-/g, "/")).getTime()
+					// let time = (ret[1].y + ''+'/') + (ret[1].m + '') + ('/'+ret[1].d + '')
+					// let myDataTime = new Date(time).getTime()
+					this.dateTypeObj.selectDate = ret[0]['y'] + '-' + ret[0]['m'] + '-' + ret[0]['d'];
+					let timeData = [ret[0]['y'] + ' | ' + ret[0]['m'] + '.' + ret[0]['d']];
+					if (ret[0]['y'] * 1 === ret[1]['y'] * 1) {
+						timeData[1] = ret[1]['m'] + '.' + ret[1]['d']
+					} else {
+						timeData[1] = ret[1]['y'] + ' | ' + ret[1]['m'] + '.' + ret[1]['d']
+					}
+					this.$emit('setTimeDate', timeData)
+				}
+			},
+			setCensusUserType(index) {
+				if (this.userStatusList[index] !== undefined) {
+					this.dateTypeObj.censusUserType = this.userStatusList[index].id
+					this.newUserTypeName = this.userStatusList[index].name
+					this.endPopup()
+				}
+			},
+			setDateType(index) {
+				this.dateTypeObj.dateType = this.dateData[index].id
+				this.dateName = this.dateData[index].name
+				this.getDateStatus()
+				this.endPopup()
+			},
 			endPopup() {
+				console.log(this.dateTypeObj.censusUserType);
+				this.$emit('onTopSelect', this.dateTypeObj.censusUserType)
 				this.$refs.popup.close('bottom')
 			},
 			startAnimation(type) {
-        this.selectType=type
+				this.selectType = type
 				//旋转角度 
 				this.$refs.popup.open('bottom')
 				let rota = 180;
@@ -172,6 +194,21 @@
 				//导出动画
 				this.animationData = this.animation.export()
 			},
+			onChangePopup(e) {
+				console.log(e.show === false);
+				if (e.show === false) {
+					let rota = 180;
+					this.animation = uni.createAnimation();
+					this.animation.rotate(rota).step()
+					this.animationData = this.animation.export()
+				}
+			},
+			onSelectTime(e) {
+				const year = e[0].slice(0, 4)
+				const start = e[0].slice(-5).replace(/-/g, '.')
+				const end = e[1].slice(-5).replace(/-/g, '.')
+				console.log(year, start, end);
+			},
 			moveHandle() {
 				return false
 			},
@@ -199,6 +236,10 @@
 		}
 	}
 
+	.filter-bg {
+		background: rgba(0, 88, 14, 0.34);
+	}
+
 	.dropdown-icon {
 		display: inline-block;
 		transition: transform 0.3s ease-in-out;

+ 8 - 8
pages/statistics/module/stat_age_chart.vue

@@ -1,22 +1,22 @@
 <template>
-	<view class="page-box-bg-fff m-t20 r-30 p-30">
-		<StatisticsTitle :is_right="false" is_age :genre="0" :leftText="'年龄分部'" :rightText="'同比环比'"
-			@onHandle="onHandle">
-		</StatisticsTitle>
-		<view class="column-c m-30 r-30 p-l16">
-			<PeakChart></PeakChart>
+	<view class="page-box-bg-fff m-t20 r-30 p-b30">
+		<view class="p-lr30 p-t30">
+			<StatisticsTitle :is_right="false" is_age :genre="0" :leftText="'年龄分部'" :rightText="'同比环比'"
+				@onHandle="onHandle">
+			</StatisticsTitle>
 		</view>
+		<MixtureChart></MixtureChart>
 	</view>
 </template>
 
 <script>
-	import PeakChart from "@/common/chart/peak_chart.vue";
+	import MixtureChart from "@/common/chart/mixture_chart.vue";
 	import StatisticsTitle from "./statistics_title.vue";
 
 	export default {
 		name: 'stat-age-chart',
 		components: {
-			PeakChart,
+			MixtureChart,
 			StatisticsTitle
 		},
 		data() {

+ 47 - 31
pages/statistics/module/stat_capital.vue

@@ -1,12 +1,13 @@
 <template>
 	<view class="page-box-bg-fff m-t20 r-30 p-30">
 		<!-- 标题插槽 -->
-		<StatisticsTitle :genre="genre" :leftText="leftText" :is_right="false" >	</StatisticsTitle>
+		<StatisticsTitle :genre="genre" :leftText="leftText" :is_right="false"> </StatisticsTitle>
 		<view class="row-justify-sb center p-lr20">
 			<view class="capital_item">
 				<view class="row-c flex">
 					<view class="wh-14 r-100 m-r10" :style="{background:bgColor[leftColor]}"></view>
-					<text class="size-24 text-color-576">{{tabulateData.list[0].name}}{{tabulateData.consume_num}}笔</text>
+					<text
+						class="size-24 text-color-576">{{tabulateData.list[0].name}}{{tabulateData.consume_num}}笔</text>
 				</view>
 				<view class="sys-weight-600 m-l20 m-tb10">
 					<text class="size-32 text-color-081">{{tabulateData.consume_money}}</text>
@@ -16,12 +17,13 @@
 					:style="{color:bgColor[leftColor]}">{{tabulateData.consume_ratio}}%</text>
 			</view>
 			<view class="chart_item column-c m-lr20">
-				<CircleChart :bgColor="'#2B7DFA'" ref="tabulateObj"></CircleChart>
+				<RingChart :bgChartColor="bgChartColor" ref="tabulateObj"></RingChart>
 			</view>
 			<view class="capital_item">
 				<view class="row-c flex">
 					<view class="wh-14 r-100 m-r10" :style="{background:bgColor[rightColor]}"></view>
-					<text class="size-24 text-color-576">{{tabulateData.list[1].name}}{{tabulateData.pledge_num}}笔</text>
+					<text
+						class="size-24 text-color-576">{{tabulateData.list[1].name}}{{tabulateData.pledge_num}}笔</text>
 				</view>
 				<view class="sys-weight-600 m-l20 m-tb10">
 					<text class="size-32 text-color-081">{{tabulateData.pledge_money}}</text>
@@ -35,13 +37,13 @@
 </template>
 
 <script>
-	import CircleChart from "@/common/chart/circle_chart.vue";
+	import RingChart from "@/common/chart/ring_chart.vue";
 	import StatisticsTitle from "./statistics_title.vue";
 
 	export default {
 		name: 'capital_chart',
 		components: {
-			CircleChart,
+			RingChart,
 			StatisticsTitle
 		},
 		props: {
@@ -65,37 +67,51 @@
 				type: Number,
 				default: 0
 			},
-      tabulateData:{
-        default: ()=>{
-          return {
-            consume_money: 0,
-            consume_num: "0",
-            consume_ratio: 0,
-            pledge_money: 0,
-            pledge_num: "0",
-            pledge_ratio: 0,
-            list:[{name: "", ratio: 0, value: 0, labelText: ""},{name: "", ratio: 0, value: 0, labelText: ""}]
-          }
-        }
-      }
+			tabulateData: {
+				default: () => {
+					return {
+						consume_money: 0,
+						consume_num: "0",
+						consume_ratio: 0,
+						pledge_money: 0,
+						pledge_num: "0",
+						pledge_ratio: 0,
+						list: [{
+							name: "",
+							ratio: 0,
+							value: 0,
+							labelText: ""
+						}, {
+							name: "",
+							ratio: 0,
+							value: 0,
+							labelText: ""
+						}]
+					}
+				}
+			},
+			bgChartColor: {
+				type: Array,
+				default: () => ["#00BF8A", "#2B7DFA"]
+			}
 		},
 		data() {
 			return {
 				bgColor: ['#00BF8A', '#2B7DFA', '#ED9A2C']
 			};
 		},
-    watch:{
-      'tabulateData':function () {
-        this.initData()
-      }
-    },
-    methods: {
-      initData(){
-        if((this.tabulateData.consume_ratio*1+this.tabulateData.pledge_ratio*1)>0){
-          this.$refs.tabulateObj.setServerData(this.tabulateData.consume_ratio)
-        }
-      },
-    },
+		watch: {
+			'tabulateData': function() {
+				this.initData()
+			}
+		},
+		methods: {
+			initData() {
+				if ((this.tabulateData.consume_ratio * 1 + this.tabulateData.pledge_ratio * 1) > 0) {
+					// this.$refs.tabulateObj.setServerData(this.tabulateData.consume_ratio)
+				}
+			},
+		},
 	}
 </script>
 

+ 49 - 32
pages/statistics/module/stat_gather.vue

@@ -2,9 +2,35 @@
 	<view class="page-box-bg-fff r-30 p-30 sys-weight-400" :class="is_margin_top?'m-t20':''">
 		<StatisticsTitle :genre="genre" :leftText="leftText" :rightText="rightText" @onHandle="onHandle">
 		</StatisticsTitle>
-		<view v-if="is_type == 1">
-			<view class="ranking_item sys-from-background-color m-b16 r-20 p-20 p-tb40" v-if="index<=2" v-for="(item,index) in outList"
-				:key="index">
+		<view class="" v-if="is_type == 1">
+			<view class="row-justify-c m-b25" v-if="is_subsection">
+				<view class="subsection">
+					<uv-subsection :list="list" :bgColor="'#DBE8DB'" :activeColor="'#0FB160'" :inactiveColor="'#121212'"
+						:fontSize="14" custom-style="height: 70rpx;border-radius: 30rpx;"
+						custom-item-style="border-radius: 30rpx;" :current="current" @change="onChange"></uv-subsection>
+				</view>
+			</view>
+			<view class="ranking_item sys-from-background-color m-b16 r-20 p-20 p-tb40" v-if="index<=2"
+				v-for="(item,index) in outList" :key="index">
+				<view class="row-justify-sb center sys-weight-400 size-28 color-000 r-20">
+					<view class="row-c line-40">
+						<image class="wh-36 m-r20" :src="`/static/img/statistics/${iconList[index]}.png`"
+							mode="aspectFill">
+						</image>
+						<text>{{item.name}}</text>
+					</view>
+					<text>{{item.total_num}}笔</text>
+					<view class="sys-weight-600 line-30">
+						<text class=" text-color-12 m-r10">{{item.value}}万</text>
+						<uni-icons type="forward" size="14" color="#D8D8D8"></uni-icons>
+					</view>
+				</view>
+			</view>
+			<en-blank v-if="outList.length<=0"></en-blank>
+		</view>
+		<view v-if="is_type == 2">
+			<view class="ranking_item sys-from-background-color m-b16 r-20 p-20 p-tb40" v-if="index<=2"
+				v-for="(item,index) in putList" :key="index">
 				<view class="row-justify-sb center sys-weight-400 size-28 color-000 r-20">
 					<view class="row-c line-40">
 						<image class="wh-36 m-r20" :src="`/static/img/statistics/${iconList[index]}.png`"
@@ -19,27 +45,8 @@
 					</view>
 				</view>
 			</view>
-      <en-blank v-if="outList.length<=0"></en-blank>
+			<en-blank v-if="putList.length<=0"></en-blank>
 		</view>
-    <view v-if="is_type == 2">
-      <view class="ranking_item sys-from-background-color m-b16 r-20 p-20 p-tb40" v-if="index<=2" v-for="(item,index) in putList"
-            :key="index">
-        <view class="row-justify-sb center sys-weight-400 size-28 color-000 r-20">
-          <view class="row-c line-40">
-            <image class="wh-36 m-r20" :src="`/static/img/statistics/${iconList[index]}.png`"
-                   mode="aspectFill">
-            </image>
-            <text>{{item.name}}</text>
-          </view>
-          <text>{{item.total_num}}笔</text>
-          <view class="sys-weight-600 line-30">
-            <text class=" text-color-12 m-r10">{{item.value}}万</text>
-            <uni-icons type="forward" size="14" color="#D8D8D8"></uni-icons>
-          </view>
-        </view>
-      </view>
-      <en-blank v-if="putList.length<=0"></en-blank>
-    </view>
 
 
 	</view>
@@ -47,12 +54,12 @@
 
 <script>
 	import StatisticsTitle from "./statistics_title.vue";
-  import EnBlank from "@/components/en-utils/en-blank/en-blank.vue";
+	import EnBlank from "@/components/en-utils/en-blank/en-blank.vue";
 
 	export default {
 		name: 'stat_gather',
 		components: {
-      EnBlank,
+			EnBlank,
 			StatisticsTitle
 		},
 		props: {
@@ -60,6 +67,10 @@
 				type: Number,
 				default: 0
 			},
+			is_subsection: {
+				type: Boolean,
+				default: false
+			},
 			is_type: {
 				type: Number,
 				default: 1
@@ -76,18 +87,20 @@
 				type: String,
 				default: '全部'
 			},
-      outList:{
-        default:[]
-      },
-      putList:{
-        default:[]
-      }
+			outList: {
+				default: []
+			},
+			putList: {
+				default: []
+			}
 		},
 		data() {
 			return {
 				iconList: ['champion', 'runner-up', 'third'],
 				userIconList: ['one', 'two', 'three'],
-				taskIconLsit: ['task-one', 'task-two', 'task-three', 'task-four']
+				taskIconLsit: ['task-one', 'task-two', 'task-three', 'task-four'],
+				current: 0,
+				list: ['放款', '回款'],
 			};
 		}
 	}
@@ -97,4 +110,8 @@
 	.ranking_item:last-child {
 		margin-bottom: 0;
 	}
+
+	.subsection {
+		width: 350rpx;
+	}
 </style>

+ 12 - 12
pages/statistics/module/stat_industry.vue

@@ -32,18 +32,18 @@
 			CircleChart,
 			StatisticsTitle
 		},
-    props:{
-      'industryList':{
-        default:()=>{
-          return {
-            oneMoney: [],
-            oneNum: [],
-            roseData: [],
-            titles: [],
-          }
-        }
-      }
-    },
+		props: {
+			'industryList': {
+				default: () => {
+					return {
+						oneMoney: [],
+						oneNum: [],
+						roseData: [],
+						titles: [],
+					}
+				}
+			}
+		},
 		data() {
 			return {
 				list: [{

+ 20 - 13
pages/statistics/module/stat_single_data.vue

@@ -1,9 +1,17 @@
 <template>
 	<view class="stat_single m-t20 m-lr30">
-		<view class="page-box-bg-fff row-justify-sb center p-lr30 m-t20 r-30 p-tb25">
+		<view class="page-box-bg-fff row-justify-sb center p-lr30 m-t20 r-30 p-tb25" v-if="genre == 1">
+			<text class="num r-10 size-28 sys-weight-600 text-color-12">任务统计汇总</text>
+			<view class="row center">
+				<image class="wh-80 m-r20" src="/static/img/statistics/stat-num.png" mode=""></image>
+				<text class="size-48 sys-weight-600 color-059374 m-r10">45</text>
+				<text class="size-26 text-color-666">次</text>
+			</view>
+		</view>
+		<view class="page-box-bg-fff row-justify-sb center p-lr30 m-t20 r-30 p-tb25" v-else>
 			<view class="row-c">
-				<image class="wh-80 m-r16" src="/static/img/task/task-all.png" mode=""></image>
-				<view class="row-c p-tb20">
+				<image class="wh-80 m-r16" :src="`/static/img/statistics/${iconList[type]}.png`" mode=""></image>
+				<view class="row-c">
 					<text class="size-40 sys-weight-600 text-color-E83">78459.80</text>
 					<text class="size-24 text-color-666 m-l10">万</text>
 				</view>
@@ -20,20 +28,20 @@
 			is_fixed: {
 				type: Boolean,
 				default: false
+			},
+			type: {
+				type: Number,
+				default: 0
+			},
+			genre: {
+				type: Number,
+				default: 0
 			}
 		},
 		data() {
 			return {
 				current: 0,
-				tabsList: [{
-					name: '汇总',
-					dot_color: 'red',
-					disabled: false
-				}, {
-					name: '银行',
-					dot_color: 'yellow',
-					disabled: false
-				}],
+				iconList: ['stat-up', 'stat-noloan', 'stat-loan', 'stat-sign']
 			};
 		}
 	}
@@ -43,5 +51,4 @@
 	.tabs {
 		// width: calc(100% - 60rpx);
 	}
-
 </style>

+ 74 - 60
pages/statistics/statistics.vue

@@ -1,45 +1,44 @@
 <template>
-	<view class="total-page page_env page-box container">
-		<Nav :title="timeData[0]+'--'+timeData[1]" :back="false" is_icons is_fixed :bgHeight="bgHeight"
+	<view class="total-page page_env page-box container sys-list-background-color"
+		:style="[{'background-size':`100% ${$tools.topHeight()+bgSize}px`},{'background-image':`url(${bg_path})`}]">
+		<Nav :title="timeData[0]+'--'+timeData[1]" :genre="3" :back="false" is_icons is_fixed :bgHeight="bgHeight"
 			:navsHeight="navsHeight" :opacity="scrollTop" :justify="'left'" :color="'#fff'" :fixedHeight="160">
 			<view class="task-tabs m-t20" :style="{top:`${$tools.topHeight()}px`}">
-				<HeadFilter v-model="dateTypeObj" @onTopSelect="onTopSelect" :user-status-list="userStatusList" @setTimeDate="setTimeDate"></HeadFilter>
-				<view class="m-lr30 m-tb30 bor-255 r-100" v-if="statType === 7">
+				<HeadFilter v-model="dateTypeObj" @onTopSelect="onTopSelect" :user-status-list="userStatusList"
+					@setTimeDate="setTimeDate"></HeadFilter>
+				<view class="m-lr30 m-t30 bor-255 r-100" v-if="statType === 7">
 					<uv-subsection :list="list" :bgColor="'rgba(255,255,255,0.1)'" :activeColor="'#0FB160'"
 						:inactiveColor="'#004615'" :fontSize="14" custom-style="height: 70rpx;border-radius: 30rpx;"
 						custom-item-style="border-radius: 30rpx;" :current="current" @change="onChange"></uv-subsection>
 				</view>
 			</view>
 		</Nav>
-		<view class="statistics_content" :style="[{top:`${$tools.topHeight() + positionHeight}px`}]">
-
-			<view class="">
-<!--				<HeadData v-if="statType === 3 || statType === 4" :date-type-obj="dateTypeObj"></HeadData>-->
-				<view class="tabs page-box-bg-fff m-lr30 r-30" v-if="dateTypeObj.censusUserType === 6 || dateTypeObj.censusUserType === 7"
-					:style="[{position:is_fixed?'absolute':''},{top:`${$tools.topHeight() + 85}px`}]"
-					style="height: 100rpx;">
-					<z-tabs ref="tabs" :list="tabsList"
-						:active-style="{color:'#10B261',fontWeight:'bold',fontSize:'30rpx'}"
-						:bar-style="{background:'#10B261'}" :inactive-style="{fontWeight:'bold',fontSize:'28rpx'}"
-						:current="current" :bar-animate-mode="'worm'" @change="tabsChange" />
-				</view>
-				<!-- 顶部单行统计 -->
-				<StatSingleData :is_fixed="is_tabs_fixed" v-if="is_single_data"></StatSingleData>
-				<view class="sys-list-background-color p-lr30">
-					<!-- 汇总统计-公司 -->
-					<GeneralStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 3"></GeneralStat>
-					<!-- 资金统计-部门 -->
-					<CapitalStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 4"></CapitalStat>
-					<!-- 提放统计-部门 -->
-					<DrawingsStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 6"></DrawingsStat>
-					<!-- 消金统计-部门 -->
-					<ConsumeStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 7"></ConsumeStat>
-					<!-- 任务统计-个人 -->
-					<TaskStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 1"></TaskStat>
-					<!-- 业绩统计-个人 -->
-					<PerformanceStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 2"></PerformanceStat>
-					<view class="bottom_view"></view>
-				</view>
+		<view class="">
+			<view class="tabs page-box-bg-fff m-lr30 r-30 m-t30"
+				v-if="dateTypeObj.censusUserType === 6 || dateTypeObj.censusUserType === 7"
+				:style="[{position:is_fixed?'absolute':''}]" style="height: 100rpx;">
+				<z-tabs ref="tabs" :list="tabsList" :active-style="{color:'#10B261',fontWeight:'bold',fontSize:'30rpx'}"
+					:bar-style="{background:'#10B261'}" :inactive-style="{fontWeight:'bold',fontSize:'28rpx'}"
+					:current="current" :bar-animate-mode="'worm'" @change="tabsChange" />
+			</view>
+			<!-- 顶部单行统计 -->
+			<StatSingleData :genre="dateTypeObj.censusUserType" :is_fixed="is_tabs_fixed" v-if="is_single_data">
+			</StatSingleData>
+			<view class=" p-lr30">
+				<!-- 汇总统计-公司 -->
+				<GeneralStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 3"></GeneralStat>
+				<!-- 资金统计-部门 -->
+				<CapitalStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 4"></CapitalStat>
+				<!-- 提放统计-部门 -->
+				<DrawingsStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 6"></DrawingsStat>
+				<!-- 消金统计-部门 -->
+				<ConsumeStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 7"></ConsumeStat>
+				<!-- 任务统计-个人 -->
+				<TaskStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 1"></TaskStat>
+				<!-- 业绩统计-个人 -->
+				<PerformanceStat :date-type-obj="dateTypeObj" v-if="dateTypeObj.censusUserType === 2">
+				</PerformanceStat>
+				<view class="bottom_view"></view>
 			</view>
 		</view>
 		<Tab :tab-index="3"></Tab>
@@ -96,7 +95,7 @@
 		},
 		data() {
 			return {
-        timeData:['',''],
+				timeData: ['', ''],
 				is_single_data: false, // 顶部单行统计是否显示
 				is_tabs_fixed: false, // tabs是否固定
 				scrollTop: 0,
@@ -111,18 +110,20 @@
 					dot_color: 'yellow',
 					disabled: false
 				}],
-				bgHeight: 140,
+				bgHeight: 50,
 				navsHeight: 65,
 				positionHeight: 50,
+				bgSize: 150,
+				bg_path: 'https://wealfavor-1257406827.cos.ap-beijing.myqcloud.com/new-xcx/statistics/statistics-bg.png',
 				list: ['中银消费', '中邮消费', '新网车抵'],
 				userStatusList: [],
-        dateTypeObj:{
-          dateType:4,//时间类型
-          selectDate:'2023-02-25',//自定义的时候传数组,其它传开始日期
-          money_type:1,
-          censusUserType:0,
-          product_id:5,
-        },
+				dateTypeObj: {
+					dateType: 4, //时间类型
+					selectDate: '2023-02-25', //自定义的时候传数组,其它传开始日期
+					money_type: 1,
+					censusUserType: 0,
+					product_id: 5,
+				},
 			}
 		},
 		onLoad() {
@@ -151,9 +152,9 @@
 			// },
 		},
 		methods: {
-      setTimeDate(timeDate){
-        this.timeData=timeDate
-      },
+			setTimeDate(timeDate) {
+				this.timeData = timeDate
+			},
 			getUserType() {
 				getUserType().then((res) => {
 					if (res.code === 1) {
@@ -172,25 +173,35 @@
 					duration: 0
 				});
 				this.statType = type
-				this.is_single_data = type == 0 || type == 1 ? false : true
-				this.is_tabs_fixed = type === 2 ? true : false
-				if (type == 0 || type == 1) {
-					this.bgHeight = 140
-					this.positionHeight = 50
+				this.is_single_data = this.dateTypeObj.censusUserType == 3 || type == 4 ? false : true
+				console.log(type);
+				if (type == 3 || type == 4) {
+					this.bgSize = 150
+					this.bgHeight = 50
+					this.navsHeight = 65
+
 				}
-				if (type == 2) {
+				if (type == 1 || type == 2) {
+					this.bgSize = 125
+					this.bgHeight = 55
+					this.navsHeight = 65
+				}
+				if (type == 6 || type == 7) {
+					this.bg_path =
+						'https://wealfavor-1257406827.cos.ap-beijing.myqcloud.com/new-xcx/statistics/statistics-bg2.png'
+				} else {
+					this.bg_path =
+						'https://wealfavor-1257406827.cos.ap-beijing.myqcloud.com/new-xcx/statistics/statistics-bg.png'
+				}
+				if (type == 6) {
+					this.bgSize = 65
 					this.bgHeight = 65
-					this.positionHeight = 80
+					this.navsHeight = 65
 				}
-				if (type == 3) {
+				if (type == 7) {
+					this.bgSize = 120
 					this.bgHeight = 120
 					this.navsHeight = 120
-					this.positionHeight = 135
-				}
-				if (type == 4 || type == 5) {
-					this.bgHeight = 105
-					this.navsHeight = 65
-					this.positionHeight = 55
 				}
 				this.$forceUpdate()
 			},
@@ -216,8 +227,11 @@
 	.container {
 		display: flex;
 		flex-direction: column;
-		height: 100%;
+		min-height: 100%;
 		/* 高度占满整个屏幕 */
+		background-image: url('https://wealfavor-1257406827.cos.ap-beijing.myqcloud.com/new-xcx/statistics/statistics-bg.png');
+		background-repeat: no-repeat;
+		background-size: 100% 240px;
 	}
 
 	.content {

+ 8 - 0
static/css/common.css

@@ -354,6 +354,14 @@
 	margin-top: 40rpx;
 }
 
+.m-t50 {
+	margin-top: 50rpx;
+}
+
+.m-t60 {
+	margin-top: 60rpx;
+}
+
 .m-b10 {
 	margin-bottom: 10rpx;
 }

+ 3 - 0
static/css/default-color.scss

@@ -119,6 +119,9 @@
 .color-0FB160{
 	color: #0FB160;
 }
+.color-059374{
+	color: #059374;
+}
 .color-00A775{
 	color: #00A775;
 }

+ 12 - 12
static/css/login.css

@@ -1,17 +1,17 @@
-.login-box{
-    min-height: calc(100vh - 370rpx);
-    background-image: url("https://wealfavor-1257406827.cos.ap-beijing.myqcloud.com/app-serve/2024-4-13/gv7g9xqmxv.png?imageMogr2/quality/20");
-    background-repeat: no-repeat;
-    background-size: 100% auto;
+.login-box {
+	min-height: calc(100vh - 370rpx);
+	background-image: url("https://wealfavor-1257406827.cos.ap-beijing.myqcloud.com/app-serve/2024-4-13/gv7g9xqmxv.png?imageMogr2/quality/20");
+	background-repeat: no-repeat;
+	background-size: 100% auto;
 }
 
 
-.page-box .title-text{
-    transition: .5s ease;
-    color: #333333;
-}
-.page-box .default-text{
-    transition: .5s ease;
-    color: #10B261;
+.page-box .title-text {
+	transition: .5s ease;
+	color: #333333;
 }
 
+.page-box .default-text {
+	transition: .5s ease;
+	color: #10B261;
+}

BIN
static/img/statistics/Group 2113.png


+ 0 - 0
static/img/statistics/日历.png → static/img/statistics/stat-calendar.png


+ 0 - 0
static/img/statistics/Group 1701.png → static/img/statistics/stat-down.png


+ 0 - 0
static/img/statistics/Group 180.png → static/img/statistics/stat-loan.png


BIN
static/img/statistics/stat-noloan.png


+ 0 - 0
static/img/statistics/Group 1793.png → static/img/statistics/stat-num.png


+ 0 - 0
static/img/statistics/Group 1780.png → static/img/statistics/stat-sign.png


+ 0 - 0
static/img/statistics/Group 1757.png → static/img/statistics/stat-up.png


BIN
static/img/statistics/task-four.png


BIN
static/img/statistics/task-one.png


BIN
static/img/statistics/task-two.png


+ 10 - 9
uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue

@@ -14,7 +14,8 @@
 				'uni-calendar-item--disable':weeks.disable,
 				}">
 			<text v-if="selected&&weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text>
-			<text class="uni-calendar-item__weeks-box-text uni-calendar-item__weeks-box-text-disable uni-calendar-item--checked-text">{{weeks.date}}</text>
+			<text
+				class="uni-calendar-item__weeks-box-text uni-calendar-item__weeks-box-text-disable uni-calendar-item--checked-text">{{weeks.date}}</text>
 		</view>
 		<view :class="{'uni-calendar-item--isDay': weeks.isDay}"></view>
 	</view>
@@ -61,7 +62,7 @@
 	}
 </script>
 
-<style lang="scss" >
+<style lang="scss">
 	.uni-calendar-item__weeks-box {
 		flex: 1;
 		/* #ifndef APP-NVUE */
@@ -78,7 +79,7 @@
 		font-size: 14px;
 		// font-family: Lato-Bold, Lato;
 		font-weight: bold;
-		color: #455997;
+		color: #0A1F44;
 	}
 
 	.uni-calendar-item__weeks-lunar-text {
@@ -119,7 +120,7 @@
 	}
 
 	.uni-calendar-item--disable .uni-calendar-item__weeks-box-text-disable {
-		color: #D1D1D1;
+		color: #8A94A6;
 	}
 
 	.uni-calendar-item--isDay {
@@ -127,7 +128,7 @@
 		top: 10px;
 		right: 17%;
 		background-color: #dd524d;
-		width:6px;
+		width: 6px;
 		height: 6px;
 		border-radius: 50%;
 	}
@@ -138,7 +139,7 @@
 	}
 
 	.uni-calendar-item__weeks-box .uni-calendar-item--checked {
-		background-color: #007aff;
+		background-color: #0FB160;
 		border-radius: 50%;
 		box-sizing: border-box;
 		border: 3px solid #fff;
@@ -153,13 +154,13 @@
 	}
 
 	.uni-calendar-item--multiple {
-		background-color:  #F6F7FC;
+		background-color: #F7F9FE;
 		// color: #fff;
 	}
 
 	.uni-calendar-item--multiple .uni-calendar-item--before-checked,
 	.uni-calendar-item--multiple .uni-calendar-item--after-checked {
-		background-color: #409eff;
+		background-color: #0FB160;
 		border-radius: 50%;
 		box-sizing: border-box;
 		border: 3px solid #F6F7FC;
@@ -182,4 +183,4 @@
 		border-bottom-right-radius: 50px;
 		background-color: #F6F7FC;
 	}
-</style>
+</style>

+ 16 - 13
uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue

@@ -608,7 +608,7 @@
 	}
 </script>
 
-<style lang="scss" >
+<style lang="scss">
 	.uni-calendar {
 		/* #ifndef APP-NVUE */
 		display: flex;
@@ -712,7 +712,8 @@
 		text-align: center;
 		width: 100px;
 		font-size: 15px;
-		color: #666;
+		font-weight: 600;
+		color: #0A1F44;
 	}
 
 	.uni-calendar__button-text {
@@ -737,14 +738,14 @@
 	}
 
 	.uni-calendar__header-btn {
-		width: 9px;
-		height: 9px;
-		border-left-color: #808080;
+		width: 8px;
+		height: 8px;
+		border-left-color: #8A94A6;
 		border-left-style: solid;
-		border-left-width: 1px;
-		border-top-color: #555555;
+		border-left-width: 2px;
+		border-top-color: #8A94A6;
 		border-top-style: solid;
-		border-top-width: 1px;
+		border-top-width: 2px;
 	}
 
 	.uni-calendar--left {
@@ -783,8 +784,9 @@
 	}
 
 	.uni-calendar__weeks-day-text {
-		font-size: 12px;
-		color: #B2B2B2;
+		font-size: 14px;
+		font-weight: 600;
+		color: #0A1F44;
 	}
 
 	.uni-calendar__box {
@@ -884,7 +886,7 @@
 	.dialog-close-plus {
 		width: 16px;
 		height: 2px;
-		background-color: #737987;
+		background-color: #8A94A6;
 		border-radius: 2px;
 		transform: rotate(45deg);
 	}
@@ -898,7 +900,7 @@
 		border-radius: 100px;
 		height: 40px;
 		line-height: 40px;
-		background-color: #007aff;
+		background-color: #0FB160;
 		color: #fff;
 		font-size: 16px;
 		letter-spacing: 2px;
@@ -908,5 +910,6 @@
 	.uni-datetime-picker--btn:active {
 		opacity: 0.7;
 	}
+
 	/* #endif */
-</style>
+</style>

+ 110 - 110
yarn.lock

@@ -3,127 +3,127 @@
 
 
 "@babel/parser@^7.18.4":
-  "integrity" "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw=="
-  "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz"
-  "version" "7.19.0"
+  version "7.19.0"
+  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz"
+  integrity sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==
 
 "@types/html5plus@^1.0.2":
-  "integrity" "sha512-OklP5lrmLq8/6TUOLgWc0LndUVvAiTWX5dnyoCFhIUtFW9opWsnCtG/UxPgeuC28Rv2XNbFfft/hEEI39P/4Ag=="
-  "resolved" "https://registry.npmjs.org/@types/html5plus/-/html5plus-1.0.2.tgz"
-  "version" "1.0.2"
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/@types/html5plus/-/html5plus-1.0.2.tgz"
+  integrity sha512-OklP5lrmLq8/6TUOLgWc0LndUVvAiTWX5dnyoCFhIUtFW9opWsnCtG/UxPgeuC28Rv2XNbFfft/hEEI39P/4Ag==
 
 "@types/uni-app@^1.4.4":
-  "integrity" "sha512-ZTXnrCTblZyoLIoKbTv1Whz1nxrTcM7vg0qGXzDpXP8m9MqdjKt48N3FffQT1IsJWNkxbvJ1Eg5UHDaq+k+oBQ=="
-  "resolved" "https://registry.npmjs.org/@types/uni-app/-/uni-app-1.4.4.tgz"
-  "version" "1.4.4"
+  version "1.4.4"
+  resolved "https://registry.npmjs.org/@types/uni-app/-/uni-app-1.4.4.tgz"
+  integrity sha512-ZTXnrCTblZyoLIoKbTv1Whz1nxrTcM7vg0qGXzDpXP8m9MqdjKt48N3FffQT1IsJWNkxbvJ1Eg5UHDaq+k+oBQ==
   dependencies:
-    "vue" "^2.6.8"
+    vue "^2.6.8"
 
 "@vue/compiler-sfc@2.7.10":
-  "integrity" "sha512-55Shns6WPxlYsz4WX7q9ZJBL77sKE1ZAYNYStLs6GbhIOMrNtjMvzcob6gu3cGlfpCR4bT7NXgyJ3tly2+Hx8Q=="
-  "resolved" "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.10.tgz"
-  "version" "2.7.10"
+  version "2.7.10"
+  resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.10.tgz"
+  integrity sha512-55Shns6WPxlYsz4WX7q9ZJBL77sKE1ZAYNYStLs6GbhIOMrNtjMvzcob6gu3cGlfpCR4bT7NXgyJ3tly2+Hx8Q==
   dependencies:
     "@babel/parser" "^7.18.4"
-    "postcss" "^8.4.14"
-    "source-map" "^0.6.1"
-
-"animate.css@^4.1.1":
-  "integrity" "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ=="
-  "resolved" "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz"
-  "version" "4.1.1"
-
-"crypto-js@^4.1.1":
-  "integrity" "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
-  "resolved" "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz"
-  "version" "4.1.1"
-
-"csstype@^3.1.0":
-  "integrity" "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
-  "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz"
-  "version" "3.1.0"
-
-"js-base64@^2.6.4":
-  "integrity" "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
-  "resolved" "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz"
-  "version" "2.6.4"
-
-"js-base64@^3.7.2":
-  "integrity" "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA=="
-  "resolved" "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz"
-  "version" "3.7.5"
-
-"js-md5@^0.8.3":
-  "integrity" "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ=="
-  "resolved" "https://registry.npmjs.org/js-md5/-/js-md5-0.8.3.tgz"
-  "version" "0.8.3"
-
-"jweixin-module@^1.2.0":
-  "integrity" "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
-  "resolved" "https://registry.npmmirror.com/jweixin-module/-/jweixin-module-1.6.0.tgz"
-  "version" "1.6.0"
-
-"nanoid@^3.3.4":
-  "integrity" "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
-  "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz"
-  "version" "3.3.4"
-
-"picocolors@^1.0.0":
-  "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
-  "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
-  "version" "1.0.0"
-
-"postcss@^8.4.14":
-  "integrity" "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ=="
-  "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz"
-  "version" "8.4.16"
+    postcss "^8.4.14"
+    source-map "^0.6.1"
+
+animate.css@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz"
+  integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==
+
+crypto-js@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz"
+  integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
+
+csstype@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz"
+  integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==
+
+js-base64@^2.6.4:
+  version "2.6.4"
+  resolved "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz"
+  integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
+
+js-base64@^3.7.2:
+  version "3.7.5"
+  resolved "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz"
+  integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==
+
+js-md5@^0.8.3:
+  version "0.8.3"
+  resolved "https://registry.npmjs.org/js-md5/-/js-md5-0.8.3.tgz"
+  integrity sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==
+
+jweixin-module@^1.2.0:
+  version "1.6.0"
+  resolved "https://registry.npmmirror.com/jweixin-module/-/jweixin-module-1.6.0.tgz"
+  integrity sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w==
+
+nanoid@^3.3.4:
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz"
+  integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+postcss@^8.4.14:
+  version "8.4.16"
+  resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz"
+  integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==
   dependencies:
-    "nanoid" "^3.3.4"
-    "picocolors" "^1.0.0"
-    "source-map-js" "^1.0.2"
-
-"source-map-js@^1.0.2":
-  "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
-  "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
-  "version" "1.0.2"
-
-"source-map@^0.6.1":
-  "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-  "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
-  "version" "0.6.1"
-
-"uni-read-pages@^1.0.5":
-  "integrity" "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA=="
-  "resolved" "https://registry.npmmirror.com/uni-read-pages/-/uni-read-pages-1.0.5.tgz"
-  "version" "1.0.5"
-
-"uni-simple-router@^2.0.7":
-  "integrity" "sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA=="
-  "resolved" "https://registry.npmmirror.com/uni-simple-router/-/uni-simple-router-2.0.7.tgz"
-  "version" "2.0.7"
-
-"uploading-oss@^1.0.3":
-  "integrity" "sha512-aqHh5NCOBcrA4d8yCIKR7B9GrKzH88X7gL8BSvIw18pi79AgWnhDkCoyjQmDqzTvjQqYfKwyFTEgnafzMx/GbQ=="
-  "resolved" "https://registry.npmjs.org/uploading-oss/-/uploading-oss-1.0.3.tgz"
-  "version" "1.0.3"
+    nanoid "^3.3.4"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.2"
+
+source-map-js@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
+  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+source-map@^0.6.1:
+  version "0.6.1"
+  resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+uni-read-pages@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/uni-read-pages/-/uni-read-pages-1.0.5.tgz"
+  integrity sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA==
+
+uni-simple-router@^2.0.7:
+  version "2.0.7"
+  resolved "https://registry.npmmirror.com/uni-simple-router/-/uni-simple-router-2.0.7.tgz"
+  integrity sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA==
+
+uploading-oss@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/uploading-oss/-/uploading-oss-1.0.3.tgz"
+  integrity sha512-aqHh5NCOBcrA4d8yCIKR7B9GrKzH88X7gL8BSvIw18pi79AgWnhDkCoyjQmDqzTvjQqYfKwyFTEgnafzMx/GbQ==
   dependencies:
-    "crypto-js" "^4.1.1"
-    "js-base64" "^2.6.4"
-
-"vue-waterfall-easy@^2.4.4":
-  "integrity" "sha512-5OkpT2FPNC3rHBy858zk/nmJxqdPaGmj/KVbmA6dgcvtsovKMa+zuf/Z7F+S2NnObeavpIBztTWgcH3S42ZD+g=="
-  "resolved" "https://registry.npmjs.org/vue-waterfall-easy/-/vue-waterfall-easy-2.4.4.tgz"
-  "version" "2.4.4"
-
-"vue@^2.6.8":
-  "integrity" "sha512-HmFC70qarSHPXcKtW8U8fgIkF6JGvjEmDiVInTkKZP0gIlEPhlVlcJJLkdGIDiNkIeA2zJPQTWJUI4iWe+AVfg=="
-  "resolved" "https://registry.npmjs.org/vue/-/vue-2.7.10.tgz"
-  "version" "2.7.10"
+    crypto-js "^4.1.1"
+    js-base64 "^2.6.4"
+
+vue-waterfall-easy@^2.4.4:
+  version "2.4.4"
+  resolved "https://registry.npmjs.org/vue-waterfall-easy/-/vue-waterfall-easy-2.4.4.tgz"
+  integrity sha512-5OkpT2FPNC3rHBy858zk/nmJxqdPaGmj/KVbmA6dgcvtsovKMa+zuf/Z7F+S2NnObeavpIBztTWgcH3S42ZD+g==
+
+vue@^2.6.8:
+  version "2.7.10"
+  resolved "https://registry.npmjs.org/vue/-/vue-2.7.10.tgz"
+  integrity sha512-HmFC70qarSHPXcKtW8U8fgIkF6JGvjEmDiVInTkKZP0gIlEPhlVlcJJLkdGIDiNkIeA2zJPQTWJUI4iWe+AVfg==
   dependencies:
     "@vue/compiler-sfc" "2.7.10"
-    "csstype" "^3.1.0"
+    csstype "^3.1.0"
 
-"wecomjsdk@^1.0.2":
-  "integrity" "sha512-nPbrTcA5P8IOY/gQJJ3/AtXE2zSqJIQB156RUAQ2+RvwvJmcR66p7hpZtCjbtKefvyDO0LJBdEFqfjRR72zjIw=="
-  "resolved" "https://registry.npmmirror.com/wecomjsdk/-/wecomjsdk-1.0.2.tgz"
-  "version" "1.0.2"
+wecomjsdk@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/wecomjsdk/-/wecomjsdk-1.0.2.tgz"
+  integrity sha512-nPbrTcA5P8IOY/gQJJ3/AtXE2zSqJIQB156RUAQ2+RvwvJmcR66p7hpZtCjbtKefvyDO0LJBdEFqfjRR72zjIw==