Bläddra i källkod

9/1--9/14日提交

@dongkboy 2 år sedan
förälder
incheckning
a1904cea97

+ 40 - 48
App.vue

@@ -8,11 +8,11 @@
 	export default {
 		data() {
 			return {
-				locationInterval: null // 用于存储定时器ID
+				locationInterval: null, // 用于存储定时器ID
+				errorNotified: false // 用于跟踪错误通知是否已经发送
 			};
 		},
 		onLaunch: function(e) {
-
 			//取出缓存数据
 			store.commit("setCacheData");
 			if (store.state.token) {} else {
@@ -57,8 +57,9 @@
 			// #endif
 		},
 		onShow: function(e) {
-			// this.getLocation();
-
+			// #ifdef APP-PLUS
+			this.getLocation();
+			// #endif
 		},
 		onHide: function() {},
 		methods: {
@@ -67,23 +68,23 @@
 					type: 'gcj02', // 根据需要选择坐标类型
 					geocode: true,
 					success: (res) => {
-						let address = res.address.province + res.address.city + res.address.district + res
-							.address.street + res.address.poiName;
-						this.saveLocation(res, address);
-
-						// 清除之前的定时器
+						this.saveLocation(res);
 						if (this.locationInterval) {
 							clearInterval(this.locationInterval);
 						}
-						// 设置每两分钟重新获取坐标
+						// 设置每小时重新获取坐标
 						this.locationInterval = setInterval(() => {
 							this.updateLocation();
-						}, 120000); // 120000毫秒 = 2分钟
+						}, 3600000); // 3600000毫秒 = 1小时
+
+						// 重置错误通知状态
+						this.errorNotified = false;
 					},
 					fail: (err) => {
-						console.log(err);
-						this.handleLocationError(err);
-
+						if (!this.errorNotified) {
+							this.handleLocationError(err);
+							this.errorNotified = true;
+						}
 					}
 				});
 			},
@@ -92,68 +93,61 @@
 					type: 'gcj02',
 					geocode: true,
 					success: (res) => {
-						let address = res.address.province + res.address.city + res.address.district + res
-							.address.street + res.address.poiName;
-						this.saveLocation(res, address);
+						this.saveLocation(res);
 					},
 					fail: (err) => {
-						console.log('更新位置失败:', err);
-						this.handleLocationError(err)
-						// 清除之前的定时器
-
-
+						if (!this.errorNotified) {
+							this.handleLocationError(err);
+							this.errorNotified = true;
+						}
 					}
 				});
 			},
-			saveLocation(res, address) {
+			saveLocation(res) {
 				uni.setStorage({
 					key: 'location',
 					data: {
-						city: res.address.city,
 						latitude: res.latitude,
 						longitude: res.longitude,
-						address: address,
+						province: res.address.province,
+						city: res.address.city,
+						district: res.address.district,
+						street: res.address.street,
+						streetNum: res.address.streetNum,
+						poiName: res.address.poiName,
+						cityCode: res.address.cityCode
 					},
-					success: () => {
-						uni.getStorage({
-							key: 'location',
-							success: function(res) {}
-						});
-					}
+					success: () => {}
 				});
 			},
 			handleLocationError(err) {
-				// #ifdef APP-PLUS
-				clearInterval(this.locationInterval);
 				uni.showModal({
 					title: '获取权限',
-					content: '为了不影响功能的正常使用,请允许晋掌柜获取位置信息',
+					content: '晋掌柜有道路救援服务,需要获取位置信息',
 					success: ({
 						confirm,
 						cancel
 					}) => {
-						if (confirm) {
-							this.openLocationSettings();
-						}
-						if (cancel) {
-							// 清除之前的定时器
-							this.exitApp();
-						}
+						setTimeout(() => {
+							if (confirm) {
+								this.openLocationSettings();
+							}
+							if (cancel) {
+								this.exitApp();
+							}
+						}, 0);
 					}
 				});
-				// #endif
 			},
 			openLocationSettings() {
-				// Android平台
 				if (uni.getSystemInfoSync().platform == 'android') {
 					var Intent = plus.android.importClass('android.content.Intent');
 					var Settings = plus.android.importClass('android.provider.Settings');
 					var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
 					var main = plus.android.runtimeMainActivity();
-					main.startActivity(intent); // 打开系统设置GPS服务页面
+					main.startActivity(intent);
 				}
 			},
-
 			exitApp() {
 				if (plus.os.name === "Android") {
 					plus.runtime.quit();
@@ -198,9 +192,7 @@
 					uni.setStorage({
 						key: "launchFlag",
 						data: currentdate,
-						success: function() {
-							console.log("error时存储launchFlag");
-						},
+						success: function() {},
 					});
 				}
 			},

BIN
ad.mp4


+ 164 - 0
components/common/serviceWidget.vue

@@ -0,0 +1,164 @@
+<template>
+	<view>
+		<view id="_drag_button" class="drag" :style="'left: ' + left + 'px; top:' + top + 'px;'"
+			@touchmove.stop.prevent="touchmove" @touchend="touchend" @click.stop.prevent="click"
+			:class="{transition: isDock && !isMove }">
+			<image src="/static/img/customerService.png" mode="" style="width: 46px;height: 56px;"></image>
+		</view>
+	</view>
+</template>
+<script>
+	export default {
+		name: 'service-widget',
+		props: {
+			isDock: {
+				type: Boolean,
+				default: true
+			},
+			existTabBar: {
+				type: Boolean,
+				default: true
+			},
+			bottomPx: {
+				type: Number,
+				default: 100
+			}
+		},
+		data() {
+			return {
+				top: 0,
+				left: 0,
+				width: 0,
+				height: 0,
+				offsetWidth: 0,
+				offsetHeight: 0,
+				windowWidth: 0,
+				windowHeight: 0,
+				isMove: true,
+				edge: 10,
+				text: '按钮'
+			}
+		},
+		mounted() {
+			const sys = uni.getSystemInfoSync();
+
+			this.windowWidth = sys.windowWidth;
+			this.windowHeight = sys.windowHeight;
+
+			// #ifdef APP-PLUS
+			this.existTabBar && (this.windowHeight -= 50);
+			// #endif
+			if (sys.windowTop) {
+				this.windowHeight += sys.windowTop;
+			}
+			const query = uni.createSelectorQuery().in(this);
+			query.select('#_drag_button').boundingClientRect(data => {
+				this.width = data.width;
+				this.height = data.height;
+				this.offsetWidth = data.width / 2;
+				this.offsetHeight = data.height / 2;
+				this.left = this.windowWidth - this.width - this.edge;
+				if (this.bottomPx * 1 > 0) {
+					this.top = this.windowHeight - this.height - this.bottomPx;
+				} else {
+					this.top = this.windowHeight - this.height - this.edge;
+				}
+
+			}).exec();
+			//避免部分情况下图片加载延迟导致高度渲染出错
+			setTimeout(() => {
+				const query = uni.createSelectorQuery().in(this);
+				query.select('#_drag_button').boundingClientRect(data => {
+					this.width = data.width;
+					this.height = data.height;
+					this.offsetWidth = data.width / 2;
+					this.offsetHeight = data.height / 2;
+					this.left = this.windowWidth - this.width - this.edge;
+					if (this.bottomPx * 1 > 0) {
+						this.top = this.windowHeight - this.height - this.bottomPx;
+					} else {
+						this.top = this.windowHeight - this.height - this.edge;
+					}
+				}).exec();
+			}, 200)
+
+		},
+		methods: {
+			click() {
+				this.$emit('btnClick');
+			},
+			// touchstart(e) {
+			// 	this.$emit('btnTouchstart');
+			// },
+			touchmove(e) {
+				// 单指触摸
+				if (e.touches.length !== 1) {
+					return false;
+				}
+				if (!this.isMove) {
+					this.$emit('btnTouchstart');
+				}
+				this.isMove = true;
+
+				this.left = e.touches[0].clientX - this.offsetWidth;
+
+				let clientY = e.touches[0].clientY - this.offsetHeight;
+				// #ifdef H5
+				clientY += this.height;
+				// #endif
+				let edgeBottom = this.windowHeight - this.height - this.edge;
+
+				// 上下触及边界
+				if (clientY < this.edge) {
+					this.top = this.edge;
+				} else if (clientY > edgeBottom) {
+					this.top = edgeBottom;
+				} else {
+					this.top = clientY
+				}
+
+			},
+			touchend(e) {
+				if (this.isDock) {
+					let edgeRigth = this.windowWidth - this.width - this.edge;
+
+					if (this.left < this.windowWidth / 2 - this.offsetWidth) {
+						this.left = this.edge;
+					} else {
+						this.left = edgeRigth;
+					}
+
+				}
+				if (this.isMove) {
+					this.isMove = false;
+
+					this.$emit('btnTouchend');
+				}
+
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.drag {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		// background-color: rgba(0, 0, 0, 0.5);
+		// box-shadow: 0 0 6upx rgba(0, 0, 0, 0.4);
+		// color: $uni-text-color-inverse;
+		// width: 80upx;
+		// height: 80upx;
+		min-width: 80rpx;
+		min-height: 80rpx;
+		border-radius: 50%;
+		// font-size: $uni-font-size-sm;
+		position: fixed;
+		z-index: 999999;
+
+		&.transition {
+			transition: left .3s ease, top .3s ease;
+		}
+	}
+</style>

+ 6 - 5
config/baseUrl.js

@@ -3,16 +3,17 @@ let h5BaseUrl = "";
 let socketUrl = "";
 if (process.env.NODE_ENV === 'development') {
 	// 开发环境
-	// baseUrl = "http://192.168.0.106:8080"; //屈晨
+	// baseUrl = "http://192.168.0.115:8080"; //屈晨
 	// baseUrl = "http://192.168.0.52:8080"; //贺礼霄
 	// baseUrl = "http://192.168.0.253:8080"; //田智
-	baseUrl = "https://test.baoxianzhanggui.com/web-api"; //测试
+	// baseUrl = "https://test.baoxianzhanggui.com/web-api"; //测试
 	// h5BaseUrl = "https://test.baoxianzhanggui.com/h5";
 	// baseUrl = "https://pre.baoxianzhanggui.com/web-api"; //预生产
 	// h5BaseUrl = "https://pre.baoxianzhanggui.com/h5";
-	// baseUrl = "https://sxzgkj.baoxianzhanggui.com/web-api"; //生产
+	// baseUrl = "https://pre.baoxianzhanggui.com/test"; //生产
+	baseUrl = "https://sxzgkj.baoxianzhanggui.com/web-api"; //生产
 	h5BaseUrl = "https://sxzgkj.baoxianzhanggui.com/h5";
-	socketUrl = "wss://test.baoxianzhanggui.com/web-api/websocket";
+	socketUrl = "wss://sxzgkj.baoxianzhanggui.com/web-api/websocket";
 } else if (process.env.NODE_ENV === 'production') {
 	// 生产环境
 	// baseUrl = "https://test.baoxianzhanggui.com/web-api"; //测试
@@ -21,7 +22,7 @@ if (process.env.NODE_ENV === 'development') {
 	// h5BaseUrl = "https://pre.baoxianzhanggui.com/h5";
 	baseUrl = "https://sxzgkj.baoxianzhanggui.com/web-api"; //生产
 	h5BaseUrl = "https://sxzgkj.baoxianzhanggui.com/h5";
-	socketUrl = "";
+	socketUrl = "wss://sxzgkj.baoxianzhanggui.com/web-api/websocket";
 }
 const courtConfig = {
 	//微信公众号APPID

+ 1 - 6
config/html5Utils.js

@@ -98,12 +98,7 @@ export const wxPublicPay = (payInfo, callback) => {
 // 获取地址信息(公众号获取 或 内嵌APP获取)
 export const getLatLonH5 = function(successCallback, errCallback) {
 	if (getBrowser() == '微信') {
-		getLocation().then(res => {
-			successCallback(res);
-		}, err => {
-			console.log("位置信息错误", err);
-			errCallback("位置信息获取失败");
-		});
+
 	} else {
 		let clearTime = setTimeout(() => {
 			errCallback("获取经纬度超时");

+ 2 - 1
main.js

@@ -48,7 +48,8 @@ import DB from "@/common/sqlite";
 //全局组件
 import publicModule from "@/components/common/public-module.vue";
 Vue.component("public-module", publicModule);
-
+import serviceWidget from '@/components/common/serviceWidget.vue';
+Vue.component("service-widget", serviceWidget);
 App.mpType = 'app'
 
 const app = new Vue({

+ 214 - 217
manifest.json

@@ -1,219 +1,216 @@
 {
-    "name" : "晋掌柜",
-    "appid" : "__UNI__D4FE29A",
-    "description" : "保险类app",
-    "transformPx" : false,
-    "icons" : [
-        {
-            "sizes" : "分辨率,192x192",
-            "src" : "图片路径"
-        }
-    ],
-    "versionName" : "2.5.7",
-    "versionCode" : 257,
-    "app-plus" : {
-        "error" : {
-            "url" : "hybrid/html/error.html"
-        },
-        "compatible" : {
-            "ignoreVersion" : true
-        },
-        "privacy" : {
-            "prompt" : "template",
-            "template" : {
-                "title" : "平台协议和隐私协议",
-                "message" : "欢迎使用晋掌柜app,我们非常重视您的个人信息和隐私保护。我们将通过《隐私权保护政策》帮助您了解我们收集、使用、存储、共享和保护个人信息的情况,以及您所享有的相关权利。<br/> 为了更好的向您提供注册认证、线上投保、以及周边服务等相关服务功能,我们会收集、使用必要的信息。包括但不限于:<br/>1、为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。2、在使用道路救援功能时,基于您的授权我们可能会获取您的位置信息,以便为您提供服务。您有权拒绝或取消授权。在使用线上投保以及注册等功能时, 基于您的授权我们会获取您的相册存储的权限, 以便在使用时能够正确的上传个人资料。获取通知权限, 用于向您发送重要通知, 如服务更新或安全提醒。<br/>   请仔细阅读<a href='https://sxzgkj.baoxianzhanggui.com/h5/#/pages/login/xieyi'>《平台协议》</a>和<a href='https://sxzgkj.baoxianzhanggui.com/h5/#/pages/login/mimi'>《隐私协议》</a>了解详细信息。我们将按照您同意的条款使用您的个人信息,以便为您提供服务。",
-                "buttonAccept" : "同意",
-                "buttonRefuse" : "暂不同意"
-            }
-        },
-        "modules" : {
-            "Messaging" : {},
-            "OAuth" : {},
-            "Payment" : {},
-            "Share" : {},
-            "SQLite" : {
-                "description" : "iBeacon"
-            },
-            "Camera" : {},
-            "Maps" : {},
-            "Geolocation" : {}
-        },
-        "distribute" : {
-            "android" : {
-                "permissionPhoneState" : {
-                    "request" : "none",
-                    "prompt" : "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
-                },
-                "permissionExternalStorage" : {
-                    "request" : "none",
-                    "prompt" : "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
-                },
-                "permissions" : [
-                    "<uses-feature android:name=\"android.hardware.camera\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
-                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
-                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>",
-                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
-                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_SMS\"/>",
-                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
-                    "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
-                    "<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
-                    "<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
-                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>"
-                ],
-                "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
-                "minSdkVersion" : 21,
-                "schemes" : "zgcxapp",
-                "targetSdkVersion" : 30
-            },
-            "sdkConfigs" : {
-                "ad" : {
-                    "ks" : {},
-                    "sigmob" : {}
-                },
-                "payment" : {
-                    "weixin" : {
-                        "__platform__" : [ "android" ],
-                        "appid" : "wx612ca90988c46947",
-                        "UniversalLinks" : ""
-                    }
-                },
-                "share" : {
-                    "weixin" : {
-                        "appid" : "wx612ca90988c46947",
-                        "UniversalLinks" : ""
-                    }
-                },
-                "oauth" : {
-                    "weixin" : {
-                        "appid" : "wx612ca90988c46947",
-                        "appsecret" : "75b7d4cda453b2075dec23f849278bc0",
-                        "UniversalLinks" : ""
-                    }
-                },
-                "geolocation" : {
-                    "amap" : {
-                        "name" : "amap_18335592986CWFSxSLAB",
-                        "__platform__" : [ "android" ],
-                        "appkey_ios" : "e410fdbf6be7110af9267b6d56c93c8d",
-                        "appkey_android" : "e410fdbf6be7110af9267b6d56c93c8d"
-                    }
-                },
-                "push" : {
-                    "unipush" : {
-                        "appid" : "YDcU8mcWRO6MWIT1i4naP2",
-                        "appkey" : "DK2LTzhnc87pFFFhcTSgs8",
-                        "appsecret" : "wTUMKWB4ReAoPyCp7Jyaz9"
-                    }
-                },
-                "maps" : {
-                    "amap" : {
-                        "name" : "amap_18335592986CWFSxSLAB",
-                        "appkey_ios" : "e410fdbf6be7110af9267b6d56c93c8d",
-                        "appkey_android" : "e410fdbf6be7110af9267b6d56c93c8d"
-                    }
-                }
-            },
-            "icons" : {
-                "android" : {
-                    "hdpi" : "unpackage/res/icons/72x72.png",
-                    "xhdpi" : "unpackage/res/icons/96x96.png",
-                    "xxhdpi" : "unpackage/res/icons/144x144.png",
-                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
-                },
-                "ios" : {
-                    "appstore" : "unpackage/res/icons/1024x1024.png",
-                    "ipad" : {
-                        "app" : "unpackage/res/icons/76x76.png",
-                        "app@2x" : "unpackage/res/icons/152x152.png",
-                        "notification" : "unpackage/res/icons/20x20.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "proapp@2x" : "unpackage/res/icons/167x167.png",
-                        "settings" : "unpackage/res/icons/29x29.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "spotlight" : "unpackage/res/icons/40x40.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
-                    },
-                    "iphone" : {
-                        "app@2x" : "unpackage/res/icons/120x120.png",
-                        "app@3x" : "unpackage/res/icons/180x180.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "notification@3x" : "unpackage/res/icons/60x60.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "settings@3x" : "unpackage/res/icons/87x87.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
-                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
-                    }
-                }
-            },
-            "splashscreen" : {
-                "androidStyle" : "common",
-                "useOriginalMsgbox" : true
-            },
-            "ios" : {
-                "dSYMs" : false,
-                "urltypes" : "zgcxapp"
-            }
-        },
-        "compilerVersion" : 3,
-        "nvueLaunchMode" : "fast",
-        "splashscreen" : {
-            "alwaysShowBeforeRender" : true
-        },
-        "nativePlugins" : {}
-    },
-    // 5+App特有相关
-    "quickapp" : {},
-    // 快应用特有相关
-    "mp-weixin" : {
-        "setting" : {
-            "urlCheck" : false,
-            "es6" : false,
-            "postcss" : false,
-            "minified" : false
-        },
-        "usingComponents" : true,
-        "appid" : "wxe57ddfbe230bcfba",
-        "permission" : {}
-    },
-    "h5" : {
-        "template" : "template.h5.html",
-        "router" : {
-            "mode" : "hash",
-            "base" : "./"
-        },
-        "optimization" : {
-            "treeShaking" : {
-                "enable" : true
-            }
-        },
-        "devServer" : {
-            "https" : false,
-            "port" : 80
-        },
-        "sdkConfigs" : {
-            "maps" : {}
-        },
-        "uniStatistics" : {
-            "enable" : false
-        }
-    },
-    "mp-jd" : {
-        "unipush" : {
-            "enable" : false
-        }
-    }
+	"name": "晋掌柜",
+	"appid": "__UNI__D4FE29A",
+	"description": "保险类app",
+	"transformPx": false,
+	"icons": [{
+		"sizes": "分辨率,192x192",
+		"src": "图片路径"
+	}],
+	"versionName": "2.6.3",
+	"versionCode": 263,
+	"app-plus": {
+		"error": {
+			"url": "hybrid/html/error.html"
+		},
+		"compatible": {
+			"ignoreVersion": true
+		},
+		"privacy": {
+			"prompt": "template",
+			"template": {
+				"title": "平台协议和隐私协议",
+				"message": "欢迎使用晋掌柜app,我们非常重视您的个人信息和隐私保护。我们将通过《隐私权保护政策》帮助您了解我们收集、使用、存储、共享和保护个人信息的情况,以及您所享有的相关权利。<br/> 为了更好的向您提供注册认证、线上投保、以及周边服务等相关服务功能,我们会收集、使用必要的信息。包括但不限于:<br/>1、为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。2、在使用道路救援功能时,基于您的授权我们可能会获取您的位置信息,以便为您提供服务。您有权拒绝或取消授权。在使用线上投保以及注册等功能时, 基于您的授权我们会获取您的相册存储的权限, 以便在使用时能够正确的上传个人资料。获取通知权限, 用于向您发送重要通知, 如服务更新或安全提醒。<br/>   请仔细阅读<a href='https://sxzgkj.baoxianzhanggui.com/h5/#/pages/login/xieyi'>《平台协议》</a>和<a href='https://sxzgkj.baoxianzhanggui.com/h5/#/pages/login/mimi'>《隐私协议》</a>了解详细信息。我们将按照您同意的条款使用您的个人信息,以便为您提供服务。",
+				"buttonAccept": "同意",
+				"buttonRefuse": "暂不同意"
+			}
+		},
+		"modules": {
+			"Messaging": {},
+			"OAuth": {},
+			"Payment": {},
+			"Share": {},
+			"SQLite": {
+				"description": "iBeacon"
+			},
+			"Camera": {},
+			"Maps": {},
+			"Geolocation": {}
+		},
+		"distribute": {
+			"android": {
+				"permissionPhoneState": {
+					"request": "none",
+					"prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
+				},
+				"permissionExternalStorage": {
+					"request": "none",
+					"prompt": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
+				},
+				"permissions": [
+					"<uses-feature android:name=\"android.hardware.camera\"/>",
+					"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+					"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+					"<uses-permission android:name=\"android.permission.CAMERA\"/>",
+					"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+					"<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>",
+					"<uses-permission android:name=\"android.permission.INTERNET\"/>",
+					"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+					"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.READ_SMS\"/>",
+					"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+					"<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
+					"<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
+					"<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
+					"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+					"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_SMS\"/>"
+				],
+				"abiFilters": ["armeabi-v7a", "arm64-v8a", "x86"],
+				"minSdkVersion": 21,
+				"schemes": "zgcxapp",
+				"targetSdkVersion": 30
+			},
+			"sdkConfigs": {
+				"ad": {},
+				"payment": {
+					"weixin": {
+						"__platform__": ["android"],
+						"appid": "wx612ca90988c46947",
+						"UniversalLinks": ""
+					}
+				},
+				"share": {
+					"weixin": {
+						"appid": "wx612ca90988c46947",
+						"UniversalLinks": ""
+					}
+				},
+				"oauth": {
+					"weixin": {
+						"appid": "wx612ca90988c46947",
+						"appsecret": "75b7d4cda453b2075dec23f849278bc0",
+						"UniversalLinks": ""
+					}
+				},
+				"geolocation": {
+					"amap": {
+						"name": "amap_18335592986CWFSxSLAB",
+						"__platform__": ["android"],
+						"appkey_ios": "e410fdbf6be7110af9267b6d56c93c8d",
+						"appkey_android": "e410fdbf6be7110af9267b6d56c93c8d"
+					},
+					"system": {
+						"__platform__": ["ios", "android"]
+					}
+				},
+				"push": {
+					"unipush": {
+						"appid": "YDcU8mcWRO6MWIT1i4naP2",
+						"appkey": "DK2LTzhnc87pFFFhcTSgs8",
+						"appsecret": "wTUMKWB4ReAoPyCp7Jyaz9"
+					}
+				},
+				"maps": {
+					"amap": {
+						"name": "amap_18335592986CWFSxSLAB",
+						"appkey_ios": "e410fdbf6be7110af9267b6d56c93c8d",
+						"appkey_android": "e410fdbf6be7110af9267b6d56c93c8d"
+					}
+				}
+			},
+			"icons": {
+				"android": {
+					"hdpi": "unpackage/res/icons/72x72.png",
+					"xhdpi": "unpackage/res/icons/96x96.png",
+					"xxhdpi": "unpackage/res/icons/144x144.png",
+					"xxxhdpi": "unpackage/res/icons/192x192.png"
+				},
+				"ios": {
+					"appstore": "unpackage/res/icons/1024x1024.png",
+					"ipad": {
+						"app": "unpackage/res/icons/76x76.png",
+						"app@2x": "unpackage/res/icons/152x152.png",
+						"notification": "unpackage/res/icons/20x20.png",
+						"notification@2x": "unpackage/res/icons/40x40.png",
+						"proapp@2x": "unpackage/res/icons/167x167.png",
+						"settings": "unpackage/res/icons/29x29.png",
+						"settings@2x": "unpackage/res/icons/58x58.png",
+						"spotlight": "unpackage/res/icons/40x40.png",
+						"spotlight@2x": "unpackage/res/icons/80x80.png"
+					},
+					"iphone": {
+						"app@2x": "unpackage/res/icons/120x120.png",
+						"app@3x": "unpackage/res/icons/180x180.png",
+						"notification@2x": "unpackage/res/icons/40x40.png",
+						"notification@3x": "unpackage/res/icons/60x60.png",
+						"settings@2x": "unpackage/res/icons/58x58.png",
+						"settings@3x": "unpackage/res/icons/87x87.png",
+						"spotlight@2x": "unpackage/res/icons/80x80.png",
+						"spotlight@3x": "unpackage/res/icons/120x120.png"
+					}
+				}
+			},
+			"splashscreen": {
+				"androidStyle": "common",
+				"useOriginalMsgbox": true
+			},
+			"ios": {
+				"dSYMs": false,
+				"urltypes": "zgcxapp"
+			}
+		},
+		"compilerVersion": 3,
+		"nvueLaunchMode": "fast",
+		"splashscreen": {
+			"alwaysShowBeforeRender": true
+		},
+		"nativePlugins": {}
+	},
+	// 5+App特有相关
+	"quickapp": {},
+	// 快应用特有相关
+	"mp-weixin": {
+		"setting": {
+			"urlCheck": false,
+			"es6": false,
+			"postcss": false,
+			"minified": false
+		},
+		"usingComponents": true,
+		"appid": "wxe57ddfbe230bcfba",
+		"permission": {}
+	},
+	"h5": {
+		"template": "template.h5.html",
+		"router": {
+			"mode": "hash",
+			"base": "./"
+		},
+		"optimization": {
+			"treeShaking": {
+				"enable": true
+			}
+		},
+		"devServer": {
+			"https": false,
+			"port": 80
+		},
+		"sdkConfigs": {
+			"maps": {}
+		},
+		"uniStatistics": {
+			"enable": false
+		}
+	},
+	"mp-jd": {
+		"unipush": {
+			"enable": false
+		}
+	}
 }
-// 小程序特有相关
-
+// 小程序特有相关

+ 40 - 26
pages.json

@@ -12,18 +12,16 @@
 					"titleNView": false
 				}
 			}
-		},{
-			"path" : "pages/test",
-			"style" : 
-			{
-				"navigationBarTitleText" : "测试"
+		}, {
+			"path": "pages/test",
+			"style": {
+				"navigationBarTitleText": "测试"
 			}
 		},
 		{
-			"path" : "pages/ad/index",
-			"style" : 
-			{
-				"navigationBarTitleText" : "任务中心"
+			"path": "pages/ad/index",
+			"style": {
+				"navigationBarTitleText": "任务中心"
 			}
 		}, {
 			"path": "pages/login/mimi", //隐私协议
@@ -63,7 +61,7 @@
 					"scrollIndicator": "none" //隐藏滚动条
 				}
 			}
-		},  {
+		}, {
 			"path": "pages/register/register", //注册
 			"style": {
 				"navigationBarTitleText": "出单员注册",
@@ -816,7 +814,27 @@
 				"navigationBarTitleText": "保费计算",
 				"app-plus": {
 					"scrollIndicator": "none", //隐藏滚动条
-					"bounce": "none" //关闭反弹效果
+					"bounce": "none", //关闭反弹效果
+					"titleNView": {
+						"buttons": [{
+							"type": "home"
+						}]
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/carInsure/quote",
+			"style": {
+				"navigationBarTitleText": "保费计算",
+				"app-plus": {
+					"scrollIndicator": "none",
+					"bounce": "none",
+					"titleNView": {
+						"buttons": [{
+							"type": "home"
+						}]
+					}
 				}
 			}
 		},
@@ -862,21 +880,7 @@
 				}
 			}
 		},
-		{
-			"path": "pages/carInsure/quote",
-			"style": {
-				"navigationBarTitleText": "保费计算",
-				"app-plus": {
-					"scrollIndicator": "none",
-					"bounce": "none",
-					"titleNView": {
-						"buttons": [{
-							"type": "home"
-						}]
-					}
-				}
-			}
-		},
+
 		{
 			"path": "pages/carInsure/quoteDetail",
 			"style": {
@@ -972,6 +976,16 @@
 				}
 			}
 
+		},
+		{
+			"path": "pages/chat/chat",
+			"style": {
+				"navigationBarTitleText": "掌柜在线客服",
+				"app-plus": {
+					"scrollIndicator": "none",
+					"bounce": "none"
+				}
+			}
 		}
 
 		//ui升级模块

+ 10 - 2
pages/carInsure/Information.vue

@@ -1023,6 +1023,7 @@
 				energyTypeoptions: [],
 				businessVehicleUseoptions: [],
 				outOfBusinessVehicleUseoptions: [],
+				productId: "",
 			}
 		},
 		watch: {
@@ -1046,7 +1047,10 @@
 			},
 		},
 		onShow() {
-
+			uni.pageScrollTo({
+				scrollTop: 0,
+				duration: 0
+			});
 		},
 		onLoad(params) {
 			this.getDicType("businessVehicleUse"); //车辆用途(营业)
@@ -1066,10 +1070,10 @@
 			} else {
 				const eventChannel = this.getOpenerEventChannel()
 				eventChannel.on('acceptData', (data) => {
-					console.log(data);
 					if (!!data) {
 						let info = JSON.parse(JSON.stringify(data));
 						let page = this.routepage;
+
 						switch (page) {
 							case 'pages/carInsure/entry':
 								this.carInfoShow = false;
@@ -1085,6 +1089,9 @@
 							case 'pages/carInsure/quote':
 							case 'pages/carInsure/premiumCalc':
 							case 'pages/carInsure/quoteDetail':
+							case 'pages/carInsure/companyQuotable':
+								this.productId = data.productId;
+								this.carInfoShow = true;
 								this.carInfo = info.carInfo; //车辆信息
 								if (this.carInfo.cimodelclass == 'A0') {
 									this.carInfo1.cimodelclass = "客车"
@@ -1361,6 +1368,7 @@
 										.policyHolderInfoPositiveList, //投保人
 									insuredPersonInfoPositiveList: this
 										.insuredPersonInfoPositiveList, //被保人
+									productId: this.productId
 								})
 
 						}

+ 51 - 17
pages/carInsure/companyQuotable.vue

@@ -185,9 +185,8 @@
 			<view class="insuranceType mt-2 dis f-c ">
 				<text class="title">险种信息</text>
 				<view class="dis  a-c f-wrap j-s" style="margin-top: 10px;">
-					<view class="status-data" :class="item.dictValue==insuranceTypeId? 'active':''"
-						v-for="(item,index) in productsTypeoptions" @tap.stop.prevent="statusclick(item.dictValue)"
-						:key="index">
+					<view class="status-data" :class="item.dictValue==productId? 'active':''"
+						v-for="(item,index) in productsTypeoptions" @tap.stop.prevent="statusclick(item)" :key="index">
 						{{item.dictTag}}
 					</view>
 				</view>
@@ -195,7 +194,7 @@
 			<view class="insuranceType mt-2 dis f-c ">
 				<text class="title">可报价保险公司</text>
 				<view class="dis  f-wrap j-start mt-2">
-					<view class="insurer dis j-s a-c" style="margin: 5px 10px;" @tap="CompIntro"
+					<view class="insurer dis j-s a-c" style="margin: 5px 10px;" @tap="CompIntro(item.remark)"
 						v-for="(item,index) in quotableCompanyList" :key="index">
 						<image :src="item.logo" mode=""></image>
 						<text>{{item.namesimple}}</text>
@@ -206,7 +205,7 @@
 		</view>
 		<view class="footer-btn dis j-s a-c">
 			<u-button type="primary" style="background:#E6EEFF;color:#0052FF;" @tap="back">上一步</u-button>
-			<u-button type="primary" style="background:#0052FF;" :disabled="!insuranceTypeId" @tap="next">下一步</u-button>
+			<u-button type="primary" style="background:#0052FF;" :disabled="!productId" @tap="next">下一步</u-button>
 		</view>
 		<u-modal v-model="CompIntroShow" title="公司简介"
 			:title-style="{fontWeight: 'bold',borderBottom:'1px solid #f2f2f2',padding:'10px'}"
@@ -214,8 +213,7 @@
 			:confirm-style="{background:'#E6EEFF',color:'#0052FF',height:'40px',lineHeight:'40px'}"
 			@confirm="CompIntroShow=false">
 			<view class="slot-content dis  a-c f-c  p-2">
-				<text>永诚财产保险股份有限公司是一家由国内实力雄厚的大型电企业集团和产业投资集团共同发起组建的全国性股份制财产保险公司。</text>
-				<text>客服电话:</text>
+				<text>{{companyRemark}}</text>
 			</view>
 		</u-modal>
 	</view>
@@ -255,8 +253,9 @@
 				energyTypeoptions: [],
 				businessVehicleUseoptions: [],
 				outOfBusinessVehicleUseoptions: [],
-				insuranceTypeId: "",
-
+				insuranceTypeName: "",
+				companyRemark: "",
+				productId: "",
 			}
 		},
 		onShow() {
@@ -270,12 +269,12 @@
 			await this.getDicType("vehicleType"); //车辆种类
 			await this.getDicType("trafficManagementVehicleType"); //车辆类型
 			await this.getDicType("energyType"); //能源种类
-			this.ruleFilterCompany();
 			const eventChannel = this.getOpenerEventChannel()
 			// 监听acceptData事件,获取上一页面通过eventChannel传送到当前页面的数据
 			eventChannel.on('acceptData', (data) => {
 				if (!!data) {
 					//读取上一个页面传过来数据(车辆信息,人员信息,险种信息)
+					this.productId = data.productId;
 					this.carInfo = data.carInfo; //车辆信息
 					this.ownerInfo = data.ownerInfo; //车主信息
 					this.policyHolderInfo = data.policyHolderInfo; //投保人信息
@@ -303,14 +302,23 @@
 						.energyType)
 				}
 			})
+			this.ruleFilterCompany();
 		},
 		methods: {
 
 			async ruleFilterCompany() {
-				let res = await this.$http.post('/plt/scheme/ruleFilterCompany', {});
+				let params = {
+					carInfo: this.carInfo,
+					ownerInfo: this.ownerInfo,
+					applyInfo: this.policyHolderInfo,
+					insureInfo: this.insuredPersonInfo,
+					productId: this.productId
+				}
+				let res = await this.$http.post('/plt/scheme/ruleFilterCompany', this.productId !== "" ? params : {});
 				this.quotableCompanyList = res.data;
 			},
-			CompIntro() {
+			CompIntro(remark) {
+				this.companyRemark = remark;
 				this.CompIntroShow = true;
 			},
 			async getDicType(type) {
@@ -318,21 +326,46 @@
 				this[type + "options"] = res.data.ddList;
 			},
 			async statusclick(e) {
-				this.insuranceTypeId = e;
+				this.productId = e.dictValue;
+				this.insuranceTypeName = e.dictTag;
 				let res = await this.$http.post('/plt/scheme/ruleFilterCompany', {
 					carInfo: this.carInfo,
 					ownerInfo: this.ownerInfo,
 					applyInfo: this.policyHolderInfo,
 					insureInfo: this.insuredPersonInfo,
-					productId: this.insuranceTypeId
+					productId: this.productId
 				});
 				this.quotableCompanyList = res.data;
 			},
 			back() {
-				uni.navigateBack(1)
+				this.navigate({
+					url: '/pages/carInsure/Information',
+					success: (res) => {
+						res.eventChannel.emit(
+							"acceptData", {
+								carInfo: this
+									.carInfo,
+								ownerInfo: this
+									.ownerInfo,
+								policyHolderInfo: this
+									.policyHolderInfo,
+								insuredPersonInfo: this
+									.insuredPersonInfo,
+								carInfoPositiveList: this
+									.carInfoPositiveList, //车辆
+								ownerInfoPositiveList: this
+									.ownerInfoPositiveList, //车主
+								policyHolderInfoPositiveList: this
+									.policyHolderInfoPositiveList, //投保
+								insuredPersonInfoPositiveList: this
+									.insuredPersonInfoPositiveList, //被保人
+
+							})
+					}
+				}, "navigateTo", true);
 			},
 			next() {
-				if (!this.insuranceTypeId) {
+				if (!this.productId) {
 					return uni.showToast({
 						title: "选择险种信息后,再进行下一步",
 						icon: 'none',
@@ -360,7 +393,8 @@
 								insuredPersonInfoPositiveList: this
 									.insuredPersonInfoPositiveList, //被保人
 								quotableCompanyList: this.quotableCompanyList, //可报价公司
-								productId: this.insuranceTypeId, //险种id
+								productId: this.productId, //险种id
+								productName: this.insuranceTypeName //险种名字
 
 							})
 					}

+ 161 - 37
pages/carInsure/premiumCalc.vue

@@ -1,6 +1,5 @@
 <template>
 	<view class="">
-		<public-module></public-module>
 		<image src="/static/image/car-insure/Quotablebanner.png" mode=""
 			style="width: 100%;height: 110px;position: absolute;"></image>
 		<view class="page">
@@ -128,7 +127,8 @@
 										<image :src="totalitem.logo"></image>
 										<view class="companyName">{{totalitem.namesimple}}</view>
 									</view>
-									<view class="insuranceGuide dis a-c j-c" @click.stop="InsureGuideclick">
+									<view class="insuranceGuide dis a-c j-c"
+										@click.stop="InsureGuideclick(totalitem.insGuide)">
 										投保指引
 									</view>
 									<ls-loading v-if="totalitem.quoteCode ==1" text="掌柜正在为您报价,请稍等......"
@@ -175,11 +175,19 @@
 									<view class="dis a-c j-s ">
 										<view class="dis f-c time">
 											<text
-												v-if="totalitem.result.jqPremium">交强险:{{totalitem.result.startDateJq}}~{{totalitem.result.endDateJq}}
+												v-if="totalitem.result.jqPremium">交强起保时间:{{totalitem.result.startDateJq}}
 
 											</text>
 											<text
-												v-if="totalitem.result.startDateSy">商业险:{{totalitem.result.startDateSy}}~{{totalitem.result.endDateSy}}
+												v-if="totalitem.result.jqPremium">交强终保时间:{{totalitem.result.endDateJq}}
+
+											</text>
+											<text
+												v-if="totalitem.result.startDateSy">商业起保时间:{{totalitem.result.startDateSy}}
+
+											</text>
+											<text
+												v-if="totalitem.result.startDateSy">商业终保时间:{{totalitem.result.endDateSy}}
 
 											</text>
 										</view>
@@ -241,6 +249,10 @@
 										<text>{{totalitem.planDetailsshow?'收起':'展开'}}方案详情</text>
 									</view>
 									<view v-if="totalitem.planDetailsshow">
+										<view class="Plancontent dis j-s " style="padding:0;">
+											<text class="title mb-1">险种</text>
+											<text style="color: #FF5600;">{{productName}}</text>
+										</view>
 										<view class="Plancontent dis j-s " style="padding:0;">
 											<text class="title mb-1">车船税</text>
 											<text>{{model.taxRelifFlag}}</text>
@@ -253,7 +265,8 @@
 													style="background: linear-gradient(90deg, #FF4D4D 0%, #FF784D 100%);"
 													size="mini" @click="jqterms">交强条款</u-button>
 											</view>
-											<text style="margin-left: 10px;">{{jqstartDate}} - {{jqendDate}}</text>
+											<text style="margin-left: 10px;">起保时间:{{jqstartDate}} </text>
+											<text style="margin-left: 10px;">终保时间:{{jqendDate}}</text>
 										</view>
 										<view class="Plancontent dis f-c " style="padding: 0;"
 											v-if="['034001','0330034002','0330034001'].includes(productId)">
@@ -263,7 +276,8 @@
 													style="background: linear-gradient(90deg, #FF4D4D 0%, #FF784D 100%);"
 													size="mini" @click="syterms">商业条款</u-button>
 											</view>
-											<text style="margin-left: 10px;">{{systartDate}} - {{syendDate}}</text>
+											<text style="margin-left: 10px;">起保时间:{{systartDate}} </text>
+											<text style="margin-left: 10px;">终保时间:{{syendDate}}</text>
 											<view class="dis f-c  p-2"
 												v-if="totalitem.insurancePlanInfo.kinds.length>0">
 												<view class="dis a-c j-s" style="border-bottom: 1px solid #f2f2f2;">
@@ -354,6 +368,28 @@
 										</view>
 									</view>
 								</view>
+								<view class="dis f-c mt-2" v-if="totalitem.namesimple=='诚泰财险'">
+									<view class="dis  j-s f-c">
+										<text>扩展内容</text>
+										<view class="dis a-c j-s">
+											<text>自主定价系数</text>
+											<u-input type="number" v-model="totalitem.coefficient"
+												:custom-style="{textAlign:'right',width:'50px',marginRight:'10px'}"
+												placeholder="请输入"></u-input>
+										</view>
+										<view class="dis a-c j-s">
+											<text>商业险折扣</text>
+											<u-input type="number" v-model="totalitem.discount"
+												:custom-style="{textAlign:'right',width:'50px',marginRight:'10px'}"
+												placeholder="请输入"></u-input>
+										</view>
+										<view class="dis a-c j-s">
+											<text>是否验车</text>
+											<u-switch v-model="isInspectchange" active-color="#0052FF"
+												inactive-color="#eee" size='30'></u-switch>
+										</view>
+									</view>
+								</view>
 							</view>
 						</view>
 					</template>
@@ -376,7 +412,7 @@
 			<view class="">
 				<image src="/static/image/car-insure/InsureGuide.png" mode="" style="width: 100%;height: 40px;"></image>
 				<view class="p-2 mb-2" style="min-height:120px;">
-					<text>永诚财产保险股份有限公司是一家由国内实力雄厚的大型电力企业集团和产业投资集团共同发起组建的全国性股份制财产保险公司.</text>
+					<text>{{insGuide}}</text>
 				</view>
 			</view>
 		</u-modal>
@@ -385,11 +421,16 @@
 				<image src="/static/image/car-insure/SchemeSelection.png" mode="" style="width: 100%;height: 40px;">
 				</image>
 				<scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y">
+					<view class="Plancontent dis  j-s a-c ">
+						<text class="title mb-1">险种</text>
+						<text style="font-size: 14px;color: #FF5600;margin-right: 20px;">{{productName}}</text>
+
+					</view>
 					<view class="Plancontent dis  f-c ">
 						<text class="title mb-1">方案选择</text>
 						<view class="dis  a-c f-wrap  modelformcss">
 							<view class="status-data" :class="item.schemeId==SelectedPlanId? 'active':''"
-								style="margin-right: 10px;" v-for="(item,index) in planDataExpansion.genericPlanList"
+								style="margin:4px 10px;" v-for="(item,index) in planDataExpansion.genericPlanList"
 								@tap.stop.prevent="statusclick(item.schemeId)" :key="index">
 								{{item.schemeName}}
 							</view>
@@ -608,7 +649,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="anshengaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="anshengaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -652,7 +693,7 @@
 
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="guoRenaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="guoRenaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -695,7 +736,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="dajiaaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="dajiaaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -721,7 +762,7 @@
 											</view>
 											<view class="">
 												<text>份数:</text>
-												<u-number-box v-model="item.quantity" :min="1" :max="1"
+												<u-number-box v-model="item.quantity" :min="1" :max="10"
 													:input-width="70" :input-height="44" size="26"
 													:long-press="false"></u-number-box>
 											</view>
@@ -772,7 +813,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="zhonganaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="zhonganaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -811,7 +852,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="yongchengaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="yongchengaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -850,7 +891,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="hengbangaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="hengbangaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -889,7 +930,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="zhongmeiaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="zhongmeiaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -928,7 +969,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="taikangaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="taikangaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -967,7 +1008,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="bohaiaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="bohaiaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -1006,7 +1047,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="taipingaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="taipingaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -1045,7 +1086,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="huanongaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="huanongaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -1084,7 +1125,7 @@
 									</view>
 									<view class="dis a-c j-s">
 										<text>份数</text>
-										<u-number-box v-model="renshouaccidentalDrivingVo.quantity" :min="1" :max="1"
+										<u-number-box v-model="renshouaccidentalDrivingVo.quantity" :min="1" :max="10"
 											:disabled-input="true" :input-width="70" :input-height="44" size="26"
 											:long-press="false"></u-number-box>
 									</view>
@@ -1410,6 +1451,22 @@
 				</view>
 			</view>
 		</u-modal>
+		<u-popup v-model="discountInfoPopup" mode="center" width="78%" border-radius="6">
+			<view class="">
+				<view class="p-2 dis j-c a-c">
+					<text class="font-weight">{{discountInfoPopupTitle}}优惠信息</text>
+				</view>
+				<view style="padding: 0 20px;">
+					<scroll-view :scroll-top="scrollTop" scroll-y="true" class="discountInfoscroll">
+						<rich-text :nodes="discountInfoPopupContent"></rich-text>
+					</scroll-view>
+				</view>
+				<view class="PlanPopup-btn dis a-c j-c">
+					<u-button shape="circle" size="medium" @click="discountInfoPopup=false">取消</u-button>
+
+				</view>
+			</view>
+		</u-popup>
 	</view>
 </template>
 <script>
@@ -1433,8 +1490,21 @@
 		computed: {
 			...mapState(['userInfo', 'quotationType']),
 		},
+		// 监听导航栏的按钮
+		onNavigationBarButtonTap(e) {
+			if (e.index == 0) {
+				this.navigate({
+					url: '/pages/index/index'
+				}, "switchTab", true);
+			}
+		},
 		data() {
 			return {
+				discountInfoPopup: false,
+				discountInfoPopupTitle: "",
+				discountInfoPopupContent: ``,
+				CSSMathValue11: false,
+				insGuide: "", //投保指引
 				guoRenSpecialAgreementData: [],
 				guoRenSpecialAgreementVo: [],
 				preUnderwritingshow: false,
@@ -1538,6 +1608,7 @@
 				quotableCompanyList: [],
 				RSpreUnderwritingList: [],
 				productId: "",
+				productName: "",
 				animation: 'twinkle', //动画类型
 				InsureGuidePopup: false,
 				/* 投保指引弹窗*/
@@ -1619,18 +1690,20 @@
 				zijinPopupshow: false,
 				zijinInsuranceData: [],
 				zijinaccidentalDrivingVo: [],
+				isInspectchange: false,
 			}
 		},
 		onShow() {
 
 		},
 		async onLoad(params) {
-
+			console.log(params);
 			if (params.orderno) {
 				let res = await this.$http.post('/insurance/order/reviseApp', {
 					orderNo: params.orderno
 				});
 				this.productId = res.data.productid; //险种id
+				this.productName = res.data.product; //险种name
 				this.quotableCompanyList = JSON.parse(JSON.stringify(res.data.companyDtos));
 				this.commpanyList();
 				this.carInfo = res.data.carinfo; //车辆信息
@@ -1687,6 +1760,7 @@
 					this.policyHolderInfoPositiveList = data.policyHolderInfoPositiveList; //投保
 					this.insuredPersonInfoPositiveList = data.insuredPersonInfoPositiveList; //被保人
 					this.productId = data.productId; //险种id
+					this.productName = data.productName; //险种name
 					this.riskTypeEchoProcessing(this.productId)
 					this.quotableCompanyList = JSON.parse(JSON.stringify(data.quotableCompanyList)); //可报价公司
 					this.commpanyList();
@@ -2348,12 +2422,20 @@
 								.lastYearMsg += ele + '<br>';
 						})
 					}
-					this.quotableCompanyList[num].quoteCode = 200;
+					const updatedItem = {
+						...this.quotableCompanyList[num],
+						quoteCode: 200
+					};
+					this.quotableCompanyList.splice(num, 1, updatedItem);
 					this.quotableCompanyList[num].result = res.data;
 					this.subOrderId = res.data.companyId;
 					this.coordinateValue();
 				} else {
-					this.quotableCompanyList[num].quoteCode = "3";
+					const updatedItem = {
+						...this.quotableCompanyList[num],
+						quoteCode: '3'
+					};
+					this.quotableCompanyList.splice(num, 1, updatedItem);
 					this.quotableCompanyList[num].msg = res.msg;
 					return;
 				}
@@ -2534,6 +2616,9 @@
 			taikang(num, id) {
 				this.quoteInsurance(num, id);
 			},
+			chengtai(num, id) {
+				this.quoteInsurance(num, id);
+			},
 			//爬虫统一报价接口
 			async quoteInsurance(num, id) {
 				const companyId = uni.getStorageSync('companyId');
@@ -2557,14 +2642,24 @@
 					if (companyId) {
 						params.discount = this.quotableCompanyList[num]
 							.syAdjustRate;
-						params.lastCompanyId = companyId;
+						params.lastCompanyId = this.subOrderId;
+					}
+				}
+				if (namesimple == "诚泰财险") {
+					if (this.subOrderId && this.quotableCompanyList[num].coefficient && this.quotableCompanyList[num]
+						.discount) {
+						params.coefficient = this.quotableCompanyList[num].coefficient;
+						params.discount = this.quotableCompanyList[num].discount;
+						params.lastCompanyId = this.subOrderId;
 					}
+					params.isInspect = this.isInspectchange;
 				}
 				let res = await this.$http.post('/quote/quote',
 					params);
 				switch (namesimple) {
 					case '安盛天平':
 					case '恒邦财险':
+					case '诚泰财险':
 					case '中国人寿':
 					case '太平财险':
 					case '华农财险':
@@ -2657,7 +2752,6 @@
 					if (val.id == this.planDataExpansion.id) {
 						if (this.planDataExpansion.genericPlanInfo.schemeName !== '自选方案') {
 							val.insurancePlanInfo = this.planDataExpansion.genericPlanInfo;
-							console.log(val.insurancePlanInfo);
 						} else {
 							let objkindList = [];
 							val.insurancePlanInfo = this.planDataExpansion.genericPlanInfo;
@@ -2701,12 +2795,17 @@
 							})
 							val.insurancePlanInfo.kinds = objkindList;
 							if (this[name + 'accidentalDrivingVo'] instanceof Array && this[name +
-									'accidentalDrivingVo'][0].projectName) {
+									'accidentalDrivingVo'].length > 0) {
 								val.insurancePlanInfo.drivingList = this[name + 'accidentalDrivingVo'];
 							} else if (this[name + 'accidentalDrivingVo'].projectName) {
 								val.insurancePlanInfo.drivingList = [this[name + 'accidentalDrivingVo']];
 							}
-							console.log(val.insurancePlanInfo);
+						}
+						if (!val.insurancePlanInfo.schemeName) {
+							return uni.showToast({
+								icon: "none",
+								title: '未选中方案',
+							})
 						}
 						this.genericPlanPopup = false;
 					}
@@ -2819,13 +2918,16 @@
 				})
 			},
 			discountErrorMessageMsg(msg, title) {
-				let content = msg.replace(/\n/g, "\r\n")
-				uni.showModal({
-					title: title + "优惠信息",
-					content: content,
-					showCancel: false,
-					confirmText: "关闭"
-				})
+				this.discountInfoPopup = true;
+				this.discountInfoPopupContent = msg.replace(/\n/g, '<br>');
+				this.discountInfoPopupTitle = title;
+				// let content = msg.replace(/\n/g, "\r\n")
+				// uni.showModal({
+				// 	title: title + "优惠信息",
+				// 	content: content,
+				// 	showCancel: false,
+				// 	confirmText: "关闭"
+				// })
 			},
 			//使用此时间
 			syncData(item) {
@@ -2880,7 +2982,9 @@
 				let planObj = this.planDataExpansion.genericPlanList.find(item => item.schemeId == value);
 				this.planDataExpansion.genericPlanInfo = planObj;
 			},
-			InsureGuideclick() {
+			InsureGuideclick(content) {
+				console.log(content);
+				this.insGuide = content;
 				this.InsureGuidePopup = true;
 			},
 			async accidentCategoryclick(item, items, index) {
@@ -2890,6 +2994,9 @@
 						companyId: items.id,
 						type: item.code,
 						productId: this.productId,
+						vehicleType: this.carInfo.cimodelclass,
+						energyType: this.carInfo.energyType,
+						carnature: this.carInfo.carnature,
 					}
 					let res = await this.$http.post('/plt/scheme/getDriving', params)
 					switch (items.namesimple) {
@@ -2907,6 +3014,7 @@
 							break;
 						case '永诚财险':
 						case '恒邦财险':
+						case '诚泰财险':
 						case '中煤财险':
 						case '泰康财险':
 						case '渤海财险':
@@ -2935,11 +3043,13 @@
 				}
 			},
 			async SchemeSelection(item) {
-				console.log(item);
 				let params = {
 					companyId: item.id,
 					productId: this.productId,
 					seatNum: this.carInfo.seatCount,
+					vehicleType: this.carInfo.cimodelclass,
+					energyType: this.carInfo.energyType,
+					carnature: this.carInfo.carnature,
 				}
 				let res = await this.$http.post('/plt/scheme/getCompanySchemeInfo', params);
 				let res1 = await this.$http.post('/plt/scheme/getCompanyOptionalSchemeInfo', params);
@@ -2951,6 +3061,10 @@
 					this.planDataExpansion.genericPlanList = [...res.data];
 					this.planDataExpansion.genericPlanInfo = res.data[0];
 					this.SelectedPlanId = res.data[0].schemeId;
+				} else {
+					this.planDataExpansion.genericPlanList = [];
+					this.planDataExpansion.genericPlanInfo = {};
+					this.SelectedPlanId = "";
 				}
 				if (res1.code == '200') {
 					this.planDataExpansion.genericPlanList = [...res.data, res1.data];
@@ -2962,6 +3076,8 @@
 							})
 						}
 					})
+				} else {
+					this.planDataExpansion.genericPlanList = [...res.data];
 				}
 				this.accidentInsuranceCategoryList = typelist;
 				this.genericPlanPopup = true;
@@ -2993,6 +3109,8 @@
 					ele["agreementName"] = "";
 					ele["apiType"] = "";
 					ele["coefficient"] = "";
+					ele["discount"] = "";
+					ele["isInspect"] = false;
 					ele["syAdjustRate"] = "";
 					ele["selectShow"] = false;
 					ele['underwritingDescription'] = "";
@@ -3063,6 +3181,7 @@
 									.policyHolderInfoPositiveList, //投保
 								insuredPersonInfoPositiveList: this
 									.insuredPersonInfoPositiveList, //被保人
+								productId: this.productId
 
 							})
 					}
@@ -3175,6 +3294,11 @@
 		height: 600px;
 	}
 
+	.discountInfoscroll {
+		height: 300px;
+
+	}
+
 	.scroll-view-item {
 		height: 300rpx;
 		line-height: 300rpx;

+ 140 - 13
pages/carInsure/quote.vue

@@ -120,9 +120,10 @@
 										:animation="animation" fontSize="22" />
 									<!-- 价格 -->
 									<view class="dis a-c" v-if="totalitem.quoteCode==200">
-										<view class="dis a-c" style="margin-right: 10px;">
+										<view class="dis a-c" style="margin-right: 10px;"
+											v-if="totalitem.result.feeDisplay">
 											<text style="color: #FF4D4D;font-size: 12px;"
-												v-if="totalitem.result.sumExportFee">优惠金额¥{{totalitem.result.sumExportFee}}</text>
+												v-if="totalitem.result.sumExportFee">{{totalitem.result.feeView?'掌柜科技币':'优惠金额¥'}}{{totalitem.result.sumExportFee}}</text>
 										</view>
 										<text class="sum">¥{{totalitem.result.sumPermium}}</text>
 									</view>
@@ -148,12 +149,24 @@
 										<u-input type="number" v-model="totalitem.syAdjustRate"
 											:custom-style="{textAlign:'right'}"></u-input>
 									</u-form-item>
-									<u-form-item label="自主定价系数" v-if="totalitem.namesimple == '紫金财险'"
+									<u-form-item label="自主定价系数" v-if="['紫金财险','诚泰财险'].includes(totalitem.namesimple)"
 										placeholder="请输入数字" label-width="200" :border-bottom='false'
 										style="padding: 0;">
 										<u-input type="number" v-model="totalitem.coefficient"
 											:custom-style="{textAlign:'right'}"></u-input>
 									</u-form-item>
+									<template v-if="totalitem.namesimple == '诚泰财险'">
+										<u-form-item label="商业险折扣" placeholder="请输入" label-width="200"
+											:border-bottom='false' style="padding: 0;">
+											<u-input type="number" v-model="totalitem.discount"
+												:custom-style="{textAlign:'right'}"></u-input>
+										</u-form-item>
+										<view class="dis j-s a-c mt-1">
+											<text style="font-weight: bold;font-size: 14px;">是否验车</text>
+											<u-switch v-model="totalitem.isInspect" active-color="#0052FF"
+												inactive-color="#eee" size='30'></u-switch>
+										</view>
+									</template>
 									<text
 										style="color: #ff9000;font-weight: bold;">{{totalitem.underwritingDescription}}</text>
 								</view>
@@ -327,6 +340,39 @@
 
 									</view>
 								</template>
+								<template
+									v-if="totalitem.namesimple == '诚泰财险' && totalitem.checked && totalitem.agreementId ">
+									<view class="accident-style dis f-c ">
+										<view class="dis j-s a-c">
+											<text style="font-weight: bold;font-size: 14px;">意外险</text>
+											<u-switch v-model="totalitem.jychecked" active-color="#0052FF"
+												inactive-color="#eee" size='30'
+												@change="accidentChange($event,totalitem.id,totalitem.cnName,totalindex)"></u-switch>
+										</view>
+										<view class=""
+											v-if="chengtaiaccidentalDrivingVo.projectCode && totalitem.jychecked">
+											<view class=" accident-ins dis a-c j-s" @click="chengtaiPopupshow=true">
+												<text>{{chengtaiaccidentalDrivingVo.projectName}}</text>
+												<u-icon name="arrow-right" style="color: #999;" size="24"></u-icon>
+											</view>
+											<view class=" dis j-s a-c">
+												<view class="">
+													<text>保费:</text>
+													<text
+														style="color: #ee7000;">¥{{chengtaiaccidentalDrivingVo.sumPremium*chengtaiaccidentalDrivingVo.quantity}}.00</text>
+												</view>
+												<view class="">
+													<text>份数:</text>
+													<u-number-box v-model="chengtaiaccidentalDrivingVo.quantity"
+														:min="1" :max="1" :disabled-input="true" :input-width="70"
+														:input-height="44" size="26" :long-press="false"></u-number-box>
+												</view>
+
+											</view>
+										</view>
+
+									</view>
+								</template>
 								<template
 									v-if="totalitem.namesimple == '太平财险' && totalitem.checked && totalitem.agreementId">
 									<view class="accident-style dis f-c ">
@@ -589,8 +635,9 @@
 										<text
 											v-if="totalitem.result.jyPremium">驾意险:¥{{totalitem.result.jyPremium}}</text>
 									</view>
-									<view class="dis a-c  f-wrap price" style="font-size: 20rpx;color: #FF4D4D;">
-										<text>优惠金额:【
+									<view class="dis a-c  f-wrap price" style="font-size: 20rpx;color: #FF4D4D;"
+										v-if="totalitem.result.feeDisplay">
+										<text>{{totalitem.result.feeView?'掌柜科技币:【':'优惠金额:【'}}
 											<text
 												v-if="totalitem.result.jqPremium">交强险:{{totalitem.result.jqExportFee?totalitem.result.jqExportFee:'无'}}</text>
 											<text
@@ -630,6 +677,17 @@
 										totalitem.result.jqLossRation : '无' }}</text>
 										<text v-if="totalitem.result.syLossRation">商业赔付率:{{ totalitem.result.syLossRation ?
 										totalitem.result.syLossRation : '无' }}</text>
+
+										<text v-if="totalitem.result.totalAdjustRate">自主定价系数:{{ totalitem.result.totalAdjustRate ?
+										totalitem.result.totalAdjustRate : '无' }}</text>
+										<text v-if="totalitem.result.jgAdjustRate">交强折扣系数:{{ totalitem.result.jgAdjustRate ?
+										totalitem.result.jgAdjustRate : '无' }}</text>
+										<text v-if="totalitem.result.syAdjustRate">商业折扣系数:{{ totalitem.result.syAdjustRate ?
+										totalitem.result.syAdjustRate : '无' }}</text>
+										<text v-if="totalitem.namesimple == '诚泰财险'">建议折扣:{{ totalitem.result.initialProposalDiscount ?
+										totalitem.result.initialProposalDiscount : '无' }}</text>
+										<text v-else>期望折扣:{{ totalitem.result.initialProposalDiscount ?
+										totalitem.result.initialProposalDiscount : '无' }}</text>
 										<text
 											v-if="totalitem.namesimple == '紫金财险'">鼎然-车辆风险评分:{{totalitem.result.ubiPredictedInfoScore ?
 										totalitem.result.ubiPredictedInfoScore : '无'}}</text>
@@ -726,6 +784,19 @@
 				</u-radio-group>
 			</view>
 		</u-modal>
+		<!-- 诚泰驾意险弹框 -->
+		<u-modal v-model="chengtaiPopupshow" title="驾意险"
+			:title-style="{fontWeight: 'bold',borderBottom:'1px solid #f2f2f2',padding:'10px'}"
+			:scroll-height="{height: '300px'}" :show-confirm-button="false" mask-close-able>
+			<view class="slot-content">
+				<u-radio-group size="30" wrap>
+					<u-radio style="margin: 4px 0;flex: auto;" label-size="30" @change="CTradioChange" shape="square"
+						v-for="(item, index) in chengtaiInsuranceData" :key="index" :name="item.projectCode">
+						{{item.projectName}}
+					</u-radio>
+				</u-radio-group>
+			</view>
+		</u-modal>
 		<!-- 众安驾意险弹框 -->
 		<u-modal v-model="zhonganPopupshow" title="驾意险"
 			:title-style="{fontWeight: 'bold',borderBottom:'1px solid #f2f2f2',padding:'10px'}"
@@ -965,6 +1036,22 @@
 
 			</view>
 		</u-modal>
+		<u-popup v-model="discountInfoPopup" mode="center" width="78%" border-radius="6">
+			<view class="">
+				<view class="p-2 dis j-c a-c">
+					<text class="font-weight">{{discountInfoPopupTitle}}优惠信息</text>
+				</view>
+				<view style="padding: 0 20px;">
+					<scroll-view scroll-y="true" class="discountInfoscroll">
+						<rich-text :nodes="discountInfoPopupContent"></rich-text>
+					</scroll-view>
+				</view>
+				<view class="PlanPopup-btn dis a-c j-c">
+					<u-button shape="circle" size="medium" @click="discountInfoPopup=false">取消</u-button>
+
+				</view>
+			</view>
+		</u-popup>
 		<view class="footer-btn dis a-c j-s">
 			<u-button type="primary" style="background:#FF9900;width: 20%;" @tap="tempSave">暂存</u-button>
 			<u-button type="primary" style="background:#C9C9C9;width: 20%;" @click="priceComparison"
@@ -1008,6 +1095,9 @@
 		},
 		data() {
 			return {
+				discountInfoPopup: false,
+				discountInfoPopupTitle: "",
+				discountInfoPopupContent: ``,
 				priceComparisonShow: false,
 				comparableQuantity: 0, //报价成功总数
 				selectedCount: 0, //比价勾选数量
@@ -1081,6 +1171,9 @@
 				hengbangPopupshow: false,
 				hengbangInsuranceData: [], //-恒邦意外险list
 				hengbangaccidentalDrivingVo: {}, //恒邦意外险
+				chengtaiPopupshow: false,
+				chengtaiInsuranceData: [], //-恒邦意外险list
+				chengtaiaccidentalDrivingVo: {}, //恒邦意外险
 				renshouPopupshow: false,
 				renshouInsuranceData: [], //-人寿意外险list
 				renshouaccidentalDrivingVo: {}, //人寿意外险
@@ -1675,6 +1768,7 @@
 				ycdrivingJoyCoverage: {},
 				RSpreUnderwritingList: [], //人寿预核保信息
 				subOrderId: '',
+				lastCompanyId: '',
 			}
 		},
 		watch: {
@@ -2448,6 +2542,7 @@
 							}
 							break;
 						case '中国人寿':
+						case '诚泰财险':
 						case '恒邦财险':
 						case '众安财险':
 						case '太平财险':
@@ -2541,6 +2636,12 @@
 					id)
 				this.hengbangPopupshow = false;
 			},
+			//诚泰意外险
+			CTradioChange(id) {
+				this.chengtaiaccidentalDrivingVo = this.chengtaiInsuranceData.find(val => val.projectCode ==
+					id)
+				this.chengtaiPopupshow = false;
+			},
 			//众安意外险
 			ZAradioChange(id) {
 				this.zhonganaccidentalDrivingVo = this.zhonganInsuranceData.find(val => val.projectCode == id)
@@ -2653,6 +2754,8 @@
 					ele["agreementName"] = "";
 					ele["apiType"] = "";
 					ele["coefficient"] = "";
+					ele["discount"] = "";
+					ele["isInspect"] = false;
 					ele["syAdjustRate"] = "";
 					ele["selectShow"] = false;
 					ele['underwritingDescription'] = "";
@@ -3418,8 +3521,17 @@
 					if (companyId) {
 						params.discount = this.totalCompanyList[num]
 							.syAdjustRate;
-						params.lastCompanyId = companyId;
+						params.lastCompanyId = this.subOrderId;
+					}
+				}
+				if (namesimple == "诚泰财险") {
+					if (this.subOrderId && this.totalCompanyList[num].coefficient && this.totalCompanyList[num]
+						.discount) {
+						params.coefficient = this.totalCompanyList[num].coefficient;
+						params.discount = this.totalCompanyList[num].discount;
+						params.lastCompanyId = this.subOrderId;
 					}
+					params.isInspect = this.totalCompanyList[num].isInspect;
 				}
 				let res = await this.$http.post(`${api}`,
 					params);
@@ -3427,6 +3539,7 @@
 				switch (namesimple) {
 					case '安盛天平':
 					case '恒邦财险':
+					case '诚泰财险':
 					case '中国人寿':
 					case '太平财险':
 					case '华农财险':
@@ -3541,6 +3654,12 @@
 					.totalCompanyList[num].apiType, this
 					.totalCompanyList[num].jychecked);
 			},
+			//诚泰
+			chengtai(num, id) {
+				this.quoteInsurance(num, id, this
+					.totalCompanyList[num].apiType, this
+					.totalCompanyList[num].jychecked);
+			},
 			taikang(num, id) {
 				this.quoteInsurance(num, id, this
 					.totalCompanyList[num].apiType, this
@@ -3639,13 +3758,9 @@
 				})
 			},
 			discountErrorMessageMsg(msg, title) {
-				let content = msg.replace(/\n/g, "\r\n")
-				uni.showModal({
-					title: title + "优惠信息",
-					content: content,
-					showCancel: false,
-					confirmText: "关闭"
-				})
+				this.discountInfoPopup = true;
+				this.discountInfoPopupContent = msg.replace(/\n/g, '<br>');
+				this.discountInfoPopupTitle = title;
 			},
 			//使用此时间
 			syncData(item) {
@@ -3723,6 +3838,18 @@
 <style lang="scss" scoped>
 	@import '@/style/mixin.scss';
 
+	.discountInfoscroll {
+		height: 300px;
+
+	}
+
+	.PlanPopup-btn {
+		width: 100%;
+		height: 48px;
+		background: #FFFFFF;
+		box-shadow: 0px -2px 4px 0px rgba(0, 0, 0, 0.05);
+	}
+
 	.priceComparison {
 		width: 20%;
 		background: linear-gradient(180deg, #FA6464 0%, #E53F3F 100%);

+ 24 - 21
pages/carInsure/quoteDetail.vue

@@ -224,7 +224,7 @@
 							</view>
 							<view v-if="orderInfo.jqpremium && orderInfo.feeOrderNewVo" class=" d-flex a-center j-c"
 								style="margin-bottom: 5px;">
-								<view class="costDetails">
+								<view class="costDetails" v-if="orderInfo.feeDisplay">
 									<view class="dis j-s a-c " style="padding: 4px 6px;">
 										<text class="text1">手续费比例:<text
 												class="text2">{{orderInfo.feeOrderNewVo.exportFee[0].superviseCosts}}%</text>
@@ -237,20 +237,20 @@
 										</text>
 									</view>
 									<view class="dis j-s a-c" style="padding: 4px 6px;">
-										<text class="text1">手续费用:
+										<text class="text1">{{orderInfo.feeView?'掌柜科技币1:':'手续费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[0].superviseCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[0].superviseCostsPremiums}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[0].superviseCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[0].superviseCostsPremiums}}</text>
 											<text v-else>0</text>
 										</text>
-										<text class="text1">跟单费用:
+										<text class="text1">{{orderInfo.feeView?'掌柜科技币2:':'跟单费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[0].otherCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[0].otherCostsPremiums}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[0].otherCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[0].otherCostsPremiums}}</text>
 											<text v-else>0</text>
 										</text>
 
-										<text class="text1">总费用:
+										<text class="text1">{{orderInfo.feeView?'总科技币:':'总费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[0].totalAmount">¥{{orderInfo.feeOrderNewVo.exportFee[0].totalAmount}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[0].totalAmount">{{orderInfo.feeOrderNewVo.exportFee[0].totalAmount}}</text>
 											<text v-else>0</text>
 										</text>
 									</view>
@@ -303,7 +303,8 @@
 								<text style="color: rgba(35,40,50,0.9);">起保日期:{{orderInfo.systartdate}}</text>
 								<text style="color: rgba(35,40,50,0.9);">终保日期:{{orderInfo.syenddate}}</text>
 							</view>
-							<view class="costDetails" v-if="sypremium && orderInfo.feeOrderNewVo">
+							<view class="costDetails"
+								v-if="sypremium && orderInfo.feeOrderNewVo && orderInfo.feeDisplay">
 								<view class="dis j-s a-c " style="border-bottom: 1px solid #f2f2f2;padding: 4px 6px;">
 									<text class="text1">手续费比例:<text
 											class="text2">{{orderInfo.feeOrderNewVo.exportFee[1].superviseCosts}}%</text>
@@ -317,19 +318,19 @@
 									</text>
 								</view>
 								<view class="dis j-s a-c" style="padding: 4px 6px;">
-									<text class="text1">手续费用:
+									<text class="text1">{{orderInfo.feeView?'掌柜科技币1:':'手续费用:¥'}}
 										<text class="text2 text2-color"
-											v-if="orderInfo.feeOrderNewVo.exportFee[1].superviseCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[1].superviseCostsPremiums}}</text>
+											v-if="orderInfo.feeOrderNewVo.exportFee[1].superviseCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[1].superviseCostsPremiums}}</text>
 										<text v-else>0</text>
 									</text>
-									<text class="text1">跟单费用:
+									<text class="text1">{{orderInfo.feeView?'掌柜科技币2:':'跟单费用:¥'}}
 										<text class="text2 text2-color"
-											v-if="orderInfo.feeOrderNewVo.exportFee[1].otherCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[1].otherCostsPremiums}}</text>
+											v-if="orderInfo.feeOrderNewVo.exportFee[1].otherCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[1].otherCostsPremiums}}</text>
 										<text v-else>0</text>
 									</text>
-									<text class="text1">总费用:
+									<text class="text1">{{orderInfo.feeView?'总科技币:':'总费用:¥'}}
 										<text class="text2 text2-color"
-											v-if="orderInfo.feeOrderNewVo.exportFee[1].totalAmount">¥{{orderInfo.feeOrderNewVo.exportFee[1].totalAmount}}</text>
+											v-if="orderInfo.feeOrderNewVo.exportFee[1].totalAmount">{{orderInfo.feeOrderNewVo.exportFee[1].totalAmount}}</text>
 										<text v-else>0</text>
 									</text>
 								</view>
@@ -389,7 +390,7 @@
 								<text>¥{{jypremium}}</text>
 							</view>
 							<view v-if="jypremium && orderInfo.feeOrderNewVo" class="row d-flex a-center j-c">
-								<view class="costDetails">
+								<view class="costDetails" v-if="orderInfo.feeDisplay">
 									<view class="dis j-s a-c "
 										style="border-bottom: 1px solid #f2f2f2;padding: 4px 6px;">
 										<text class="text1">手续费比例:<text
@@ -404,19 +405,19 @@
 										</text>
 									</view>
 									<view class="dis j-s a-c" style="padding: 4px 6px;">
-										<text class="text1">手续费用:
+										<text class="text1">{{orderInfo.feeView?'掌柜科技币1:':'手续费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[2].superviseCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[2].superviseCostsPremiums}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[2].superviseCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[2].superviseCostsPremiums}}</text>
 											<text v-else>0</text>
 										</text>
-										<text class="text1">跟单费用:
+										<text class="text1">{{orderInfo.feeView?'掌柜科技币2:':'跟单费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[2].otherCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[2].otherCostsPremiums}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[2].otherCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[2].otherCostsPremiums}}</text>
 											<text v-else>0</text>
 										</text>
-										<text class="text1">总费用:
+										<text class="text1">{{orderInfo.feeView?'总科技币:':'总费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[2].totalAmount">¥{{orderInfo.feeOrderNewVo.exportFee[2].totalAmount}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[2].totalAmount">{{orderInfo.feeOrderNewVo.exportFee[2].totalAmount}}</text>
 											<text v-else>0</text>
 										</text>
 									</view>
@@ -1422,6 +1423,7 @@
 							this.zhongMeigetPolicyPrint(); //电子保单
 							break;
 						case "恒邦财险":
+						case "诚泰财险":
 						case "安盛天平":
 						case "众安财险":
 						case "中国人寿":
@@ -2002,6 +2004,7 @@
 						}
 						break;
 					case "恒邦财险":
+					case "诚泰财险":
 					case "安盛天平":
 					case "众安财险":
 					case "中国人寿":

+ 387 - 0
pages/chat/chat.vue

@@ -0,0 +1,387 @@
+<template>
+	<view class="page">
+		<!-- 空盒子用来防止消息过少时 拉起键盘会遮盖消息 -->
+		<view :animation="anData" style="height:0;">
+
+		</view>
+		<!-- 消息体 -->
+		<scroll-view scroll-with-animation scroll-y="true" @touchmove="hideKey" style="width: 750rpx;"
+			:style="{'height':srcollHeight}" :scroll-top="go">
+			<!-- 用来获取消息体高度 -->
+			<view id="okk" scroll-with-animation>
+				<!-- 消息 -->
+				<view class="flex-column-start" v-for="(x,i) in msgList" :key="i">
+					<!-- 用户消息 头像可选加入-->
+					<view v-if="x.my" class="flex justify-end padding-right one-show  align-start  padding-top">
+						<!-- 	<image v-if="!x.my" class="chat-img" src="../../static/..." mode="aspectFill" ></image> -->
+						<view class="flex justify-end" style="width: 400rpx;">
+							<view class="margin-left padding-chat bg-blue" style="border-radius: 6px;">
+								<text style="word-break: break-all;">{{x.msg}}</text>
+							</view>
+						</view>
+					</view>
+					<!-- 机器人消息 -->
+					<view v-if="!x.my" class=" margin-left margin-top one-show">
+						<view class="dis j-c a-c mt-1 mb-3 ">
+							<text class="initTime">{{x.initTime}}</text>
+						</view>
+						<view class="flex" style="max-width: 550rpx;">
+							<view class=" chatBox  dis j-s a-c" style="">
+								<image v-if="i==0" src="/static/img/customerService1.png" mode=""
+									style="width: 47px;height: 50px;position: absolute;left: 0;bottom: 0;">
+								</image>
+								<text :style="{ marginLeft: i === 0 ? '40px' : '0px' }">{{x.msg}}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+				<!-- loading是显示 -->
+				<view v-show="msgLoad" class="flex-row-start margin-left margin-top">
+					<!-- <view class="chat-img flex-row-center">
+						<image style="height: 75rpx;width: 75rpx;" src="../../static/image/robt.png" mode="aspectFit">
+						</image>
+					</view> -->
+					<view class="flex" style="width: 500rpx;">
+						<view class="margin-left padding-chat flex-column-start"
+							style="border-radius: 35rpx;background-color: #f9f9f9;">
+							<view class="cuIcon-loading turn-load" style="font-size: 35rpx;color: #0081ff;">
+
+							</view>
+						</view>
+					</view>
+				</view>
+				<!-- 防止消息底部被遮 -->
+				<view style="height: 120rpx;">
+
+				</view>
+			</view>
+		</scroll-view>
+		<!-- 底部导航栏 -->
+		<view class="flex-column-center" style="position: fixed;bottom: -180px;" :animation="animationData">
+			<view class="bottom-dh-char flex-row-around" style="font-size: 55rpx;">
+				<!-- vue无法使用软键盘"发送" -->
+				<input v-model="msg" class="dh-input" type="text" style="background-color: #f0f0f0;" @confirm="sendMsg"
+					confirm-type="search" placeholder-class="my-neirong-sm" placeholder="请描述您的问题" />
+				<view class="bg-blue "
+					style="border-radius: 6px;font-size: 12px;padding: 5px 10px;box-sizing: border-box;"
+					@click="sendMsg">
+					发送
+				</view>
+			</view>
+			<!-- 附加栏(自定义) -->
+			<view class="box-normal flex-row-around flex-wrap">
+				<view class="tb-text">
+					<view class="cuIcon-form"></view>
+					<text>问题反馈</text>
+				</view>
+				<view class="tb-text">
+					<view class="cuIcon-form"></view>
+					<text>人工客服</text>
+				</view>
+
+			</view>
+		</view>
+
+
+
+
+	</view>
+</template>
+
+<script>
+	// rpx和px的比率
+	var l
+	// 可用窗口高度
+	var wh
+	// 顶部空盒子的高度
+	var mgUpHeight
+	export default {
+		onLoad() {
+			// 如果需要缓存消息缓存msgList即可
+			// 监听键盘拉起
+			// 因为无法控制键盘拉起的速度,所以这里尽量以慢速处理
+			uni.onKeyboardHeightChange(res => {
+				const query = uni.createSelectorQuery()
+				query.select('#okk').boundingClientRect(data => {
+					// 若消息体没有超过2倍的键盘则向下移动差值,防止遮住消息体
+					var up = res.height * 2 - data.height - l * 110
+					console.log(up)
+					if (up > 0) {
+						// 动态改变空盒子高度
+						this.msgMove(up, 300)
+						// 记录改变的值,若不收回键盘且发送了消息用来防止消息过多被遮盖
+						mgUpHeight = up
+					}
+					// 收回
+					if (res.height == 0) {
+						this.msgMove(0, 0)
+					}
+				}).exec();
+			})
+			var query = uni.getSystemInfoSync()
+
+			l = query.screenWidth / 750
+			wh = query.windowHeight
+			this.srcollHeight = query.windowHeight + "px"
+		},
+		data() {
+			return {
+				realTime: "",
+				msgLoad: false,
+				anData: {},
+				animationData: {},
+				showTow: false,
+				// 消息体,定义机器人初次的消息(或者自定义出现时机)
+				// my->谁发的消息 msg->消息文本 type->客服消息模板类型 questionList->快速获取问题答案的问题列表
+				msgList: [{
+					my: false,
+					msg: "您好,掌柜智能客服助理为您服务!",
+					initTime: this.getFormattedTime(),
+				}],
+				msg: "",
+				go: 0,
+				srcollHeight: 0
+			}
+		},
+		methods: {
+			getFormattedTime() {
+				const date = new Date();
+				const year = date.getFullYear();
+				const month = (date.getMonth() + 1).toString().padStart(2, '0');
+				const day = date.getDate().toString().padStart(2, '0');
+				const hours = date.getHours().toString().padStart(2, '0');
+				const minutes = date.getMinutes().toString().padStart(2, '0');
+
+				return `${year}-${month}-${day} ${hours}:${minutes}`;
+			},
+			// 切换输入法时移动输入框(按照官方的上推页面的原理应该会自动适应不同的键盘高度-->官方bug)
+			goPag(kh) {
+				this.upTowmn(0, 250)
+				if (this.keyHeight != 0) {
+					if (kh - this.keyHeight > 0) {
+						this.upTowmn(this.keyHeight - kh, 250)
+					}
+
+				}
+			},
+			// 移动顶部的空盒子
+			msgMove(x, t) {
+				var animation = uni.createAnimation({
+					duration: t,
+					timingFunction: 'linear',
+				})
+
+				this.animation = animation
+
+				animation.height(x).step()
+
+				this.anData = animation.export()
+			},
+			// 保持消息体可见
+			msgGo() {
+				const query = uni.createSelectorQuery()
+				// 延时100ms保证是最新的高度
+				setTimeout(() => {
+					// 获取消息体高度
+					query.select('#okk').boundingClientRect(data => {
+						// 如果超过scorll高度就滚动scorll
+						if (data.height - wh > 0) {
+							this.go = data.height - wh
+
+						}
+						// 保证键盘第一次拉起时消息体能保持可见
+						var moveY = wh - data.height
+						// 超出页面则缩回空盒子
+						if (moveY - mgUpHeight < 0) {
+							// 小于0则视为0
+							if (moveY < 0) {
+								this.msgMove(0, 200)
+							} else {
+								// 否则缩回盒子对应的高度
+								this.msgMove(moveY, 200)
+							}
+						}
+
+					}).exec();
+				}, 100)
+			},
+			// 回答问题的业务逻辑
+			answer(id) {
+				// 这里应该传入问题的id,模拟就用index代替了
+				console.log(id)
+
+			},
+			sendMsg() {
+				// 消息为空不做任何操作
+				if (this.msg == "") {
+					return 0;
+				}
+				// 显示消息 msg消息文本,my鉴别是谁发的消息(不能用俩个消息数组循环,否则消息不会穿插)
+				this.msgList.push({
+					"msg": this.msg,
+					"my": true
+				})
+
+				// 保证消息可见
+				this.msgGo()
+				// 回答问题
+				this.msgKf(this.msg)
+				// 清除消息
+				this.msg = ""
+			},
+			async msgKf(x) {
+				// loading
+				this.msgLoad = true
+				// 这里连接服务器获取答案
+				let res = await this.$http.post('/customer/ai/sendMessage', {
+					message: this.msg
+				});
+				if (res.code == 200) {
+					// 下面模拟请求
+					setTimeout(() => {
+						// 取消loading
+						this.msgLoad = false
+						this.msgList.push({
+							my: false,
+							msg: res.data.message,
+							initTime: res.data.date
+						})
+						// this.msgList.push({
+						// 	my: false,
+						// 	msg: "单消息模板",
+						// 	type: -1
+						// })
+						// this.msgList.push({
+						// 	my: false,
+						// 	msg: "根据您的问题,已为您匹配了下列问题(多个答案模板)",
+						// 	type: 2,
+						// 	questionList: ["如何注销用户", "我想了解业务流程", "手机号如何更换"]
+						// })
+						this.msgGo()
+					}, 1000)
+				}
+
+			},
+			// 不建议输入框聚焦时操作此动画
+			ckAdd() {
+				if (!this.showTow) {
+					this.upTowmn(-180, 350)
+				} else {
+					this.upTowmn(0, 200)
+				}
+				this.showTow = !this.showTow
+			},
+			hideKey() {
+				uni.hideKeyboard()
+			},
+			// 拉起/收回附加栏
+			upTowmn(x, t) {
+
+				var animation = uni.createAnimation({
+					duration: t,
+					timingFunction: 'ease',
+				})
+
+				this.animation = animation
+
+				animation.translateY(x).step()
+
+				this.animationData = animation.export()
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "./css/icon.css";
+	@import "./css/main.css";
+	@import "./css/index-app.css";
+
+	.chatBox {
+		padding: 8px 14px;
+		border-radius: 35rpx;
+		background-color: #fff;
+		box-shadow: 0px 2px 5px 0px #DAE3F4;
+		border-radius: 6px;
+		font-size: 12px;
+		position: relative;
+
+		text {
+			color: #000;
+			word-break: break-all;
+
+		}
+	}
+
+	.initTime {
+		background: rgba(207, 207, 207, 0.2);
+		border-radius: 20px;
+		width: auto;
+		padding: 2px 8px;
+		color: #000;
+		font-size: 12px;
+	}
+
+	.page {
+		background-color: #F8FAFE;
+	}
+
+	.bottom-dh-char {
+		background: #FFFFFF;
+		box-shadow: 0px -4px 10px 0px rgba(218, 227, 244, 0.2);
+		border-radius: 0px 0px 0px 0px;
+		width: 750rpx;
+		height: 110rpx;
+	}
+
+	.center-box {
+		width: 720rpx;
+		padding-left: 25rpx;
+	}
+
+	.hui-box {
+		width: 750rpx;
+		height: 100%;
+
+	}
+
+	.dh-input {
+		width: 80%;
+		height: 33px;
+		border-radius: 6px;
+		padding-left: 15rpx;
+		background-color: transparent !important;
+		border: 1px solid #EBEBEB;
+	}
+
+	.box-normal {
+		width: 750rpx;
+		height: 180px;
+		background-color: #FFFFFF;
+	}
+
+	.tb-text view {
+		font-size: 65rpx;
+	}
+
+	.tb-text text {
+		font-size: 25rpx;
+		color: #737373;
+	}
+
+	.chat-img {
+		border-radius: 50%;
+		width: 100rpx;
+		height: 100rpx;
+		background-color: #f7f7f7;
+	}
+
+	.padding-chat {
+		padding: 17rpx 20rpx;
+	}
+
+	.tb-nv {
+		width: 50rpx;
+		height: 50rpx;
+	}
+</style>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 36 - 0
pages/chat/css/icon.css


+ 421 - 0
pages/chat/css/index-app.css

@@ -0,0 +1,421 @@
+.status_bar {
+	height: var(--status-bar-height);
+	background-color: #f1f1f1;
+	width: 100%;
+
+}
+
+.status_bar-nobg {
+	height: var(--status-bar-height);
+	width: 100%;
+
+}
+
+/* 转圈动画 */
+.turn-load {
+	animation: turnmy 1s linear infinite;
+}
+
+@keyframes turnmy {
+	0% {
+		-webkit-transform: rotate(0deg);
+	}
+
+	25% {
+		-webkit-transform: rotate(90deg);
+	}
+
+	50% {
+		-webkit-transform: rotate(180deg);
+	}
+
+	75% {
+		-webkit-transform: rotate(270deg);
+	}
+
+	100% {
+		-webkit-transform: rotate(360deg);
+	}
+}
+
+.one-show {
+	animation: oneshow 0.8s ease 1;
+}
+
+@keyframes oneshow {
+	from {
+		opacity: 0;
+	}
+
+	to {
+		opacity: 1;
+	}
+}
+
+.status_bar-fixed {
+	height: var(--status-bar-height);
+	width: 100%;
+	position: fixed;
+	background-color: #f1f1f1;
+	z-index: 20;
+}
+
+.head-dh-my {
+	display: flex;
+	position: fixed;
+	justify-content: space-around;
+	align-items: flex-end;
+	padding-bottom: 10rpx;
+	z-index: 15;
+	background-color: #e3e3e3;
+	width: 750rpx;
+}
+
+.border-bom {
+	border-bottom: 0.5rpx solid #DDDDDD;
+}
+
+.border-red {
+	border-bottom: 1rpx solid #d33e18;
+}
+
+.border-bom-big {
+	border-bottom: 8rpx solid #DDDDDD;
+}
+
+.border-bom-white {
+	border-bottom: 2rpx solid #FFFFFF;
+}
+
+.border-bom-green {
+	border-bottom: 4rpx solid #f8f9bd;
+}
+
+.border-bom-index {
+	border-bottom: 4rpx solid #27d9b3;
+}
+
+.padding-left {
+	padding-left: 20rpx;
+}
+
+.padding-left-top {
+	padding-left: 20rpx;
+	padding-top: 20rpx;
+}
+
+.padding-right {
+	padding-right: 20rpx;
+}
+
+.input-my {
+	padding-left: 20rpx;
+	border-radius: 40rpx;
+	height: 50rpx;
+	margin: 10rpx;
+}
+
+.tb-tag-absolute {
+	position: absolute;
+	z-index: 5;
+	border-radius: 25rpx;
+	font-size: 16rpx;
+	margin-left: 25rpx;
+	margin-top: -35rpx;
+}
+
+.lk-tag {
+	height: 50rpx;
+	padding: 0 10rpx;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	border: 2rpx solid #24bd9f;
+	border-radius: 6rpx;
+	color: #1c947a;
+	font-weight: 500;
+
+
+}
+
+.tb-tag-my {
+	border-radius: 15rpx;
+	font-size: 16rpx;
+	margin-left: 5rpx;
+}
+
+.my-green {
+	color: #29c7a5;
+}
+
+.my-hui {
+	color: #585858;
+	font-size: 22rpx;
+}
+
+.flex-column-center {
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+}
+
+.flex-column-between {
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+	align-items: center;
+}
+
+.flex-column-start {
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+}
+
+.flex-column-around {
+	display: flex;
+	flex-direction: column;
+	justify-content: space-around;
+	align-items: center;
+
+}
+
+.flex-row-start {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+}
+
+.flex-row-around {
+	display: flex;
+	flex-direction: row;
+	justify-content: space-around;
+	align-items: center;
+}
+
+.flex-row-center {
+	display: flex;
+	flex-direction: row;
+	justify-content: center;
+	align-items: center;
+}
+
+.flex-row-between {
+	display: flex;
+	flex-direction: row;
+	justify-content: space-between;
+	align-items: center;
+}
+
+.my-title {
+	font-size: 35rpx;
+	font-weight: bold;
+}
+
+.my-neirong {
+	font-size: 26rpx;
+	color: #6d6d6d;
+}
+
+.my-neirong-sm {
+	font-size: 26rpx;
+	color: rgba(0, 0, 0, 0.45);
+}
+
+.my-tag-text {
+	font-size: 22rpx;
+	padding-top: 20rpx;
+	color: #bababa;
+}
+
+.padding-top {
+	padding-top: 35rpx;
+}
+
+.padding-top-sm {
+	padding-top: 20rpx;
+}
+
+.bottom-dh {
+	background-color: #f1f1f1;
+	position: fixed;
+	z-index: 10;
+	bottom: 0;
+	width: 750rpx;
+	height: 110rpx;
+}
+
+.tb-text {
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+}
+
+.bottom-text {
+	width: 750rpx;
+	position: fixed;
+	text-align: center;
+	font-size: 26rpx;
+	color: #9d9d9d;
+	bottom: 70rpx;
+}
+
+.white-box {
+	padding: 0 20rpx;
+	margin-bottom: 15rpx;
+	margin-top: 5rpx;
+	width: 715rpx;
+	background-color: #FFFFFF;
+	border-radius: 30rpx;
+}
+
+.green-box {
+	padding: 0 20rpx;
+	margin-bottom: 15rpx;
+	margin-top: 5rpx;
+	width: 715rpx;
+	background-color: #FFFFFF;
+	border-radius: 30rpx;
+	background-image: linear-gradient(#1faf97, #29c7a5);
+}
+
+.yuan-sm {
+	width: 13rpx;
+	height: 13rpx;
+	border-radius: 50%;
+	background-color: #1fc189;
+	margin-left: 10rpx;
+}
+
+.yuan-normal {
+	width: 14rpx;
+	height: 14rpx;
+	border-radius: 50%;
+	background-color: #159f3c;
+	margin-left: 10rpx;
+
+}
+
+.yuan-normal-red {
+	width: 14rpx;
+	height: 14rpx;
+	border-radius: 50%;
+	background-color: #bc3c11;
+	margin-left: 10rpx;
+
+}
+
+.yuan-sm-red {
+	width: 13rpx;
+	height: 13rpx;
+	border-radius: 50%;
+	background-color: #de410d;
+	margin-left: 10rpx;
+}
+
+.white-box-all {
+	margin-top: 5rpx;
+	width: 750rpx;
+	background-color: #FFFFFF;
+	border-radius: 13px;
+}
+
+.moneycolor {
+	color: #ea5002;
+}
+
+.text-bold-sm {
+	font-weight: 425;
+}
+
+.sm-moneycolor {
+	color: #e3793b;
+}
+
+.margin-top {
+	margin-top: 20rpx;
+}
+
+.margin-top-sm {
+	margin-top: 12rpx;
+}
+
+.margin {
+	margin: 20rpx;
+}
+
+.margin-left {
+	margin-left: 20rpx;
+}
+
+.margin-left-top {
+	margin-left: 20rpx;
+	margin-top: 20rpx;
+}
+
+.margin-right {
+	margin-right: 20rpx;
+}
+
+.my-absolute {
+	position: absolute;
+}
+
+.my-fixed {
+	position: fixed;
+}
+
+.my-seach {
+	width: 450rpx;
+	height: 55rpx;
+	background-color: #f8f8f8;
+	border-radius: 30rpx;
+	padding-left: 20rpx;
+}
+
+.move-view {
+	width: 48rpx;
+	height: 10rpx;
+	background-color: #28ba91;
+	border-radius: 4rpx;
+	margin-left: 100rpx;
+}
+
+.move-view-p {
+	width: 45rpx;
+	height: 10rpx;
+	background-color: #28ba91;
+	border-radius: 4rpx;
+}
+
+.header-dh {
+	position: fixed;
+	padding-top: 20rpx;
+	padding-bottom: 15rpx;
+	height: 70rpx;
+	width: 750rpx;
+	background-color: #f1f1f1;
+	z-index: 20;
+}
+
+.tp-normal {
+	width: 60rpx;
+	height: 60rpx;
+}
+
+.tp-sm {
+	width: 45rpx;
+	height: 45rpx;
+}
+
+.tp-big {
+	width: 70rpx;
+	height: 70rpx;
+	border-radius: 50%;
+}
+
+.main-color {
+	color: #07D188;
+}

+ 3939 - 0
pages/chat/css/main.css

@@ -0,0 +1,3939 @@
+/*
+  ColorUi for uniApp  v2.1.6 | by 文晓港 2019-05-31 10:44:24
+  仅供学习交流,如作它用所承受的法律责任一概与作者无关  
+  
+  *使用ColorUi开发扩展与插件时,请注明基于ColorUi开发 
+  
+  (QQ交流群:240787041)
+*/
+
+/* ==================
+        初始化
+ ==================== */
+body {
+	background-color: #f1f1f1;
+	font-size: 28upx;
+	color: #333333;
+	font-family: Helvetica Neue, Helvetica, sans-serif;
+}
+
+view,
+scroll-view,
+swiper,
+button,
+input,
+textarea,
+label,
+navigator,
+image {
+	box-sizing: border-box;
+}
+
+.round {
+	border-radius: 5000rpx;
+}
+.radius-m{
+	border-radius: 12rpx;
+}
+.radius {
+	border-radius: 6rpx;
+}
+
+/* ==================
+          图片
+ ==================== */
+
+image {
+	max-width: 100%;
+	display: inline-block;
+	position: relative;
+	z-index: 0;
+}
+
+image.loading::before {
+	content: "";
+	background-color: #f5f5f5;
+	display: block;
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: -2;
+}
+
+image.loading::after {
+	content: "\e7f1";
+	font-family: "cuIcon";
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 32upx;
+	height: 32upx;
+	line-height: 32upx;
+	right: 0;
+	bottom: 0;
+	z-index: -1;
+	font-size: 32upx;
+	margin: auto;
+	color: #ccc;
+	-webkit-animation: cuIcon-spin 2s infinite linear;
+	animation: cuIcon-spin 2s infinite linear;
+	display: block;
+}
+
+.response {
+	width: 100%;
+}
+
+/* ==================
+         开关
+ ==================== */
+
+switch,
+checkbox,
+radio {
+	position: relative;
+}
+
+switch::after,
+switch::before {
+	font-family: "cuIcon";
+	content: "\e645";
+	position: absolute;
+	color: #ffffff !important;
+	top: 0%;
+	left: 0upx;
+	font-size: 26upx;
+	line-height: 26px;
+	width: 50%;
+	text-align: center;
+	pointer-events: none;
+	transform: scale(0, 0);
+	transition: all 0.3s ease-in-out 0s;
+	z-index: 9;
+	bottom: 0;
+	height: 26px;
+	margin: auto;
+}
+
+switch::before {
+	content: "\e646";
+	right: 0;
+	transform: scale(1, 1);
+	left: auto;
+}
+
+switch[checked]::after,
+switch.checked::after {
+	transform: scale(1, 1);
+}
+
+switch[checked]::before,
+switch.checked::before {
+	transform: scale(0, 0);
+}
+
+/* #ifndef MP-ALIPAY */
+radio::before,
+checkbox::before {
+	font-family: "cuIcon";
+	content: "\e645";
+	position: absolute;
+	color: #ffffff !important;
+	top: 50%;
+	margin-top: -8px;
+	right: 5px;
+	font-size: 32upx;
+	line-height: 16px;
+	pointer-events: none;
+	transform: scale(1, 1);
+	transition: all 0.3s ease-in-out 0s;
+	z-index: 9;
+}
+
+radio .wx-radio-input,
+checkbox .wx-checkbox-input,
+radio .uni-radio-input,
+checkbox .uni-checkbox-input {
+	margin: 0;
+	width: 24px;
+	height: 24px;
+}
+
+checkbox.round .wx-checkbox-input,
+checkbox.round .uni-checkbox-input {
+	border-radius: 100upx;
+}
+
+/* #endif */
+
+switch[checked]::before {
+	transform: scale(0, 0);
+}
+
+switch .wx-switch-input,
+switch .uni-switch-input {
+	border: none;
+	padding: 0 24px;
+	width: 48px;
+	height: 26px;
+	margin: 0;
+	border-radius: 100upx;
+}
+
+switch .wx-switch-input:not([class*="bg-"]),
+switch .uni-switch-input:not([class*="bg-"]) {
+	background: #8799a3 !important;
+}
+
+switch .wx-switch-input::after,
+switch .uni-switch-input::after {
+	margin: auto;
+	width: 26px;
+	height: 26px;
+	border-radius: 100upx;
+	left: 0upx;
+	top: 0upx;
+	bottom: 0upx;
+	position: absolute;
+	transform: scale(0.9, 0.9);
+	transition: all 0.1s ease-in-out 0s;
+}
+
+switch .wx-switch-input.wx-switch-input-checked::after,
+switch .uni-switch-input.uni-switch-input-checked::after {
+	margin: auto;
+	left: 22px;
+	box-shadow: none;
+	transform: scale(0.9, 0.9);
+}
+
+radio-group {
+	display: inline-block;
+}
+
+
+
+switch.radius .wx-switch-input::after,
+switch.radius .wx-switch-input,
+switch.radius .wx-switch-input::before,
+switch.radius .uni-switch-input::after,
+switch.radius .uni-switch-input,
+switch.radius .uni-switch-input::before {
+	border-radius: 10upx;
+}
+
+switch .wx-switch-input::before,
+radio.radio::before,
+checkbox .wx-checkbox-input::before,
+radio .wx-radio-input::before,
+switch .uni-switch-input::before,
+radio.radio::before,
+checkbox .uni-checkbox-input::before,
+radio .uni-radio-input::before {
+	display: none;
+}
+
+radio.radio[checked]::after,
+radio.radio .uni-radio-input-checked::after {
+	content: "";
+	background-color: transparent;
+	display: block;
+	position: absolute;
+	width: 8px;
+	height: 8px;
+	z-index: 999;
+	top: 0upx;
+	left: 0upx;
+	right: 0;
+	bottom: 0;
+	margin: auto;
+	border-radius: 200upx;
+	/* #ifndef MP */
+	border: 7px solid #ffffff !important;
+	/* #endif */
+
+	/* #ifdef MP */
+	border: 8px solid #ffffff !important;
+	/* #endif */
+}
+
+.switch-sex::after {
+	content: "\e71c";
+}
+
+.switch-sex::before {
+	content: "\e71a";
+}
+
+.switch-sex .wx-switch-input,
+.switch-sex .uni-switch-input {
+	background: #e54d42 !important;
+	border-color: #e54d42 !important;
+}
+
+.switch-sex[checked] .wx-switch-input,
+.switch-sex.checked .uni-switch-input {
+	background: #0081ff !important;
+	border-color: #0081ff !important;
+}
+
+switch.red[checked] .wx-switch-input.wx-switch-input-checked,
+checkbox.red[checked] .wx-checkbox-input,
+radio.red[checked] .wx-radio-input,
+switch.red.checked .uni-switch-input.uni-switch-input-checked,
+checkbox.red.checked .uni-checkbox-input,
+radio.red.checked .uni-radio-input {
+	background-color: #e54d42 !important;
+	border-color: #e54d42 !important;
+	color: #ffffff !important;
+}
+
+switch.orange[checked] .wx-switch-input,
+checkbox.orange[checked] .wx-checkbox-input,
+radio.orange[checked] .wx-radio-input,
+switch.orange.checked .uni-switch-input,
+checkbox.orange.checked .uni-checkbox-input,
+radio.orange.checked .uni-radio-input {
+	background-color: #f37b1d !important;
+	border-color: #f37b1d !important;
+	color: #ffffff !important;
+}
+
+switch.yellow[checked] .wx-switch-input,
+checkbox.yellow[checked] .wx-checkbox-input,
+radio.yellow[checked] .wx-radio-input,
+switch.yellow.checked .uni-switch-input,
+checkbox.yellow.checked .uni-checkbox-input,
+radio.yellow.checked .uni-radio-input {
+	background-color: #fbbd08 !important;
+	border-color: #fbbd08 !important;
+	color: #333333 !important;
+}
+
+switch.olive[checked] .wx-switch-input,
+checkbox.olive[checked] .wx-checkbox-input,
+radio.olive[checked] .wx-radio-input,
+switch.olive.checked .uni-switch-input,
+checkbox.olive.checked .uni-checkbox-input,
+radio.olive.checked .uni-radio-input {
+	background-color: #8dc63f !important;
+	border-color: #8dc63f !important;
+	color: #ffffff !important;
+}
+
+switch.green[checked] .wx-switch-input,
+switch[checked] .wx-switch-input,
+checkbox.green[checked] .wx-checkbox-input,
+checkbox[checked] .wx-checkbox-input,
+radio.green[checked] .wx-radio-input,
+radio[checked] .wx-radio-input,
+switch.green.checked .uni-switch-input,
+switch.checked .uni-switch-input,
+checkbox.green.checked .uni-checkbox-input,
+checkbox.checked .uni-checkbox-input,
+radio.green.checked .uni-radio-input,
+radio.checked .uni-radio-input {
+	background-color: #39b54a !important;
+	border-color: #39b54a !important;
+	color: #ffffff !important;
+	border-color: #39B54A !important;
+}
+
+switch.cyan[checked] .wx-switch-input,
+checkbox.cyan[checked] .wx-checkbox-input,
+radio.cyan[checked] .wx-radio-input,
+switch.cyan.checked .uni-switch-input,
+checkbox.cyan.checked .uni-checkbox-input,
+radio.cyan.checked .uni-radio-input {
+	background-color: #1cbbb4 !important;
+	border-color: #1cbbb4 !important;
+	color: #ffffff !important;
+}
+
+switch.blue[checked] .wx-switch-input,
+checkbox.blue[checked] .wx-checkbox-input,
+radio.blue[checked] .wx-radio-input,
+switch.blue.checked .uni-switch-input,
+checkbox.blue.checked .uni-checkbox-input,
+radio.blue.checked .uni-radio-input {
+	background-color: #0081ff !important;
+	border-color: #0081ff !important;
+	color: #ffffff !important;
+}
+
+switch.purple[checked] .wx-switch-input,
+checkbox.purple[checked] .wx-checkbox-input,
+radio.purple[checked] .wx-radio-input,
+switch.purple.checked .uni-switch-input,
+checkbox.purple.checked .uni-checkbox-input,
+radio.purple.checked .uni-radio-input {
+	background-color: #6739b6 !important;
+	border-color: #6739b6 !important;
+	color: #ffffff !important;
+}
+
+switch.mauve[checked] .wx-switch-input,
+checkbox.mauve[checked] .wx-checkbox-input,
+radio.mauve[checked] .wx-radio-input,
+switch.mauve.checked .uni-switch-input,
+checkbox.mauve.checked .uni-checkbox-input,
+radio.mauve.checked .uni-radio-input {
+	background-color: #9c26b0 !important;
+	border-color: #9c26b0 !important;
+	color: #ffffff !important;
+}
+
+switch.pink[checked] .wx-switch-input,
+checkbox.pink[checked] .wx-checkbox-input,
+radio.pink[checked] .wx-radio-input,
+switch.pink.checked .uni-switch-input,
+checkbox.pink.checked .uni-checkbox-input,
+radio.pink.checked .uni-radio-input {
+	background-color: #e03997 !important;
+	border-color: #e03997 !important;
+	color: #ffffff !important;
+}
+
+switch.brown[checked] .wx-switch-input,
+checkbox.brown[checked] .wx-checkbox-input,
+radio.brown[checked] .wx-radio-input,
+switch.brown.checked .uni-switch-input,
+checkbox.brown.checked .uni-checkbox-input,
+radio.brown.checked .uni-radio-input {
+	background-color: #a5673f !important;
+	border-color: #a5673f !important;
+	color: #ffffff !important;
+}
+
+switch.grey[checked] .wx-switch-input,
+checkbox.grey[checked] .wx-checkbox-input,
+radio.grey[checked] .wx-radio-input,
+switch.grey.checked .uni-switch-input,
+checkbox.grey.checked .uni-checkbox-input,
+radio.grey.checked .uni-radio-input {
+	background-color: #8799a3 !important;
+	border-color: #8799a3 !important;
+	color: #ffffff !important;
+}
+
+switch.gray[checked] .wx-switch-input,
+checkbox.gray[checked] .wx-checkbox-input,
+radio.gray[checked] .wx-radio-input,
+switch.gray.checked .uni-switch-input,
+checkbox.gray.checked .uni-checkbox-input,
+radio.gray.checked .uni-radio-input {
+	background-color: #f0f0f0 !important;
+	border-color: #f0f0f0 !important;
+	color: #333333 !important;
+}
+
+switch.black[checked] .wx-switch-input,
+checkbox.black[checked] .wx-checkbox-input,
+radio.black[checked] .wx-radio-input,
+switch.black.checked .uni-switch-input,
+checkbox.black.checked .uni-checkbox-input,
+radio.black.checked .uni-radio-input {
+	background-color: #333333 !important;
+	border-color: #333333 !important;
+	color: #ffffff !important;
+}
+
+switch.white[checked] .wx-switch-input,
+checkbox.white[checked] .wx-checkbox-input,
+radio.white[checked] .wx-radio-input,
+switch.white.checked .uni-switch-input,
+checkbox.white.checked .uni-checkbox-input,
+radio.white.checked .uni-radio-input {
+	background-color: #ffffff !important;
+	border-color: #ffffff !important;
+	color: #333333 !important;
+}
+
+/* ==================
+          边框
+ ==================== */
+
+/* -- 实线 -- */
+
+.solid,
+.solid-top,
+.solid-right,
+.solid-bottom,
+.solid-left,
+.solids,
+.solids-top,
+.solids-right,
+.solids-bottom,
+.solids-left,
+.dashed,
+.dashed-top,
+.dashed-right,
+.dashed-bottom,
+.dashed-left {
+	position: relative;
+}
+
+.solid::after,
+.solid-top::after,
+.solid-right::after,
+.solid-bottom::after,
+.solid-left::after,
+.solids::after,
+.solids-top::after,
+.solids-right::after,
+.solids-bottom::after,
+.solids-left::after,
+.dashed::after,
+.dashed-top::after,
+.dashed-right::after,
+.dashed-bottom::after,
+.dashed-left::after {
+	content: " ";
+	width: 200%;
+	height: 200%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: inherit;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	pointer-events: none;
+	box-sizing: border-box;
+}
+
+.solid::after {
+	border: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-top::after {
+	border-top: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-right::after {
+	border-right: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-bottom::after {
+	border-bottom: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-left::after {
+	border-left: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solids::after {
+	border: 8upx solid #eee;
+}
+
+.solids-top::after {
+	border-top: 8upx solid #eee;
+}
+
+.solids-right::after {
+	border-right: 8upx solid #eee;
+}
+
+.solids-bottom::after {
+	border-bottom: 8upx solid #eee;
+}
+
+.solids-left::after {
+	border-left: 8upx solid #eee;
+}
+
+/* -- 虚线 -- */
+
+.dashed::after {
+	border: 1upx dashed #ddd;
+}
+
+.dashed-top::after {
+	border-top: 1upx dashed #ddd;
+}
+
+.dashed-right::after {
+	border-right: 1upx dashed #ddd;
+}
+
+.dashed-bottom::after {
+	border-bottom: 1upx dashed #ddd;
+}
+
+.dashed-left::after {
+	border-left: 1upx dashed #ddd;
+}
+
+/* -- 阴影 -- */
+
+.shadow[class*='white'] {
+	--ShadowSize: 0 1upx 6upx;
+}
+
+.shadow-lg {
+	--ShadowSize: 0upx 40upx 100upx 0upx;
+}
+
+.shadow-warp {
+	position: relative;
+	box-shadow: 0 0 10upx rgba(0, 0, 0, 0.1);
+}
+
+.shadow-warp:before,
+.shadow-warp:after {
+	position: absolute;
+	content: "";
+	top: 20upx;
+	bottom: 30upx;
+	left: 20upx;
+	width: 50%;
+	box-shadow: 0 30upx 20upx rgba(0, 0, 0, 0.2);
+	transform: rotate(-3deg);
+	z-index: -1;
+}
+
+.shadow-warp:after {
+	right: 20upx;
+	left: auto;
+	transform: rotate(3deg);
+}
+
+.shadow-blur {
+	position: relative;
+}
+
+.shadow-blur::before {
+	content: "";
+	display: block;
+	background: inherit;
+	filter: blur(10upx);
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	top: 10upx;
+	left: 10upx;
+	z-index: -1;
+	opacity: 0.4;
+	transform-origin: 0 0;
+	border-radius: inherit;
+	transform: scale(1, 1);
+}
+
+/* ==================
+          按钮
+ ==================== */
+
+.cu-btn {
+	position: relative;
+	border: 0upx;
+	display: inline-flex;
+	align-items: center;
+	justify-content: center;
+	box-sizing: border-box;
+	padding: 0 30upx;
+	font-size: 28upx;
+	height: 64upx;
+	line-height: 1;
+	text-align: center;
+	text-decoration: none;
+	overflow: visible;
+	margin-left: initial;
+	transform: translate(0upx, 0upx);
+	margin-right: initial;
+}
+
+.cu-btn::after {
+	display: none;
+}
+
+.cu-btn:not([class*="bg-"]) {
+	background-color: #f0f0f0;
+}
+
+.cu-btn[class*="line"] {
+	background-color: transparent;
+}
+
+.cu-btn[class*="line"]::after {
+	content: " ";
+	display: block;
+	width: 200%;
+	height: 200%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border: 1upx solid currentColor;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	box-sizing: border-box;
+	border-radius: 12upx;
+	z-index: 1;
+	pointer-events: none;
+}
+
+.cu-btn.round[class*="line"]::after {
+	border-radius: 1000upx;
+}
+
+.cu-btn[class*="lines"]::after {
+	border: 6upx solid currentColor;
+}
+
+.cu-btn[class*="bg-"]::after {
+	display: none;
+}
+
+.cu-btn.sm {
+	padding: 0 20upx;
+	font-size: 20upx;
+	height: 48upx;
+}
+
+.cu-btn.smm {
+	padding: 0 15upx;
+	font-size: 15upx;
+	height: 30upx;
+}
+
+.cu-btn.lg {
+	padding: 0 40upx;
+	font-size: 32upx;
+	height: 80upx;
+}
+
+.cu-btn.cuIcon.sm {
+	width: 48upx;
+	height: 48upx;
+}
+
+.cu-btn.cuIcon {
+	width: 64upx;
+	height: 64upx;
+	border-radius: 500upx;
+	padding: 0;
+}
+
+button.cuIcon.lg {
+	width: 80upx;
+	height: 80upx;
+}
+
+.cu-btn.shadow-blur::before {
+	top: 4upx;
+	left: 4upx;
+	filter: blur(6upx);
+	opacity: 0.6;
+}
+
+.cu-btn.button-hover {
+	transform: translate(1upx, 1upx);
+}
+
+.block {
+	display: block;
+}
+
+.cu-btn.block {
+	display: flex;
+}
+
+.cu-btn[disabled] {
+	opacity: 0.6;
+	color: #ffffff;
+}
+
+/* ==================
+          徽章
+ ==================== */
+
+.cu-tag {
+	font-size: 24upx;
+	vertical-align: middle;
+	position: relative;
+	display: inline-flex;
+	align-items: center;
+	justify-content: center;
+	box-sizing: border-box;
+	padding: 0upx 16upx;
+	height: 48upx;
+	font-family: Helvetica Neue, Helvetica, sans-serif;
+	white-space: nowrap;
+}
+
+.cu-tag:not([class*="bg"]):not([class*="line"]) {
+	background-color: #f1f1f1;
+}
+
+.cu-tag[class*="line-"]::after {
+	content: " ";
+	width: 200%;
+	height: 200%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border: 1upx solid currentColor;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	box-sizing: border-box;
+	border-radius: inherit;
+	z-index: 1;
+	pointer-events: none;
+}
+
+.cu-tag.radius[class*="line"]::after {
+	border-radius: 12upx;
+}
+
+.cu-tag.round[class*="line"]::after {
+	border-radius: 1000upx;
+}
+
+.cu-tag[class*="line-"]::after {
+	border-radius: 0;
+}
+
+.cu-tag+.cu-tag {
+	margin-left: 10upx;
+}
+
+.cu-tag.sm {
+	font-size: 20upx;
+	padding: 0upx 12upx;
+	height: 32upx;
+}
+
+.cu-capsule {
+	display: inline-flex;
+	vertical-align: middle;
+}
+
+.cu-capsule+.cu-capsule {
+	margin-left: 10upx;
+}
+
+.cu-capsule .cu-tag {
+	margin: 0;
+}
+
+.cu-capsule .cu-tag[class*="line-"]:last-child::after {
+	border-left: 0upx solid transparent;
+}
+
+.cu-capsule .cu-tag[class*="line-"]:first-child::after {
+	border-right: 0upx solid transparent;
+}
+
+.cu-capsule.radius .cu-tag:first-child {
+	border-top-left-radius: 6upx;
+	border-bottom-left-radius: 6upx;
+}
+
+.cu-capsule.radius .cu-tag:last-child::after,
+.cu-capsule.radius .cu-tag[class*="line-"] {
+	border-top-right-radius: 12upx;
+	border-bottom-right-radius: 12upx;
+}
+
+.cu-capsule.round .cu-tag:first-child {
+	border-top-left-radius: 200upx;
+	border-bottom-left-radius: 200upx;
+	text-indent: 4upx;
+}
+
+.cu-capsule.round .cu-tag:last-child::after,
+.cu-capsule.round .cu-tag:last-child {
+	border-top-right-radius: 200upx;
+	border-bottom-right-radius: 200upx;
+	text-indent: -4upx;
+}
+
+.cu-tag.badge {
+	border-radius: 200upx;
+	position: absolute;
+	top: -10upx;
+	right: -10upx;
+	font-size: 20upx;
+	padding: 0upx 10upx;
+	height: 28upx;
+	color: #ffffff;
+}
+
+.cu-tag.badge:not([class*="bg-"]) {
+	background-color: #dd514c;
+}
+
+.cu-tag:empty:not([class*="cuIcon-"]) {
+	padding: 0upx;
+	width: 16upx;
+	height: 16upx;
+	top: -4upx;
+	right: -4upx;
+}
+
+.cu-tag[class*="cuIcon-"] {
+	width: 32upx;
+	height: 32upx;
+	top: -4upx;
+	right: -4upx;
+}
+
+/* ==================
+          头像
+ ==================== */
+
+.cu-avatar {
+	font-variant: small-caps;
+	margin: 0;
+	padding: 0;
+	display: inline-flex;
+	text-align: center;
+	justify-content: center;
+	align-items: center;
+	background-color: #ccc;
+	color: #ffffff;
+	white-space: nowrap;
+	position: relative;
+	width: 64upx;
+	height: 64upx;
+	background-size: cover;
+	background-position: center;
+	vertical-align: middle;
+	font-size: 1.5em;
+}
+
+.cu-avatar.sm {
+	width: 48upx;
+	height: 48upx;
+	font-size: 1em;
+}
+
+.cu-avatar.lg {
+	width: 96upx;
+	height: 96upx;
+	font-size: 2em;
+}
+
+.cu-avatar.xl {
+	width: 128upx;
+	height: 128upx;
+	font-size: 2.5em;
+}
+
+.cu-avatar .avatar-text {
+	font-size: 0.4em;
+}
+
+.cu-avatar-group {
+	direction: rtl;
+	unicode-bidi: bidi-override;
+	padding: 0 10upx 0 40upx;
+	display: inline-block;
+}
+
+.cu-avatar-group .cu-avatar {
+	margin-left: -30upx;
+	border: 4upx solid #f1f1f1;
+	vertical-align: middle;
+}
+
+.cu-avatar-group .cu-avatar.sm {
+	margin-left: -20upx;
+	border: 1upx solid #f1f1f1;
+}
+
+/* ==================
+         进度条
+ ==================== */
+
+.cu-progress {
+	overflow: hidden;
+	height: 28upx;
+	background-color: #ebeef5;
+	display: inline-flex;
+	align-items: center;
+	width: 100%;
+}
+
+.cu-progress+view,
+.cu-progress+text {
+	line-height: 1;
+}
+
+.cu-progress.xs {
+	height: 10upx;
+}
+
+.cu-progress.sm {
+	height: 20upx;
+}
+
+.cu-progress view {
+	width: 0;
+	height: 100%;
+	align-items: center;
+	display: flex;
+	justify-items: flex-end;
+	justify-content: space-around;
+	font-size: 20upx;
+	color: #ffffff;
+	transition: width 0.6s ease;
+}
+
+.cu-progress text {
+	align-items: center;
+	display: flex;
+	font-size: 20upx;
+	color: #333333;
+	text-indent: 10upx;
+}
+
+.cu-progress.text-progress {
+	padding-right: 60upx;
+}
+
+.cu-progress.striped view {
+	background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+	background-size: 72upx 72upx;
+}
+
+.cu-progress.active view {
+	animation: progress-stripes 2s linear infinite;
+}
+
+@keyframes progress-stripes {
+	from {
+		background-position: 72upx 0;
+	}
+
+	to {
+		background-position: 0 0;
+	}
+}
+
+/* ==================
+          加载
+ ==================== */
+
+.cu-load {
+	display: block;
+	line-height: 3em;
+	text-align: center;
+}
+
+.cu-load::before {
+	font-family: "cuIcon";
+	display: inline-block;
+	margin-right: 6upx;
+}
+
+.cu-load.loading::before {
+	content: "\e67a";
+	animation: cuIcon-spin 2s infinite linear;
+}
+
+.cu-load.loading::after {
+	content: "加载中...";
+}
+
+.cu-load.over::before {
+	content: "\e64a";
+}
+
+.cu-load.over::after {
+	content: "没有更多了";
+}
+
+.cu-load.erro::before {
+	content: "\e658";
+}
+
+.cu-load.erro::after {
+	content: "加载失败";
+}
+
+.cu-load.load-cuIcon::before {
+	font-size: 32upx;
+}
+
+.cu-load.load-cuIcon::after {
+	display: none;
+}
+
+.cu-load.load-cuIcon.over {
+	display: none;
+}
+
+.cu-load.load-modal {
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 140upx;
+	left: 0;
+	margin: auto;
+	width: 260upx;
+	height: 260upx;
+	background-color: #ffffff;
+	border-radius: 10upx;
+	box-shadow: 0 0 0upx 2000upx rgba(0, 0, 0, 0.5);
+	display: flex;
+	align-items: center;
+	flex-direction: column;
+	justify-content: center;
+	font-size: 28upx;
+	z-index: 9999;
+	line-height: 2.4em;
+}
+
+.cu-load.load-modal [class*="cuIcon-"] {
+	font-size: 60upx;
+}
+
+.cu-load.load-modal image {
+	width: 70upx;
+	height: 70upx;
+}
+
+.cu-load.load-modal::after {
+	content: "";
+	position: absolute;
+	background-color: #ffffff;
+	border-radius: 50%;
+	width: 200upx;
+	height: 200upx;
+	font-size: 10px;
+	border-top: 6upx solid rgba(0, 0, 0, 0.05);
+	border-right: 6upx solid rgba(0, 0, 0, 0.05);
+	border-bottom: 6upx solid rgba(0, 0, 0, 0.05);
+	border-left: 6upx solid #f37b1d;
+	animation: cuIcon-spin 1s infinite linear;
+	z-index: -1;
+}
+
+.load-progress {
+	pointer-events: none;
+	top: 0;
+	position: fixed;
+	width: 100%;
+	left: 0;
+	z-index: 2000;
+}
+
+.load-progress.hide {
+	display: none;
+}
+
+.load-progress .load-progress-bar {
+	position: relative;
+	width: 100%;
+	height: 4upx;
+	overflow: hidden;
+	transition: all 200ms ease 0s;
+}
+
+.load-progress .load-progress-spinner {
+	position: absolute;
+	top: 10upx;
+	right: 10upx;
+	z-index: 2000;
+	display: block;
+}
+
+.load-progress .load-progress-spinner::after {
+	content: "";
+	display: block;
+	width: 24upx;
+	height: 24upx;
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+	border: solid 4upx transparent;
+	border-top-color: inherit;
+	border-left-color: inherit;
+	border-radius: 50%;
+	-webkit-animation: load-progress-spinner 0.4s linear infinite;
+	animation: load-progress-spinner 0.4s linear infinite;
+}
+
+@-webkit-keyframes load-progress-spinner {
+	0% {
+		-webkit-transform: rotate(0);
+		transform: rotate(0);
+	}
+
+	100% {
+		-webkit-transform: rotate(360deg);
+		transform: rotate(360deg);
+	}
+}
+
+@keyframes load-progress-spinner {
+	0% {
+		-webkit-transform: rotate(0);
+		transform: rotate(0);
+	}
+
+	100% {
+		-webkit-transform: rotate(360deg);
+		transform: rotate(360deg);
+	}
+}
+
+/* ==================
+          列表
+ ==================== */
+.grayscale {
+	filter: grayscale(1);
+}
+
+.cu-list+.cu-list {
+	margin-top: 30upx
+}
+
+.cu-list>.cu-item {
+	transition: all .6s ease-in-out 0s;
+	transform: translateX(0upx)
+}
+
+.cu-list>.cu-item.move-cur {
+	transform: translateX(-260upx)
+}
+
+.cu-list>.cu-item .move {
+	position: absolute;
+	right: 0;
+	display: flex;
+	width: 260upx;
+	height: 100%;
+	transform: translateX(100%)
+}
+
+.cu-list>.cu-item .move view {
+	display: flex;
+	flex: 1;
+	justify-content: center;
+	align-items: center
+}
+
+.cu-list.menu-avatar {
+	overflow: hidden;
+}
+
+.cu-list.menu-avatar>.cu-item {
+	position: relative;
+	display: flex;
+	padding-right: 10upx;
+	height: 140upx;
+	background-color: #ffffff;
+	justify-content: flex-end;
+	align-items: center
+}
+
+.cu-list.menu-avatar>.cu-item>.cu-avatar {
+	position: absolute;
+	left: 30upx
+}
+
+.cu-list.menu-avatar>.cu-item .flex .text-cut {
+	max-width: 510upx
+}
+
+.cu-list.menu-avatar>.cu-item .content {
+	position: absolute;
+	left: 146upx;
+	width: calc(100% - 96upx - 60upx - 120upx - 20upx);
+	line-height: 1.6em;
+}
+
+.cu-list.menu-avatar>.cu-item .content.flex-sub {
+	width: calc(100% - 96upx - 60upx - 20upx);
+}
+
+.cu-list.menu-avatar>.cu-item .content>view:first-child {
+	font-size: 30upx;
+	display: flex;
+	align-items: center
+}
+
+.cu-list.menu-avatar>.cu-item .content .cu-tag.sm {
+	display: inline-block;
+	margin-left: 10upx;
+	height: 28upx;
+	font-size: 16upx;
+	line-height: 32upx
+}
+
+.cu-list.menu-avatar>.cu-item .action {
+	width: 100upx;
+	text-align: center
+}
+
+.cu-list.menu-avatar>.cu-item .action view+view {
+	margin-top: 10upx
+}
+
+.cu-list.menu-avatar.comment>.cu-item .content {
+	position: relative;
+	left: 0;
+	width: auto;
+	flex: 1;
+}
+
+.cu-list.menu-avatar.comment>.cu-item {
+	padding: 30upx 30upx 30upx 120upx;
+	height: auto
+}
+
+.cu-list.menu-avatar.comment .cu-avatar {
+	align-self: flex-start
+}
+
+.cu-list.menu>.cu-item {
+	position: relative;
+	display: flex;
+	padding: 0 30upx;
+	min-height: 100upx;
+	background-color: #ffffff;
+	justify-content: space-between;
+	align-items: center
+}
+
+.cu-list.menu>.cu-item:last-child:after {
+	border: none
+}
+
+.cu-list.menu-avatar>.cu-item:after,
+.cu-list.menu>.cu-item:after {
+	position: absolute;
+	top: 0;
+	left: 0;
+	box-sizing: border-box;
+	width: 200%;
+	height: 200%;
+	border-bottom: 1upx solid #ddd;
+	border-radius: inherit;
+	content: " ";
+	transform: scale(.5);
+	transform-origin: 0 0;
+	pointer-events: none
+}
+
+.cu-list.menu>.cu-item.grayscale {
+	background-color: #f5f5f5
+}
+
+.cu-list.menu>.cu-item.cur {
+	background-color: #fcf7e9
+}
+
+.cu-list.menu>.cu-item.arrow {
+	padding-right: 90upx
+}
+
+.cu-list.menu>.cu-item.arrow:before {
+	position: absolute;
+	top: 0;
+	right: 30upx;
+	bottom: 0;
+	display: block;
+	margin: auto;
+	width: 30upx;
+	height: 30upx;
+	color: #8799a3;
+	content: "\e6a3";
+	text-align: center;
+	font-size: 34upx;
+	font-family: cuIcon;
+	line-height: 30upx
+}
+
+.cu-list.menu>.cu-item button.content {
+	padding: 0;
+	background-color: transparent;
+	justify-content: flex-start
+}
+
+.cu-list.menu>.cu-item button.content:after {
+	display: none
+}
+
+.cu-list.menu>.cu-item .cu-avatar-group .cu-avatar {
+	border-color: #ffffff
+}
+
+.cu-list.menu>.cu-item .content>view:first-child {
+	display: flex;
+	align-items: center
+}
+
+.cu-list.menu>.cu-item .content>text[class*=cuIcon] {
+	display: inline-block;
+	margin-right: 10upx;
+	width: 1.6em;
+	text-align: center
+}
+
+.cu-list.menu>.cu-item .content>image {
+	display: inline-block;
+	margin-right: 10upx;
+	width: 1.6em;
+	height: 1.6em;
+	vertical-align: middle
+}
+
+.cu-list.menu>.cu-item .content {
+	font-size: 30upx;
+	line-height: 1.6em;
+	flex: 1
+}
+
+.cu-list.menu>.cu-item .content .cu-tag.sm {
+	display: inline-block;
+	margin-left: 10upx;
+	height: 28upx;
+	font-size: 16upx;
+	line-height: 32upx
+}
+
+.cu-list.menu>.cu-item .action .cu-tag:empty {
+	right: 10upx
+}
+
+.cu-list.menu {
+	display: block;
+	overflow: hidden
+}
+
+.cu-list.menu.sm-border>.cu-item:after {
+	left: 30upx;
+	width: calc(200% - 120upx)
+}
+
+.cu-list.grid>.cu-item {
+	position: relative;
+	display: flex;
+	padding: 20upx 0 30upx;
+	transition-duration: 0s;
+	flex-direction: column
+}
+
+.cu-list.grid>.cu-item:after {
+	position: absolute;
+	top: 0;
+	left: 0;
+	box-sizing: border-box;
+	width: 200%;
+	height: 200%;
+	border-right: 1px solid rgba(0, 0, 0, .1);
+	border-bottom: 1px solid rgba(0, 0, 0, .1);
+	border-radius: inherit;
+	content: " ";
+	transform: scale(.5);
+	transform-origin: 0 0;
+	pointer-events: none
+}
+
+.cu-list.grid>.cu-item text {
+	display: block;
+	margin-top: 10upx;
+	color: #888;
+	font-size: 26upx;
+	line-height: 40upx
+}
+
+.cu-list.grid>.cu-item [class*=cuIcon] {
+	position: relative;
+	display: block;
+	margin-top: 20upx;
+	width: 100%;
+	font-size: 48upx
+}
+
+.cu-list.grid>.cu-item .cu-tag {
+	right: auto;
+	left: 50%;
+	margin-left: 20upx
+}
+
+.cu-list.grid {
+	background-color: #ffffff;
+	text-align: center
+}
+
+.cu-list.grid.no-border>.cu-item {
+	padding-top: 10upx;
+	padding-bottom: 20upx
+}
+
+.cu-list.grid.no-border>.cu-item:after {
+	border: none
+}
+
+.cu-list.grid.no-border {
+	padding: 20upx 10upx
+}
+
+.cu-list.grid.col-3>.cu-item:nth-child(3n):after,
+.cu-list.grid.col-4>.cu-item:nth-child(4n):after,
+.cu-list.grid.col-5>.cu-item:nth-child(5n):after {
+	border-right-width: 0
+}
+
+.cu-list.card-menu {
+	overflow: hidden;
+	margin-right: 30upx;
+	margin-left: 30upx;
+	border-radius: 20upx
+}
+
+
+/* ==================
+          操作条
+ ==================== */
+
+.cu-bar {
+	display: flex;
+	position: relative;
+	align-items: center;
+	min-height: 100upx;
+	justify-content: space-between;
+}
+
+.cu-bar .action {
+	display: flex;
+	align-items: center;
+	height: 100%;
+	justify-content: center;
+	max-width: 100%;
+}
+
+.cu-bar .action.border-title {
+	position: relative;
+	top: -10upx;
+}
+
+.cu-bar .action.border-title text[class*="bg-"]:last-child {
+	position: absolute;
+	bottom: -0.5rem;
+	min-width: 2rem;
+	height: 6upx;
+	left: 0;
+}
+
+.cu-bar .action.sub-title {
+	position: relative;
+	top: -0.2rem;
+}
+
+.cu-bar .action.sub-title text {
+	position: relative;
+	z-index: 1;
+}
+
+.cu-bar .action.sub-title text[class*="bg-"]:last-child {
+	position: absolute;
+	display: inline-block;
+	bottom: -0.2rem;
+	border-radius: 6upx;
+	width: 100%;
+	height: 0.6rem;
+	left: 0.6rem;
+	opacity: 0.3;
+	z-index: 0;
+}
+
+.cu-bar .action.sub-title text[class*="text-"]:last-child {
+	position: absolute;
+	display: inline-block;
+	bottom: -0.7rem;
+	left: 0.5rem;
+	opacity: 0.2;
+	z-index: 0;
+	text-align: right;
+	font-weight: 900;
+	font-size: 36upx;
+}
+
+.cu-bar.justify-center .action.border-title text:last-child,
+.cu-bar.justify-center .action.sub-title text:last-child {
+	left: 0;
+	right: 0;
+	margin: auto;
+	text-align: center;
+}
+
+.cu-bar .action:first-child {
+	margin-left: 30upx;
+	font-size: 30upx;
+}
+
+.cu-bar .action text.text-cut {
+	text-align: left;
+	width: 100%;
+}
+
+.cu-bar .cu-avatar:first-child {
+	margin-left: 20upx;
+}
+
+.cu-bar .action:first-child>text[class*="cuIcon-"] {
+	margin-left: -0.3em;
+	margin-right: 0.3em;
+}
+
+.cu-bar .action:last-child {
+	margin-right: 30upx;
+}
+
+.cu-bar .action>text[class*="cuIcon-"],
+.cu-bar .action>view[class*="cuIcon-"] {
+	font-size: 36upx;
+}
+
+.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] {
+	margin-left: 0.5em;
+}
+
+.cu-bar .content {
+	position: absolute;
+	text-align: center;
+	width: calc(100% - 340upx);
+	left: 0;
+	right: 0;
+	bottom: 0;
+	top: 0;
+	margin: auto;
+	height: 60upx;
+	font-size: 32upx;
+	line-height: 60upx;
+	cursor: none;
+	pointer-events: none;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+}
+
+.cu-bar.ios .content {
+	bottom: 7px;
+	height: 30px;
+	font-size: 32upx;
+	line-height: 30px;
+}
+
+.cu-bar.btn-group {
+	justify-content: space-around;
+}
+
+.cu-bar.btn-group button {
+	padding: 20upx 32upx;
+}
+
+.cu-bar.btn-group button {
+	flex: 1;
+	margin: 0 20upx;
+	max-width: 50%;
+}
+
+.cu-bar .search-form {
+	background-color: #f5f5f5;
+	line-height: 64upx;
+	height: 64upx;
+	font-size: 24upx;
+	color: #333333;
+	flex: 1;
+	display: flex;
+	align-items: center;
+	margin: 0 30upx;
+}
+
+.cu-bar .search-form+.action {
+	margin-right: 30upx;
+}
+
+.cu-bar .search-form input {
+	flex: 1;
+	padding-right: 30upx;
+	height: 64upx;
+	line-height: 64upx;
+	font-size: 26upx;
+	background-color: transparent;
+}
+
+.cu-bar .search-form [class*="cuIcon-"] {
+	margin: 0 0.5em 0 0.8em;
+}
+
+.cu-bar .search-form [class*="cuIcon-"]::before {
+	top: 0upx;
+}
+
+.cu-bar.fixed,
+.nav.fixed {
+	position: fixed;
+	width: 100%;
+	top: 0;
+	z-index: 1024;
+	box-shadow: 0 1upx 6upx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.foot {
+	position: fixed;
+	width: 100%;
+	bottom: 0;
+	z-index: 1024;
+	box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.tabbar {
+	padding: 0;
+	height: calc(100upx + env(safe-area-inset-bottom) / 2);
+	padding-bottom: calc(env(safe-area-inset-bottom) / 2);
+}
+
+.cu-tabbar-height {
+	min-height: 100upx;
+	height: calc(100upx + env(safe-area-inset-bottom) / 2);
+}
+
+.cu-bar.tabbar.shadow {
+	box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.tabbar .action {
+	font-size: 22upx;
+	position: relative;
+	flex: 1;
+	text-align: center;
+	padding: 0;
+	display: block;
+	height: auto;
+	line-height: 1;
+	margin: 0;
+	background-color: inherit;
+	overflow: initial;
+}
+
+.cu-bar.tabbar.shop .action {
+	width: 140upx;
+	flex: initial;
+}
+
+.cu-bar.tabbar .action.add-action {
+	position: relative;
+	z-index: 2;
+	padding-top: 50upx;
+}
+
+.cu-bar.tabbar .action.add-action [class*="cuIcon-"] {
+	position: absolute;
+	width: 70upx;
+	z-index: 2;
+	height: 70upx;
+	border-radius: 50%;
+	line-height: 70upx;
+	font-size: 50upx;
+	top: -35upx;
+	left: 0;
+	right: 0;
+	margin: auto;
+	padding: 0;
+}
+
+.cu-bar.tabbar .action.add-action::after {
+	content: "";
+	position: absolute;
+	width: 100upx;
+	height: 100upx;
+	top: -50upx;
+	left: 0;
+	right: 0;
+	margin: auto;
+	box-shadow: 0 -3upx 8upx rgba(0, 0, 0, 0.08);
+	border-radius: 50upx;
+	background-color: inherit;
+	z-index: 0;
+}
+
+.cu-bar.tabbar .action.add-action::before {
+	content: "";
+	position: absolute;
+	width: 100upx;
+	height: 30upx;
+	bottom: 30upx;
+	left: 0;
+	right: 0;
+	margin: auto;
+	background-color: inherit;
+	z-index: 1;
+}
+
+.cu-bar.tabbar .btn-group {
+	flex: 1;
+	display: flex;
+	justify-content: space-around;
+	align-items: center;
+	padding: 0 10upx;
+}
+
+.cu-bar.tabbar button.action::after {
+	border: 0;
+}
+
+.cu-bar.tabbar .action [class*="cuIcon-"] {
+	width: 100upx;
+	position: relative;
+	display: block;
+	height: auto;
+	margin: 0 auto 10upx;
+	text-align: center;
+	font-size: 40upx;
+}
+
+.cu-bar.tabbar .action .cuIcon-cu-image {
+	margin: 0 auto;
+}
+
+.cu-bar.tabbar .action .cuIcon-cu-image image {
+	width: 50upx;
+	height: 50upx;
+	display: inline-block;
+}
+
+.cu-bar.tabbar .submit {
+	align-items: center;
+	display: flex;
+	justify-content: center;
+	text-align: center;
+	position: relative;
+	flex: 2;
+	align-self: stretch;
+}
+
+.cu-bar.tabbar .submit:last-child {
+	flex: 2.6;
+}
+
+.cu-bar.tabbar .submit+.submit {
+	flex: 2;
+}
+
+.cu-bar.tabbar.border .action::before {
+	content: " ";
+	width: 200%;
+	height: 200%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	border-right: 1upx solid rgba(0, 0, 0, 0.1);
+	z-index: 3;
+}
+
+.cu-bar.tabbar.border .action:last-child:before {
+	display: none;
+}
+
+.cu-bar.input {
+	padding-right: 20upx;
+	background-color: #ffffff;
+}
+
+.cu-bar.input input {
+	overflow: initial;
+	line-height: 64upx;
+	height: 64upx;
+	min-height: 64upx;
+	flex: 1;
+	font-size: 30upx;
+	margin: 0 20upx;
+}
+
+.cu-bar.input .action {
+	margin-left: 20upx;
+}
+
+.cu-bar.input .action [class*="cuIcon-"] {
+	font-size: 48upx;
+}
+
+.cu-bar.input input+.action {
+	margin-right: 20upx;
+	margin-left: 0upx;
+}
+
+.cu-bar.input .action:first-child [class*="cuIcon-"] {
+	margin-left: 0upx;
+}
+
+.cu-custom {
+	display: block;
+	position: relative;
+}
+
+.cu-custom .cu-bar .content {
+	width: calc(100% - 440upx);
+}
+
+/* #ifdef MP-ALIPAY */
+.cu-custom .cu-bar .action .cuIcon-back {
+	opacity: 0;
+}
+
+/* #endif */
+
+.cu-custom .cu-bar .content image {
+	height: 60upx;
+	width: 240upx;
+}
+
+.cu-custom .cu-bar {
+	min-height: 0px;
+	/* #ifdef MP-WEIXIN */
+	padding-right: 220upx;
+	/* #endif */
+	/* #ifdef MP-ALIPAY */
+	padding-right: 150upx;
+	/* #endif */
+	box-shadow: 0upx 0upx 0upx;
+	z-index: 9999;
+}
+
+.cu-custom .cu-bar .border-custom {
+	position: relative;
+	background: rgba(0, 0, 0, 0.15);
+	border-radius: 1000upx;
+	height: 30px;
+}
+
+.cu-custom .cu-bar .border-custom::after {
+	content: " ";
+	width: 200%;
+	height: 200%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: inherit;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	pointer-events: none;
+	box-sizing: border-box;
+	border: 1upx solid #ffffff;
+	opacity: 0.5;
+}
+
+.cu-custom .cu-bar .border-custom::before {
+	content: " ";
+	width: 1upx;
+	height: 110%;
+	position: absolute;
+	top: 22.5%;
+	left: 0;
+	right: 0;
+	margin: auto;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	pointer-events: none;
+	box-sizing: border-box;
+	opacity: 0.6;
+	background-color: #ffffff;
+}
+
+.cu-custom .cu-bar .border-custom text {
+	display: block;
+	flex: 1;
+	margin: auto !important;
+	text-align: center;
+	font-size: 34upx;
+}
+
+/* ==================
+         导航栏
+ ==================== */
+
+.nav {
+	white-space: nowrap;
+}
+
+::-webkit-scrollbar {
+	display: none;
+}
+
+.nav .cu-item {
+	height: 90upx;
+	display: inline-block;
+	line-height: 90upx;
+	margin: 0 10upx;
+	padding: 0 20upx;
+}
+
+.nav .cu-item.cur {
+	border-bottom: 4upx solid;
+}
+
+/* ==================
+         时间轴
+ ==================== */
+
+.cu-timeline {
+	display: block;
+	background-color: #ffffff;
+}
+
+.cu-timeline .cu-time {
+	width: 120upx;
+	text-align: center;
+	padding: 20upx 0;
+	font-size: 26upx;
+	color: #888;
+	display: block;
+}
+
+.cu-timeline>.cu-item {
+	padding: 30upx 30upx 30upx 120upx;
+	position: relative;
+	display: block;
+	z-index: 0;
+}
+
+.cu-timeline>.cu-item:not([class*="text-"]) {
+	color: #ccc;
+}
+
+.cu-timeline>.cu-item::after {
+	content: "";
+	display: block;
+	position: absolute;
+	width: 1upx;
+	background-color: #ddd;
+	left: 60upx;
+	height: 100%;
+	top: 0;
+	z-index: 8;
+}
+
+.cu-timeline>.cu-item::before {
+	font-family: "cuIcon";
+	display: block;
+	position: absolute;
+	top: 36upx;
+	z-index: 9;
+	background-color: #ffffff;
+	width: 50upx;
+	height: 50upx;
+	text-align: center;
+	border: none;
+	line-height: 50upx;
+	left: 36upx;
+}
+
+.cu-timeline>.cu-item:not([class*="cuIcon-"])::before {
+	content: "\e763";
+}
+
+.cu-timeline>.cu-item[class*="cuIcon-"]::before {
+	background-color: #ffffff;
+	width: 50upx;
+	height: 50upx;
+	text-align: center;
+	border: none;
+	line-height: 50upx;
+	left: 36upx;
+}
+
+.cu-timeline>.cu-item>.content {
+	padding: 30upx;
+	border-radius: 6upx;
+	display: block;
+	line-height: 1.6;
+}
+
+.cu-timeline>.cu-item>.content:not([class*="bg-"]) {
+	background-color: #f1f1f1;
+	color: #333333;
+}
+
+.cu-timeline>.cu-item>.content+.content {
+	margin-top: 20upx;
+}
+
+/* ==================
+         聊天
+ ==================== */
+
+.cu-chat {
+	display: flex;
+	flex-direction: column;
+}
+
+.cu-chat .cu-item {
+	display: flex;
+	padding: 30upx 30upx 70upx;
+	position: relative;
+}
+
+.cu-chat .cu-item>.cu-avatar {
+	width: 80upx;
+	height: 80upx;
+}
+
+.cu-chat .cu-item>.main {
+	max-width: calc(100% - 260upx);
+	margin: 0 40upx;
+	display: flex;
+	align-items: center;
+}
+
+.cu-chat .cu-item>image {
+	height: 320upx;
+}
+
+.cu-chat .cu-item>.main .content {
+	padding: 20upx;
+	border-radius: 6upx;
+	display: inline-flex;
+	max-width: 100%;
+	align-items: center;
+	font-size: 30upx;
+	position: relative;
+	min-height: 80upx;
+	line-height: 40upx;
+	text-align: left;
+}
+
+.cu-chat .cu-item>.main .content:not([class*="bg-"]) {
+	background-color: #ffffff;
+	color: #333333;
+}
+
+.cu-chat .cu-item .date {
+	position: absolute;
+	font-size: 24upx;
+	color: #8799a3;
+	width: calc(100% - 320upx);
+	bottom: 20upx;
+	left: 160upx;
+}
+
+.cu-chat .cu-item .action {
+	padding: 0 30upx;
+	display: flex;
+	align-items: center;
+}
+
+.cu-chat .cu-item>.main .content::after {
+	content: "";
+	top: 27upx;
+	transform: rotate(45deg);
+	position: absolute;
+	z-index: 100;
+	display: inline-block;
+	overflow: hidden;
+	width: 24upx;
+	height: 24upx;
+	left: -12upx;
+	right: initial;
+	background-color: inherit;
+}
+
+.cu-chat .cu-item.self>.main .content::after {
+	left: auto;
+	right: -12upx;
+}
+
+.cu-chat .cu-item>.main .content::before {
+	content: "";
+	top: 30upx;
+	transform: rotate(45deg);
+	position: absolute;
+	z-index: -1;
+	display: inline-block;
+	overflow: hidden;
+	width: 24upx;
+	height: 24upx;
+	left: -12upx;
+	right: initial;
+	background-color: inherit;
+	filter: blur(5upx);
+	opacity: 0.3;
+}
+
+.cu-chat .cu-item>.main .content:not([class*="bg-"])::before {
+	background-color: #333333;
+	opacity: 0.1;
+}
+
+.cu-chat .cu-item.self>.main .content::before {
+	left: auto;
+	right: -12upx;
+}
+
+.cu-chat .cu-item.self {
+	justify-content: flex-end;
+	text-align: right;
+}
+
+.cu-chat .cu-info {
+	display: inline-block;
+	margin: 20upx auto;
+	font-size: 24upx;
+	padding: 8upx 12upx;
+	background-color: rgba(0, 0, 0, 0.2);
+	border-radius: 6upx;
+	color: #ffffff;
+	max-width: 400upx;
+	line-height: 1.4;
+}
+
+/* ==================
+         卡片
+ ==================== */
+
+.cu-card {
+	display: block;
+	overflow: hidden;
+}
+
+.cu-card>.cu-item {
+	display: block;
+	background-color: #ffffff;
+	overflow: hidden;
+	border-radius: 10upx;
+	margin: 30upx;
+}
+
+.cu-card>.cu-item.shadow-blur {
+	overflow: initial;
+}
+
+.cu-card.no-card>.cu-item {
+	margin: 0upx;
+	border-radius: 0upx;
+}
+
+.cu-card .grid.grid-square {
+	margin-bottom: -20upx;
+}
+
+.cu-card.case .image {
+	position: relative;
+}
+
+.cu-card.case .image image {
+	width: 100%;
+}
+
+.cu-card.case .image .cu-tag {
+	position: absolute;
+	right: 0;
+	top: 0;
+}
+
+.cu-card.case .image .cu-bar {
+	position: absolute;
+	bottom: 0;
+	width: 100%;
+	background-color: transparent;
+	padding: 0upx 30upx;
+}
+
+.cu-card.case.no-card .image {
+	margin: 30upx 30upx 0;
+	overflow: hidden;
+	border-radius: 10upx;
+}
+
+.cu-card.dynamic {
+	display: block;
+}
+
+.cu-card.dynamic>.cu-item {
+	display: block;
+	background-color: #ffffff;
+	overflow: hidden;
+}
+
+.cu-card.dynamic>.cu-item>.text-content {
+	padding: 0 30upx 0;
+	max-height: 6.4em;
+	overflow: hidden;
+	font-size: 30upx;
+	margin-bottom: 20upx;
+}
+
+.cu-card.dynamic>.cu-item .square-img {
+	width: 100%;
+	height: 200upx;
+	border-radius: 6upx;
+}
+
+.cu-card.dynamic>.cu-item .only-img {
+	width: 100%;
+	height: 320upx;
+	border-radius: 6upx;
+}
+
+/* card.dynamic>.cu-item .comment {
+  padding: 20upx;
+  background-color: #f1f1f1;
+  margin: 0 30upx 30upx;
+  border-radius: 6upx;
+} */
+
+.cu-card.article {
+	display: block;
+}
+
+.cu-card.article>.cu-item {
+	padding-bottom: 30upx;
+}
+
+.cu-card.article>.cu-item .title {
+	font-size: 30upx;
+	font-weight: 900;
+	color: #333333;
+	line-height: 100upx;
+	padding: 0 30upx;
+}
+
+.cu-card.article>.cu-item .content {
+	display: flex;
+	padding: 0 30upx;
+}
+
+.cu-card.article>.cu-item .content>image {
+	width: 240upx;
+	height: 6.4em;
+	margin-right: 20upx;
+	border-radius: 6upx;
+}
+
+.cu-card.article>.cu-item .content .desc {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+}
+
+.cu-card.article>.cu-item .content .text-content {
+	font-size: 28upx;
+	color: #888;
+	height: 4.8em;
+	overflow: hidden;
+}
+
+/* ==================
+         表单
+ ==================== */
+
+.cu-form-group {
+	background-color: #ffffff;
+	padding: 1upx 30upx;
+	display: flex;
+	align-items: center;
+	min-height: 100upx;
+	justify-content: space-between;
+}
+
+.cu-form-group+.cu-form-group {
+	border-top: 1upx solid #eee;
+}
+
+.cu-form-group .title {
+	text-align: justify;
+	padding-right: 30upx;
+	font-size: 30upx;
+	position: relative;
+	height: 60upx;
+	line-height: 60upx;
+}
+
+.cu-form-group input {
+	flex: 1;
+	font-size: 30upx;
+	color: #555;
+	padding-right: 20upx;
+}
+
+.cu-form-group>text[class*="cuIcon-"] {
+	font-size: 36upx;
+	padding: 0;
+	box-sizing: border-box;
+}
+
+.cu-form-group textarea {
+	margin: 32upx 0 30upx;
+	height: 4.6em;
+	width: 100%;
+	line-height: 1.2em;
+	flex: 1;
+	font-size: 28upx;
+	padding: 0;
+}
+
+.cu-form-group.align-start .title {
+	height: 1em;
+	margin-top: 32upx;
+	line-height: 1em;
+}
+
+.cu-form-group picker {
+	flex: 1;
+	padding-right: 40upx;
+	overflow: hidden;
+	position: relative;
+}
+
+.cu-form-group picker .picker {
+	line-height: 100upx;
+	font-size: 28upx;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+	width: 100%;
+	text-align: right;
+}
+
+.cu-form-group picker::after {
+	font-family: cuIcon;
+	display: block;
+	content: "\e6a3";
+	position: absolute;
+	font-size: 34upx;
+	color: #8799a3;
+	line-height: 100upx;
+	width: 60upx;
+	text-align: center;
+	top: 0;
+	bottom: 0;
+	right: -20upx;
+	margin: auto;
+}
+
+.cu-form-group textarea[disabled],
+.cu-form-group textarea[disabled] .placeholder {
+	color: transparent;
+}
+
+/* ==================
+         模态窗口
+ ==================== */
+
+.cu-modal {
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	z-index: 1110;
+	opacity: 0;
+	outline: 0;
+	text-align: center;
+	-ms-transform: scale(1.185);
+	transform: scale(1.185);
+	backface-visibility: hidden;
+	perspective: 2000upx;
+	background: rgba(0, 0, 0, 0.6);
+	transition: all 0.3s ease-in-out 0s;
+	pointer-events: none;
+}
+
+.cu-modal::before {
+	content: "\200B";
+	display: inline-block;
+	height: 100%;
+	vertical-align: middle;
+}
+
+.cu-modal.show {
+	opacity: 1;
+	transition-duration: 0.3s;
+	-ms-transform: scale(1);
+	transform: scale(1);
+	overflow-x: hidden;
+	overflow-y: auto;
+	pointer-events: auto;
+}
+
+.cu-dialog {
+	position: relative;
+	display: inline-block;
+	vertical-align: middle;
+	margin-left: auto;
+	margin-right: auto;
+	width: 680upx;
+	max-width: 100%;
+	background-color: #f8f8f8;
+	border-radius: 10upx;
+	overflow: hidden;
+}
+
+.cu-modal.bottom-modal::before {
+	vertical-align: bottom;
+}
+
+.cu-modal.bottom-modal .cu-dialog {
+	width: 100%;
+	border-radius: 0;
+}
+
+.cu-modal.bottom-modal {
+	margin-bottom: -1000upx;
+}
+
+.cu-modal.bottom-modal.show {
+	margin-bottom: 0;
+}
+
+.cu-modal.drawer-modal {
+	transform: scale(1);
+	display: flex;
+}
+
+.cu-modal.drawer-modal .cu-dialog {
+	height: 100%;
+	min-width: 200upx;
+	border-radius: 0;
+	margin: initial;
+	transition-duration: 0.3s;
+}
+
+.cu-modal.drawer-modal.justify-start .cu-dialog {
+	transform: translateX(-100%);
+}
+
+.cu-modal.drawer-modal.justify-end .cu-dialog {
+	transform: translateX(100%);
+}
+
+.cu-modal.drawer-modal.show .cu-dialog {
+	transform: translateX(0%);
+}
+.cu-modal .cu-dialog>.cu-bar:first-child .action{
+  min-width: 100rpx;
+  margin-right: 0;
+  min-height: 100rpx;
+}
+/* ==================
+         轮播
+ ==================== */
+swiper .a-swiper-dot {
+	display: inline-block;
+	width: 16upx;
+	height: 16upx;
+	background: rgba(0, 0, 0, .3);
+	border-radius: 50%;
+	vertical-align: middle;
+}
+
+swiper[class*="-dot"] .wx-swiper-dots,
+swiper[class*="-dot"] .a-swiper-dots,
+swiper[class*="-dot"] .uni-swiper-dots {
+	display: flex;
+	align-items: center;
+	width: 100%;
+	justify-content: center;
+}
+
+swiper.square-dot .wx-swiper-dot,
+swiper.square-dot .a-swiper-dot,
+swiper.square-dot .uni-swiper-dot {
+	background-color: #ffffff;
+	opacity: 0.4;
+	width: 10upx;
+	height: 10upx;
+	border-radius: 20upx;
+	margin: 0 8upx !important;
+}
+
+swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active,
+swiper.square-dot .a-swiper-dot.a-swiper-dot-active,
+swiper.square-dot .uni-swiper-dot.uni-swiper-dot-active {
+	opacity: 1;
+	width: 30upx;
+}
+
+swiper.round-dot .wx-swiper-dot,
+swiper.round-dot .a-swiper-dot,
+swiper.round-dot .uni-swiper-dot {
+	width: 10upx;
+	height: 10upx;
+	position: relative;
+	margin: 4upx 8upx !important;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after,
+swiper.round-dot .a-swiper-dot.a-swiper-dot-active::after,
+swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active::after {
+	content: "";
+	position: absolute;
+	width: 10upx;
+	height: 10upx;
+	top: 0upx;
+	left: 0upx;
+	right: 0;
+	bottom: 0;
+	margin: auto;
+	background-color: #ffffff;
+	border-radius: 20upx;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active,
+swiper.round-dot .a-swiper-dot.a-swiper-dot-active,
+swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active {
+	width: 18upx;
+	height: 18upx;
+}
+
+.screen-swiper {
+	/* min-height: 375upx; */
+}
+
+.screen-swiper image,
+.screen-swiper video,
+.swiper-item image,
+.swiper-item video {
+	width: 100%;
+	display: block;
+	height: 100%;
+	margin: 0;
+	pointer-events: none;
+}
+
+.card-swiper {
+	height: 420upx !important;
+}
+
+.card-swiper swiper-item {
+	width: 610upx !important;
+	left: 70upx;
+	box-sizing: border-box;
+	padding: 40upx 0upx 70upx;
+	overflow: initial;
+}
+
+.card-swiper swiper-item .swiper-item {
+	width: 100%;
+	display: block;
+	height: 100%;
+	border-radius: 10upx;
+	transform: scale(0.9);
+	transition: all 0.2s ease-in 0s;
+	overflow: hidden;
+}
+
+.card-swiper swiper-item.cur .swiper-item {
+	transform: none;
+	transition: all 0.2s ease-in 0s;
+}
+
+
+.tower-swiper {
+	height: 420upx;
+	position: relative;
+	max-width: 750upx;
+	overflow: hidden;
+}
+
+.tower-swiper .tower-item {
+	position: absolute;
+	width: 300upx;
+	height: 380upx;
+	top: 0;
+	bottom: 0;
+	left: 50%;
+	margin: auto;
+	transition: all 0.2s ease-in 0s;
+	opacity: 1;
+}
+
+.tower-swiper .tower-item.none {
+	opacity: 0;
+}
+
+.tower-swiper .tower-item .swiper-item {
+	width: 100%;
+	height: 100%;
+	border-radius: 6upx;
+	overflow: hidden;
+}
+
+/* ==================
+          步骤条
+ ==================== */
+
+.cu-steps {
+	display: flex;
+}
+
+scroll-view.cu-steps {
+	display: block;
+	white-space: nowrap;
+}
+
+scroll-view.cu-steps .cu-item {
+	display: inline-block;
+}
+
+.cu-steps .cu-item {
+	flex: 1;
+	text-align: center;
+	position: relative;
+	min-width: 100upx;
+}
+
+.cu-steps .cu-item:not([class*="text-"]) {
+	color: #8799a3;
+}
+
+.cu-steps .cu-item [class*="cuIcon-"],
+.cu-steps .cu-item .num {
+	display: block;
+	font-size: 40upx;
+	line-height: 80upx;
+}
+
+.cu-steps .cu-item::before,
+.cu-steps .cu-item::after,
+.cu-steps.steps-arrow .cu-item::before,
+.cu-steps.steps-arrow .cu-item::after {
+	content: "";
+	display: block;
+	position: absolute;
+	height: 0px;
+	width: calc(100% - 80upx);
+	border-bottom: 1px solid #ccc;
+	left: calc(0px - (100% - 80upx) / 2);
+	top: 40upx;
+	z-index: 0;
+}
+
+.cu-steps.steps-arrow .cu-item::before,
+.cu-steps.steps-arrow .cu-item::after {
+	content: "\e6a3";
+	font-family: 'cuIcon';
+	height: 30upx;
+	border-bottom-width: 0px;
+	line-height: 30upx;
+	top: 0;
+	bottom: 0;
+	margin: auto;
+	color: #ccc;
+}
+
+.cu-steps.steps-bottom .cu-item::before,
+.cu-steps.steps-bottom .cu-item::after {
+	bottom: 40upx;
+	top: initial;
+}
+
+.cu-steps .cu-item::after {
+	border-bottom: 1px solid currentColor;
+	width: 0px;
+	transition: all 0.3s ease-in-out 0s;
+}
+
+.cu-steps .cu-item[class*="text-"]::after {
+	width: calc(100% - 80upx);
+	color: currentColor;
+}
+
+.cu-steps .cu-item:first-child::before,
+.cu-steps .cu-item:first-child::after {
+	display: none;
+}
+
+.cu-steps .cu-item .num {
+	width: 40upx;
+	height: 40upx;
+	border-radius: 50%;
+	line-height: 40upx;
+	margin: 20upx auto;
+	font-size: 24upx;
+	border: 1px solid currentColor;
+	position: relative;
+	overflow: hidden;
+}
+
+.cu-steps .cu-item[class*="text-"] .num {
+	background-color: currentColor;
+}
+
+.cu-steps .cu-item .num::before,
+.cu-steps .cu-item .num::after {
+	content: attr(data-index);
+	position: absolute;
+	left: 0;
+	right: 0;
+	top: 0;
+	bottom: 0;
+	margin: auto;
+	transition: all 0.3s ease-in-out 0s;
+	transform: translateY(0upx);
+}
+
+.cu-steps .cu-item[class*="text-"] .num::before {
+	transform: translateY(-40upx);
+	color: #ffffff;
+}
+
+.cu-steps .cu-item .num::after {
+	transform: translateY(40upx);
+	color: #ffffff;
+	transition: all 0.3s ease-in-out 0s;
+}
+
+.cu-steps .cu-item[class*="text-"] .num::after {
+	content: "\e645";
+	font-family: 'cuIcon';
+	color: #ffffff;
+	transform: translateY(0upx);
+}
+
+.cu-steps .cu-item[class*="text-"] .num.err::after {
+	content: "\e646";
+}
+
+/* ==================
+          布局
+ ==================== */
+
+/*  -- flex弹性布局 -- */
+
+.flex {
+	display: flex;
+}
+
+.basis-xs {
+	flex-basis: 20%;
+}
+
+.basis-sm {
+	flex-basis: 40%;
+}
+
+.basis-df {
+	flex-basis: 50%;
+}
+
+.basis-lg {
+	flex-basis: 60%;
+}
+
+.basis-xl {
+	flex-basis: 80%;
+}
+
+.flex-sub {
+	flex: 1;
+}
+
+.flex-twice {
+	flex: 2;
+}
+
+.flex-treble {
+	flex: 3;
+}
+
+.flex-direction {
+	flex-direction: column;
+}
+
+.flex-wrap {
+	flex-wrap: wrap;
+}
+
+.align-start {
+	align-items: flex-start;
+}
+
+.align-end {
+	align-items: flex-end;
+}
+
+.align-center {
+	align-items: center;
+}
+
+.align-stretch {
+	align-items: stretch;
+}
+
+.self-start {
+	align-self: flex-start;
+}
+
+.self-center {
+	align-self: flex-center;
+}
+
+.self-end {
+	align-self: flex-end;
+}
+
+.self-stretch {
+	align-self: stretch;
+}
+
+.align-stretch {
+	align-items: stretch;
+}
+
+.justify-start {
+	justify-content: flex-start;
+}
+
+.justify-end {
+	justify-content: flex-end;
+}
+
+.justify-center {
+	justify-content: center;
+}
+
+.justify-between {
+	justify-content: space-between;
+}
+
+.justify-around {
+	justify-content: space-around;
+}
+
+/* grid布局 */
+
+.grid {
+	display: flex;
+	flex-wrap: wrap;
+}
+
+.grid.grid-square {
+	overflow: hidden;
+}
+
+.grid.grid-square .cu-tag {
+	position: absolute;
+	right: 0;
+	top: 0;
+	border-bottom-left-radius: 6upx;
+	padding: 6upx 12upx;
+	height: auto;
+	background-color: rgba(0, 0, 0, 0.5);
+}
+
+.grid.grid-square>view>text[class*="cuIcon-"] {
+	font-size: 52upx;
+	position: absolute;
+	color: #8799a3;
+	margin: auto;
+	top: 0;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	flex-direction: column;
+}
+
+.grid.grid-square>view {
+	margin-right: 20upx;
+	margin-bottom: 20upx;
+	border-radius: 6upx;
+	position: relative;
+	overflow: hidden;
+}
+.grid.grid-square>view.bg-img image {
+	width: 100%;
+	height: 100%;
+	position: absolute;
+}
+.grid.col-1.grid-square>view {
+	padding-bottom: 100%;
+	height: 0;
+	margin-right: 0;
+}
+
+.grid.col-2.grid-square>view {
+	padding-bottom: calc((100% - 20upx)/2);
+	height: 0;
+	width: calc((100% - 20upx)/2);
+}
+
+.grid.col-3.grid-square>view {
+	padding-bottom: calc((100% - 40upx)/3);
+	height: 0;
+	width: calc((100% - 40upx)/3);
+}
+
+.grid.col-4.grid-square>view {
+	padding-bottom: calc((100% - 60upx)/4);
+	height: 0;
+	width: calc((100% - 60upx)/4);
+}
+
+.grid.col-5.grid-square>view {
+	padding-bottom: calc((100% - 80upx)/5);
+	height: 0;
+	width: calc((100% - 80upx)/5);
+}
+
+.grid.col-2.grid-square>view:nth-child(2n),
+.grid.col-3.grid-square>view:nth-child(3n),
+.grid.col-4.grid-square>view:nth-child(4n),
+.grid.col-5.grid-square>view:nth-child(5n) {
+	margin-right: 0;
+}
+
+.grid.col-1>view {
+	width: 100%;
+}
+
+.grid.col-2>view {
+	width: 50%;
+}
+
+.grid.col-3>view {
+	width: 33.33%;
+}
+
+.grid.col-4>view {
+	width: 25%;
+}
+
+.grid.col-5>view {
+	width: 20%;
+}
+
+/*  -- 内外边距 -- */
+
+.margin-0 {
+	margin: 0;
+}
+
+.margin-xs {
+	margin: 10upx;
+}
+
+.margin-sm {
+	margin: 20upx;
+}
+
+.margin {
+	margin: 30upx;
+}
+
+.margin-lg {
+	margin: 40upx;
+}
+
+.margin-xl {
+	margin: 50upx;
+}
+
+.margin-top-xs {
+	margin-top: 10upx;
+}
+
+.margin-top-sm {
+	margin-top: 20upx;
+}
+
+.margin-top {
+	margin-top: 30upx;
+}
+
+.margin-top-lg {
+	margin-top: 40upx;
+}
+
+.margin-top-xl {
+	margin-top: 50upx;
+}
+
+.margin-right-xs {
+	margin-right: 10upx;
+}
+
+.margin-right-sm {
+	margin-right: 20upx;
+}
+
+.margin-right {
+	margin-right: 30upx;
+}
+
+.margin-right-lg {
+	margin-right: 40upx;
+}
+
+.margin-right-xl {
+	margin-right: 50upx;
+}
+
+.margin-bottom-xs {
+	margin-bottom: 10upx;
+}
+
+.margin-bottom-sm {
+	margin-bottom: 20upx;
+}
+
+.margin-bottom {
+	margin-bottom: 30upx;
+}
+
+.margin-bottom-lg {
+	margin-bottom: 40upx;
+}
+
+.margin-bottom-xl {
+	margin-bottom: 50upx;
+}
+
+.margin-left-xs {
+	margin-left: 10upx;
+}
+
+.margin-left-sm {
+	margin-left: 20upx;
+}
+
+.margin-left {
+	margin-left: 30upx;
+}
+
+.margin-left-lg {
+	margin-left: 40upx;
+}
+
+.margin-left-xl {
+	margin-left: 50upx;
+}
+
+.margin-lr-xs {
+	margin-left: 10upx;
+	margin-right: 10upx;
+}
+
+.margin-lr-sm {
+	margin-left: 20upx;
+	margin-right: 20upx;
+}
+
+.margin-lr {
+	margin-left: 30upx;
+	margin-right: 30upx;
+}
+
+.margin-lr-lg {
+	margin-left: 40upx;
+	margin-right: 40upx;
+}
+
+.margin-lr-xl {
+	margin-left: 50upx;
+	margin-right: 50upx;
+}
+
+.margin-tb-xs {
+	margin-top: 10upx;
+	margin-bottom: 10upx;
+}
+
+.margin-tb-sm {
+	margin-top: 20upx;
+	margin-bottom: 20upx;
+}
+
+.margin-tb {
+	margin-top: 30upx;
+	margin-bottom: 30upx;
+}
+
+.margin-tb-lg {
+	margin-top: 40upx;
+	margin-bottom: 40upx;
+}
+
+.margin-tb-xl {
+	margin-top: 50upx;
+	margin-bottom: 50upx;
+}
+
+.padding-0 {
+	padding: 0;
+}
+
+.padding-xs {
+	padding: 10upx;
+}
+
+.padding-sm {
+	padding: 20upx;
+}
+
+.padding {
+	padding: 30upx;
+}
+
+.padding-lg {
+	padding: 40upx;
+}
+
+.padding-xl {
+	padding: 50upx;
+}
+
+.padding-top-xs {
+	padding-top: 10upx;
+}
+
+.padding-top-sm {
+	padding-top: 20upx;
+}
+
+.padding-top {
+	padding-top: 30upx;
+}
+
+.padding-top-lg {
+	padding-top: 40upx;
+}
+
+.padding-top-xl {
+	padding-top: 50upx;
+}
+
+.padding-right-xs {
+	padding-right: 10upx;
+}
+
+.padding-right-sm {
+	padding-right: 20upx;
+}
+
+.padding-right {
+	padding-right: 30upx;
+}
+
+.padding-right-lg {
+	padding-right: 40upx;
+}
+
+.padding-right-xl {
+	padding-right: 50upx;
+}
+
+.padding-bottom-xs {
+	padding-bottom: 10upx;
+}
+
+.padding-bottom-sm {
+	padding-bottom: 20upx;
+}
+
+.padding-bottom {
+	padding-bottom: 30upx;
+}
+
+.padding-bottom-lg {
+	padding-bottom: 40upx;
+}
+
+.padding-bottom-xl {
+	padding-bottom: 50upx;
+}
+
+.padding-left-xs {
+	padding-left: 10upx;
+}
+
+.padding-left-sm {
+	padding-left: 20upx;
+}
+
+.padding-left {
+	padding-left: 30upx;
+}
+
+.padding-left-lg {
+	padding-left: 40upx;
+}
+
+.padding-left-xl {
+	padding-left: 50upx;
+}
+
+.padding-lr-xs {
+	padding-left: 10upx;
+	padding-right: 10upx;
+}
+
+.padding-lr-sm {
+	padding-left: 20upx;
+	padding-right: 20upx;
+}
+
+.padding-lr {
+	padding-left: 30upx;
+	padding-right: 30upx;
+}
+
+.padding-lr-lg {
+	padding-left: 40upx;
+	padding-right: 40upx;
+}
+
+.padding-lr-xl {
+	padding-left: 50upx;
+	padding-right: 50upx;
+}
+
+.padding-tb-xs {
+	padding-top: 10upx;
+	padding-bottom: 10upx;
+}
+
+.padding-tb-sm {
+	padding-top: 20upx;
+	padding-bottom: 20upx;
+}
+
+.padding-tb {
+	padding-top: 30upx;
+	padding-bottom: 30upx;
+}
+
+.padding-tb-lg {
+	padding-top: 40upx;
+	padding-bottom: 40upx;
+}
+
+.padding-tb-xl {
+	padding-top: 50upx;
+	padding-bottom: 50upx;
+}
+
+/* -- 浮动 --  */
+
+.cf::after,
+.cf::before {
+	content: " ";
+	display: table;
+}
+
+.cf::after {
+	clear: both;
+}
+
+.fl {
+	float: left;
+}
+
+.fr {
+	float: right;
+}
+
+/* ==================
+          背景
+ ==================== */
+
+.line-red::after,
+.lines-red::after {
+	border-color: #e54d42;
+}
+
+.line-orange::after,
+.lines-orange::after {
+	border-color: #f37b1d;
+}
+
+.line-yellow::after,
+.lines-yellow::after {
+	border-color: #fbbd08;
+}
+
+.line-olive::after,
+.lines-olive::after {
+	border-color: #8dc63f;
+}
+
+.line-green::after,
+.lines-green::after {
+	border-color: #39b54a;
+}
+
+.line-cyan::after,
+.lines-cyan::after {
+	border-color: #1cbbb4;
+}
+
+.line-blue::after,
+.lines-blue::after {
+	border-color: #0081ff;
+}
+
+.line-purple::after,
+.lines-purple::after {
+	border-color: #6739b6;
+}
+
+.line-mauve::after,
+.lines-mauve::after {
+	border-color: #9c26b0;
+}
+
+.line-pink::after,
+.lines-pink::after {
+	border-color: #e03997;
+}
+
+.line-brown::after,
+.lines-brown::after {
+	border-color: #a5673f;
+}
+
+.line-grey::after,
+.lines-grey::after {
+	border-color: #8799a3;
+}
+
+.line-gray::after,
+.lines-gray::after {
+	border-color: #aaaaaa;
+}
+
+.line-black::after,
+.lines-black::after {
+	border-color: #333333;
+}
+
+.line-white::after,
+.lines-white::after {
+	border-color: #ffffff;
+}
+
+.bg-red {
+	background-color: #e54d42;
+	color: #ffffff;
+}
+
+.bg-orange {
+	background-color: #f37b1d;
+	color: #ffffff;
+}
+
+.bg-yellow {
+	background-color: #fbbd08;
+	color: #333333;
+}
+
+.bg-olive {
+	background-color: #8dc63f;
+	color: #ffffff;
+}
+
+.bg-green {
+	background-color: #39b54a;
+	color: #ffffff;
+}
+
+.bg-cyan {
+	background-color: #1cbbb4;
+	color: #ffffff;
+}
+
+.bg-blue {
+	background-color: #0081ff;
+	color: #ffffff;
+}
+
+.bg-purple {
+	background-color: #6739b6;
+	color: #ffffff;
+}
+
+.bg-mauve {
+	background-color: #9c26b0;
+	color: #ffffff;
+}
+
+.bg-pink {
+	background-color: #e03997;
+	color: #ffffff;
+}
+
+.bg-brown {
+	background-color: #a5673f;
+	color: #ffffff;
+}
+
+.bg-grey {
+	background-color: #8799a3;
+	color: #ffffff;
+}
+
+.bg-gray {
+	background-color: #f0f0f0;
+	color: #333333;
+}
+
+.bg-black {
+	background-color: #333333;
+	color: #ffffff;
+}
+
+.bg-white {
+	background-color: #ffffff;
+	color: #666666;
+}
+
+.bg-shadeTop {
+	background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01));
+	color: #ffffff;
+}
+
+.bg-shadeBottom {
+	background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1));
+	color: #ffffff;
+}
+
+.bg-red.light {
+	color: #e54d42;
+	background-color: #fadbd9;
+}
+
+.bg-orange.light {
+	color: #f37b1d;
+	background-color: #fde6d2;
+}
+
+.bg-yellow.light {
+	color: #fbbd08;
+	background-color: #fef2ced2;
+}
+
+.bg-olive.light {
+	color: #8dc63f;
+	background-color: #e8f4d9;
+}
+
+.bg-green.light {
+	color: #39b54a;
+	background-color: #d7f0dbff;
+}
+
+.bg-cyan.light {
+	color: #1cbbb4;
+	background-color: #d2f1f0;
+}
+
+.bg-blue.light {
+	color: #0081ff;
+	background-color: #cce6ff;
+}
+
+.bg-purple.light {
+	color: #6739b6;
+	background-color: #e1d7f0;
+}
+
+.bg-mauve.light {
+	color: #9c26b0;
+	background-color: #ebd4ef;
+}
+
+.bg-pink.light {
+	color: #e03997;
+	background-color: #f9d7ea;
+}
+
+.bg-brown.light {
+	color: #a5673f;
+	background-color: #ede1d9;
+}
+
+.bg-grey.light {
+	color: #8799a3;
+	background-color: #e7ebed;
+}
+
+.bg-gradual-red {
+	background-image: linear-gradient(45deg, #f43f3b, #ec008c);
+	color: #ffffff;
+}
+
+.bg-gradual-orange-sm {
+	background-image: linear-gradient(45deg, #ff7903, #ed9e00);
+	color: #ffffff;
+}
+
+.bg-gradual-orange {
+	background-image: linear-gradient(45deg, #ff9700, #ed1c24);
+	color: #ffffff;
+}
+
+.bg-gradual-green {
+	background-image: linear-gradient(45deg, #39b54a, #8dc63f);
+	color: #ffffff;
+}
+
+.bg-gradual-index-row {
+	background-image: linear-gradient(60deg, #23cb8e, #1ea875);
+	color: #ffffff; 
+}
+
+.bg-gradual-purple {
+	background-image: linear-gradient(45deg, #9000ff, #5e00ff);
+	color: #ffffff;
+}
+
+.bg-gradual-pink {
+	background-image: linear-gradient(45deg, #ec008c, #6739b6);
+	color: #ffffff;
+}
+
+.bg-gradual-blue {
+	background-image: linear-gradient(45deg, #0081ff, #1cbbb4);
+	color: #ffffff;
+}
+
+.bg-gradual-blue-sm {
+	background-image: linear-gradient(45deg, #1bcaa7, #5ddfa2);
+	color: #ffffff;
+}
+
+.shadow[class*="-red"] {
+	box-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2);
+}
+
+.shadow[class*="-orange"] {
+	box-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2);
+}
+
+.shadow[class*="-yellow"] {
+	box-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2);
+}
+
+.shadow[class*="-olive"] {
+	box-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2);
+}
+
+.shadow[class*="-green"] {
+	box-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2);
+}
+
+.shadow[class*="-cyan"] {
+	box-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2);
+}
+
+.shadow[class*="-blue"] {
+	box-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2);
+}
+
+.shadow[class*="-purple"] {
+	box-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2);
+}
+
+.shadow[class*="-mauve"] {
+	box-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2);
+}
+
+.shadow[class*="-pink"] {
+	box-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2);
+}
+
+.shadow[class*="-brown"] {
+	box-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2);
+}
+
+.shadow[class*="-grey"] {
+	box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.shadow[class*="-gray"] {
+	box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.shadow[class*="-black"] {
+	box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2);
+}
+
+.shadow[class*="-white"] {
+	box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2);
+}
+
+.text-shadow[class*="-red"] {
+	text-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2);
+}
+
+.text-shadow[class*="-orange"] {
+	text-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2);
+}
+
+.text-shadow[class*="-yellow"] {
+	text-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2);
+}
+
+.text-shadow[class*="-olive"] {
+	text-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2);
+}
+
+.text-shadow[class*="-green"] {
+	text-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2);
+}
+
+.text-shadow[class*="-cyan"] {
+	text-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2);
+}
+
+.text-shadow[class*="-blue"] {
+	text-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2);
+}
+
+.text-shadow[class*="-purple"] {
+	text-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2);
+}
+
+.text-shadow[class*="-mauve"] {
+	text-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2);
+}
+
+.text-shadow[class*="-pink"] {
+	text-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2);
+}
+
+.text-shadow[class*="-brown"] {
+	text-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2);
+}
+
+.text-shadow[class*="-grey"] {
+	text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.text-shadow[class*="-gray"] {
+	text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.text-shadow[class*="-black"] {
+	text-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2);
+}
+
+.bg-img {
+	background-size: cover;
+	background-position: center;
+	background-repeat: no-repeat;
+}
+
+.bg-mask {
+	background-color: #333333;
+	position: relative;
+}
+
+.bg-mask::after {
+	content: "";
+	border-radius: inherit;
+	width: 100%;
+	height: 100%;
+	display: block;
+	background-color: rgba(0, 0, 0, 0.4);
+	position: absolute;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	top: 0;
+}
+
+.bg-mask view,
+.bg-mask cover-view {
+	z-index: 5;
+	position: relative;
+}
+
+.bg-video {
+	position: relative;
+}
+
+.bg-video video {
+	display: block;
+	height: 100%;
+	width: 100%;
+	-o-object-fit: cover;
+	object-fit: cover;
+	position: absolute;
+	top: 0;
+	z-index: 0;
+	pointer-events: none;
+}
+
+/* ==================
+          文本
+ ==================== */
+
+.text-xs {
+	font-size: 20upx;
+}
+
+.text-sm {
+	font-size: 24upx;
+}
+
+.text-df {
+	font-size: 28upx;
+}
+
+.text-lg {
+	font-size: 32upx;
+}
+
+.text-xl {
+	font-size: 36upx;
+}
+
+.text-xxl {
+	font-size: 44upx;
+}
+
+.text-sl {
+	font-size: 80upx;
+}
+
+.text-xsl {
+	font-size: 120upx;
+}
+
+.text-Abc {
+	text-transform: Capitalize;
+}
+
+.text-ABC {
+	text-transform: Uppercase;
+}
+
+.text-abc {
+	text-transform: Lowercase;
+}
+
+.text-price::before {
+	content: "¥";
+	font-size: 80%;
+	margin-right: 4upx;
+}
+
+.text-cut {
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+}
+
+.text-bold {
+	font-weight: bold;
+}
+
+.text-center {
+	text-align: center;
+}
+
+.text-content {
+	line-height: 1.6;
+}
+
+.text-left {
+	text-align: left;
+}
+
+.text-right {
+	text-align: right;
+}
+
+.text-red,
+.line-red,
+.lines-red {
+	color: #e54d42;
+}
+
+.text-orange,
+.line-orange,
+.lines-orange {
+	color: #f37b1d;
+}
+
+.text-yellow,
+.line-yellow,
+.lines-yellow {
+	color: #fbbd08;
+}
+
+.text-olive,
+.line-olive,
+.lines-olive {
+	color: #8dc63f;
+}
+
+.text-green,
+.line-green,
+.lines-green {
+	color: #39b54a;
+}
+
+.text-cyan,
+.line-cyan,
+.lines-cyan {
+	color: #1cbbb4;
+}
+
+.text-blue,
+.line-blue,
+.lines-blue {
+	color: #0081ff;
+}
+
+.text-hui{
+	color:#787878;
+}
+
+.text-purple,
+.line-purple,
+.lines-purple {
+	color: #6739b6;
+}
+
+.text-mauve,
+.line-mauve,
+.lines-mauve {
+	color: #9c26b0;
+}
+
+.text-pink,
+.line-pink,
+.lines-pink {
+	color: #e03997;
+}
+
+.text-brown,
+.line-brown,
+.lines-brown {
+	color: #a5673f;
+}
+
+.text-grey,
+.line-grey,
+.lines-grey {
+	color: #8799a3;
+}
+
+.text-gray,
+.line-gray,
+.lines-gray {
+	color: #aaaaaa;
+}
+
+.text-black,
+.line-black,
+.lines-black {
+	color: #333333;
+}
+
+.text-white,
+.line-white,
+.lines-white {
+	color: #ffffff;
+}

+ 101 - 52
pages/index/index.vue

@@ -4,7 +4,7 @@
 			:show="show" :type="type" :list="list" :moreIcon="moreIcon" :volumeIcon="volumeIcon" :duration="duration"
 			bgColor="" padding="8rpx 24rpx" :isCircular="isCircular"
 			style="position: absolute;top: 12%;z-index: 9;width: 100%;"></u-notice-bar> -->
-
+		<service-widget @btnClick="btn_click"></service-widget>
 		<!-- 状态栏 -->
 		<view class="status" :style="{position:headerPosition,backgroundColor:bgColor}"></view>
 		<!-- 漂浮头部 -->
@@ -75,6 +75,7 @@
 			</view>
 			<view class="loading-text">{{loadingText}}</view>
 		</view>
+		<u-modal v-model="locationshow" content="3213213213213" :show-cancel-button='true'></u-modal>
 	</view>
 </template>
 <script>
@@ -89,6 +90,7 @@
 	import {
 		mapState
 	} from "vuex"
+	import base from '@/config/baseUrl';
 	export default {
 		components: {
 			swiperImage,
@@ -96,7 +98,7 @@
 		},
 		data() {
 			return {
-				city: "",
+				locationshow: false,
 				avatar: "",
 				xuelishow: false,
 				border: false,
@@ -295,7 +297,17 @@
 				headerPosition: "fixed",
 				loadingText: "正在加载...",
 				getApplicationStatus: "",
-
+				socketOpen: false,
+				latitude: "",
+				longitude: "",
+				province: "",
+				city: "",
+				district: "",
+				street: "",
+				streetNum: "",
+				poiName: "",
+				cityCode: "",
+				messageInterval: null,
 			};
 		},
 
@@ -304,7 +316,6 @@
 			...mapState(['userInfo'])
 		},
 
-
 		onPageScroll(e) {
 			//兼容iOS端下拉时顶部漂移
 			if (e.scrollTop >= 0) {
@@ -314,6 +325,7 @@
 			}
 		},
 		onShow() {
+
 			if (this.userInfo.sysUser.headSculpture) {
 				this.avatar = this.$base.baseUrl + this.userInfo.sysUser.headSculpture;
 			} else {
@@ -323,30 +335,27 @@
 			if (arr) {
 				uni.removeStorageSync('historyInfo');
 			}
+			// #ifdef APP-PLUS
+			this.getCurrentLocation();
+			this.soketInit();
+			// #endif
+
 		},
 		async onLoad() {
 
-			// uni.startPullDownRefresh(); 
 			this.isShow = this.userInfo.sysUser.status == '2' ? true : false
 			let res = await this.$http.get('/apps/getApplicationStatus?jobNumber=' + this.userInfo.sysUser.id);
 			if (res.code == 200) {
 				if (res.data == '0') {
 					this.getApplicationStatus = res.data;
 				}
-			} else {
-
 			}
 			let banner = await this.$http.get('/apps/getCarousel');
 			this.swiperList = banner.data;
 			this.bgColor = this.swiperList[0].color;
-			// #ifdef APP-PLUS
-			// this.getCurrentLocation();
-			// #endif
+
 		},
 		async onPullDownRefresh() {
-			// #ifdef APP-PLUS
-			// this.getCurrentLocation();
-			// #endif
 			let userInfoRes = await this.$http.get('/user/loginUser')
 			// let userInfoRes = await this.$http.get('/esmUserInternal/findById?id=' + this.userInfo.sysUser.id, {}, {});
 			uni.stopPullDownRefresh();
@@ -404,53 +413,93 @@
 		// 	}
 		// },
 		methods: {
+			getLocation() {
+
+			},
+			btn_click() {
+				uni.navigateTo({
+					url: '/pages/chat/chat'
+				})
+			},
+			//初始化websoket连接
+			soketInit() {
+				uni.connectSocket({
+					url: base.socketUrl + '/' + this.userInfo.sysUser.id,
+					method: 'GET',
+
+				});
+				uni.onSocketOpen((res) => {
+					this.socketOpen = true;
+					this.sendMessage();
+				});
+			},
+			//发送信息
+			sendMessage() {
+				if (this.longitude) {
+					const dataToSend = {
+						userId: this.userInfo.sysUser.id,
+						longitude: this.longitude,
+						latitude: this.latitude,
+						province: this.province,
+						city: this.city,
+						district: this.district,
+						street: this.street,
+						streetNum: this.streetNum,
+						poiName: this.poiName,
+						cityCode: this.cityCode
+					};
+					if (this.socketOpen) {
+						uni.sendSocketMessage({
+							data: JSON.stringify(dataToSend)
+						})
+						if (this.messageInterval) {
+							clearInterval(this.messageInterval);
+						}
+						this.messageInterval = setInterval(async () => {
+							await this.getCurrentLocation();
+							await this.updatesendMessage();
+						}, 120000); // 120000毫秒 = 2分钟	
+					}
+				}
+			},
 
 			getCurrentLocation() {
 				//获取当前的地理位置
 				let vthis = this;
-				uni.getLocation({
-					type: 'gcj02',
-					geocode: true,
+				uni.getStorage({
+					key: 'location',
 					success: function(res) {
-						console.log(res);
-						vthis.city = res.address.city;
-						// let address = res.address.province + res.address.city + res.address.district + res
-						// 	.address.street + res.address.poiName;
-					},
-					fail: function(err) {
-						uni.showModal({
-							title: '提示',
-							content: '请打开定位服务',
-							success: ({
-								confirm,
-								cancel
-							}) => {
-								if (confirm) {
-									// android平台
-									if (uni.getSystemInfoSync().platform == 'android') {
-										var Intent = plus.android.importClass(
-											'android.content.Intent');
-										var Settings = plus.android.importClass(
-											'android.provider.Settings');
-										var intent = new Intent(Settings
-											.ACTION_LOCATION_SOURCE_SETTINGS);
-										var main = plus.android.runtimeMainActivity();
-										main.startActivity(intent); // 打开系统设置GPS服务页面
-
-									}
-								}
-								用户取消前往开启定位服务
-								if (cancel) {
-									console.log(1);
-									uni.navigateBack({ //uni.navigateTo跳转的返回,默认1为返回上一级
-										delta: 1
-									});
-								}
-							}
-						});
+						vthis.latitude = res.data.latitude;
+						vthis.longitude = res.data.longitude;
+						vthis.province = res.data.province;
+						vthis.city = res.data.city;
+						vthis.district = res.data.district;
+						vthis.street = res.data.street;
+						vthis.streetNum = res.data.streetNum;
+						vthis.poiName = res.data.poiName;
+						vthis.cityCode = res.data.cityCode;
 					}
 				});
 			},
+			updatesendMessage() {
+				const dataToSend = {
+					userId: this.userInfo.sysUser.id,
+					longitude: this.longitude,
+					latitude: this.latitude,
+					province: this.province,
+					city: this.city,
+					district: this.district,
+					street: this.street,
+					streetNum: this.streetNum,
+					poiName: this.poiName,
+					cityCode: this.cityCode
+				};
+				if (this.socketOpen) {
+					uni.sendSocketMessage({
+						data: JSON.stringify(dataToSend)
+					})
+				}
+			},
 			citySelection() {
 				uni.navigateTo({
 					url: '/pages/index/cityIndex'

+ 2 - 6
pages/login/login.vue

@@ -2,6 +2,7 @@
 	<view>
 		<!-- 状态栏 -->
 		<!-- 公共组件-每个页面必须引入 -->
+
 		<public-module></public-module>
 		<app-update ref="app_update"></app-update>
 		<!-- 欢迎语 -->
@@ -517,7 +518,6 @@
 							title: '绑定失败',
 							icon: "none"
 						});
-						console.log('login fail:', err);
 					}
 				});
 			},
@@ -624,7 +624,6 @@
 					// 查询表 DB.selectTableData(表名,查询条件列名,查询条件列值)
 					DB.selectTableData("chat")
 						.then(res => {
-							console.log("contact表数据", res);
 							this.listData = res;
 							this.username = res[0].username;
 							this.password = res[0].password;
@@ -643,13 +642,10 @@
 					// 修改表数据 DB.updateTableData(表名, 要修改的列名=修改后列值, 修改条件的列名, 修改条件的列值)
 					DB.updateTableData("chat", data)
 						.then(res => {
-							console.log('修改后的数据', res)
 							this.showToast("保存成功");
 							this.selectTableData();
 						})
-						.catch(error => {
-							console.log(error)
-						});
+						.catch(error => {});
 				} else {}
 			},
 

+ 7 - 1
pages/my/my.vue

@@ -135,6 +135,7 @@
 				<img :src="promoImage" alt="" style="width: 150px;height: 150px;" />
 			</view>
 		</u-modal>
+		<service-widget @btnClick="btn_click"></service-widget>
 	</view>
 </template>
 
@@ -345,7 +346,7 @@
 		},
 
 		computed: {
-			...mapState(['userInfo', "userCheckInfo", ]),
+			...mapState(['userInfo', "userCheckInfo"]),
 			toolsListLength() {
 				// let length = Math.ceil(this.toolsList.length / 8);
 				let list = ["1", "2"]
@@ -391,6 +392,11 @@
 		methods: {
 			...mapMutations(['setUserModules', 'setOrderType', 'setOrderStage']),
 			//头部颜色变化js
+			btn_click() {
+				uni.navigateTo({
+					url: '/pages/chat/chat'
+				})
+			},
 			change(e) {
 				this.current = e.detail.current;
 			},

+ 7 - 1
pages/orders/orders.vue

@@ -133,6 +133,7 @@
 
 			</view>
 		</u-mask>
+		<service-widget @btnClick="btn_click"></service-widget>
 	</view>
 </template>
 
@@ -193,7 +194,7 @@
 				/* 搜索框配置 */
 				//状态筛选list
 				statusList: [{
-						label: '报价中',
+						label: '报价完成',
 						value: 0,
 						color: "#229805",
 						src: "/static/image/car-insure/state1.png"
@@ -337,6 +338,11 @@
 		},
 		methods: {
 			...mapMutations(['setOrderType', 'setOrderStage']),
+			btn_click() {
+				uni.navigateTo({
+					url: '/pages/chat/chat'
+				})
+			},
 			async getOrdersList(page, size) {
 				this.pageRequest.pageNum = page;
 				this.pageRequest.pageSize = size;

+ 2 - 2
pages/orders/quoteHistory.vue

@@ -106,7 +106,7 @@
 				licenseno: "",
 				sublist: [],
 				numList: [{
-						name: '报价中'
+						name: '报价完成'
 					}, {
 						name: '待核保'
 					},
@@ -120,7 +120,7 @@
 
 				],
 				statusList: [{
-						label: '报价中',
+						label: '报价完成',
 						value: 0,
 						color: "#229805",
 						src: "/static/image/car-insure/state1.png"

+ 2 - 2
pages/orders/subOrders.vue

@@ -135,7 +135,7 @@
 				licenseno: "",
 				sublist: [],
 				numList: [{
-						name: '报价中'
+						name: '报价完成'
 					}, {
 						name: '待核保'
 					},
@@ -149,7 +149,7 @@
 
 				],
 				statusList: [{
-						label: '报价中',
+						label: '报价完成',
 						value: 0,
 						color: "#229805",
 						src: "/static/image/car-insure/state1.png"

+ 144 - 67
pages/register/orderissuer.vue

@@ -2,74 +2,85 @@
 	<view class="page">
 		<!-- 公共组件-每个页面必须引入 -->
 		<public-module></public-module>
-		<view class="mx-3 mt-3">
-			<!-- 账号密码登录 false代表账号密码登录 -->
-			<view class="phone d-flex">
-				<view class="title">电话号码</view>
-				<input placeholder="请输入手机号" v-model="phone" maxlength="11" />
-			</view>
-			<view class="phone d-flex">
-				<view class="title">真实姓名</view>
-				<input placeholder="请输入姓名" v-model="name" />
-			</view>
-			<view class="phone d-flex">
-				<view class="title">身份证号</view>
-				<input placeholder="请输入身份证号" v-model="identity" />
-			</view>
-			<view class="password d-flex">
-				<view class="title">密码</view>
-				<input placeholder="请输入密码" v-model="password" :password='isHidePassword' maxlength="15"
-					style="padding-right: 200rpx;" />
-				<view class="d-flex a-center j-center yanzhengma">
-					<view style="font-size: 40rpx;" class="icon iconfont"
-						:class="isHidePassword?'icon-buxianshimima':'icon-xianshimima'"
-						@tap="isHidePassword = !isHidePassword"></view>
+		<view class="dis j-end a-c">
+			<image src="../../static/image/login/3.png" mode=""
+				style="height:260px;width: calc(100% - 16px);margin-top: 120px;">
+			</image>
+		</view>
+		<view class="input-data1">
+			<u-tabs :list="list" :is-scroll="true" :current="current" @change="change"
+				style="background: transparent;margin-bottom: 10px;"></u-tabs>
+			<view class="input-data">
+				<view class="phone d-flex">
+					<image src="../../static/image/login/shoujihao.png" mode="" style="width: 18px;height: 18px;">
+					</image>
+					<input placeholder="请输入手机号" v-model="phone" maxlength="11" />
 				</view>
-			</view>
-			
-			<view class="code d-flex">
-				<view class="title">验证码</view>
-				<input placeholder="请输入验证码" v-model="code" maxlength="5" style="padding-right: 200rpx;" />
-				<view class="d-flex a-center j-center login-font-color yanzhengma" @tap="getCheckNum">
-					<view class="d-flex a-center j-center"
-						:class="!codetime?'yanzhengma1 main-text-color':'yanzhengma2'">
-						{{!codetime?'获取验证码':codetime+' s'}}
+				<view class="phone d-flex">
+					<image src="../../static/image/login/name.png" mode="" style="width: 18px;height: 18px;">
+					</image>
+					<input placeholder="请输入姓名" v-model="name" />
+				</view>
+				<view class="phone d-flex">
+					<image src="../../static/image/login/shenfenzheng.png" mode="" style="width: 18px;height: 18px;">
+					</image>
+					<input placeholder="请输入身份证号" v-model="identity" />
+				</view>
+				<view class="password d-flex">
+					<image src="../../static/image/login/mima.png" mode="" style="width: 18px;height: 18px;">
+					</image>
+					<input placeholder="请输入密码" v-model="password" :password='isHidePassword' maxlength="15"
+						style="padding-right: 200rpx;" />
+					<view class=" position-absolute top-0 right-0 d-flex a-center j-center"
+						style="width: 200rpx;height: 100%;">
+						<image
+							:src="isHidePassword?'../../static/image/login/biyan.png':'../../static/image/login/zhengyan.png'"
+							@tap="isHidePassword = !isHidePassword" mode="" style="width: 18px;height: 18px;">
 					</view>
 				</view>
-			</view>
 
-			<!-- 推荐信息 -->
-			<template v-if="showRecommend">
-				<view class="recommendInfo">
-					<view class="d-flex">
-						<view>
-							<image src="/static/bigLogo.png"></image>
-						</view>
-						<view>
-							<view><span class="text-muted mr-2">推荐人姓名</span> {{recommendername}}</view>
-							<view><span class="text-muted mr-2">推荐人会员号</span> {{recommenderid}}</view>
+				<view class="code d-flex">
+					<image src="../../static/image/login/yanzhengma.png" mode="" style="width: 18px;height: 18px;">
+					</image>
+					<input placeholder="请输入验证码" v-model="code" maxlength="4" style="padding-right: 200rpx;" />
+					<view class="d-flex a-center j-center login-font-color yanzhengma" @tap="getCheckNum">
+						<view class="d-flex a-center j-center"
+							:class="!codetime?'yanzhengma1 text-color':'yanzhengma2'">
+							{{!codetime?'获取验证码':codetime+' s'}}
 						</view>
 					</view>
-					<view class="px-3 py-1 d-flex a-center j-center">请确认推荐人信息,注册后,推荐人将不可修改</view>
 				</view>
-			</template>
+			</view>
 
-			<view class=" left-0 right-0 dis a-c j-start  text-light-muted" style="bottom:30rpx">
+			<view class="mx-3 mt-3" v-if="showRecommend">
+				<view class=" mas-title dis j-start a-c">
+					<image src="../../static/image/login/1.png" mode=""
+						style="width: 18px;height: 18px;margin-right: 10px;">
+					</image>
+					<text>请确认推荐人信息,注册后,推荐人将不可修改</text>
+				</view>
+				<view class="recommendInfo">
+					<view class="dis a-c j-start">
+						<image src="/static/bigLogo.png" style="width: 21px;height: 20px;"></image>
+						<text style="color: rgba(35,40,50,0.8);">推荐人姓名:</text>
+						<text style="color: #232832;">{{recommendername}}</text>
+					</view>
+					<view class="dis a-c">
+						<text style="color: rgba(35,40,50,0.8);">推荐人会员号:</text>
+						<text style="color: #232832;">{{recommenderid}}</text>
+					</view>
+				</view>
+				<view class="mt-2 left-0 right-0 dis a-c j-start  text-light-muted" style="bottom:30rpx">
 					<u-checkbox v-model="checked"></u-checkbox>
 					我已确认并同意<view> <text @tap="nav('/pages/register/xieyi')" style="color: #0052FF;">个人信息授权示范性条款</text>
+					</view>
 				</view>
+				<button class="my-3 mt-4 d-flex a-center j-center font-weight bg-color" :loading="loading"
+					:class="{'bg-hover-color':disabled}" type="primary" @tap="submit" :disabled="disabled"
+					style="letter-spacing: 20rpx;">注册</button>
 			</view>
-			<button class="my-3 mt-4 d-flex a-center j-center font-weight main-bg-color" :loading="loading"
-				:class="{'main-bf-hover-color':disabled}" type="primary" @tap="submit" :disabled="disabled"
-				style="letter-spacing: 20rpx;">注册</button>
-
-			<!-- <view class="d-flex a-center j-center my-3">
-				已有帐号?<view class="main-text-color" @tap="navigate({url:'/pages/login/login'},'reLaunch')">去登录</view>
-			</view> -->
-		<u-toast ref="uToast" />
-
 		</view>
-
+		<u-toast ref="uToast" />
 	</view>
 </template>
 <script>
@@ -83,8 +94,12 @@
 	export default {
 		data() {
 			return {
+				list: [{
+					name: '出单员注册'
+				}],
+				current: 0,
 				name: "",
-				identity:'',
+				identity: '',
 				phone: "",
 				password: "",
 				code: "",
@@ -96,7 +111,7 @@
 				showRecommend: false,
 				recommendername: "",
 				recommenderid: "",
-				checked:false
+				checked: false
 			}
 		},
 		async onLoad(params) {
@@ -157,9 +172,12 @@
 		},
 		methods: {
 			...mapMutations(['setUserModules']),
+			change(index) {
+				this.current = index;
+			},
 			// 改变按钮状态
 			OnBtnChange() {
-				if (this.phone && this.password && this.code && this.name ) {
+				if (this.phone && this.password && this.code && this.name) {
 					this.disabled = false;
 					return;
 				}
@@ -253,7 +271,7 @@
 					"password": this.password,
 					"mobile": this.phone,
 					"mobileMsg": this.code,
-					"identity":this.identity,
+					"identity": this.identity,
 					"referrerId": this.recommenderid,
 					"referrerName": this.recommendername,
 					"flag": 2,
@@ -310,6 +328,55 @@
 <style lang="scss" scoped>
 	@import '@/style/mixin.scss';
 
+	/deep/ {
+		.u-tab-bar {
+			background: linear-gradient(90deg, #0052FF 0%, rgba(0, 82, 255, 0) 100%) !important;
+			border-radius: 4px 4px 4px 4px;
+		}
+	}
+
+	.text-color {
+		color: #0052FF;
+	}
+
+	.bg-color {
+		background-color: #0052FF;
+		border-radius: 20px;
+	}
+
+	.bg-hover-color {
+		background-color: #0052FF;
+		opacity: 0.65;
+		border-radius: 20px;
+	}
+
+	.mas-title {
+		width: 100%;
+		height: 34px;
+		background: rgba(0, 82, 255, 0.1);
+		border-radius: 6px;
+		padding: 6px;
+		margin-bottom: 15px;
+	}
+
+	.input-data1 {
+		position: relative;
+		margin-top: -140px;
+	}
+
+	.input-data {
+		width: calc(100% - 32px);
+		height: auto;
+		background: #FFFFFF;
+		box-shadow: 0px 4px 10px 0px #DAE3F4;
+		border-radius: 6px;
+		margin: auto;
+		padding: 0 10px;
+		z-index: 999;
+	}
+
+
+
 	.idCardBefore {
 		background: rgba($themeColor, 0.1) url('/static/image/user/identy2.png') center center no-repeat;
 		background-size: auto 70%;
@@ -317,7 +384,7 @@
 	}
 
 	.page {
-		background: #F5F5F5;
+		background: #F8FAFE;
 		height: 100vh;
 		width: 100%;
 		position: absolute;
@@ -327,12 +394,10 @@
 	.password,
 	.code {
 		position: relative;
-		height: 90upx;
+		height: 95rpx;
 		display: flex;
 		align-items: center;
-		background-color: #FFFFFF;
-		padding: 0 30upx;
-		margin-bottom: 26upx;
+		border-bottom: 1px solid #f2f2f2;
 	}
 
 	.phone .title,
@@ -348,6 +413,7 @@
 	.code input {
 		width: 350upx;
 		font-size: 28upx;
+		margin-left: 13px;
 	}
 
 	.yanzhengma {
@@ -375,10 +441,21 @@
 
 	.recommendInfo {
 		background: #FFFFFF;
-	}
+		width: 100%;
+		height: 72;
+		background: #FFFFFF;
+		border-radius: 6px;
+		border: 1px solid #0052FF;
+		padding: 0 10px;
 
-	.recommendInfo>view:nth-of-type(1) {
-		border-bottom: 1px solid #ddd;
+		>view {
+			padding: 6px;
+			font-size: 13px;
+		}
+
+		>view:nth-child(1) {
+			border-bottom: 1px solid #f2f2f2;
+		}
 	}
 
 	.recommendInfo>view:nth-of-type(1)>view:nth-of-type(1) {

+ 1 - 4
pages/register/register.vue

@@ -66,11 +66,8 @@
 				<button class="my-3 mt-4 d-flex a-center j-center font-weight bg-color" :loading="loading"
 					:class="{'bg-hover-color':disabled}" type="primary" @tap="submit" :disabled="disabled"
 					style="letter-spacing: 20rpx;">注册</button>
-
-				<!-- <view class="d-flex a-center j-center my-3">
-					已有帐号?<view class="text-color" @tap="navigate({url:'/pages/login/login'},'reLaunch')">去登录</view>
-				</view> -->
 			</view>
+
 		</view>
 
 

+ 7 - 2
pages/tools/poster/poster-detail.vue

@@ -20,6 +20,7 @@
 				canvasShow: true,
 				posterimg: "",
 				recommendImg: "",
+				orderissuerImg: "",
 			}
 		},
 		onLoad(params) {
@@ -34,9 +35,12 @@
 			this.recommendImg = QR.createQrCodeImg(this.$base.h5BaseUrl + "/#/pages/register/register?id=" + id, {
 				size: parseInt(220) //二维码大小  
 			})
+			this.orderissuerImg = QR.createQrCodeImg(this.$base.h5BaseUrl + "/#/pages/register/orderissuer?id=" + id, {
+				size: parseInt(220) //二维码大小  
+			})
 		},
 		computed: {
-			...mapState(["userInfo"]),
+			...mapState(["userInfo", 'sources']),
 		},
 		mounted() {
 			this.canvasImage();
@@ -62,7 +66,8 @@
 				myCanvas.fillText(this.userInfo.sysUser.mobile, ww / 10 + ww / 5, hh - ww / 48 * 7);
 
 				//二维码
-				myCanvas.drawImage(this.recommendImg, ww - ww / 3, hh - ww / 3, ww / 4, ww / 4);
+				myCanvas.drawImage(this.sources == 1 ? this.recommendImg : this.orderissuerImg, ww - ww / 3, hh - ww / 3,
+					ww / 4, ww / 4);
 
 				//开始绘画,必须调用这一步,才会把之前的一些操作实施
 				myCanvas.draw(true, () => {

+ 23 - 22
pages/wallet/billInfo1.vue

@@ -224,7 +224,7 @@
 							</view>
 							<view v-if="orderInfo.jqpremium && orderInfo.feeOrderNewVo" class=" d-flex a-center j-c"
 								style="margin-bottom: 5px;">
-								<view class="costDetails">
+								<view class="costDetails" v-if="orderInfo.feeDisplay">
 									<view class="dis j-s a-c " style="padding: 4px 6px;">
 										<text class="text1">手续费比例:<text
 												class="text2">{{orderInfo.feeOrderNewVo.exportFee[0].superviseCosts}}%</text>
@@ -237,19 +237,20 @@
 										</text>
 									</view>
 									<view class="dis j-s a-c" style="padding: 4px 6px;">
-										<text class="text1">手续费用:
+										<text class="text1">{{orderInfo.feeView?'掌柜科技币1:':'手续费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[0].superviseCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[0].superviseCostsPremiums}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[0].superviseCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[0].superviseCostsPremiums}}</text>
 											<text v-else>0</text>
 										</text>
-										<text class="text1">跟单费用:
+										<text class="text1">{{orderInfo.feeView?'掌柜科技币2:':'跟单费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[0].otherCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[0].otherCostsPremiums}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[0].otherCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[0].otherCostsPremiums}}</text>
 											<text v-else>0</text>
 										</text>
-										<text class="text1">总费用:
+
+										<text class="text1">{{orderInfo.feeView?'总科技币:':'总费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[0].totalAmount">¥{{orderInfo.feeOrderNewVo.exportFee[0].totalAmount}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[0].totalAmount">{{orderInfo.feeOrderNewVo.exportFee[0].totalAmount}}</text>
 											<text v-else>0</text>
 										</text>
 									</view>
@@ -302,7 +303,8 @@
 								<text style="color: rgba(35,40,50,0.9);">起保日期:{{orderInfo.systartdate}}</text>
 								<text style="color: rgba(35,40,50,0.9);">终保日期:{{orderInfo.syenddate}}</text>
 							</view>
-							<view class="costDetails" v-if="sypremium && orderInfo.feeOrderNewVo">
+							<view class="costDetails"
+								v-if="sypremium && orderInfo.feeOrderNewVo && orderInfo.feeDisplay">
 								<view class="dis j-s a-c " style="border-bottom: 1px solid #f2f2f2;padding: 4px 6px;">
 									<text class="text1">手续费比例:<text
 											class="text2">{{orderInfo.feeOrderNewVo.exportFee[1].superviseCosts}}%</text>
@@ -315,19 +317,19 @@
 									</text>
 								</view>
 								<view class="dis j-s a-c" style="padding: 4px 6px;">
-									<text class="text1">手续费用:
+									<text class="text1">{{orderInfo.feeView?'掌柜科技币1:':'手续费用:¥'}}
 										<text class="text2 text2-color"
-											v-if="orderInfo.feeOrderNewVo.exportFee[1].superviseCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[1].superviseCostsPremiums}}</text>
+											v-if="orderInfo.feeOrderNewVo.exportFee[1].superviseCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[1].superviseCostsPremiums}}</text>
 										<text v-else>0</text>
 									</text>
-									<text class="text1">跟单费用:
+									<text class="text1">{{orderInfo.feeView?'掌柜科技币2:':'跟单费用:¥'}}
 										<text class="text2 text2-color"
-											v-if="orderInfo.feeOrderNewVo.exportFee[1].otherCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[1].otherCostsPremiums}}</text>
+											v-if="orderInfo.feeOrderNewVo.exportFee[1].otherCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[1].otherCostsPremiums}}</text>
 										<text v-else>0</text>
 									</text>
-									<text class="text1">总费用:
+									<text class="text1">{{orderInfo.feeView?'总科技币:':'总费用:¥'}}
 										<text class="text2 text2-color"
-											v-if="orderInfo.feeOrderNewVo.exportFee[1].totalAmount">¥{{orderInfo.feeOrderNewVo.exportFee[1].totalAmount}}</text>
+											v-if="orderInfo.feeOrderNewVo.exportFee[1].totalAmount">{{orderInfo.feeOrderNewVo.exportFee[1].totalAmount}}</text>
 										<text v-else>0</text>
 									</text>
 								</view>
@@ -387,7 +389,7 @@
 								<text>¥{{jypremium}}</text>
 							</view>
 							<view v-if="jypremium && orderInfo.feeOrderNewVo" class="row d-flex a-center j-c">
-								<view class="costDetails">
+								<view class="costDetails" v-if="orderInfo.feeDisplay">
 									<view class="dis j-s a-c "
 										style="border-bottom: 1px solid #f2f2f2;padding: 4px 6px;">
 										<text class="text1">手续费比例:<text
@@ -401,20 +403,19 @@
 										</text>
 									</view>
 									<view class="dis j-s a-c" style="padding: 4px 6px;">
-										<text class="text1">手续费用:
+										<text class="text1">{{orderInfo.feeView?'掌柜科技币1:':'手续费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[2].superviseCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[2].superviseCostsPremiums}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[2].superviseCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[2].superviseCostsPremiums}}</text>
 											<text v-else>0</text>
 										</text>
-										<text class="text1">跟单费用:
+										<text class="text1">{{orderInfo.feeView?'掌柜科技币2:':'跟单费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[2].otherCostsPremiums">¥{{orderInfo.feeOrderNewVo.exportFee[2].otherCostsPremiums}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[2].otherCostsPremiums">{{orderInfo.feeOrderNewVo.exportFee[2].otherCostsPremiums}}</text>
 											<text v-else>0</text>
 										</text>
-
-										<text class="text1">总费用:
+										<text class="text1">{{orderInfo.feeView?'总科技币:':'总费用:¥'}}
 											<text class="text2 text2-color"
-												v-if="orderInfo.feeOrderNewVo.exportFee[2].totalAmount">¥{{orderInfo.feeOrderNewVo.exportFee[2].totalAmount}}</text>
+												v-if="orderInfo.feeOrderNewVo.exportFee[2].totalAmount">{{orderInfo.feeOrderNewVo.exportFee[2].totalAmount}}</text>
 											<text v-else>0</text>
 										</text>
 									</view>

+ 5 - 2
pages/wallet/preReceivedDetails.vue

@@ -8,7 +8,7 @@
 					<text>全部筛选</text>
 					<u-icon name="arrow-down-fill" color="#9A9A9A" size="16"></u-icon>
 				</view>
-				<text>预收¥{{sumAmountYS}}</text>
+				<text>{{this.feeView?'掌柜科技币:':'预收:¥'}}{{sumAmountYS}}</text>
 			</view>
 			<view :class="['dropdown-content', { 'show': showDropdown }]" @tap="searchPopup">
 				<view :class="['dropdown-content1','dis','f-c','j-s', { 'show1': showDropdown }]" @tap.stop.prevent>
@@ -82,7 +82,8 @@
 							</image>
 							<text style="margin-left: 5px;font-size: 14px;color: #333;">推广</text>
 						</view>
-						<text style="font-size: 14px;color: #333;font-weight: bold;">¥{{item.amount}}</text>
+						<text
+							style="font-size: 14px;color: #333;font-weight: bold;">{{this.feeView?'':'¥'}}{{item.amount}}</text>
 					</view>
 					<text>订单号:{{item.subOrderNo}}</text>
 					<view class="dis a-c j-s">
@@ -165,6 +166,7 @@
 
 				],
 				dataList: [],
+				feeView: null,
 			}
 		},
 		computed: {
@@ -231,6 +233,7 @@
 				if (res.code == '200') {
 					this.dataList = res.data.data.content;
 					this.sumAmountYS = res.data.sumAmountYS;
+					this.feeView = res.data.feeView;
 				}
 			},
 			searchPopup() {

+ 5 - 3
pages/wallet/transactionDetails.vue

@@ -8,8 +8,8 @@
 					<text>全部筛选</text>
 					<u-icon name="arrow-down-fill" color="#9A9A9A" size="16"></u-icon>
 				</view>
-				<text>收入¥{{sumAmountSR?sumAmountSR:0}}</text>
-				<text>支出¥{{sumAmountZC?sumAmountZC:0}}</text>
+				<text>{{feeView?'科技币收入:':'收入:¥'}}{{sumAmountSR?sumAmountSR:0}}</text>
+				<text>{{feeView?'科技币支出:':'支出:¥'}}{{sumAmountZC?sumAmountZC:0}}</text>
 			</view>
 			<view :class="['dropdown-content', { 'show': showDropdown }]" @tap="searchPopup">
 				<view :class="['dropdown-content1','dis','f-c','j-s', { 'show1': showDropdown }]" @tap.stop.prevent>
@@ -123,7 +123,7 @@
 							<text style="margin-left: 5px;font-size: 14px;color: #333;">退款</text>
 						</view>
 						<text style="font-size: 14px;font-weight: bold;"
-							:style="{ color: item.transactionType == 3 ? '#333' : '#FF5600' }">{{item.transactionType==3?'-':'+'}}¥{{item.amount}}</text>
+							:style="{ color: item.transactionType == 3 ? '#333' : '#FF5600' }">{{item.transactionType==3?'-':'+'}}{{feeView?'':'¥'}}{{item.amount}}</text>
 					</view>
 					<text v-if="!['3','4'].includes(item.transactionType)">订单号:{{item.subOrderNo}}</text>
 					<text v-if="['3','4'].includes(item.transactionType)">交易号:{{item.auditiingId}}</text>
@@ -218,6 +218,7 @@
 				],
 				incomeAndExpensesDisabled: ['0', '1', '2'],
 				transactionDisabled: ['0', '1', '2', '3', '4'],
+				feeView: null,
 			}
 		},
 		computed: {
@@ -321,6 +322,7 @@
 					this.dataList = res.data.data.content;
 					this.sumAmountSR = res.data.sumAmountSR;
 					this.sumAmountZC = res.data.sumAmountZC;
+					this.feeView = res.data.feeView;
 				} else {
 					uni.showToast({
 						title: data.msg,

+ 18 - 26
plugins/wxJsSDK.js

@@ -2,30 +2,22 @@
 //接口请求方法
 import $http from '@/config/requestConfig';
 import base from '@/config/baseUrl';
-import { publicShareFun } from '@/config/html5Utils';
+import {
+	publicShareFun
+} from '@/config/html5Utils';
 //获取地理位置
 export const getLocation = () => {
 	return new Promise((resolve, reject) => {
 		//配置校验成功后执行
-		jWeixin.ready(function () {
+		jWeixin.ready(function() {
 			// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
-			jWeixin.getLocation({
-				type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
-				success: function (res) {
-					console.log(res);
-					resolve(res);
-				},
-				fail: (err) => {
-					reject(err);
-				}
-			});
 		});
 	});
 }
 //设置分享信息
 export const setShare = (data, callback) => {
 	//配置校验成功后执行
-	jWeixin.ready(function () {
+	jWeixin.ready(function() {
 		if (!data.link) {
 			let url = window.location.href;
 			let index = url.indexOf("?");
@@ -44,7 +36,7 @@ export const setShare = (data, callback) => {
 			desc: data.desc, // 分享描述
 			link: data.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
 			imgUrl: data.imgUrl, // 分享图标
-			success: function () {
+			success: function() {
 				// 设置成功
 				callback && callback();
 			}
@@ -53,7 +45,7 @@ export const setShare = (data, callback) => {
 			title: data.title, // 分享标题
 			link: data.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
 			imgUrl: data.imgUrl, // 分享图标
-			success: function () {
+			success: function() {
 				// 设置成功
 				callback && callback();
 			}
@@ -61,19 +53,19 @@ export const setShare = (data, callback) => {
 	});
 }
 //微信扫一扫
-export const scanQRCode = ( callback,needResult = 1) => {
+export const scanQRCode = (callback, needResult = 1) => {
 	//配置校验成功后执行
-	jWeixin.ready(function () {
+	jWeixin.ready(function() {
 		jWeixin.scanQRCode({
-		  needResult: needResult, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
-		  scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
-		  success: function (res) {
-			callback && callback(res);
-		  }
+			needResult: needResult, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
+			scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
+			success: function(res) {
+				callback && callback(res);
+			}
 		});
 	});
 }
-window.onload = function () {
+window.onload = function() {
 	// 配置文件里面没有publicAppId将不激活微信SDK功能
 	if (!base.publicAppId) {
 		return;
@@ -91,12 +83,12 @@ window.onload = function () {
 			appId: base.publicAppId, // 必填,公众号的唯一标识
 			timestamp: res.timestamp, // 必填,生成签名的时间戳
 			nonceStr: res.noncestr, // 必填,生成签名的随机串
-			signature: res.signature,// 必填,签名
+			signature: res.signature, // 必填,签名
 			jsApiList: [
 				"getLocation",
 				"updateAppMessageShareData",
 				"updateTimelineShareData",
-				'onMenuShareAppMessage',  //旧的接口,即将废弃
+				'onMenuShareAppMessage', //旧的接口,即将废弃
 				'onMenuShareTimeline' //旧的接口,即将废弃
 			] // 必填,需要使用的JS接口列表
 		});
@@ -104,7 +96,7 @@ window.onload = function () {
 		publicShareFun();
 	});
 	//配置校验失败后执行
-	jWeixin.error(function (res) {
+	jWeixin.error(function(res) {
 		// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
 		console.log(res);
 	});

BIN
static/image/helpDesk/Frame.png


BIN
static/image/helpDesk/Frame1.png


BIN
static/image/helpDesk/Frame2.png


BIN
static/image/helpDesk/Frame3.png


BIN
static/image/login/shenfenzheng.png


BIN
static/img/customerService.png


BIN
static/img/customerService1.png


+ 112 - 111
style/icon.css

@@ -1,415 +1,416 @@
 @font-face {
-  font-family: "iconfont"; /* Project id 4439599 */
-  src: url('https://at.alicdn.com/t/c/font_4439599_3mdxeny2kp8.woff2?t=1724060217434') format('woff2'),
-       url('https://at.alicdn.com/t/c/font_4439599_3mdxeny2kp8.woff?t=1724060217434') format('woff'),
-       url('https://at.alicdn.com/t/c/font_4439599_3mdxeny2kp8.svg?t=1724060217434#iconfont') format('svg'),
-       url('https://at.alicdn.com/t/c/font_4439599_3mdxeny2kp8.ttf?t=1724060217434') format('truetype'),
+	font-family: "iconfont";
+	/* Project id 4439599 */
+	src: url('https://at.alicdn.com/t/c/font_4439599_mucb6b51s4g.woff2?t=1725244890044') format('woff2'),
+		url('https://at.alicdn.com/t/c/font_4439599_mucb6b51s4g.woff?t=1725244890044') format('woff'),
+		url('https://at.alicdn.com/t/c/font_4439599_mucb6b51s4g.ttf?t=1725244890044') format('truetype'),
+		url('https://at.alicdn.com/t/c/font_4439599_mucb6b51s4g.svg?t=1725244890044#iconfont') format('svg');
 }
 
 .iconfont {
-  font-family: "iconfont" !important;
-  font-size: 16px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
+	font-family: "iconfont" !important;
+	font-size: 16px;
+	font-style: normal;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
 }
 
 .icon-renwuzhongxin:before {
-  content: "\e807";
+	content: "\e66f";
 }
 
 .icon-sanjiao_fill-:before {
-  content: "\e6a0";
+	content: "\e6a0";
 }
 
 .icon-CustomerService:before {
-  content: "\e66d";
+	content: "\e66d";
 }
 
 .icon-SecurityScan:before {
-  content: "\e667";
+	content: "\e667";
 }
 
 .icon-Reconciliation:before {
-  content: "\e668";
+	content: "\e668";
 }
 
 .icon-Rocket:before {
-  content: "\e669";
+	content: "\e669";
 }
 
 .icon-Contacts:before {
-  content: "\e66a";
+	content: "\e66a";
 }
 
 .icon-Crown:before {
-  content: "\e66b";
+	content: "\e66b";
 }
 
 .icon-Read:before {
-  content: "\e66c";
+	content: "\e66c";
 }
 
 .icon-Partition:before {
-  content: "\e66e";
+	content: "\e66e";
 }
 
 .icon-iconfanhuishangyiye:before {
-  content: "\e661";
+	content: "\e661";
 }
 
 .icon-shouxianxieyidingdan1:before {
-  content: "\e666";
+	content: "\e666";
 }
 
 .icon-yiwaixianxieyi:before {
-  content: "\e662";
+	content: "\e662";
 }
 
 .icon-chexianxieyi:before {
-  content: "\e663";
+	content: "\e663";
 }
 
 .icon-qianbao:before {
-  content: "\e665";
+	content: "\e665";
 }
 
 .icon-youjiantou:before {
-  content: "\e6b5";
+	content: "\e6b5";
 }
 
 .icon-xianshimima1:before {
-  content: "\e664";
+	content: "\e664";
 }
 
 .icon-buxianshimima1:before {
-  content: "\e660";
+	content: "\e660";
 }
 
 .icon-cuowu:before {
-  content: "\e600";
+	content: "\e600";
 }
 
 .icon-saoyisao:before {
-  content: "\e607";
+	content: "\e607";
 }
 
 .icon-a-01:before {
-  content: "\e65b";
+	content: "\e65b";
 }
 
 .icon-a-04:before {
-  content: "\e65c";
+	content: "\e65c";
 }
 
 .icon-a-03:before {
-  content: "\e65d";
+	content: "\e65d";
 }
 
 .icon-Frame-2:before {
-  content: "\e65e";
+	content: "\e65e";
 }
 
 .icon-Frame-3:before {
-  content: "\e65f";
+	content: "\e65f";
 }
 
 .icon-Frame-12:before {
-  content: "\e642";
+	content: "\e642";
 }
 
 .icon-Frame-4:before {
-  content: "\e647";
+	content: "\e647";
 }
 
 .icon-Frame-15:before {
-  content: "\e649";
+	content: "\e649";
 }
 
 .icon-Frame-13:before {
-  content: "\e64c";
+	content: "\e64c";
 }
 
 .icon-Frame-9:before {
-  content: "\e64d";
+	content: "\e64d";
 }
 
 .icon-Frame-7:before {
-  content: "\e64e";
+	content: "\e64e";
 }
 
 .icon-Frame-14:before {
-  content: "\e64f";
+	content: "\e64f";
 }
 
 .icon-Frame-11:before {
-  content: "\e650";
+	content: "\e650";
 }
 
 .icon-Frame-5:before {
-  content: "\e654";
+	content: "\e654";
 }
 
 .icon-a-02:before {
-  content: "\e655";
+	content: "\e655";
 }
 
 .icon-Frame-6:before {
-  content: "\e656";
+	content: "\e656";
 }
 
 .icon-Frame-8:before {
-  content: "\e657";
+	content: "\e657";
 }
 
 .icon-Frame-10:before {
-  content: "\e658";
+	content: "\e658";
 }
 
 .icon-Frame-1:before {
-  content: "\e659";
+	content: "\e659";
 }
 
 .icon-Frame:before {
-  content: "\e65a";
+	content: "\e65a";
 }
 
 .icon-zhongguoyouzhengchuxuyinhanglogo:before {
-  content: "\e638";
+	content: "\e638";
 }
 
 .icon-zhongguonongyeyinhanglogo:before {
-  content: "\e639";
+	content: "\e639";
 }
 
 .icon-zhongguoyinhanglogo:before {
-  content: "\e63a";
+	content: "\e63a";
 }
 
 .icon-jiansheyinhanglogo:before {
-  content: "\e63b";
+	content: "\e63b";
 }
 
 .icon-jiaotongyinhanglogo:before {
-  content: "\e63c";
+	content: "\e63c";
 }
 
 .icon-zhongxinyinhanglogo:before {
-  content: "\e63d";
+	content: "\e63d";
 }
 
 .icon-zhongguoguangdayinhanglogo:before {
-  content: "\e63e";
+	content: "\e63e";
 }
 
 .icon-huaxiayinhanglogo:before {
-  content: "\e63f";
+	content: "\e63f";
 }
 
 .icon-zhongguominshengyinhanglogo:before {
-  content: "\e640";
+	content: "\e640";
 }
 
 .icon-guangfayinhanglogo:before {
-  content: "\e641";
+	content: "\e641";
 }
 
 .icon-zhaoshangyinhanglogo:before {
-  content: "\e643";
+	content: "\e643";
 }
 
 .icon-xingyeyinhanglogo:before {
-  content: "\e644";
+	content: "\e644";
 }
 
 .icon-pufayinhang:before {
-  content: "\e645";
+	content: "\e645";
 }
 
 .icon-pinganyinhanglogo:before {
-  content: "\e646";
+	content: "\e646";
 }
 
 .icon-bohaiyinhanglogo:before {
-  content: "\e648";
+	content: "\e648";
 }
 
 .icon-zheshangyinhanglogo:before {
-  content: "\e64a";
+	content: "\e64a";
 }
 
 .icon-beijingyinhanglogo:before {
-  content: "\e64b";
+	content: "\e64b";
 }
 
 .icon-changzhiyinhanglogo:before {
-  content: "\e651";
+	content: "\e651";
 }
 
 .icon-jinshangyinhanglogo:before {
-  content: "\e652";
+	content: "\e652";
 }
 
 .icon-jinchengyinhanglogo:before {
-  content: "\e653";
+	content: "\e653";
 }
 
 .icon-qinghaiyinhanglogo:before {
-  content: "\e6a6";
+	content: "\e6a6";
 }
 
 .icon-changanyinhanglogo:before {
-  content: "\e6ab";
+	content: "\e6ab";
 }
 
 .icon-guangzhouyinhanglogo:before {
-  content: "\e6bb";
+	content: "\e6bb";
 }
 
 .icon-guojiakaifayinhanglogo:before {
-  content: "\e634";
+	content: "\e634";
 }
 
 .icon-zhongguorenminyinhanglogo:before {
-  content: "\e635";
+	content: "\e635";
 }
 
 .icon-zhongguojinchukouyinhanglogo:before {
-  content: "\e636";
+	content: "\e636";
 }
 
 .icon-zhongguogongshangyinhanglogo:before {
-  content: "\e637";
+	content: "\e637";
 }
 
 .icon-chexianludan-weixuanzhong1:before {
-  content: "\e62b";
+	content: "\e62b";
 }
 
 .icon-shouxianjiesuan-weixuanzhong1:before {
-  content: "\e62c";
+	content: "\e62c";
 }
 
 .icon-feiyonghedui-weixuanzhong1:before {
-  content: "\e62d";
+	content: "\e62d";
 }
 
 .icon-dingdanchaxun-weixuanzhong1:before {
-  content: "\e62e";
+	content: "\e62e";
 }
 
 .icon-yiwaixianjiesuan-weixuanzhong1:before {
-  content: "\e62f";
+	content: "\e62f";
 }
 
 .icon-zhanghutixian-weixuanzhong1:before {
-  content: "\e630";
+	content: "\e630";
 }
 
 .icon-duizhangxitong-weixuanzhong1:before {
-  content: "\e631";
+	content: "\e631";
 }
 
 .icon-fapiaoguanli-weixuanzhong1:before {
-  content: "\e632";
+	content: "\e632";
 }
 
 .icon-chexianjiesuan-weixuanzhong1:before {
-  content: "\e633";
+	content: "\e633";
 }
 
 .icon-duizhangxitong-yixuanzhong:before {
-  content: "\e627";
+	content: "\e627";
 }
 
 .icon-duizhangxitong-weixuanzhong:before {
-  content: "\e628";
+	content: "\e628";
 }
 
 .icon-shouxianjiesuan-weixuanzhong:before {
-  content: "\e629";
+	content: "\e629";
 }
 
 .icon-shouxianjiesuan-yixuanzhong:before {
-  content: "\e62a";
+	content: "\e62a";
 }
 
 .icon-chexianludan-weixuanzhong:before {
-  content: "\e61a";
+	content: "\e61a";
 }
 
 .icon-dingdanchaxun-weixuanzhong:before {
-  content: "\e61d";
+	content: "\e61d";
 }
 
 .icon-dingdanchaxun-yixuanzhong:before {
-  content: "\e623";
+	content: "\e623";
 }
 
 .icon-chexianludan-yixuanzhong:before {
-  content: "\e624";
+	content: "\e624";
 }
 
 .icon-feiyonghedui-weixuanzhong:before {
-  content: "\e625";
+	content: "\e625";
 }
 
 .icon-feiyonghedui-yixuanzhong:before {
-  content: "\e626";
+	content: "\e626";
 }
 
 .icon-fapiaoguanli-weixuanzhong:before {
-  content: "\e61b";
+	content: "\e61b";
 }
 
 .icon-yiwaixianjiesuan-weixuanzhong:before {
-  content: "\e61c";
+	content: "\e61c";
 }
 
 .icon-up-weixuanzhong:before {
-  content: "\e61e";
+	content: "\e61e";
 }
 
 .icon-chexianjiesuan-weixuanzhong:before {
-  content: "\e61f";
+	content: "\e61f";
 }
 
 .icon-up-yixuanzhong:before {
-  content: "\e620";
+	content: "\e620";
 }
 
 .icon-down-weixuanzhong:before {
-  content: "\e621";
+	content: "\e621";
 }
 
 .icon-down-yixuanzhong:before {
-  content: "\e622";
+	content: "\e622";
 }
 
 .icon-zhankai-copy:before {
-  content: "\e6bc";
+	content: "\e6bc";
 }
 
 .icon-zhankai:before {
-  content: "\e616";
+	content: "\e616";
 }
 
 .icon-zhanghutixian-yixuanzhong:before {
-  content: "\e615";
+	content: "\e615";
 }
 
 .icon-zhanghutixian-weixuanzhong:before {
-  content: "\e617";
+	content: "\e617";
 }
 
 .icon-chexianjiesuan-yixuanzhong:before {
-  content: "\e614";
+	content: "\e614";
 }
 
 .icon-yiwaixianjiesuan-yixuanzhong:before {
-  content: "\e618";
+	content: "\e618";
 }
 
 .icon-fapiaoguanli-yixuanzhong:before {
-  content: "\e619";
-}
+	content: "\e619";
+}

Vissa filer visades inte eftersom för många filer har ändrats