Переглянути джерело

初始化项目,首页,用户页

xklr/wlj 2 роки тому
коміт
ddfb233c86

+ 17 - 0
.gitignore

@@ -0,0 +1,17 @@
+# Windows
+[Dd]esktop.ini
+Thumbs.db
+$RECYCLE.BIN/
+
+# macOS
+.DS_Store
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+
+# Node.js
+node_modules/
+unpackage
+
+.hbuilderx

+ 91 - 0
App.vue

@@ -0,0 +1,91 @@
+<script>
+	export default {
+		globalData: {
+			SET_STATUS_BAR: 0,
+			SET_CUSTOM_BAR: 0,
+			SET_SYSTEM_INFO: {}
+		},
+		onLaunch: function() {
+			console.log('App Launch')
+			uni.getSystemInfo({
+				success: (e) => {
+					let statusBar = 0
+					let customBar = 0
+
+					// #ifdef MP
+					statusBar = e.statusBarHeight
+					customBar = e.statusBarHeight + 45
+					if (e.platform === 'android') {
+						customBar = e.statusBarHeight + 50
+					}
+					// #endif
+					
+					// #ifdef MP-WEIXIN
+					statusBar = e.statusBarHeight
+			 	const custom = wx.getMenuButtonBoundingClientRect()
+					customBar = custom.bottom + custom.top - e.statusBarHeight
+					// #endif
+
+					// #ifdef MP-ALIPAY
+					statusBar = e.statusBarHeight
+					customBar = e.statusBarHeight + e.titleBarHeight
+					// #endif
+
+					// #ifdef APP-PLUS
+					console.log('app-plus', e)
+					statusBar = e.statusBarHeight
+					customBar = e.statusBarHeight + 45
+					// #endif
+
+					// #ifdef H5
+					statusBar = 0
+					customBar = e.statusBarHeight + 45
+					// #endif
+
+					this.globalData.SET_SYSTEM_INFO = e
+					this.globalData.SET_CUSTOM_BAR = customBar
+					this.globalData.SET_STATUS_BAR = statusBar
+					console.log(this.globalData)
+				}
+			})
+		},
+		onShow: function() {
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style>
+	/*每个页面公共css */
+	@import url("@/utils/style/style.css");
+	@import url("@/utils/style/icon.css");
+	@import url("@/utils/style/color.css");
+
+	page {
+		background: #f5f5f5;
+	}
+
+	.my-button {
+		border-radius: 0px;
+		transform: initial;
+		background-color: transparent;
+	}
+
+	.my-button:after {
+		border-width: 0px;
+		border-radius: 0px;
+		transform: initial;
+		background-color: transparent;
+	}
+	.bule_line{
+		
+		width: 10rpx;
+		height: 30rpx;
+		background-color: #1e8ff9 ;
+		border-radius: 6rpx;
+		box-shadow: 1px 2px 3px 1px #6ba9f9;
+	}
+</style>

+ 20 - 0
index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <script>
+      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
+        CSS.supports('top: constant(a)'))
+      document.write(
+        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
+        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+    </script>
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="/main.js"></script>
+  </body>
+</html>

+ 22 - 0
main.js

@@ -0,0 +1,22 @@
+import App from './App'
+import mf from 'utils/mf.js'
+// #ifndef VUE3
+import Vue from 'vue'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+    ...App
+})
+app.$mount()
+Vue.prototype.$mf = mf
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+  const app = createSSRApp(App)
+  return {
+    app
+  }
+}
+// #endif

+ 75 - 0
manifest.json

@@ -0,0 +1,75 @@
+{
+    "name" : "patient_h5",
+    "appid" : "",
+    "description" : "用于患者查看自己慢病就诊随访记录,和检查记录",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {},
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {
+                "ad" : {}
+            }
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "2",
+    "locale" : "auto"
+}

+ 24 - 0
pages.json

@@ -0,0 +1,24 @@
+{
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTitleText": "首页"
+			}
+		}, {
+			"path": "pages/userinfo/userinfo",
+			"style": {
+				"navigationBarTitleText": "基础资料",
+				"enablePullDownRefresh": true
+			}
+
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "慢病报告",
+		"navigationBarBackgroundColor": "#F8F8F8",
+		"backgroundColor": "#F8F8F8"
+	},
+	"uniIdRouter": {}
+}

+ 102 - 0
pages/index/index.vue

@@ -0,0 +1,102 @@
+<template>
+	<view class="">
+		<view class="header p-3">
+			<view class="fs-18 text-white">
+				个人档案
+			</view>
+			<view class="centerY mt-2">
+				<view class="w-20 userhead">
+					<view class="picbox">
+						<image src="../../static/家族史.png" mode="widthFix" class="picimg"></image>
+					</view>
+				</view>
+				<view class="w-80 ml-2">
+					<view class="text-white fs-16 font-bold">
+						{{'王老爷'}}
+					</view>
+					<view class="centerY" style="margin-top:10rpx;">
+						<view class="iconfont nv text-white fs-16 font-bold"></view>
+						<view @click="$mf.clickNavto('/pages/userinfo/userinfo')" class="text-gry80 fs-12 bg-white ml-auto"
+							style="padding:8rpx 26rpx;border-radius: 50rpx;">
+							基础资料
+						</view>
+						<view class="iconfont youla2 fs-24 text-white font-bold">
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="content p-3  bg-white mx-3 my-2 box-border08">
+			<view class="centerY mt-1">
+				<view class="bule_line d-inline-block">
+				</view>
+				<view class="ml-2 font-bold">
+					健康数据
+				</view>
+				<view class="ml-auto fs-10 text-gry">
+					更多
+				</view>
+				<view class="iconfont Chevron-Right text-gry">
+
+				</view>
+			</view>
+			<view class="centerY mt-3">
+				<view class="w-50 pr-2">
+					<image src="../../static/index/grtz.png" mode="widthFix" class="w-100"></image>
+				</view>
+				<view class="w-50 pl-1">
+					<image src="../../static/index/jkbg.png" mode="widthFix" class="w-100"></image>
+					<image src="../../static/index/dqyy.png" mode="widthFix" class="w-100 mt-2"></image>
+				</view>
+			</view>
+			<view class="mt-2">
+				<image src="../../static/index/ydjc.png" mode="widthFix" class="w-100"></image>
+			</view>
+			<view class="mt-2">
+				<image src="../../static/index/jjjc.png" mode="widthFix" class="w-100"></image>
+			</view>
+			
+		</view>
+
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				title: 'Hello'
+			}
+		},
+		onLoad() {
+			console.log(this.$mf.clickNavto)
+		},
+		methods: {
+		
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background: #F5F9FF;
+	}
+
+	.header {
+		background: linear-gradient(180deg, #096DCB 0%, #6faae1 100%)
+	}
+
+	.userhead {
+		border-radius: 50%;
+		background: rgb(255, 255, 255);
+		box-shadow: 1px 1px 10px 1px #096DCB;
+	}
+
+	.text-gry80 {
+		color: #808080;
+	}
+
+	.box-border08 {
+		border-radius: 16rpx;
+	}
+</style>

+ 143 - 0
pages/userinfo/userinfo.vue

@@ -0,0 +1,143 @@
+<template>
+	<view>
+		<view class="p-3">
+			<view class="d-flex">
+				<view class="w-100 fs-14 font-bold">
+					<view class="centerY">
+						<view class="bule_line" style="height: 26rpx;margin-top: -2rpx;"></view>
+						<text class="font-bold text-dark ml-2 fs-16 line-height1">基本信息</text>
+					</view>
+					<view class="centerY border-bottom mb-2 mt-2" style="color: #818181;">
+						<view class="w-50 mb-2">
+							<view class="mb-2">
+								姓名:{{'王老爷爷'}}
+							</view>
+							<view class="">
+								出生日期:{{'1864.02.09'}}
+							</view>
+						</view>
+						<view class="w-50 mb-2">
+							<view class="mb-2">
+								年龄:{{'160'}}
+							</view>
+							<view class="">
+								性别:{{'男'}}
+							</view>
+						</view>
+					</view>
+					<view class="centerY mb-2" style="color: #818181;">
+						<view class="w-50 mb-2">
+							<view class=" mb-2">
+								文化程度:{{'文盲'}}
+							</view>
+							<view class="">
+								职业:{{'导盲犬训练员'}}
+							</view>
+						</view>
+						<view class="w-50 mb-2">
+							<view class=" mb-2">
+								民族:{{'维吾尔族人'}}
+							</view>
+							<view class="">
+								婚姻状况:{{'未婚'}}
+							</view>
+						</view>
+					</view>
+				</view>
+				<view style="position: absolute;right: 20rpx;top: 20rpx;width: 100rpx;">
+					<view class="picbox">
+						<image src="../../static/家族史.png" mode="widthFix" class="picimg"></image>
+					</view>
+				</view>
+			</view>
+			<view class="bg-white px-3 fs-14  font-bold" style="border-radius: 16rpx;color: #818181;">
+				<view class="centerY border-bottom py-2">
+					<image src="../../static/社保.png" mode="widthFix" style="width: 40rpx;"></image>
+					<view class=" ml-1 line-height1">
+						社保卡号:{{'A1122233333'}}
+					</view>
+				</view>
+				<view class="centerY border-bottom py-2">
+					<image src="../../static/身份证.png" mode="widthFix" style="width: 40rpx;"></image>
+					<view class=" ml-1 line-height1">
+						身份证号:{{'542250213151651511'}}
+					</view>
+				</view>
+				<view class="centerY border-bottom py-2">
+					<image src="../../static/电话.png" mode="widthFix" style="width: 40rpx;"></image>
+					<view class=" ml-1 line-height1">
+						手机号码:{{'18812345678'}}
+					</view>
+				</view>
+				<view class="centerY py-2">
+					<image src="../../static/家庭.png" mode="widthFix" style="width: 40rpx;"></image>
+					<view class=" ml-1 line-height1">
+						家庭住址:{{'浙江省杭州市西湖区XX街道'}}
+					</view>
+				</view>
+			</view>
+			<view class="d-flex mt-2  font-bold"  style="color: #818181;">
+				<view class="py-1 mt-1 fs-14 space-nowrap">
+					医保类型:
+				</view>
+				<view class="fs-10 w-100">
+					<span class="mr-1 text-center py-1 mt-2 d-inline-block w-20" 
+						:style="{borderRadius:'50rpx',background:index==1?'#1890FF':'#EBEBEB',color:index==1?'#fff':'#A4A4A4'}"
+					 v-for="(item,index) in ['城镇医保','公费医保','系农村','商业保险','自费']">
+						{{item}}
+					</span>
+				</view>
+			</view>
+			<view class="d-flex mt-2 font-bold"  style="color: #818181;">
+				<view class="mt-1 py-1 fs-14 space-nowrap font-bold">
+					慢病类型:
+				</view>
+				<view class="fs-10 w-100">
+					<span class="mr-1 text-center py-1 mt-2 d-inline-block w-20" 
+						:style="{borderRadius:'50rpx',background:index==1?'#1890FF':'#EBEBEB',color:index==1?'#fff':'#A4A4A4'}"
+					 v-for="(item,index) in ['高血压','糖尿病','合并症','无']">
+						{{item}}
+					</span>
+				</view>
+			</view>
+			<view class="d-flex mt-2 font-bold"  style="color: #818181;">
+				<view class="mt-1 py-1 fs-14 space-nowrap font-bold">
+					糖尿病病龄:
+				</view>
+				<view class="fs-10 w-100">
+					<span class="mr-1 text-center py-1 mt-2 d-inline-block w-20" 
+						:style="{borderRadius:'50rpx',background:index==1?'#1890FF':'#EBEBEB',color:index==1?'#fff':'#A4A4A4'}"
+					 v-for="(item,index) in ['30年']">
+						{{item}}
+					</span>
+				</view>
+			</view>
+			<view class=" mt-2 bg-white p-3 fs-14  font-bold" style="border-radius: 16rpx;color: #818181;">
+				<view class="centerY">
+					<view class="bule_line" style="height: 26rpx;margin-top: -2rpx;"></view>
+					<text class="font-bold text-dark ml-2 fs-16 line-height1">其他信息</text>
+				</view>
+				<view class="centerY">
+					
+				</view>
+			</view>
+			
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background: #F5F9FF;
+	}
+</style>

BIN
static/index/dqyy.png


BIN
static/index/grtz.png


BIN
static/index/jjjc.png


BIN
static/index/jkbg.png


BIN
static/index/ydjc.png


BIN
static/合并.png


BIN
static/咸淡.png


BIN
static/家庭.png


BIN
static/家族史.png


BIN
static/电话.png


BIN
static/疾病史.png


BIN
static/社保.png


BIN
static/身份证.png


+ 76 - 0
uni.scss

@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;

+ 921 - 0
utils/js/public.js

@@ -0,0 +1,921 @@
+const md = {
+	empty:(val)=>{
+		if(val.length==0||val.replace(/\s/g, "").length==0||!val){
+			return true
+		}
+		// if(isNull(val)||typeof val=='object'&&Object.keys(val).length === 0|| typeof val != "undefined" ){
+			
+		// }
+	},
+	
+	/**
+	 * @removeSpace 检查图片是否存在
+	 * imgUrl 图片链接
+	 */
+	checkImg: (imgUrl) => {
+			if(imgUrl.length<0){
+				return false
+			}
+			var ImgObj = new Image();
+			ImgObj.src = imgUrl;
+				console.log(ImgObj,(ImgObj.width > 0 && ImgObj.height > 0))
+			if (ImgObj.fileSize > 0 || (ImgObj.width > 0 && ImgObj.height > 0)) {
+				return true;
+			} else {
+				return false;
+			}
+	},
+	/**
+	 * @removeSpace 去空格
+	 * value 需要清除空格的字符串
+	 */
+	removeSpace: (value) => {
+		return value.replace(/\s+/g, "");
+	},
+	/**
+	 * @dedupe 数组去重
+	 * array 数组
+	 */
+	dedupe: (array) => {
+		return Array.from(new Set(array))
+	},
+	/**
+	 * @dedupe 对象去重
+	 * obj 对象
+	 */
+	dedupeObject: (obj) => {
+		let uniques = [];
+		let stringify = {};
+		for (let i = 0; i < obj.length; i++) {
+			let keys = Object.keys(obj[i]);
+			keys.sort(function(a, b) {
+				return (Number(a) - Number(b));
+			});
+			let str = '';
+			for (let j = 0; j < keys.length; j++) {
+				str += JSON.stringify(keys[j]);
+				str += JSON.stringify(obj[i][keys[j]]);
+			}
+			if (!stringify.hasOwnProperty(str)) {
+				uniques.push(obj[i]);
+				stringify[str] = true;
+			}
+		}
+		uniques = uniques;
+		return uniques;
+	},
+	/**@unique
+	 * 去重
+	 * arr 数组
+	 */
+	unique: (arr) => {
+		if (Array.hasOwnProperty('from')) {
+			return Array.from(new Set(arr));
+		} else {
+			var n = {},
+				r = [];
+			for (var i = 0; i < arr.length; i++) {
+				if (!n[arr[i]]) {
+					n[arr[i]] = true;
+					r.push(arr[i]);
+				}
+			}
+			return r;
+		}
+	},
+	/**
+	 * @getProperty 获取&设置元素属性
+	 * el html元素
+	 * name html元素属性名称
+	 * val html元素属性名称的值
+	 */
+	getProperty: (el, name, val) => {
+		const prefix = 'data-'
+		name = prefix + name
+		if (val) {
+			return el.setAttribute(name, val)
+		} else {
+			return el.getAttribute(name)
+		}
+	},
+	/**
+	 * @hasClass 判断是否已存在class
+	 * el html元素
+	 * className html class名称
+	 */
+	hasClass: (el, className) => {
+		let reg = new RegExp('(^|\\s)' + className + '(\\s|$)')
+		return reg.test(el.className)
+	},
+	/**
+	 * @addClass 添加class
+	 * el html元素
+	 * className html class名称
+	 */
+	addClass: (el, className) => {
+		if (this.hasClass(el, className)) {
+			return
+		}
+		let newClass = el.className.split(' ')
+		newClass.push(className)
+		el.className = newClass.join(' ')
+	},
+	/**
+	 * @getHost 获取域名主机
+	 * url 当前页面地址
+	 * className html class名称
+	 */
+	getHost: (url) => {
+		let host = "null";
+		if (typeof url == "undefined" || null == url) {
+			url = window.location.href;
+		}
+		let regex = /^\w+\:\/\/([^\/]*).*/;
+		let match = url.match(regex);
+		if (typeof match != "undefined" && null != match) {
+			host = match[1];
+		}
+		return host;
+	},
+	/**
+	 * @cutstr 截取字符串长度多余用....代替
+	 * str 字符串
+	 * len 需要长度
+	 */
+	cutstr: (str, len) => {
+		let temp;
+		let icount = 0;
+		let patrn = /[^\x00-\xff]/;
+		let strre = "";
+		for (let i = 0; i < str.length; i++) {
+			if (icount < len - 1) {
+				temp = str.substr(i, 1);
+				if (patrn.exec(temp) == null) {
+					icount = icount + 1;
+				} else {
+					icount = icount + 2;
+				}
+				strre += temp;
+			} else {
+				break
+			}
+		}
+		return strre + "...";
+	},
+
+	/**@fun_date
+	 * 获取时间区间
+	 * num 为负数就是日期往前,正数日期往后
+	 */
+	fun_date: (num) => {
+		let date1 = new Date();
+		//今天时间
+		let time1 = date1.getFullYear() + "-" + (date1.getMonth() + 1) + "-" + date1.getDate()
+		let date2 = new Date(date1);
+		date2.setDate(date1.getDate() + num);
+		//num是正数表示之后的时间,num负数表示之前的时间,0表示今天
+		let time2 = date2.getFullYear() + "-" + (date2.getMonth() + 1) + "-" + date2.getDate();
+		return {
+			start: time1,
+			end: time2
+		};
+	},
+	/**@isMobile
+	 * 获取手机;类型
+	 *callback 判断手机&电脑后的操作   type: function
+	 */
+	isMobile: (callback) => {
+		let isMobile1 = {
+			Android: function() {
+				return navigator.userAgent.match(/Android/i) ? true : false;
+			},
+			BlackBerry: function() {
+				return navigator.userAgent.match(/BlackBerry/i) ? true : false;
+			},
+			iOS: function() {
+				return navigator.userAgent.match(/iPhone|iPad|iPod/i) ? true : false;
+			},
+			Windows: function() {
+				return navigator.userAgent.match(/IEMobile/i) ? true : false;
+			},
+			any: function() {
+				return (isMobile1.Android() || isMobile1.BlackBerry() || isMobile1.iOS() || isMobile1
+					.Windows());
+			}
+		};
+		callback(isMobile1)
+	},
+	/**@decimal
+	 * 增加小数点后
+	 * num 修改数值          type: number
+	 * digit 增加小数后几位   type: number
+	 */
+	decimal: (num, digit) => {
+		if (parseInt(num) !== parseFloat(num)) {
+			return num
+		}
+		if (typeof num == 'number') {
+			num = num || 0;
+			let f = num.toFixed(digit);
+			return f
+		} else {
+			// console.error('请输入数值')
+			let f = 0;
+			return f.toFixed(digit)
+		}
+	},
+	/**@timeTrans
+	 * 时间转换
+	 * time    时间         type: time
+	 * format  时间类型     type: String ('Y/M/D h:m:s') 
+	 */
+	timeTrans: ({
+		time,
+		format
+	}) => {
+		let timer = time || new Date();
+		let date = new Date(timer);
+		let obj = {
+			Y: '',
+			M: '',
+			D: '',
+			h: '',
+			m: '',
+			s: ''
+		}
+		obj.Y = date.getFullYear();
+		obj.M = date.getMonth() + 1;
+		obj.M = obj.M < 10 ? "0" + obj.M : obj.M;
+		obj.D = date.getDate();
+		obj.D = obj.D < 10 ? "0" + obj.D : obj.D;
+		obj.h = date.getHours();
+		obj.h = obj.h < 10 ? "0" + obj.h : obj.h;
+		obj.m = date.getMinutes();
+		obj.m = obj.m < 10 ? "0" + obj.m : obj.m;
+		obj.s = date.getSeconds();
+		obj.s = obj.s < 10 ? "0" + obj.s : obj.s;
+		if (format) {
+			let str = '';
+			for (let index in format) {
+				str += `${obj[format[index]] || format[index]}`;
+			}
+			return str;
+		} else {
+			return `${obj.Y}-${obj.M}-${obj.D}`
+		}
+	},
+	/**@injectScript
+	 * 动态引入js
+	 * src    引入地址 url
+	 */
+	injectScript: (src) => {
+		const s = document.createElement('script');
+		s.type = 'text/javascript';
+		s.async = true;
+		s.src = src;
+		const t = document.getElementsByTagName('script')[0];
+		t.parentNode.insertBefore(s, t);
+	},
+	/**@download
+	 * 根据url地址下载
+	 * src    地址 url
+	 */
+	download: (url) => {
+		var isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
+		var isSafari = navigator.userAgent.toLowerCase().indexOf('safari') > -1;
+		if (isChrome || isSafari) {
+			var link = document.createElement('a');
+			link.href = url;
+			if (link.download !== undefined) {
+				var fileName = url.substring(url.lastIndexOf('/') + 1, url.length);
+				link.download = fileName;
+			}
+			if (document.createEvent) {
+				var e = document.createEvent('MouseEvents');
+				e.initEvent('click', true, true);
+				link.dispatchEvent(e);
+				return true;
+			}
+		}
+		if (url.indexOf('?') === -1) {
+			url += '?download';
+		}
+		window.open(url, '_self');
+		return true;
+	},
+	/**@getScrollPosition
+	 * 获取滚动的坐标
+	 */
+	getScrollPosition: (el = window) => ({
+		x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft,
+		y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop
+	}),
+	/**@scrollToTop
+	 * 滚动到顶部
+	 */
+	scrollToTop: () => {
+		const c = document.documentElement.scrollTop || document.body.scrollTop;
+		if (c > 0) {
+			window.requestAnimationFrame(this.scrollToTop);
+			window.scrollTo(0, c - c / 8);
+		}
+	},
+	/**@elementIsVisibleInViewport
+	 * el是否在视口范围内
+	 * el 为div视图
+	 */
+	elementIsVisibleInViewport: (el, partiallyVisible = false) => {
+		const {
+			top,
+			left,
+			bottom,
+			right
+		} = el.getBoundingClientRect();
+		const {
+			innerHeight,
+			innerWidth
+		} = window;
+		return partiallyVisible ?
+			((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) &&
+			((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth)) :
+			top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth;
+	},
+	/**@shuffle
+	 * 洗牌算法随机
+	 * arr 需要随机排序的数组
+	 */
+	shuffle: (arr) => {
+		var result = [],
+			random;
+		while (arr.length > 0) {
+			random = Math.floor(Math.random() * arr.length);
+			result.push(arr[random])
+			arr.splice(random, 1)
+		}
+		return result;
+	},
+	/**@copyTextToClipboard
+	 * 劫持粘贴板
+	 * value
+	 */
+	copyTextToClipboard: (value) => {
+		var textArea = document.createElement("textarea");
+		textArea.style.background = 'transparent';
+		textArea.value = value;
+		document.body.appendChild(textArea);
+		textArea.select();
+		try {
+			var successful = document.execCommand('copy');
+		} catch (err) {
+			console.log('Oops, unable to copy');
+		}
+		document.body.removeChild(textArea);
+	},
+	/**@random
+	 * 随机数范围
+	 * min 最小的数
+	 * max 最大的数
+	 */
+	random: function(min, max) {
+		if (arguments.length === 2) {
+			return Math.floor(min + Math.random() * ((max + 1) - min))
+		} else {
+			return null;
+		}
+	},
+	/**@numberToChinese
+	 * 将阿拉伯数字翻译成中文的大写数字
+	 * num 数字
+	 */
+	numberToChinese: (num) => {
+		var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十");
+		var BB = new Array("", "十", "百", "仟", "萬", "億", "点", "");
+		var a = ("" + num).replace(/(^0*)/g, "").split("."),
+			k = 0,
+			re = "";
+		for (var i = a[0].length - 1; i >= 0; i--) {
+			switch (k) {
+				case 0:
+					re = BB[7] + re;
+					break;
+				case 4:
+					if (!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$")
+						.test(a[0]))
+						re = BB[4] + re;
+					break;
+				case 8:
+					re = BB[5] + re;
+					BB[7] = BB[5];
+					k = 0;
+					break;
+			}
+			if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0)
+				re = AA[0] + re;
+			if (a[0].charAt(i) != 0)
+				re = AA[a[0].charAt(i)] + BB[k % 4] + re;
+			k++;
+		}
+		if (a.length > 1) // 加上小数部分(如果有小数部分)
+		{
+			re += BB[6];
+			for (var i = 0; i < a[1].length; i++)
+				re += AA[a[1].charAt(i)];
+		}
+		if (re == '一十')
+			re = "十";
+		if (re.match(/^一/) && re.length == 3)
+			re = re.replace("一", "");
+		return re;
+	},
+	/**@contains
+	 * 判断一个元素是否在数组中
+	 * arr 数组
+	 * val 元素
+	 */
+	contains: (arr, val) => {
+		return arr.indexOf(val) != -1 ? true : false;
+	},
+	/**@sort
+	 * 数组排序
+	 * {type} 1:从小到大 2:从大到小 3:随机
+	 * arr 数组
+	 */
+	sort: (arr, type) => {
+		return arr.sort((a, b) => {
+			switch (type) {
+				case 1:
+					return a - b;
+				case 2:
+					return b - a;
+				case 3:
+					return Math.random() - 0.5;
+				default:
+					return arr;
+			}
+		})
+	},
+
+	/**@union
+	 * 两个集合的并集
+	 * a, b 数组
+	 */
+	union: function(a, b) {
+		var newArr = a.concat(b);
+		return this.unique(newArr);
+	},
+	/**@intersect
+	 * 求两个集合的交集
+	 * a, b 数组
+	 */
+	intersect: (a, b) => {
+		var _this = this;
+		a = this.unique(a);
+		return this.map(a, function(o) {
+			return _this.contains(b, o) ? o : null;
+		});
+	},
+	/**@removearr
+	 * 删除其中一个元素
+	 * ele 元素
+	 * arr 数组
+	 */
+	removearr: (arr, ele) => {
+		var index = arr.indexOf(ele);
+		if (index > -1) {
+			arr.splice(index, 1);
+		}
+		return arr;
+	},
+	/**@formArray
+	 * 将类数组转换为数组
+	 * ary 类数组
+	 */
+	formArray: (ary) => {
+		var arr = [];
+		if (Array.isArray(ary)) {
+			arr = ary;
+		} else {
+			arr = Array.prototype.slice.call(ary);
+		};
+		return arr;
+	},
+	/**@max
+	 * 数组中最大值
+	 * arr 数组
+	 */
+	max: (arr) => {
+		return Math.max.apply(null, arr);
+	},
+	/**@min
+	 * 数组中最小值
+	 * arr 数组
+	 */
+	min: (arr) => {
+		return Math.min.apply(null, arr);
+	},
+	/**@sum
+	 * 数组中 和
+	 * arr 数组
+	 */
+	sum: (arr) => {
+		return arr.reduce((pre, cur) => {
+			return pre + cur
+		})
+	},
+	/**@average
+	 * 数组中 平均值
+	 * arr 数组
+	 */
+	average: (arr) => {
+		return this.sum(arr) / arr.length
+	},
+	/**@isObjectEqual
+	 * 数判断两个对象是否键值相同
+	 * a, b 对象
+	 */
+	isObjectEqual: (a, b) => {
+		var aProps = Object.getOwnPropertyNames(a);
+		var bProps = Object.getOwnPropertyNames(b);
+		if (aProps.length !== bProps.length) {
+			return false;
+		}
+		for (var i = 0; i < aProps.length; i++) {
+			var propName = aProps[i];
+
+			if (a[propName] !== b[propName]) {
+				return false;
+			}
+		}
+		return true;
+	},
+	/**@throttle
+	 * 节流函数--规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
+	 * fun 监控的函数
+	 * delay 触发时间
+	 */
+	throttle: (fun, delay) => {
+		let last, deferTimer
+		return function(args) {
+			let that = this
+			let _args = args
+			let now = +new Date()
+			if (last && now < last + delay) {
+				clearTimeout(deferTimer)
+				deferTimer = setTimeout(function() {
+					last = now
+					fun.apply(that, _args)
+				}, delay)
+			} else {
+				last = now
+				fun.apply(that, _args)
+			}
+		}
+	},
+	/**@debouncer
+	 * 防抖
+	 * fn 方法
+	 * w 间隔时间
+	 * im  true 直接触发,false定时触发
+	 */
+	debouncer: (fn, w, im) => {
+		var T;
+		return function() {
+			var t = this;
+			let a = arguments;
+			if (T) clearTimeout(T);
+			if (im) {
+				// 如果已经执行过,不再执行
+				var cN = !T;
+				T = setTimeout(function() {
+					T = null;
+				}, w)
+				if (cN) fn.apply(t, a)
+			} else {
+				T = setTimeout(function() {
+					fn.apply(t, a)
+				}, w);
+			}
+		}
+	},
+	/**@ArrayObjSort
+	 * 数组对象排序
+	 * ArrayObj 数组对象
+	 * key 对象中的key
+	 * sequence 排序方法 'a-b','b-a'
+	 */
+	ArrayObjSort: (ArrayObj, key, sequence) => {
+		function sortkey(a, b) {
+			switch (sequence) {
+				case 'a-b':
+					return a[key] - b[key];
+				case 'b-a':
+					return b[key] - a[key];
+			}
+		}
+		ArrayObj.sort(sortkey);
+		return ArrayObj;
+	},
+	/**@randomString
+	 * 获取唯一值
+	 * 
+	 */
+	uniqueStr: () => {
+		return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+			var r = Math.random() * 16 | 0,
+				v = c == 'x' ? r : (r & 0x3 | 0x8);
+			return v.toString(16);
+		});
+	},
+	/**@randomString
+	 * 获取随机值
+	 * e 随机值的长度
+	 */
+	randomStr: (e) => {
+		// let dateStr = Date.now();//13
+		e = e || 32;
+		var t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789",
+			a = t.length,
+			n = "";
+		for (let i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a));
+		return n //+dateStr
+	}
+}
+//验证规则
+const regExp = {
+	//手机
+	phone: (s) => {
+		return /^(1[3-9])\d{9}$/.test(s)
+	},
+	//邮箱
+	isEmail: (s) => {
+		return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
+	},
+	//手机号码
+	isMobile: (s) => {
+		return /^1[0-9]{10}$/.test(s)
+	},
+	//电话号码
+	isPhone: (s) => {
+		return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
+	},
+	//是否url地址
+	isURL: (s) => {
+		return /^http[s]?:\/\/.*/.test(s)
+	},
+	// 首字母大写
+	isCapital: (s) => {
+		return /\b[^\Wa-z][^\WA-Z]*\b/g.test(s);
+	},
+	//是否字符串
+	isString: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'String'
+	},
+	//是否数字
+	isNumber: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
+	},
+	//是否boolean
+	isBoolean: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
+	},
+	//是否函数
+	isFunction: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
+	},
+	//是否为null
+	isNull: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
+	},
+	//是否undefined
+	isUndefined: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
+	},
+	//是否对象
+	isObj: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
+	},
+	//是否数组
+	isArray: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
+	},
+	//是否时间
+	isDate: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Date'
+	},
+	//是否正则
+	isRegExp: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'RegExp'
+	},
+	//是否错误对象
+	isError: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Error'
+	},
+	//是否Symbol函数
+	isSymbol: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Symbol'
+	},
+	//是否Promise对象
+	isPromise: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Promise'
+	},
+	//是否Set对象
+	isSet: (o) => {
+		return Object.prototype.toString.call(o).slice(8, -1) === 'Set'
+	},
+	//是否是微信浏览器
+	isWeiXin: () => {
+		var ua = window.navigator.userAgent.toLowerCase();
+		return ua.match(/microMessenger/i) == 'micromessenger'
+	},
+	//是否是移动端
+	isDeviceMobile: () => {
+		var ua = window.navigator.userAgent.toLowerCase();
+		return /android|webos|iphone|ipod|balckberry/i.test(ua)
+	},
+	//是否是QQ浏览器
+	isQQBrowser: () => {
+		var ua = window.navigator.userAgent.toLowerCase();
+		return !!ua.match(/mqqbrowser|qzone|qqbrowser|qbwebviewtype/i)
+	},
+	//是否ios
+	isIos: () => {
+		var u = navigator.userAgent;
+		if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { //安卓手机
+			return false
+		} else if (u.indexOf('iPhone') > -1) { //苹果手机
+			return true
+		} else if (u.indexOf('iPad') > -1) { //iPad
+			return false
+		} else if (u.indexOf('Windows Phone') > -1) { //winphone手机
+			return false
+		} else {
+			return false
+		}
+	},
+	//是否为PC端
+	isPC: () => {
+		var userAgentInfo = window.navigator.userAgent;
+		var Agents = ["Android", "iPhone",
+			"SymbianOS", "Windows Phone",
+			"iPad", "iPod"
+		];
+		var flag = true;
+		for (var v = 0; v < Agents.length; v++) {
+			if (userAgentInfo.indexOf(Agents[v]) > 0) {
+				flag = false;
+				break;
+			}
+		}
+		return flag;
+	},
+	// 严格的身份证校验
+	isCardID: (sId) => {
+		if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
+			console.log('你输入的身份证长度或格式错误')
+			return false
+		}
+		//身份证城市
+		var aCity = {
+			11: "北京",
+			12: "天津",
+			13: "河北",
+			14: "山西",
+			15: "内蒙古",
+			21: "辽宁",
+			22: "吉林",
+			23: "黑龙江",
+			31: "上海",
+			32: "江苏",
+			33: "浙江",
+			34: "安徽",
+			35: "福建",
+			36: "江西",
+			37: "山东",
+			41: "河南",
+			42: "湖北",
+			43: "湖南",
+			44: "广东",
+			45: "广西",
+			46: "海南",
+			50: "重庆",
+			51: "四川",
+			52: "贵州",
+			53: "云南",
+			54: "西藏",
+			61: "陕西",
+			62: "甘肃",
+			63: "青海",
+			64: "宁夏",
+			65: "新疆",
+			71: "台湾",
+			81: "香港",
+			82: "澳门",
+			91: "国外"
+		};
+		if (!aCity[parseInt(sId.substr(0, 2))]) {
+			console.log('你的身份证地区非法')
+			return false
+		}
+		// 出生日期验证
+		var sBirthday = (sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2)))
+			.replace(/-/g,
+				"/"),
+			d = new Date(sBirthday)
+		if (sBirthday != (d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate())) {
+			console.log('身份证上的出生日期非法')
+			return false
+		}
+		// 身份证号码校验
+		var sum = 0,
+			weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
+			codes = "10X98765432"
+		for (var i = 0; i < sId.length - 1; i++) {
+			sum += sId[i] * weights[i];
+		}
+		var last = codes[sum % 11]; //计算出来的最后一位身份证号码
+		// console.log(last)
+		if (sId[sId.length - 1] != last) {
+			console.log('你输入的身份证号非法')
+			return false
+		}
+		return true
+	}
+}
+// 获取IP
+const ipurl = 'https://pv.sohu.com/cityjson?ie=utf-8';
+const _try_ = (callback) => {
+	try {
+		callback()
+	} catch (error) {
+		// console.log(1);
+		// uni ? uni.hideLoading() : alert('未知错误');
+	}
+};
+
+export{
+	md, //
+	regExp, //验证规则
+	ipurl, //ip
+	_try_
+}
+// 移动端适配方案
+(function(doc, win) {
+	var docEl = doc.documentElement,
+		resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
+		recalc = function() {
+			var clientWidth = docEl.clientWidth;
+			var fontSize = 20;
+			docEl.style.fontSize = fontSize + 'px';
+			var docStyles = getComputedStyle(docEl);
+			var realFontSize = parseFloat(docStyles.fontSize);
+			var scale = realFontSize / fontSize;
+			console.log("realFontSize: " + realFontSize + ", scale: " + scale);
+			fontSize = clientWidth / 667 * 20;
+			if (isIphoneX()) fontSize = 19;
+			fontSize = fontSize / scale;
+			docEl.style.fontSize = fontSize + 'px';
+		};
+	// Abort if browser does not support addEventListener
+	if (!doc.addEventListener) return;
+	win.addEventListener(resizeEvt, recalc, false);
+	doc.addEventListener('DOMContentLoaded', recalc, false);
+
+	// iphoneX判断
+	function isIphoneX() {
+		return /iphone/gi.test(navigator.userAgent) && (win.screen.height == 812 && win.screen.width == 375)
+	}
+
+})(document, window);
+
+// (!function (d) {
+//     var c = d.document;
+//     var a = c.documentElement;
+//     var b = d.devicePixelRatio;
+//     var f;
+
+//     function e() {
+//         var h = a.getBoundingClientRect().width, g;
+//         if (b === 1) {
+//             h = 720
+//         }
+//         if (h > 720) h = 720;//设置基准值的极限值
+//         g = h / 7.2;
+//         a.style.fontSize = g + "px"
+//     }
+
+//     if (b > 2) {
+//         b = 3
+//     } else {
+//         if (b > 1) {
+//             b = 2
+//         } else {
+//             b = 1
+//         }
+//     }
+//     a.setAttribute("data-dpr", b);
+//     d.addEventListener("resize", function () {
+//         clearTimeout(f);
+//         f = setTimeout(e, 200)
+//     }, false);
+//     e()
+// })(window);

Різницю між файлами не показано, бо вона завелика
+ 3 - 0
utils/js/sdk/qqmap-wx-jssdk.min.js


+ 26 - 0
utils/mf.js

@@ -0,0 +1,26 @@
+export default {
+	clickNavto: (path, type) => {
+		// console.log(path, type)
+		if (type == 'redirect') {
+			uni.redirectTo({
+				url: path
+			})
+		}
+		if (type == 'switchTab') {
+			uni.switchTab({
+				url: path
+			})
+		}
+		if (type == 'navigateBack') {
+			uni.navigateBack({
+				delta: 1
+			})
+		}
+		if (!type) {
+			uni.navigateTo({
+				url: path
+			})
+		}
+
+	}
+}

+ 151 - 0
utils/style/color.css

@@ -0,0 +1,151 @@
+/* 字体颜色 */
+.text-primary {
+	color: #1890ff !important;
+}
+
+.text-green{
+	color: #55aa00 !important;
+}
+.text-orange {
+	color: orangered  !important;
+}
+
+.text-error {
+	color: red !important;
+}
+
+.text-gry {
+	color: #888  !important;
+}
+.text-warning {
+	color: #ffc107 !important;
+}
+
+.text-gry2 {
+	color: #666666  !important;
+}
+.text-gry3 {
+	color: #555555  !important;
+}
+
+.text-white {
+	color: #FFFFFF !important;
+}
+.text-white1 {
+	color: #e7e7e7  !important;
+}
+.text-dark{
+	color: #000  !important;
+}
+.cursor-pointer {
+	cursor: pointer;
+}
+
+/* 背景色 */
+.bg-white {
+	background-color: #FFFFFF;
+}
+.bg-gry{
+	background-color: #e3e3e3  !important;
+}
+.bg-gry2{
+	background-color: #F7F7F7  !important;
+}
+.bg-green{
+	background-color: #6cd800 !important;
+}
+.bg-primary {
+	background-color: #1890ff !important;
+}
+.bg-error {
+	background-color: #FF6767 !important;
+}
+.bg-white2{
+	background-color: #f7f8fa !important;
+}
+
+/* 字体 */
+.fs-8 {
+	font-size: 8px !important;
+}
+.fs-10 {
+	font-size: 10px !important;
+}
+.fs-12 {
+	font-size: 12px !important;
+}
+.fs-14 {
+	font-size: 14px !important;
+}
+.fs-16 {
+	font-size: 16px !important;
+}
+.fs-18 {
+	font-size: 18px !important;
+}
+.fs-20 {
+	font-size: 20px !important;
+}
+.fs-22 {
+	font-size: 22px !important;
+}
+.fs-24 {
+	font-size: 24px !important;
+}
+.fs-26 {
+	font-size: 26px !important;
+}
+.fs-28 {
+	font-size: 28px !important;
+}
+.fs-30 {
+	font-size: 30px !important;
+}
+.fs-40 {
+	font-size: 40px !important;
+}
+
+/* border */
+
+.border-primary {
+	border-color: #007bff !important;
+}
+
+.border-secondary {
+	border-color: #6c757d !important;
+}
+
+.border-success {
+	border-color: #28a745 !important;
+}
+
+.border-info {
+	border-color: #17a2b8 !important;
+}
+
+.border-warning {
+	border-color: #ffc107 !important;
+}
+
+.border-danger {
+	border-color: #dc3545 !important;
+}
+
+.border-light {
+	border-color: #f8f9fa !important;
+}
+
+.border-dark {
+	border-color: #343a40 !important;
+}
+
+.border-white {
+	border-color: #fff !important;
+}
+.border-light2 {
+	border-color: #e6e6e7 !important;
+}
+.box-shadow{
+	box-shadow: 1px 1px 10px 1px #dddddd;
+}
+

+ 197 - 0
utils/style/color_match.css

@@ -0,0 +1,197 @@
+/* 马卡龙 */
+.text-group-color11 {
+	color: #efcd8d;
+}
+
+.text-group-color12 {
+	color: #d98884;
+}
+
+.text-group-color13 {
+	color: #a1caa0;
+}
+
+.text-group-color14 {
+	color: #f2e5d8;
+}
+
+.bg-group-color11 {
+	background: #efcd8d;
+}
+
+.bg-group-color12 {
+	background: #d98884;
+}
+
+.bg-group-color13 {
+	background: #a1caa0;
+}
+
+.bg-group-color14 {
+	background: #f2e5d8;
+}
+
+/* 莫兰迪 */
+.text-group-color21 {
+	color: #cbc69e;
+}
+
+.text-group-color22 {
+	color: #bbb5b7;
+}
+
+.text-group-color23 {
+	color: #906b62;
+}
+
+.text-group-color24 {
+	color: #636b5e;
+}
+
+.bg-group-color21 {
+	background: #cbc69e;
+}
+
+.bg-group-color22 {
+	background: #bbb5b7;
+}
+
+.bg-group-color23 {
+	background: #906b62;
+}
+
+.bg-group-color24 {
+	background: #636b5e;
+}
+
+/* 蒙德里安 */
+.text-group-color31 {
+	color: #f0bba4;
+}
+
+.text-group-color32 {
+	color: #ae4028;
+}
+
+.text-group-color33 {
+	color: #60cdf8;
+}
+
+.text-group-color34 {
+	color: #f54d88;
+}
+
+.bg-group-color31 {
+	background: #f0bba4;
+}
+
+.bg-group-color32 {
+	background: #ae4028;
+}
+
+.bg-group-color33 {
+	background: #60cdf8;
+}
+
+.bg-group-color34 {
+	background: #f54d88;
+}
+
+/* 洛可可 */
+.text-group-color41 {
+	color: #e6d9a4;
+}
+
+.text-group-color42 {
+	color: #7c5e15;
+}
+
+.text-group-color43 {
+	color: #a2b6aa;
+}
+
+.text-group-color44 {
+	color: #d17045;
+}
+
+.bg-group-color41 {
+	background: #e6d9a4;
+}
+
+.bg-group-color42 {
+	background: #7c5e15;
+}
+
+.bg-group-color43 {
+	background: #a2b6aa;
+}
+
+.bg-group-color44 {
+	background: #d17045;
+}
+
+/* 孟菲斯 */
+.text-group-color51 {
+	color: #1fa2a6;
+}
+
+.text-group-color52 {
+	color: #ff7254;
+}
+
+.text-group-color53 {
+	color: #5a9b85;
+}
+
+.text-group-color54 {
+	color: #eda3ac;
+}
+
+.bg-group-color51 {
+	background: #1fa2a6;
+}
+
+.bg-group-color52 {
+	background: #ff7254;
+}
+
+.bg-group-color53 {
+	background: #5a9b85;
+}
+
+.bg-group-color54 {
+	background: #eda3ac;
+}
+
+/* 中国风 */
+.text-group-color61 {
+	color: #e74a2d;
+}
+
+.text-group-color62 {
+	color: #89b87b;
+}
+
+.text-group-color63 {
+	color: #eaa58a;
+}
+
+.text-group-color64 {
+	color: #9c5045;
+}
+
+.bg-group-color61 {
+	background: #e74a2d;
+}
+
+.bg-group-color62 {
+	background: #89b87b;
+}
+
+.bg-group-color63 {
+	background: #eaa58a;
+}
+
+.bg-group-color64 {
+	background: #9c5045;
+}

+ 7 - 0
utils/style/h5.css

@@ -0,0 +1,7 @@
+.popup-content{
+	background-color: #fff;
+	border-radius: 10px;
+}
+.popup-content .btn{
+	background-color: transparent;
+}

Різницю між файлами не показано, бо вона завелика
+ 277 - 0
utils/style/icon.css


+ 862 - 0
utils/style/style.css

@@ -0,0 +1,862 @@
+/* 一行省略 */
+@import url('h5.css');
+@import url('color_match.css');
+
+.space-nowrap{
+	white-space: nowrap;
+}
+
+.text-view1 {
+	  display: inline-block;
+	  white-space: nowrap; 
+	  width: 100%; 
+	  overflow: hidden;
+	  text-overflow:ellipsis;
+		/* height: 20upx; */
+}
+
+.text-view2 {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: flex;
+	display: -webkit-box;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;
+}
+
+.overflow{
+	overflow: hidden;
+}
+
+/* 字体粗细 */
+.font-bold {
+	font-weight: bold;
+}
+
+.fw-300 {
+	font-weight: 300;
+}
+
+.m-0 {
+	margin: 0 !important;
+}
+
+.mt-0,
+.my-0 {
+	margin-top: 0 !important;
+}
+
+.mr-0,
+.mx-0 {
+	margin-right: 0 !important;
+}
+
+.mb-0,
+.my-0 {
+	margin-bottom: 0 !important;
+}
+
+.ml-0,
+.mx-0 {
+	margin-left: 0 !important;
+}
+
+.m-1 {
+	margin: 0.25rem !important;
+}
+
+.mt-1,
+.my-1 {
+	margin-top: 0.25rem !important;
+}
+
+.mr-1,
+.mx-1 {
+	margin-right: 0.25rem !important;
+}
+
+.mb-1,
+.my-1 {
+	margin-bottom: 0.25rem !important;
+}
+
+.ml-1,
+.mx-1 {
+	margin-left: 0.25rem !important;
+}
+
+.m-2 {
+	margin: 0.5rem !important;
+}
+
+.mt-2,
+.my-2 {
+	margin-top: 0.5rem !important;
+}
+
+.mr-2,
+.mx-2 {
+	margin-right: 0.5rem !important;
+}
+
+.mb-2,
+.my-2 {
+	margin-bottom: 0.5rem !important;
+}
+
+.ml-2,
+.mx-2 {
+	margin-left: 0.5rem !important;
+}
+
+.m-3 {
+	margin: 1rem !important;
+}
+
+.mt-3,
+.my-3 {
+	margin-top: 1rem !important;
+}
+
+.mr-3,
+.mx-3 {
+	margin-right: 1rem !important;
+}
+
+.mb-3,
+.my-3 {
+	margin-bottom: 1rem !important;
+}
+
+.ml-3,
+.mx-3 {
+	margin-left: 1rem !important;
+}
+
+.m-4 {
+	margin: 1.5rem !important;
+}
+
+.mt-4,
+.my-4 {
+	margin-top: 1.5rem !important;
+}
+
+.mr-4,
+.mx-4 {
+	margin-right: 1.5rem !important;
+}
+
+.mb-4,
+.my-4 {
+	margin-bottom: 1.5rem !important;
+}
+
+.ml-4,
+.mx-4 {
+	margin-left: 1.5rem !important;
+}
+
+.m-5 {
+	margin: 3rem !important;
+}
+
+.mt-5,
+.my-5 {
+	margin-top: 3rem !important;
+}
+
+.mr-5,
+.mx-5 {
+	margin-right: 3rem !important;
+}
+
+.mb-5,
+.my-5 {
+	margin-bottom: 3rem !important;
+}
+
+.ml-5,
+.mx-5 {
+	margin-left: 3rem !important;
+}
+
+.p-0 {
+	padding: 0 !important;
+}
+
+.pt-0,
+.py-0 {
+	padding-top: 0 !important;
+}
+
+.pr-0,
+.px-0 {
+	padding-right: 0 !important;
+}
+
+.pb-0,
+.py-0 {
+	padding-bottom: 0 !important;
+}
+
+.pl-0,
+.px-0 {
+	padding-left: 0 !important;
+}
+
+.p-1 {
+	padding: 0.25rem !important;
+}
+
+.pt-1,
+.py-1 {
+	padding-top: 0.25rem !important;
+}
+
+.pr-1,
+.px-1 {
+	padding-right: 0.25rem !important;
+}
+
+.pb-1,
+.py-1 {
+	padding-bottom: 0.25rem !important;
+}
+
+.pl-1,
+.px-1 {
+	padding-left: 0.25rem !important;
+}
+
+.p-2 {
+	padding: 0.5rem !important;
+}
+
+.pt-2,
+.py-2 {
+	padding-top: 0.5rem !important;
+}
+
+.pr-2,
+.px-2 {
+	padding-right: 0.5rem !important;
+}
+
+.pb-2,
+.py-2 {
+	padding-bottom: 0.5rem !important;
+}
+
+.pl-2,
+.px-2 {
+	padding-left: 0.5rem !important;
+}
+
+.p-3 {
+	padding: 1rem !important;
+}
+
+.pt-3,
+.py-3 {
+	padding-top: 1rem !important;
+}
+
+.pr-3,
+.px-3 {
+	padding-right: 1rem !important;
+}
+
+.pb-3,
+.py-3 {
+	padding-bottom: 1rem !important;
+}
+
+.pl-3,
+.px-3 {
+	padding-left: 1rem !important;
+}
+
+.p-4 {
+	padding: 1.5rem !important;
+}
+
+.pt-4,
+.py-4 {
+	padding-top: 1.5rem !important;
+}
+
+.pr-4,
+.px-4 {
+	padding-right: 1.5rem !important;
+}
+
+.pb-4,
+.py-4 {
+	padding-bottom: 1.5rem !important;
+}
+
+.pl-4,
+.px-4 {
+	padding-left: 1.5rem !important;
+}
+
+.p-5 {
+	padding: 3rem !important;
+}
+
+.pt-5,
+.py-5 {
+	padding-top: 3rem !important;
+}
+
+.pr-5,
+.px-5 {
+	padding-right: 3rem !important;
+}
+
+.pb-5,
+.py-5 {
+	padding-bottom: 3rem !important;
+}
+
+.pl-5,
+.px-5 {
+	padding-left: 3rem !important;
+}
+
+.m-n1 {
+	margin: -0.25rem !important;
+}
+
+.mt-n1,
+.my-n1 {
+	margin-top: -0.25rem !important;
+}
+
+.mr-n1,
+.mx-n1 {
+	margin-right: -0.25rem !important;
+}
+
+.mb-n1,
+.my-n1 {
+	margin-bottom: -0.25rem !important;
+}
+
+.ml-n1,
+.mx-n1 {
+	margin-left: -0.25rem !important;
+}
+
+.m-n2 {
+	margin: -0.5rem !important;
+}
+
+.mt-n2,
+.my-n2 {
+	margin-top: -0.5rem !important;
+}
+
+.mr-n2,
+.mx-n2 {
+	margin-right: -0.5rem !important;
+}
+
+.mb-n2,
+.my-n2 {
+	margin-bottom: -0.5rem !important;
+}
+
+.ml-n2,
+.mx-n2 {
+	margin-left: -0.5rem !important;
+}
+
+.m-n3 {
+	margin: -1rem !important;
+}
+
+.mt-n3,
+.my-n3 {
+	margin-top: -1rem !important;
+}
+
+.mr-n3,
+.mx-n3 {
+	margin-right: -1rem !important;
+}
+
+.mb-n3,
+.my-n3 {
+	margin-bottom: -1rem !important;
+}
+
+.ml-n3,
+.mx-n3 {
+	margin-left: -1rem !important;
+}
+
+.m-n4 {
+	margin: -1.5rem !important;
+}
+
+.mt-n4,
+.my-n4 {
+	margin-top: -1.5rem !important;
+}
+
+.mr-n4,
+.mx-n4 {
+	margin-right: -1.5rem !important;
+}
+
+.mb-n4,
+.my-n4 {
+	margin-bottom: -1.5rem !important;
+}
+
+.ml-n4,
+.mx-n4 {
+	margin-left: -1.5rem !important;
+}
+
+.m-n5 {
+	margin: -3rem !important;
+}
+
+.mt-n5,
+.my-n5 {
+	margin-top: -3rem !important;
+}
+
+.mr-n5,
+.mx-n5 {
+	margin-right: -3rem !important;
+}
+
+.mb-n5,
+.my-n5 {
+	margin-bottom: -3rem !important;
+}
+
+.ml-n5,
+.mx-n5 {
+	margin-left: -3rem !important;
+}
+
+.m-auto {
+	margin: auto !important;
+}
+
+.mt-auto,
+.my-auto {
+	margin-top: auto !important;
+}
+
+.mr-auto,
+.mx-auto {
+	margin-right: auto !important;
+}
+
+.mb-auto,
+.my-auto {
+	margin-bottom: auto !important;
+}
+
+.ml-auto,
+.mx-auto {
+	margin-left: auto !important;
+}
+
+/* border */
+.border-dashed-bottom {
+	border-bottom: 1px dashed #dee2e6 !important;
+}
+
+.border {
+	border: 1px solid #dee2e6 !important;
+}
+
+.border-top {
+	border-top: 1px solid #dee2e6 !important;
+}
+
+.border-right {
+	border-right: 1px solid #dee2e6 !important;
+}
+
+.border-bottom {
+	border-bottom: 1px solid #dee2e6 !important;
+}
+
+.border-left {
+	border-left: 1px solid #dee2e6 !important;
+}
+
+.border05 {
+	border: 0.5px solid #dee2e6 !important;
+}
+
+.border-top05 {
+	border-top: 0.5px solid #dee2e6 !important;
+}
+
+.border-right05 {
+	border-right: 0.5px solid #dee2e6 !important;
+}
+
+.border-bottom05 {
+	border-bottom: 0.5px solid #dee2e6 !important;
+}
+
+.border-left05 {
+	border-left: 0.5px solid #dee2e6 !important;
+}
+.border-0 {
+	border: 0 !important;
+}
+
+.border-top-0 {
+	border-top: 0 !important;
+}
+
+.border-right-0 {
+	border-right: 0 !important;
+}
+
+.border-bottom-0 {
+	border-bottom: 0 !important;
+}
+
+.border-left-0 {
+	border-left: 0 !important;
+}
+
+.b-radius-5 {
+  border-radius: 5px;
+}
+/* display */
+.d-none {
+	display: none !important;
+}
+
+.d-inline {
+	display: inline !important;
+}
+
+.d-inline-block {
+	display: inline-block !important;
+}
+
+.d-block {
+	display: block !important;
+}
+
+.d-table {
+	display: table !important;
+}
+
+.d-table-row {
+	display: table-row !important;
+}
+
+.d-table-cell {
+	display: table-cell !important;
+}
+
+.d-flex {
+	display: -webkit-box !important;
+	display: -ms-flexbox !important;
+	display: flex !important;
+}
+
+.d-inline-flex {
+	display: -webkit-inline-box !important;
+	display: -ms-inline-flexbox !important;
+	display: inline-flex !important;
+}
+.d-inline-block {
+	display:inline-block;
+}
+.align-baseline {
+	vertical-align: baseline !important;
+}
+
+.align-top {
+	vertical-align: top !important;
+}
+
+.align-middle {
+	vertical-align: middle !important;
+}
+
+.align-bottom {
+	vertical-align: bottom !important;
+}
+
+.align-text-bottom {
+	vertical-align: text-bottom !important;
+}
+
+.align-text-top {
+	vertical-align: text-top !important;
+}
+.w-10{
+	width: 10% !important;
+}
+.w-15{
+	width: 15% !important;
+}
+.w-20 {
+	width: 20% !important;
+}
+
+.w-25 {
+	width: 25% !important;
+}
+
+.w-30 {
+	width: 30% !important;
+}
+.w-33 {
+	width: 33% !important;
+}
+
+.w-35 {
+	width: 35% !important;
+}
+
+.w-40 {
+	width: 40% !important;
+}
+
+.w-45 {
+	width: 45% !important;
+}
+
+.w-50 {
+	width: 50% !important;
+}
+
+.w-55 {
+	width: 55% !important;
+}
+
+.w-60 {
+	width: 60% !important;
+}
+
+.w-65 {
+	width: 65% !important;
+}
+
+.w-70 {
+	width: 70% !important;
+}
+
+.w-75 {
+	width: 75% !important;
+}
+
+.w-80 {
+	width: 80% !important;
+}
+
+.w-85 {
+	width: 85% !important;
+}
+
+.w-90 {
+	width: 90% !important;
+}
+
+.w-100 {
+	width: 100% !important;
+}
+
+.w-auto {
+	width: auto !important;
+}
+
+.h-25 {
+	height: 25% !important;
+}
+
+.h-50 {
+	height: 50% !important;
+}
+
+.h-75 {
+	height: 75% !important;
+}
+
+.h-100 {
+	height: 100% !important;
+}
+
+.h-auto {
+	height: auto !important;
+}
+
+.mw-100 {
+	max-width: 100% !important;
+}
+
+.mh-100 {
+	max-height: 100% !important;
+}
+
+.min-vw-100 {
+	min-width: 100vw !important;
+}
+
+.min-vh-100 {
+	min-height: 100vh !important;
+}
+
+.vw-100 {
+	width: 100vw !important;
+}
+
+.vh-100 {
+	height: 100vh !important;
+}
+
+.text-right {
+	text-align: right;
+}
+
+.text-left {
+	text-align: left;
+}
+
+.text-center {
+	text-align: center;
+}
+
+.float-right {
+	float: right;
+}
+
+.float-left {
+	float: left;
+}
+
+.float-none {
+	clear: both;
+}
+/* flex */
+.row {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+}
+.col {
+  -ms-flex-preferred-size: 0;
+  flex-basis: 0;
+  -ms-flex-positive: 1;
+  flex-grow: 1;
+  min-width: 0;
+  max-width: 100%;
+}
+.col-auto {
+  -ms-flex: 0 0 auto;
+  flex: 0 0 auto;
+  width: auto;
+  max-width: 100%;
+}
+
+.align-items-start {
+  -ms-flex-align: start !important;
+  align-items: flex-start !important;
+}
+
+.align-items-end {
+  -ms-flex-align: end !important;
+  align-items: flex-end !important;
+}
+
+.align-items-center {
+  -ms-flex-align: center !important;
+  align-items: center !important;
+}
+
+.align-items-baseline {
+  -ms-flex-align: baseline !important;
+  align-items: baseline !important;
+}
+
+.align-items-stretch {
+  -ms-flex-align: stretch !important;
+  align-items: stretch !important;
+}
+/* 正方形的图片 */
+.picbox {
+	width: 100% !important;
+	height: 0;
+	padding-bottom: 100%;
+	margin: 0;
+	position: relative;
+	overflow: hidden;
+}
+
+.picbox .picimg {
+	width: 100%;
+	height: 100%;
+	position: absolute;
+}
+
+p {
+	margin-bottom: 0;
+}
+.position-fixed{
+	position: fixed;
+}
+.position-relative{
+	position: relative;
+}
+.position-absolute{
+	position: absolute;
+}
+.positionY-50{
+	position: absolute;
+	top: 50%;
+	transform: translateY(-50%);
+}
+.positionX-50{
+	position: absolute;
+	left: 50%;
+	transform: translateX(-50%);
+}
+.position-50{
+	position: absolute;
+	left: 50%;
+	top: 50%;
+	transform: translate(-50%,-50%);
+}
+
+.cursor-pointer{
+	cursor: pointer;
+}
+/*  居中*/
+.centerd{
+	display: flex !important;
+	height: 100%;
+	align-items: center;
+	justify-content: center;
+}
+/*  居中*/
+.centerY{
+	display: flex !important;
+	align-items: center;
+}
+
+.line-height1{
+		line-height: 1;
+}
+
+.border-box{
+	box-sizing: border-box;
+}