wjx 3 anni fa
commit
73017b7473
100 ha cambiato i file con 8032 aggiunte e 0 eliminazioni
  1. BIN
      .DS_Store
  2. 16 0
      .hbuilderx/launch.json
  3. 18 0
      App.vue
  4. 51 0
      api/api.js
  5. 14 0
      index.html
  6. 23 0
      main.js
  7. 73 0
      manifest.json
  8. 38 0
      pages.json
  9. 234 0
      pages/checkInRecord/checkInRecord.vue
  10. 817 0
      pages/index/index.vue
  11. 28 0
      pages/officialAccount/officialAccount.vue
  12. BIN
      static/IDGold.png
  13. BIN
      static/almost-lottery1__bg2x.png
  14. BIN
      static/almost-lottery__action.png
  15. BIN
      static/almost-lottery__action2x.png
  16. BIN
      static/almost-lottery__action3x.png
  17. BIN
      static/almost-lottery__bg.png
  18. BIN
      static/almost-lottery__bg2x.png
  19. BIN
      static/almost-lottery__bg3x.png
  20. BIN
      static/avatar.jpg
  21. BIN
      static/backImg.png
  22. BIN
      static/chassis.png
  23. BIN
      static/close.png
  24. BIN
      static/decorate.png
  25. BIN
      static/doubleBt.png
  26. BIN
      static/git.png
  27. BIN
      static/horn.png
  28. BIN
      static/iPhone12Chip.png
  29. BIN
      static/logo.png
  30. BIN
      static/popupBack.png
  31. BIN
      static/retract.png
  32. BIN
      static/triangle.png
  33. BIN
      static/turntable_VIP.png
  34. BIN
      static/turntable_gold.png
  35. BIN
      static/turntable_golds.png
  36. BIN
      static/turntable_iPhone12.png
  37. BIN
      static/unfold.png
  38. BIN
      static/vipChip.png
  39. 80 0
      uni.scss
  40. 89 0
      uni_modules/almost-lottery/changelog.md
  41. 893 0
      uni_modules/almost-lottery/components/almost-lottery/almost-lottery.vue
  42. 78 0
      uni_modules/almost-lottery/package.json
  43. 156 0
      uni_modules/almost-lottery/readme.md
  44. 303 0
      uni_modules/almost-lottery/utils/almost-utils.js
  45. 0 0
      unpackage/dist/dev/.automator/mp-weixin/.automator.json
  46. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
  47. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
  48. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  49. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/almost-lottery/components/almost-lottery/almost-lottery.js.map
  50. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/checkInRecord/checkInRecord.js.map
  51. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
  52. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/officialAccount/officialAccount.js.map
  53. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/almost-lottery/components/almost-lottery/almost-lottery.js.map
  54. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-column-notice/u-column-notice.js.map
  55. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-icon/u-icon.js.map
  56. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-notice-bar/u-notice-bar.js.map
  57. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-row-notice/u-row-notice.js.map
  58. 4 0
      unpackage/dist/dev/mp-weixin/app.js
  59. 16 0
      unpackage/dist/dev/mp-weixin/app.json
  60. 3 0
      unpackage/dist/dev/mp-weixin/app.wxss
  61. 113 0
      unpackage/dist/dev/mp-weixin/common/main.js
  62. 3319 0
      unpackage/dist/dev/mp-weixin/common/main.wxss
  63. 273 0
      unpackage/dist/dev/mp-weixin/common/runtime.js
  64. 10 0
      unpackage/dist/dev/mp-weixin/common/vendor.js
  65. 330 0
      unpackage/dist/dev/mp-weixin/pages/checkInRecord/checkInRecord.js
  66. 5 0
      unpackage/dist/dev/mp-weixin/pages/checkInRecord/checkInRecord.json
  67. 1 0
      unpackage/dist/dev/mp-weixin/pages/checkInRecord/checkInRecord.wxml
  68. 108 0
      unpackage/dist/dev/mp-weixin/pages/checkInRecord/checkInRecord.wxss
  69. 298 0
      unpackage/dist/dev/mp-weixin/pages/index/index.js
  70. 8 0
      unpackage/dist/dev/mp-weixin/pages/index/index.json
  71. 0 0
      unpackage/dist/dev/mp-weixin/pages/index/index.wxml
  72. 409 0
      unpackage/dist/dev/mp-weixin/pages/index/index.wxss
  73. 155 0
      unpackage/dist/dev/mp-weixin/pages/officialAccount/officialAccount.js
  74. 5 0
      unpackage/dist/dev/mp-weixin/pages/officialAccount/officialAccount.json
  75. 1 0
      unpackage/dist/dev/mp-weixin/pages/officialAccount/officialAccount.wxml
  76. 32 0
      unpackage/dist/dev/mp-weixin/project.config.json
  77. 23 0
      unpackage/dist/dev/mp-weixin/project.private.config.json
  78. 7 0
      unpackage/dist/dev/mp-weixin/sitemap.json
  79. BIN
      unpackage/dist/dev/mp-weixin/static/IDGold.png
  80. BIN
      unpackage/dist/dev/mp-weixin/static/almost-lottery1__bg2x.png
  81. BIN
      unpackage/dist/dev/mp-weixin/static/almost-lottery__action.png
  82. BIN
      unpackage/dist/dev/mp-weixin/static/almost-lottery__action2x.png
  83. BIN
      unpackage/dist/dev/mp-weixin/static/almost-lottery__action3x.png
  84. BIN
      unpackage/dist/dev/mp-weixin/static/almost-lottery__bg.png
  85. BIN
      unpackage/dist/dev/mp-weixin/static/almost-lottery__bg2x.png
  86. BIN
      unpackage/dist/dev/mp-weixin/static/almost-lottery__bg3x.png
  87. BIN
      unpackage/dist/dev/mp-weixin/static/avatar.jpg
  88. BIN
      unpackage/dist/dev/mp-weixin/static/backImg.png
  89. BIN
      unpackage/dist/dev/mp-weixin/static/chassis.png
  90. BIN
      unpackage/dist/dev/mp-weixin/static/close.png
  91. BIN
      unpackage/dist/dev/mp-weixin/static/decorate.png
  92. BIN
      unpackage/dist/dev/mp-weixin/static/doubleBt.png
  93. BIN
      unpackage/dist/dev/mp-weixin/static/git.png
  94. BIN
      unpackage/dist/dev/mp-weixin/static/horn.png
  95. BIN
      unpackage/dist/dev/mp-weixin/static/iPhone12Chip.png
  96. BIN
      unpackage/dist/dev/mp-weixin/static/logo.png
  97. BIN
      unpackage/dist/dev/mp-weixin/static/popupBack.png
  98. BIN
      unpackage/dist/dev/mp-weixin/static/retract.png
  99. BIN
      unpackage/dist/dev/mp-weixin/static/triangle.png
  100. BIN
      unpackage/dist/dev/mp-weixin/static/turntable_VIP.png

BIN
.DS_Store


+ 16 - 0
.hbuilderx/launch.json

@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 18 - 0
App.vue

@@ -0,0 +1,18 @@
+<script>
+	export default {
+		onLaunch: function() {
+			console.log('App Launch')
+		},
+		onShow: function() {
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style lang="scss">
+	/*每个页面公共css */
+	@import "uview-ui/index.scss";
+</style>

+ 51 - 0
api/api.js

@@ -0,0 +1,51 @@
+import { request } from "@/utils/request"
+
+/**
+ * wx021e792baf529aff  好运赢书券
+ */
+export let config = {
+	appid: 'wx021e792baf529aff'
+}
+
+export async function getHome(data) {
+	return request({url: `/luck/draw/home`, data})
+}
+// 获取公众号将此
+export async function getPond(data) {
+	return request({url: `/luck/draw/prize/pond`, data})
+}
+
+// 获取openId
+export async function getOpenId(data) {
+	return request({url: `/applet/openId`, data})
+}
+
+// 获取轮播消息
+export async function getBanner(data) {
+	return request({url: `/luck/draw/home/banner`, data})
+}
+
+// 获取中奖记录列表
+export async function getSignList(data) {
+	return request({url: `/luck/draw/record`, data})
+}
+
+// 书币充值失败重新领取
+export async function setReClaim(data) {
+	return request({url: `/luck/draw/reClaim`, data})
+}
+
+// 抽奖
+export async function setDrawGain(data) {
+	return request({url: `/luck/draw/gain`, data})
+}
+
+// 获取公众号文章
+export async function getUrl() {
+	return request({url: `/applet/mp/url`})
+}
+
+// 头两次领取
+export async function setReceive(data) {
+	return request({url: `/luck/draw/gain/receive`, data})
+}

+ 14 - 0
index.html

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="/main.js"></script>
+  </body>
+</html>

+ 23 - 0
main.js

@@ -0,0 +1,23 @@
+import App from './App'
+import uView from "uview-ui";
+
+// #ifndef VUE3
+import Vue from 'vue'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+    ...App
+})
+Vue.use(uView);
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+  const app = createSSRApp(App)
+  return {
+    app
+  }
+}
+// #endif

+ 73 - 0
manifest.json

@@ -0,0 +1,73 @@
+{
+    "name" : "qc-luckyDraw",
+    "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" : {}
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "wx021e792baf529aff",
+        "setting" : {
+            "urlCheck" : false,
+            "es6" : true
+        },
+        "usingComponents" : true
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "2"
+}

+ 38 - 0
pages.json

@@ -0,0 +1,38 @@
+{
+	"easycom": {
+		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+	},
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTitleText": "幸运大抽奖",
+				"enablePullDownRefresh": true
+			}
+		}
+	    ,{
+            "path" : "pages/checkInRecord/checkInRecord",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "中奖记录",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/officialAccount/officialAccount",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+    ],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "幸运大抽奖",
+		"navigationBarBackgroundColor": "#F8F8F8",
+		"backgroundColor": "#F8F8F8"
+	}
+}

+ 234 - 0
pages/checkInRecord/checkInRecord.vue

@@ -0,0 +1,234 @@
+<template>
+	<view class="checkInRecord">
+		<view class="timeData">
+			<picker mode="date" fields="month" @change="selectDataTime">
+				<view class="time" v-if="isShowYeer" style="display: flex;align-items: center;">
+					<text>{{queryForm.dayTime | getYMFilter}}</text>
+					<image src="../../static/triangle.png" mode="widthFix" class="triangle"></image>
+				</view>
+				<view class="time" v-else>
+					<text style="font-size: 48rpx;margin-right: 10rpx;">{{queryForm.dayTime | getDateFilter}}</text>
+					<text>月</text>
+					<image src="../../static/triangle.png" mode="widthFix" class="triangle"></image>
+				</view>
+			</picker>
+		</view>
+		
+		<scroll-view scroll-y="true" class="checkInList" lower-threshold="80" @scrolltolower="scrolltolower" >
+			<template v-if="signList.length > 0">
+				<view v-for="item in signList" :key="item.id" class="item">
+					<view class="left">
+						<view class="title">{{item.describe}}</view>
+						<view class="data">{{item.longCreateTime | getTimerFilter}}</view>
+					</view>
+					<view class="right">
+						<text v-if="item.rechargeStatus === 1">已发放</text>
+						<view class="error" v-else @click="setAgainReceive(item)">
+							失败重领
+						</view>
+					</view>
+				</view>
+			</template>
+			
+			<view class="baseline" v-if="this.total === this.signList.length">
+				—— 我是有底线的 ——
+			</view>
+		</scroll-view>
+		
+	</view>
+</template>
+
+<script>
+	import { config ,getSignList, setReClaim } from '@/api/api.js'
+	export default {
+		data() {
+			return {
+				queryForm: {
+					page: 1, 
+					pageSize: 20,
+					dayTime: '',
+					appId: config.appid
+				},
+				isShowYeer: false,   //是否展示年月
+				signList: [],
+				total: 0
+			};
+		},
+		onLoad(options) {
+			if (Object.keys(options).length > 0) {
+				let { mpName , ...option } = options
+				this.queryForm = {...this.queryForm, ...option}
+				this.queryForm.dayTime = this.getDate()
+				this.getList()
+			}
+			
+		},
+		filters: {
+			getYMFilter(value) {
+				if(!value) return ''
+				let data = value.split('-')
+				if (data.length > 1) {
+					return data[0] + '-' + data[1]
+				}else {
+					return value
+				}
+			},
+			getDateFilter(value) { // 获取月
+				if(!value) return ''
+				let data = value.split('-')
+				if (data.length > 1) {
+					return Number(data[1])
+				}else {
+					return value
+				}
+			},
+			getTimerFilter(value) { // 获取年月日时分秒
+				if(!value) return ""
+				let timestamp = Date.parse(new Date(value))
+				let date = new Date(timestamp)
+				let Y = date.getFullYear()
+				let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1)
+				let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
+				
+				let H = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
+				let minute = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
+				let S = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
+				
+				return `${Y}-${M}-${D} ${H}:${minute}:${S}`
+			}
+		},
+		methods: {
+			// 重新领取
+			setAgainReceive(item) {
+				setReClaim({id: item.id, createTime: item.longCreateTime}).then(res => {
+					if (res.data === 1) {
+						uni.showToast({
+							title: '重领成功',
+							icon: 'success'
+						})
+						this.signList = this.signList.map(item => {
+							if (item.id === id) {
+								return {
+									...item,
+									rechargeStatus: res.data
+								}
+							} else {
+								return item
+							}
+						})
+					} else {
+						uni.showToast({
+							title: '重新领取失败,请稍后再来',
+							icon: 'none',
+							duration: 2000
+						})
+					}
+				})
+			},
+			getList() {
+				getSignList({...this.queryForm, dayTime: this.queryForm.dayTime + '-01'}).then(res => {
+					this.signList = this.signList.concat(res.data.luckDrawLogEsDtoList)
+					this.total = res.data.total
+				})
+			},
+			// 滚动到底部去获取数据
+			scrolltolower() {
+				if ( this.signList.length !== this.total ) {
+					this.$set(this.queryForm, 'page', this.queryForm.page + 1)
+					this.getList()
+				}
+			},
+			// 选择时间
+			selectDataTime(e) {
+				this.isShowYeer = true
+				this.signList = []
+				this.$set(this.queryForm, 'page', 1)
+				this.$set(this.queryForm, 'dayTime', e.target.value)
+				this.getList()
+			},
+			// 获取年月
+			getDate() {
+				let timestamp = Date.parse(new Date())
+				let date = new Date(timestamp)
+				let Y = date.getFullYear()
+				let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1)
+				let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
+				return Y + '-' + M
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.checkInRecord {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+		width: 100%;
+		height: 100vh;
+	}
+	.timeData {
+		width: 100%;
+		height: 104rpx;
+		line-height: 104rpx;
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		border-bottom: 1rpx solid #efefef;
+	}
+	.time {
+		font-size: 24rpx;
+		.triangle {
+			margin-left: 5rpx;
+			width: 15rpx;
+			height: 10rpx;
+		}
+	}
+	
+	.checkInList{
+		height: calc(100vh - 100rpx);
+		padding-bottom: 40rpx;
+		box-sizing: border-box;
+		overflow: hidden;
+		.item {
+			padding: 10rpx 0;
+			margin: 0 30rpx;
+			border-bottom: 1rpx solid #efefef;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+		}
+		.title {
+			font-size: 28rpx;
+			font-weight: 500;
+			color: #000000;
+		}
+		.data {
+			font-size: 24rpx;
+			margin-top: 8rpx;
+			color: #808080;
+		}
+		.right {
+			&>text {
+				font-size: 28rpx;
+			}
+			.error {
+				font-size: 24rpx;
+				background-color: #FC6E53;
+				width: 140rpx;
+				height: 55rpx;
+				box-sizing: border-box;
+				color: #FFFFFF;
+				text-align: center;
+				line-height: 55rpx;
+				border-radius: 30rpx;
+			}
+		}
+	}
+	
+	.baseline {
+		text-align: center;
+		padding: 30rpx 0;
+		font-size: 24rpx;
+		color: #999999;
+	}
+</style>

+ 817 - 0
pages/index/index.vue

@@ -0,0 +1,817 @@
+<template>
+	<view class="luckyDraw">
+		<image src="../../static/backImg.png" class="back" mode="widthFix"></image>
+		<view class="luckyDrawContent">
+			
+			<!-- 个人信息模块 -->
+			<view class="luckyDrawTop">
+				<view class="left">
+					<view class="avatarView">
+						<open-data type="userAvatarUrl" class="avatar"></open-data>
+					</view>
+					<view class="userInfo">
+						<view class="account">{{mpName}}</view>
+						<view class="ID">ID:{{userId}}</view>
+					</view>
+				</view>
+				<view class="right" @click="jumpSign">
+					<text>签到有礼</text>
+				</view>
+			</view>
+			
+			<!-- 滚动通知 -->
+			<view class="notice">
+				<image src="../../static/horn.png" class="horn" mode="widthFix"></image>
+				<view class="txts">
+					<u-notice-bar mode="vertical" :volume-icon="false" color="#FFFFFF" type="none" :list="list"></u-notice-bar>
+				</view>
+			</view>
+			
+			<!-- 大转盘 -->
+			<view class="turntable">
+				<view class="decorate">
+					<image src="../../static/decorate.png" class="decorateBack" mode="widthFix"></image>
+					<image src="../../static/chassis.png" class="decorateChassis" mode="widthFix"></image>
+				</view>
+				<view class="turntableContent">
+					<almost-lottery 
+						:canvasId="canvasConfig.canvasId"
+						:canvasWidth="canvasConfig.width"
+						:canvasHeight="canvasConfig.height"
+						:outerWidth="canvasConfig.outerWidth"
+						:outerHeight="canvasConfig.outerHeight"
+						:colors="canvasConfig.colors"
+						:ringCount="8"
+						:duration="1" 
+						:prizeList="prizeList"
+						:prizeIndex="prizeIndex"
+						@reset-index="prizeIndex = -1"
+						@draw-start="handleDrawStart"
+						@draw-end="handleDrawEnd"
+						@finish="handleDrawFinish"
+						v-if="prizeList.length"
+					/>
+					<view class="bottom">
+						<view class="cont">今日剩余抽奖次数:<text>{{freeNum}}</text></view>
+						<navigator :url="'../checkInRecord/checkInRecord' + getSerialize({...mpData, openId})" class="record" hover-class="none">
+							<text>中奖记录</text>
+						</navigator>
+					</view>
+				</view>
+			</view>
+			
+			<!-- 我的奖品 -->
+			<view class="myPrize">
+				<view class="title">我的奖品</view>
+				<view class="chips">
+					<view class="chip" v-for="(item, index) in prizeCountDtoList" :key="index">
+						<image src="../../static/iPhone12Chip.png" mode="widthFix" v-if="item.prizeType === 3"></image>
+						<image src="../../static/vipChip.png" mode="widthFix" v-else></image>
+						<view class="text">{{item.prizeName}}</view>
+						<view class="progress">
+							<view class="value" :style="{width: item.prizeCount && item.prizeCount > 0 ? (item.prizeCount/item.maxCount*100) + '%' : '0'}"></view>
+							<text>{{item.prizeCount}}/{{item.maxCount}}</text>
+						</view>
+					</view>
+				</view>
+				<view class="clearTime" v-if="clearTime">碎片有效期至:{{clearTime | getTimerFilter}} </view>
+			</view>
+		
+			<!-- 活动规则模块 -->
+			<view class="activityRules">
+				<view class="top" @click="activityRulesHandle">
+					<text>活动规则</text>
+					<image :src="!activityRules ? '../../static/unfold.png' : '../../static/retract.png'" mode="widthFix"></image>
+				</view>
+				<view class="bottom" v-if="activityRules">
+					<view>1、每个用户账户每天最多有10次抽奖机会,每天0点刷新。</view>
+					<view>2、每天前2次可直接领取抽奖奖品,其他8次抽奖机会需要通过观看激励视频来获得。</view>
+					<view>3、用户必须在对应公众号内登陆抽奖,否则书币将无法顺利领取。</view>
+					<view>4、书币及7天书城VIP会员抽中后自动发放至书城账号,可在中奖记录中查看,或进入书城的“个人中心-充值记录-赠送”查看。</view>
+					<view>5、用户可以通过完成本产品抽奖获得碎片,碎片种类由系统随机发放,兑换手机需集满50个碎片, 兑换书城VIP需集满30个碎片。碎片累计有效期为7天,在碎片超出有效期后或用户成功兑换奖品后,此前已获得的该奖品碎片都将清零。</view>
+					<view>6、实物奖品请联系公众号内客服领取,实物奖品颜色随机寄送,以中奖用户收到的实物为准。</view>
+					<view>7、若发现用户恶意违规行为,开发者有权取消其获奖资格。</view>
+					<view>8、本活动解释权由开发者所有,有任何疑问请联系公众号内客服。</view>
+				</view>
+			</view>
+			
+			<!-- 弹窗 -->
+			<view class="popup" v-if="popupShow">
+				<view class="popupContent">
+					<view class="content">
+						<image src="../../static/popupBack.png"></image>
+						<view class="textCon">
+							<text class="ts">中奖了!</text> </br>
+							<text class="reward">恭喜您获得{{luckyDay.name}}</text> </br>
+							<image src="../../static/doubleBt.png" class="doubleBt" mode="widthFix" @click="lookVideo"></image> </br>
+							<text class="bt" @click="receiveGold(false)">不了,单倍领取</text>
+						</view>
+					</view>
+					<image src="../../static/close.png" class="close" mode="widthFix" @click="closeHandle"></image>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	let timer = null
+	import AlmostLottery from '@/uni_modules/almost-lottery/components/almost-lottery/almost-lottery.vue'
+	import { config, getHome, getOpenId, getBanner, setDrawGain, getPond, setReceive } from '@/api/api.js'
+	import { clearCacheFile } from '@/uni_modules/almost-lottery/utils/almost-utils.js'
+	export default {
+		components: {
+			AlmostLottery
+		},
+		data() {
+			return {
+				title: 'Hello',
+				list: [
+					'恭喜用户 “9016” 成功提现 2000书币',
+					'恭喜用户 “9017” 成功提现 10书币',
+					'恭喜用户 “9018” 成功提现 20书币',
+					'恭喜用户 “9019” 成功提现 100书币'
+				],
+				// canvas id、宽、高
+				canvasConfig: {
+					canvasId: 'almostLotteryCanvas',
+					width: 300,
+					height: 300,
+					outerWidth: 325,
+					outerHeight: 325,
+					colors: [
+						'#FEE3C6',
+						'#FFFFFF'
+					]
+				},
+				// 以下是奖品配置数据
+				// 奖品数据
+				prizeList: [],
+				// 奖品是否设有库存
+				onStock: false,
+				// 中奖下标
+				prizeIndex: -1,
+				// 是否正在抽奖中,避免重复触发
+				prizeing: false,
+				
+				// 以下为中奖概率有关数据
+				// 是否由前端控制概率,默认不开启,强烈建议由后端控制
+				onFrontend: false,
+				// 权重随机数的最大值
+				weightTotal: 0,
+				// 权重数组
+				weightArr: [],
+				
+				// 以下为业务需求有关示例数据
+				// 金币余额
+				goldCoin: 50,
+				// 当日免费抽奖次数余额
+				freeNum: 10,
+				// 每次消耗的金币数
+				goldNum: 20,
+				// 每天免费抽奖次数
+				freeNumDay: 2,
+				
+				// 以下是
+				// 活动规则开关控制
+				activityRules: false,
+				// 弹窗控制
+				popupShow: false,
+				
+				openId: '',
+				mpData: {},
+				prizeCountDtoList: [], // 碎片列表
+				mpName: null, // 渠道号 
+				userId: null, // 
+				luckyDay: {}, // 中奖信息
+				doubleKey: "", // 领取key
+				clearTime: "", // 碎片有效期
+			}
+		},
+		computed: {
+			isApple() {
+				return uni.getSystemInfoSync().platform === 'ios'
+			}
+		},
+		onLoad(options) {
+			// 请求奖品数据
+			this.mpData = options
+			this.getData()
+		},
+		onUnload() {
+			uni.hideLoading()
+		},
+		onShareAppMessage() {},
+		filters: {
+			getTimerFilter(value) { // 获取年月日时分秒
+				if(!value) return ""
+				let timestamp = Date.parse(new Date(value))
+				let date = new Date(timestamp)
+				let Y = date.getFullYear()
+				let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1)
+				let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
+				
+				let H = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
+				let minute = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
+				let S = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
+				
+				return `${Y}-${M}-${D} ${H}:${minute}:${S}`
+			}
+		},
+		async onPullDownRefresh() {
+			await this.handleInitCanvas()
+			await this.getList()
+			uni.stopPullDownRefresh();
+		},
+		methods: {
+			// 看视频双倍
+			lookVideo() {
+				this.receiveGold(true)
+			},
+			// 领取金币
+			receiveGold(watchVideos = false) {
+				if(this.doubleKey) {
+					setReceive({appId: config.appid, doubleKey: this.doubleKey, openId: this.openId, watchVideos, ...this.mpData }).then(res => {
+						this.popupShow = false
+						this.doubleKey = ""
+						this.getList()
+					})
+				}
+			},
+			// 
+			getData() {
+				uni.login({
+					success: async res => {
+						if (res.code) {
+							let openIDInfo = await getOpenId({appId: config.appid, code: res.code})
+							this.openId = openIDInfo.data
+							let response = await this.getList()
+							if(response) {
+								await this.getPrizeList()
+								getBanner({appId: config.appid, openId: this.openId, mpAppId: this.mpData.mpAppId}).then(res => {
+									this.list = res.data
+								})
+							} else {
+								this.prizeList = [{"prizeId":1,"name":"100书币","stock":100,"weight":10,"prizeImage":"/static/turntable_golds.png"},{"prizeId":2,"name":"书城VIP碎片","stock":100,"weight":10,"prizeImage":"/static/turntable_VIP.png"},{"prizeId":3,"name":"30书币","stock":100,"weight":10,"prizeImage":"/static/turntable_gold.png"},{"prizeId":4,"name":"书城VIP碎片","stock":100,"weight":10,"prizeImage":"/static/turntable_VIP.png"},{"prizeId":5,"name":"10书币","stock":100,"weight":10,"prizeImage":"/static/turntable_gold.png"},{"prizeId":6,"name":"50书币","stock":100,"weight":10,"prizeImage":"/static/turntable_golds.png"},{"prizeId":7,"name":"iPhone12碎片","stock":100,"weight":10,"prizeImage":"/static/turntable_iPhone12.png"},{"prizeId":8,"name":"20书币","stock":100,"weight":10,"prizeImage":"/static/turntable_gold.png"}]
+								this.prizeCountDtoList = [{"prizeType":2,"prizeCount":0,"prizeName":"书城VIP碎片","maxCount":30},{"prizeType":3,"prizeCount":0,"prizeName":"iPhone12碎片","maxCount":50}]
+							}
+						}
+					}
+				})
+			},
+			// 跳转小程序
+			jumpSign() {
+				let path = 'pages/index/index'
+				if(Object.keys(this.mpData).length > 0) {
+					path = path + this.getSerialize(this.mpData)
+				}
+				uni.navigateToMiniProgram({
+				  appId: 'wxb21c3e030b8af425',
+				  path,
+				  success(res) {
+				    // 打开成功
+				  }
+				})
+			},
+			// 对象序列化成 a=1&b=2
+			getSerialize(value) {
+				if(Object.prototype.toString.call(value) === "[object Object]") {
+					let path = ""
+					for (const key in value) {
+						if (Object.prototype.hasOwnProperty.call(value, key)) {
+							const element = value[key];
+							if (path === "") {
+								path = `?${key}=${element}`
+							}else {
+								path = path + `&${key}=${element}`
+							}
+						}
+					}
+					return path
+				} else {
+					return ""
+				}
+			},
+			// 活动规则
+			activityRulesHandle() {
+				this.activityRules = !this.activityRules
+			},
+			// 关闭弹窗
+			closeHandle() {
+				this.receiveGold(false)
+				this.popupShow = false
+			},
+			// 重新生成
+			handleInitCanvas() {
+				clearCacheFile()
+				this.prizeList = []
+				this.getPrizeList()
+			},
+			// 获取首页信息
+			async getList() {
+				let res = await getHome({appId: config.appid, openId: this.openId, userSource: 1, ...this.mpData})
+				let data = res.data
+				if(data) {
+					this.userId = data.userId
+					this.clearTime = data.clearTime
+					this.prizeCountDtoList = data.prizeCountDtoList
+					this.mpName = data.mpName
+					this.freeNum = data.luckDraw
+					this.mpData = {
+						mpAppId: data.mpAppId,
+						mpName: data.mpName,
+						mpOpenId: data.mpOpenId
+					}
+					return Promise.resolve(true)
+				} else {
+					return Promise.resolve(false)
+				}
+			},
+			// 获取奖品列表
+			async getPrizeList() {
+				uni.showLoading({
+					title: '奖品准备中...'
+				})
+				let res = await getPond({appId: config.appid, openId: this.openId, mpAppId: this.mpData.mpAppId})
+				if(res.data && res.data.length > 0) {
+					this.prizeList = res.data.map(item => {
+						let prizeImage = ""
+						if (item.prizeType === 1) {
+							prizeImage = '/static/turntable_gold.png'
+							if(item.prizeCount > 30) {
+								prizeImage = '/static/turntable_golds.png'
+							}
+							return {
+								prizeId: item.id,
+								name: item.prizeCount + item.prizeName,
+								stock: 100,
+								weight: 10,
+								prizeImage
+							}
+						} else {
+							prizeImage = '/static/turntable_iPhone12.png'
+							if(item.prizeType === 2){
+								prizeImage = '/static/turntable_VIP.png'
+							}
+							return {
+								prizeId: item.id,
+								name: item.prizeName,
+								stock: 100,
+								weight: 10,
+								prizeImage
+							}
+						}
+					})
+				}else {
+					uni.hideLoading()
+					uni.showToast({
+						title: '获取奖品失败'
+					})
+				}
+			},
+			// 本次抽奖开始
+			handleDrawStart() {
+				console.log('触发抽奖按钮')
+				if (!this.mpName) {  // 首次没有重公众号进入
+					uni.navigateTo({
+						url: '../officialAccount/officialAccount'
+					})
+					return
+				} 
+				if (this.prizeing) return
+				this.prizeing = true
+			
+				// 还有免费数次或者剩余金币足够抽一次
+				if (this.freeNum > 0) {
+					// 更新免费次数或金币余额
+					if (this.freeNum > 0) {
+						this.freeNum--
+					}
+					// 发起抽奖
+					this.remoteGetPrizeIndex()
+				} else {
+					this.prizeing = false
+					uni.showToast({
+						title: '抽奖次数不足',
+						icon:'none'
+					})
+				}
+			},
+			// 远程请求接口获取中奖下标
+			remoteGetPrizeIndex() {
+				console.warn('###当前处于模拟的请求接口,并返回了中奖信息###')
+				let { mpName, ...mp } = this.mpData
+				setDrawGain({appId: config.appid, openId: this.openId, ...mp}).then(res => {
+					let data = res.data
+					this.doubleKey = data.doubleKey
+					let prizeIndex = this.prizeList.findIndex(item => item.prizeId === data.id)
+					if(prizeIndex !== -1){
+						this.prizeIndex = prizeIndex
+					} else {
+						uni.showToast({
+							title: '抽奖异常,请稍后重试'
+						})
+					}
+				})
+			},
+			// 本次抽奖结束
+			handleDrawEnd() {
+				console.log('旋转结束,执行拿到结果后到逻辑')
+				// 旋转结束后,开始处理拿到结果后的逻辑
+				this.prizeing = false
+				let prizeName = this.prizeList[this.prizeIndex].name
+				
+				let tipContent = ''
+				if (prizeName === '谢谢参与') {
+					tipContent = '很遗憾,没有中奖,请再接再厉!'
+				} else if (prizeName.indexOf('碎片') === -1 && this.freeNum >= 8) {
+					this.popupShow = true
+					this.luckyDay = this.prizeList[this.prizeIndex]
+					return
+				} else {
+					// 如果奖品设有库存
+					if (this.onStock) {
+						let prizeStock = this.prizeList[this.prizeIndex].stock
+						tipContent = prizeStock ? `恭喜您,获得 ${prizeName}` : `很抱歉,您来晚了,当前奖品 ${prizeName} 已无库存`
+					} else {
+						tipContent = `恭喜您,获得 ${prizeName} !`
+					}
+				}
+				uni.showModal({
+					content: tipContent,
+					showCancel: false
+				})
+				this.getList()
+			},
+			// 抽奖转盘绘制完成
+			handleDrawFinish(res) {
+				console.log('抽奖转盘绘制完成', res)
+				uni.showToast({
+					title: res.msg,
+					duration: 3000,
+					mask: true,
+					icon: 'none'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		background-color: #F0524C;
+	}
+	.luckyDraw {
+		position: relative;
+		&>.back {
+			width: 100%;
+		}
+	}
+	
+	.luckyDrawContent {
+		position: absolute;
+		top: 0;
+		width: 100%;
+		padding: 40rpx 0;
+		margin-bottom: 20rpx;
+		font-family: PingFangSC-Medium, PingFang SC;
+		
+		// 用户信息
+		.luckyDrawTop {
+			padding: 0 28rpx;
+			height: 104rpx;
+			display: flex;
+			
+			justify-content: space-between;
+			align-items: center;
+			.left{
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				&>.avatarView {
+					overflow: hidden;
+					width: 104rpx;
+					height: 104rpx;
+					background: #D8D8D8;
+					border-radius: 10px;
+				}
+				
+				.userInfo{
+					margin-left: 28rpx;
+					&>view{
+						font-size: 32rpx;
+						font-weight: 500;
+						color: #FFFFFF;
+						
+						&.account {
+							display: flex;
+							justify-content: flex-start;
+							align-items: center;
+							&>image {
+								width: 36rpx;
+								height: 36rpx;
+								margin-right: 10rpx;
+							}
+						}
+						
+						&.ID{
+							margin-top: 4rpx;
+						}
+					}
+				}
+			}
+			.right{
+				width: 212rpx;
+				height: 76rpx;
+				background: #FEC435;
+				border-radius: 40rpx;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				&>text {
+					font-size: 28rpx;
+					font-weight: 400;
+					color: #FFFFFF;
+					margin-left: 18rpx;
+				}
+			}
+		}
+	
+		// 滚动通知
+		.notice {
+			width: 656rpx;
+			height: 68rpx;
+			background: #C7322C;
+			box-shadow: 0px 4rpx 8rpx 0rpx rgba(49, 49, 49, 0.08);
+			border-radius: 38rpx;
+			opacity: 0.53;
+			margin: 58rpx auto 0;
+			padding: 0 30rpx;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+
+			.horn {
+				width: 28rpx;
+				height: 28rpx;
+			}
+			.txts {
+				// flex: 1;
+				height: 68rpx;
+				width: 600rpx;
+			}
+		}
+	
+		// 大转盘
+		.turntable {
+			position: relative;
+			margin-top: 40rpx;
+			.decorate{
+				position: relative;
+				width: 100%;
+				height: 890rpx;
+				&>image {
+					width: 100%;
+					position: absolute;
+					z-index: 10;
+					
+					&.decorateBack {
+						top: 0;
+					}
+					&.decorateChassis{
+						position: absolute;
+						z-index: 1;
+						bottom: 0;
+					} 
+				}
+			}
+		
+			.turntableContent {
+				position: absolute;
+				top: 0;
+				left: 0;
+				right: 0;
+				bottom: 0;
+				width: 100%;
+				height: 100%;
+				z-index: 20;
+				padding-top: 20rpx;
+				
+				.bottom {
+					margin-top: 20rpx;
+					text-align: center;
+					position: absolute;
+					bottom: 35rpx;
+					left: 50%;
+					transform: translateX(-50%);
+					.cont{
+						font-size: 28rpx;
+						font-weight: 400;
+						color: #FFFFFF;
+						margin-bottom: 22rpx;
+						text {
+							font-size: 36rpx;
+							color: #FEED22;
+							font-weight: 500;
+						}
+					}
+					.record{
+						font-size: 28rpx;
+						font-weight: 500;
+						color: #FFFFFF;
+					}
+				}
+			}
+		}
+	
+		// 我的奖品
+		.myPrize {
+			margin: 40rpx 26rpx 0;
+			min-height: 352rpx;
+			background: #F4E2CA;
+			border-radius: 20rpx;
+			position: relative;
+			padding: 58rpx 0  20rpx;
+			.title {
+				position: absolute;
+				width: 232rpx;
+				height: 64rpx;
+				background: linear-gradient(180deg, #FFEDD1 0%, #FFC954 100%);
+				box-shadow: 0 4rpx 8rpx 0 rgba(0, 0, 0, 0.07);
+				border-radius: 0 0 24rpx 24rpx;
+				font-size: 32rpx;
+				font-weight: 500;
+				color: #F33938;
+				text-align: center;
+				line-height: 64rpx;
+				left: 50%;
+				transform: translateX(-50%);
+				top: -12rpx;
+			}
+			.chips {
+				display: flex;
+				justify-content: space-between;
+			}
+			.chip {
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				width: 50%;
+				&>image {
+					width: 208rpx;
+					height: 160rpx;
+				}
+				.text{
+					font-size: 32rpx;
+					font-weight: 500;
+					color: #F33938;
+					line-height: 44rpx;
+					margin-top: 12rpx;
+				}
+				.progress{
+					position: relative;
+					width: 200rpx;
+					height: 40rpx;
+					margin-top: 12rpx;
+					background: #FFFCF7;
+					border-radius: 26rpx;
+					overflow: hidden;
+					.value{
+						position: absolute;
+						width: 1%;
+						height: 100%;
+						top: 0;
+						left: 0;
+						z-index: 1;
+						background: #F37938;
+					}
+					&>text {
+						font-size: 28rpx;
+						font-weight: 500;
+						color: #333333;
+						position: absolute;
+						top: 50%;
+						left: 50%;
+						transform: translate(-50%, -50%);
+						z-index: 2;
+					}
+				}
+			}
+			.clearTime{
+				margin: 20rpx 0 0;
+				text-align: center;
+				font-size: 24rpx;
+				font-weight: 400;
+				color: #F33938;
+			}
+		}
+		
+		// 活动规则
+		.activityRules {
+			margin: 40rpx 28rpx 0;
+			background: #F4E2CA;
+			border-radius: 20rpx;
+			color: #F33938;
+			font-size: 32rpx;
+			font-weight: 400;
+			&>.top {
+				height: 92rpx;
+				padding: 0 28rpx;
+				box-sizing: border-box;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				&>image {
+					width: 40rpx;
+				}
+			}
+			&>.bottom {
+				padding: 0 28rpx 30rpx;
+				box-sizing: border-box;
+				
+				&> view {
+					margin-bottom: 12rpx;
+					font-size: 28rpx;
+					font-weight: 400;
+					color: #666666;
+					line-height: 46rpx;
+				}
+			}
+		}
+		
+		// 弹窗
+		.popup {
+			position: fixed;
+			width: 100%;
+			height: 100vh;
+			background: rgba(0, 0, 0, 0.6);
+			top: 0;
+			left: 0;
+			right: 0;
+			bottom: 0;
+			z-index: 100;
+			.popupContent {
+				width: 632rpx;
+				
+				position: absolute;
+				top: 50%;
+				left: 50%;
+				transform: translate(-50%, -50%);
+				text-align: center;
+				&>.content {
+					position: relative;
+					&>image {
+						width: 100%;
+						height: 652rpx;
+					}
+					&>.textCon {
+						position: absolute;
+						width: 100%;
+						top: 0;
+						left: 0;
+						right: 0;
+						bottom: 0;
+						padding-top: 192rpx;
+						.ts {
+							font-size: 60rpx;
+							font-weight: 500;
+							color: #F5631D;
+						}
+						
+						.reward {
+							height: 60rpx;
+							background: #FFD9A2;
+							border-radius: 31rpx;
+							font-size: 32rpx;
+							font-weight: 400;
+							display: inline-block;
+							padding: 0 32rpx;
+							color: #F5631E;
+							line-height: 60rpx;
+							margin-top: 20rpx;
+						}
+						
+						.doubleBt {
+							width: 424rpx;
+							height: 84rpx;
+							margin-top: 114rpx;
+						}
+						
+						.bt {
+							margin-top: 14rpx;
+							font-size: 32rpx;
+							font-weight: 400;
+							color: #FCE8CD;
+						}
+					}
+				}
+				&>.close {
+					width: 54rpx;
+					height: 54rpx;
+					margin-top: 76rpx;
+				}
+			}
+		}
+	}
+</style>

+ 28 - 0
pages/officialAccount/officialAccount.vue

@@ -0,0 +1,28 @@
+<template>
+	<view>
+		<web-view :src="url"></web-view>
+	</view>
+</template>
+
+<script>
+	import { config, getUrl } from '@/api/api.js'
+	export default {
+		data() {
+			return {
+				url: ''
+			}
+		},
+		onLoad() {
+			getUrl().then(res => {
+				this.url = res.data
+			})
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

BIN
static/IDGold.png


BIN
static/almost-lottery1__bg2x.png


BIN
static/almost-lottery__action.png


BIN
static/almost-lottery__action2x.png


BIN
static/almost-lottery__action3x.png


BIN
static/almost-lottery__bg.png


BIN
static/almost-lottery__bg2x.png


BIN
static/almost-lottery__bg3x.png


BIN
static/avatar.jpg


BIN
static/backImg.png


BIN
static/chassis.png


BIN
static/close.png


BIN
static/decorate.png


BIN
static/doubleBt.png


BIN
static/git.png


BIN
static/horn.png


BIN
static/iPhone12Chip.png


BIN
static/logo.png


BIN
static/popupBack.png


BIN
static/retract.png


BIN
static/triangle.png


BIN
static/turntable_VIP.png


BIN
static/turntable_gold.png


BIN
static/turntable_golds.png


BIN
static/turntable_iPhone12.png


BIN
static/unfold.png


BIN
static/vipChip.png


+ 80 - 0
uni.scss

@@ -0,0 +1,80 @@
+/**
+ * 这里是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;
+
+
+/* uni.scss */
+@import 'uview-ui/theme.scss';

+ 89 - 0
uni_modules/almost-lottery/changelog.md

@@ -0,0 +1,89 @@
+## 1.7.11(2021-07-22)
+本次更新:
+- 修复部分安卓手机文字大小异常的问题
+- 字段 `strHeightMultiple` 更换为 `strLineHeight`
+## 1.7.10(2021-07-12)
+本次更新:
+- 修复奖品名称 `name` 为空字符串时无法成功绘制转盘的问题
+- 新增 `prizeNameDrawed` 是否绘制奖品名称的配置项,现在可以仅展示奖品图片了
+## 1.7.9(2021-07-09)
+本次更新:
+- 优化组件内部代码
+- 修复奖品图片已然是 `base64` 格式时导致转盘绘制失败的问题
+- 文档新增QQ群号,让沟通更便捷
+## 1.7.8(2021-07-08)
+本次更新:
+- 调整 `Canvas` 默认宽高为 `280`
+## 1.7.7(2021-07-08)
+本次更新:
+- 新增多个配置项,满足更多自定义需求
+- 优化多行文本情况下非中文字符的字节处理
+- 修复偶发的第一条数据文本不居中显示的问题
+## 1.7.6(2021-07-02)
+本次更新:
+- 调整 `imageWidth` 、 `imageHeight` 字段为 `imgWidth` 、 `imgHeight` 
+- 更新示例项目
+## 1.7.5(2021-07-01)
+本次更新:
+- 新增配置项 `imgMarginStr` 奖品图片距离奖品文字的距离
+## 1.7.4(2021-06-28)
+本次更新:
+- 新增轮盘旋转或指针旋转配置项
+- 转盘内置的外环图片以及按钮图片统一调整为 `image` 展示
+- 更新相关文档说明
+## 1.7.3(2021-06-16)
+本次更新:
+- 优化错误提示
+- 优化示例项目
+- 优化文档说明
+## 1.7.2(2021-06-11)
+本次更新:
+- 新增 `canvasId` 参数配置项,多画板情况下需要配置不同的 `canvasId`
+- 优化多画板情况下的缓存功能
+- 优化示例项目
+- 修改文档说明
+## 1.7.1(2021-06-10)
+本次更新:
+- 优化示例项目中的注释
+## 1.7.0(2021-06-04)
+本次更新:
+- 修复 `1.6.1` 引起的多行奖品文字行高异常的问题
+- 新增配置转盘外环和抽奖按钮图片的功能,详见文档说明
+- 更新示例项目,新增抽奖次数等业务有关的逻辑供参考
+## 1.6.1(2021-05-28)
+本次更新:
+- 修复小程序平台画板模糊的问题
+## 1.6.0(2021-05-28)
+本次更新:
+- 新增奖品区块是否开启描边的配置项,默认不开启
+- 调整画板缓存为默认不开启
+- 优化代码
+- 优化文档说明
+- 更新示例项目并修改部分注释
+## 1.5.13(2021-05-22)
+本次更新:
+- 优化文档说明
+- 更新示例项目
+## 1.5.12(2021-05-22)
+本次更新:
+- 新增配置项 `strokeColor` 奖品区块边框颜色
+- 更新文档说明
+## 1.5.11(2021-05-19)
+本次更新:
+- 新增`strMarginOutside`参数,用于设置奖品文字距离边缘的距离
+- 修复奖品文字在某些情况下不是居中显示的问题
+## 1.5.10(2021-05-19)
+本次更新:
+- 修复示例项目中权重值相同时的取值逻辑
+## 1.5.9(2021-05-14)
+本次更新:
+- 调整代码,优化小程序端的展示
+## 1.5.8(2021-05-12)
+本次更新:
+- 文档增加预警提示:不再维护非 `uni_modules` 模式下的版本
+## 1.5.7(2021-05-12)
+本次更新:
+- 修复小程序平台奖品名称不清晰的问题
+## 1.5.6(2021-03-18)
+本次更新:
+- 适配 uni_modules 插件模式

+ 893 - 0
uni_modules/almost-lottery/components/almost-lottery/almost-lottery.vue

@@ -0,0 +1,893 @@
+<template>
+	<view class="almost-lottery">
+		<view class="almost-lottery__wrap"
+			:style="{ width: outerWidth + higtCanvasMargin + 'px', height: outerWidth + higtCanvasMargin + 'px'}"
+			v-if="lotteryImg">
+			<image :src="imgType === 0 ? '/static/almost-lottery__bg2x.png' : '/static/almost-lottery1__bg2x.png' " mode="widthFix" class="almost-lottery__bg" :style="{
+				width: outerWidth + higtCanvasMargin + 'px',
+				height: outerWidth + higtCanvasMargin + 'px'
+			}"></image>
+			<image class="almost-lottery__canvas-img" mode="widthFix" :src="lotteryImg" :style="{
+				width: canvasWidth + 'px',
+				height: canvasWidth  + 'px',
+				transform: `rotate(${canvasAngle + targetAngle - countBaseAngle}deg)`,
+				transitionDuration: `${transitionDuration}s`
+			}"></image>
+			<image :src="actionBg" mode="widthFix" class="almost-lottery__action almost-lottery__action-img" :style="{
+				width: actionWidth + 'px',
+				height: actionHeight + 'px',
+				transform: `rotate(${actionAngle + targetActionAngle}deg)`,
+				transitionDuration: `${transitionDuration}s`
+			}" @click="handleActionStart" :animation="animationData"></image>
+		</view>
+
+		<!-- 正在绘制转盘时的提示文本 -->
+		<text class="almost-lottery__tip" v-else>{{ almostLotteryTip }}</text>
+
+		<!-- 为了兼容 app 端 ctx.measureText 所需的标签 -->
+		<text class="almost-lottery__measureText" :style="{ fontSize: higtFontSize + 'px' }">{{ measureText }}</text>
+
+		<!-- #ifdef MP-ALIPAY -->
+		<canvas :class="className" :id="canvasId" :width="higtCanvasSize" :height="higtCanvasSize" :style="{
+			width: higtCanvasSize + 'px',
+			height: higtCanvasSize + 'px'
+		}" />
+		<!-- #endif -->
+		<!-- #ifndef MP-ALIPAY -->
+		<canvas :class="className" :canvas-id="canvasId" :width="higtCanvasSize" :height="higtCanvasSize" :style="{
+			width: higtCanvasSize + 'px',
+			height: higtCanvasSize + 'px'
+		}" />
+		<!-- #endif -->
+	</view>
+</template>
+
+<script>
+	const systemInfo = uni.getSystemInfoSync()
+	import {
+		getStore,
+		setStore,
+		clearStore,
+		clacTextLen,
+		downloadFile,
+		pathToBase64
+	} from '@/uni_modules/almost-lottery/utils/almost-utils.js'
+	let timer = null, timer1 = null
+	export default {
+		name: 'AlmostLottery',
+		props: {
+			// canvas 宽度
+			canvasId: {
+				type: String,
+				default: 'almostLotteryCanvas'
+			},
+			// canvas 宽度
+			canvasWidth: {
+				type: Number,
+				default: 280
+			},
+			// canvas 高度
+			canvasHeight: {
+				type: Number,
+				default: 280
+			},
+			// 转盘外圈的宽度
+			outerWidth: {
+				type: Number,
+				default: 320
+			},
+			// 转盘外圈的高度
+			outerHeight: {
+				type: Number,
+				default: 320
+			},
+			// 内圈与外圈的间距
+			canvasMargin: {
+				type: Number,
+				default: 5
+			},
+			// 抽奖按钮的宽度
+			actionWidth: {
+				type: Number,
+				default: 120
+			},
+			// 抽奖按钮的高度
+			actionHeight: {
+				type: Number,
+				default: 120
+			},
+			// 奖品列表
+			prizeList: {
+				type: Array,
+				required: true,
+				validator: (value) => {
+					return value.length > 1
+				}
+			},
+			// 中奖奖品在列表中的下标
+			prizeIndex: {
+				type: Number,
+				required: true
+			},
+			// 奖品区块对应背景颜色
+			colors: {
+				type: Array,
+				default: () => [
+					'#FFFFFF',
+					'#FFE9AA'
+				]
+			},
+			// 转盘外环背景图
+			lotteryBg: {
+				type: String,
+				default: '/static/almost-lottery__bg2x.png'
+			},
+			// 抽奖按钮背景图
+			actionBg: {
+				type: String,
+				default: '/static/almost-lottery__action2x.png'
+			},
+			// 是否绘制奖品名称
+			prizeNameDrawed: {
+				type: Boolean,
+				default: true
+			},
+			// 是否开启奖品区块描边
+			stroked: {
+				type: Boolean,
+				default: false
+			},
+			// 描边颜色
+			strokeColor: {
+				type: String,
+				default: '#FFE9AA'
+			},
+			// 旋转的类型
+			rotateType: {
+				type: String,
+				default: 'roulette'
+			},
+			// 旋转动画时间 单位s
+			duration: {
+				type: Number,
+				default: 8
+			},
+			// 旋转的圈数
+			ringCount: {
+				type: Number,
+				default: 2
+			},
+			// 指针位置
+			pointerPosition: {
+				type: String,
+				default: 'edge',
+				validator: (value) => {
+					return value === 'edge' || value === 'middle'
+				}
+			},
+			// 字体颜色
+			strFontColor: {
+				type: String,
+				default: '#FE5549'
+			},
+			// 文字的大小
+			strFontSize: {
+				type: Number,
+				default: 12
+			},
+			// 奖品文字距离边缘的距离
+			strMarginOutside: {
+				type: Number,
+				default: 20
+			},
+			// 奖品图片距离奖品文字的距离
+			imgMarginStr: {
+				type: Number,
+				default: 10
+			},
+			// 奖品文字多行情况下的行高
+			strLineHeight: {
+				type: Number,
+				default: 1.2
+			},
+			// 奖品名称所对应的 key 值
+			strKey: {
+				type: String,
+				default: 'name'
+			},
+			// 奖品文字总长度限制
+			strMaxLen: {
+				type: Number,
+				default: 6
+			},
+			// 奖品文字多行情况下第一行文字长度
+			strLineLen: {
+				type: Number,
+				default: 6
+			},
+			// 奖品图片的宽
+			imgWidth: {
+				type: Number,
+				default: 50
+			},
+			// 奖品图片的高
+			imgHeight: {
+				type: Number,
+				default: 50
+			},
+			// 转盘绘制成功的提示
+			successMsg: {
+				type: String,
+				default: '奖品准备就绪,快来参与抽奖吧'
+			},
+			// 转盘绘制失败的提示
+			failMsg: {
+				type: String,
+				default: '奖品仍在准备中,请稍后再来...'
+			},
+			// 是否开启画板的缓存
+			canvasCached: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				// 画板className
+				className: 'almost-lottery__canvas',
+				// 画板导出的图片
+				lotteryImg: '',
+				// 旋转到奖品目标需要的角度
+				targetAngle: 0,
+				targetActionAngle: 0,
+				// 旋转动画时间 单位 s
+				transitionDuration: 0,
+				// 是否正在旋转
+				isRotate: false,
+				// 当前停留在那个奖品的序号
+				stayIndex: 0,
+				// 当前中奖奖品的序号
+				targetIndex: 0,
+				// 是否存在可用的缓存转盘图
+				isCacheImg: false,
+				oldLotteryImg: '',
+				// 转盘绘制时的提示
+				almostLotteryTip: '奖品准备中...',
+				// 解决 app 不支持 measureText 的问题
+				// app 已在 2.9.3 的版本中提供了对 measureText 的支持,将在后续版本逐渐稳定后移除相关兼容代码
+				measureText: '',
+				animationData: {},
+				imgType: 0
+			}
+		},
+		created() {
+			let circleCount = 0;
+			// 初始化一个动画
+			let animation = uni.createAnimation({
+				duration: 500,
+				timingFunction: 'linear',
+				delay: 100,
+				transformOrigin: "50% 50%",
+			})
+			
+			timer = setInterval(() => {
+				if (circleCount % 2 == 0) {
+					animation.scale(1).step()
+				} else {
+					animation.scale(1.1).step()
+				}
+				this.animationData = animation.export()
+				circleCount++;
+				if(circleCount === 1000){
+					circleCount = 0
+				}
+			}, 500)
+			
+			timer1 = setInterval(() => {
+				if (this.imgType === 0) {
+					this.imgType = 1
+				} else {
+					this.imgType = 0
+				}
+			}, 1000)
+		},
+		destroyed() {
+			timer && clearInterval(timer)
+			timer1 && clearInterval(timer1)
+		},
+		computed: {
+			// 高清尺寸
+			higtCanvasSize() {
+				return this.canvasWidth * systemInfo.pixelRatio
+			},
+			// 高清字体
+			higtFontSize() {
+				return this.strFontSize * systemInfo.pixelRatio
+			},
+			// 高清行高
+			higtHeightMultiple() {
+				return this.strFontSize * this.strLineHeight * systemInfo.pixelRatio
+			},
+			// 高清内外圈间距
+			higtCanvasMargin() {
+				return this.canvasMargin * systemInfo.pixelRatio
+			},
+			// 根据奖品列表计算 canvas 旋转角度
+			canvasAngle() {
+				let result = 0
+
+				let prizeCount = this.prizeList.length
+				let prizeClip = 360 / prizeCount
+				let diffNum = 90 / prizeClip
+				if (this.pointerPosition === 'edge' || this.rotateType === 'pointer') {
+					result = -(prizeClip * diffNum)
+				} else {
+					result = -(prizeClip * diffNum + prizeClip / 2)
+				}
+				
+				return result
+			},
+			actionAngle() {
+				return 0
+			},
+			// 外圆的半径
+			outsideRadius() {
+				return this.higtCanvasSize / 2
+			},
+			// 内圆的半径
+			insideRadius() {
+				return 20 * systemInfo.pixelRatio
+			},
+			// 文字距离边缘的距离
+			textRadius() {
+				return this.strMarginOutside * systemInfo.pixelRatio || (this.higtFontSize / 2)
+			},
+			// 根据画板的宽度计算奖品文字与中心点的距离
+			textDistance() {
+				const textZeroY = Math.round(this.outsideRadius - (this.insideRadius / 2))
+				return textZeroY - this.textRadius
+			},
+			// 根据内容个数返回半个格子角度
+			countBaseAngle() {
+				let result = 0
+				let prizeCount = this.prizeList.length
+				let prizeClip = 360 / prizeCount
+				return prizeClip/2
+			}
+		},
+		watch: {
+			// 监听获奖序号的变动
+			prizeIndex(newVal, oldVal) {
+				if (newVal > -1) {
+					this.targetIndex = newVal
+					this.onRotateStart()
+				} else {
+					console.info('旋转结束,prizeIndex 已重置')
+				}
+			}
+		},
+		methods: {
+			// 开始旋转
+			onRotateStart() {
+				if (this.isRotate) return
+				this.isRotate = true
+				// 奖品总数
+				let prizeCount = this.prizeList.length
+				let baseAngle = 360 / prizeCount
+				let angles = 0
+
+				if (this.rotateType === 'pointer') {
+					if (this.targetActionAngle === 0) {
+						// 第一次旋转
+						angles = (this.targetIndex - this.stayIndex) * baseAngle + baseAngle / 2 - this.actionAngle
+					} else {
+						// 后续旋转
+						// 后续继续旋转 就只需要计算停留的位置与目标位置的角度
+						angles = (this.targetIndex - this.stayIndex) * baseAngle
+					}
+
+					// 更新目前序号
+					this.stayIndex = this.targetIndex
+					// 转 8 圈,圈数越多,转的越快
+					this.targetActionAngle += angles + 360 * this.ringCount
+					console.log('targetActionAngle', this.targetActionAngle)
+				} else {
+					// if (this.targetAngle === 0) {
+					// 	// 第一次旋转
+					// 	// 因为第一个奖品是从0°开始的,即水平向右方向
+					// 	// 第一次旋转角度 = 270度 - (停留的序号-目标序号) * 每个奖品区间角度 - 每个奖品区间角度的一半 - canvas自身旋转的度数
+					// 	angles = (270 - (this.targetIndex - this.stayIndex) * baseAngle - baseAngle / 2) - this.canvasAngle
+					// } else {
+						// 后续旋转
+						// 后续继续旋转 就只需要计算停留的位置与目标位置的角度
+						angles = -(this.targetIndex - this.stayIndex) * baseAngle
+					// }
+
+					// 更新目前序号
+					this.stayIndex = this.targetIndex
+					// 转 8 圈,圈数越多,转的越快
+					this.targetAngle += angles + 360 * this.ringCount
+				}
+
+				// 计算转盘结束的时间,预加一些延迟确保转盘停止后触发结束事件
+				let endTime = this.transitionDuration * 1000 + 100
+				let endTimer = setTimeout(() => {
+					clearTimeout(endTimer)
+					endTimer = null
+
+					this.isRotate = false
+					this.$emit('draw-end')
+				}, endTime)
+
+				let resetPrizeTimer = setTimeout(() => {
+					clearTimeout(resetPrizeTimer)
+					resetPrizeTimer = null
+
+					// 每次抽奖结束后都要重置父级附件的 prizeIndex
+					this.$emit('reset-index')
+				}, endTime + 50)
+			},
+			// 点击 开始抽奖 按钮
+			handleActionStart() {
+				if (!this.lotteryImg) return
+				if (this.isRotate) return
+				this.$emit('draw-start')
+			},
+			// 渲染转盘
+			async onCreateCanvas() {
+				// 获取 canvas 画布
+				const canvasId = this.canvasId
+				const ctx = uni.createCanvasContext(canvasId, this)
+
+				// canvas 的宽高
+				let canvasW = this.higtCanvasSize
+				let canvasH = this.higtCanvasSize
+
+				// 根据奖品个数计算 角度
+				let prizeCount = this.prizeList.length
+				let baseAngle = Math.PI * 2 / prizeCount
+
+				// 设置字体
+				ctx.setFontSize(this.higtFontSize)
+
+				// 注意,开始画的位置是从0°角的位置开始画的。也就是水平向右的方向。
+				// 画具体内容
+				for (let i = 0; i < prizeCount; i++) {
+					let prizeItem = this.prizeList[i]
+					// 当前角度
+					let angle = i * baseAngle
+
+					// 保存当前画布的状态
+					ctx.save()
+
+					// x => 圆弧对应的圆心横坐标 x
+					// y => 圆弧对应的圆心横坐标 y
+					// radius => 圆弧的半径大小
+					// startAngle => 圆弧开始的角度,单位是弧度
+					// endAngle => 圆弧结束的角度,单位是弧度
+					// anticlockwise(可选) => 绘制方向,true 为逆时针,false 为顺时针
+
+					ctx.beginPath()
+					// 外圆
+					ctx.arc(canvasW * 0.5, canvasH * 0.5, this.outsideRadius, angle, angle + baseAngle, false)
+					// 内圆
+					ctx.arc(canvasW * 0.5, canvasH * 0.5, this.insideRadius, angle + baseAngle, angle, true)
+
+					// 每个奖品区块背景填充颜色
+					if (this.colors.length === 2) {
+						ctx.setFillStyle(this.colors[i % 2])
+					} else {
+						ctx.setFillStyle(this.colors[i])
+					}
+					// 填充颜色
+					ctx.fill()
+
+					// 开启描边
+					if (this.stroked) {
+						// 设置描边颜色
+						ctx.setStrokeStyle(`${this.strokeColor}`)
+						// 描边
+						ctx.stroke()
+					}
+
+					// 开始绘制奖品内容
+					// 重新映射画布上的 (0,0) 位置
+					let translateX = canvasW * 0.5 + Math.cos(angle + baseAngle / 2) * this.textDistance
+					let translateY = canvasH * 0.5 + Math.sin(angle + baseAngle / 2) * this.textDistance
+					ctx.translate(translateX, translateY)
+
+					// 绘制奖品名称
+					ctx.setFillStyle(this.strFontColor)
+					let rewardName = this.strLimit(prizeItem[this.strKey])
+
+					// rotate方法旋转当前的绘图,因为文字是和当前扇形中心线垂直的
+					ctx.rotate(angle + (baseAngle / 2) + (Math.PI / 2))
+
+					// 设置文本位置并处理换行
+					// 是否需要换行
+					if (rewardName && this.prizeNameDrawed) {
+						let realLen = clacTextLen(rewardName).realLen
+						let isLineBreak = realLen > this.strLineLen
+						if (isLineBreak) {
+							// 获得多行文本数组
+							let firstText = ''
+							let lastText = ''
+							let firstCount = 0
+							for (let j = 0; j < rewardName.length; j++) {
+								firstCount += clacTextLen(rewardName[j]).byteLen
+								if (firstCount <= (this.strLineLen * 2)) {
+									firstText += rewardName[j]
+								} else {
+									lastText += rewardName[j]
+								}
+							}
+							rewardName = firstText + ',' + lastText
+							let rewardNames = rewardName.split(',')
+							// 循环文本数组,计算每一行的文本宽度
+							for (let j = 0; j < rewardNames.length; j++) {
+								if (ctx.measureText && ctx.measureText(rewardNames[j]).width > 0) {
+									// 文本的宽度信息
+									let tempStrSize = ctx.measureText(rewardNames[j])
+									let tempStrWidth = -(tempStrSize.width / 2).toFixed(2)
+									ctx.fillText(rewardNames[j], tempStrWidth, j * this.higtHeightMultiple)
+								} else {
+									this.measureText = rewardNames[j]
+
+									// 等待页面重新渲染
+									await this.$nextTick()
+
+									let textWidth = await this.getTextWidth()
+									let tempStrWidth = -(textWidth / 2).toFixed(2)
+									ctx.fillText(rewardNames[j], tempStrWidth, j * this.higtHeightMultiple)
+									// console.log(rewardNames[j], textWidth, i)
+								}
+							}
+						} else {
+							if (ctx.measureText && ctx.measureText(rewardName).width > 0) {
+								// 文本的宽度信息
+								let tempStrSize = ctx.measureText(rewardName)
+								let tempStrWidth = -(tempStrSize.width / 2).toFixed(2)
+								ctx.fillText(rewardName, tempStrWidth, 0)
+							} else {
+								this.measureText = rewardName
+
+								// 等待页面重新渲染
+								await this.$nextTick()
+
+								let textWidth = await this.getTextWidth()
+								let tempStrWidth = -(textWidth / 2).toFixed(2)
+								ctx.fillText(rewardName, tempStrWidth, 0)
+							}
+						}
+					}
+
+					// 绘制奖品图片
+					if (prizeItem.prizeImage) {
+						// App-Android平台 系统 webview 更新到 Chrome84+ 后 canvas 组件绘制本地图像 uni.canvasToTempFilePath 会报错
+						// 统一将图片处理成 base64
+						// https://ask.dcloud.net.cn/question/103303
+						let reg = /^(https|http)/g
+						// 处理远程图片
+						if (reg.test(prizeItem.prizeImage)) {
+							let platformTips = ''
+							// #ifdef APP-PLUS
+							platformTips = ''
+							// #endif
+							// #ifdef MP
+							platformTips = '需要处理好下载域名的白名单问题,'
+							// #endif
+							// #ifdef H5
+							platformTips = '需要处理好跨域问题,'
+							// #endif
+							console.warn(`###当前数据列表中的奖品图片为网络图片,${platformTips}开始尝试下载图片...###`)
+							let res = await downloadFile(prizeItem.prizeImage)
+							console.log('处理远程图片', res)
+							if (res.ok) {
+								let tempFilePath = res.tempFilePath
+								// #ifndef MP
+								prizeItem.prizeImage = await pathToBase64(tempFilePath)
+								// #endif
+								// #ifdef MP
+								prizeItem.prizeImage = tempFilePath
+								// #endif
+							} else {
+								this.handlePrizeImgSuc({
+									ok: false,
+									data: res.data,
+									msg: res.msg
+								})
+							}
+						} else {
+							console.log('处理非远程图片', prizeItem.prizeImage)
+							// #ifndef MP
+							if (prizeItem.prizeImage.indexOf(';base64,') === -1) {
+								prizeItem.prizeImage = await pathToBase64(prizeItem.prizeImage)
+							}
+							// #endif
+						}
+
+						let prizeImageX = -(this.imgWidth * systemInfo.pixelRatio / 2)
+						let prizeImageY = this.imgMarginStr * systemInfo.pixelRatio
+						let prizeImageW = this.imgWidth * systemInfo.pixelRatio
+						let prizeImageH = this.imgHeight * systemInfo.pixelRatio
+						ctx.drawImage(prizeItem.prizeImage, prizeImageX, prizeImageY, prizeImageW, prizeImageH)
+					}
+
+					ctx.restore()
+				}
+
+				// 保存绘图并导出图片
+				ctx.draw(true, () => {
+					let drawTimer = setTimeout(() => {
+						clearTimeout(drawTimer)
+						drawTimer = null
+
+						// #ifdef MP-ALIPAY
+						ctx.toTempFilePath({
+							destWidth: this.canvasWidth * systemInfo.pixelRatio,
+							destHeight: this.canvasHeight * systemInfo.pixelRatio,
+							success: (res) => {
+								// console.log(res.apFilePath)
+								this.handlePrizeImg({
+									ok: true,
+									data: res.apFilePath,
+									msg: '画布导出生成图片成功'
+								})
+							},
+							fail: (err) => {
+								this.handlePrizeImg({
+									ok: false,
+									data: err,
+									msg: '画布导出生成图片失败'
+								})
+							}
+						})
+						// #endif
+
+						// #ifndef MP-ALIPAY
+						uni.canvasToTempFilePath({
+							canvasId: this.canvasId,
+							success: (res) => {
+								// 在 H5 平台下,tempFilePath 为 base64
+								// console.log(res.tempFilePath)
+								this.handlePrizeImg({
+									ok: true,
+									data: res.tempFilePath,
+									msg: '画布导出生成图片成功'
+								})
+							},
+							fail: (err) => {
+								this.handlePrizeImg({
+									ok: false,
+									data: err,
+									msg: '画布导出生成图片失败'
+								})
+							}
+						}, this)
+						// #endif
+					}, 500)
+				})
+			},
+			// 处理导出的图片
+			handlePrizeImg(res) {
+				if (res.ok) {
+					let data = res.data
+
+					if (!this.canvasCached) {
+						this.lotteryImg = data
+						this.handlePrizeImgSuc(res)
+						return
+					}
+
+					// #ifndef H5
+					if (this.isCacheImg) {
+						uni.getSavedFileList({
+							success: (sucRes) => {
+								let fileList = sucRes.fileList
+								// console.log('getSavedFileList Cached', fileList)
+
+								let cached = false
+
+								if (fileList.length) {
+									for (let i = 0; i < fileList.length; i++) {
+										let item = fileList[i]
+										if (item.filePath === data) {
+											cached = true
+											this.lotteryImg = data
+
+											console.info('经查,本地缓存中存在的转盘图可用,本次将不再绘制转盘')
+											this.handlePrizeImgSuc(res)
+											break
+										}
+									}
+								}
+
+								if (!cached) {
+									console.info('经查,本地缓存中存在的转盘图不可用,需要重新初始化转盘绘制')
+									this.initCanvasDraw()
+								}
+							},
+							fail: (err) => {
+								this.initCanvasDraw()
+							}
+						})
+					} else {
+						uni.saveFile({
+							tempFilePath: data,
+							success: (sucRes) => {
+								let filePath = sucRes.savedFilePath
+								// console.log('saveFile', filePath)
+								setStore(`${this.canvasId}LotteryImg`, filePath)
+								this.lotteryImg = filePath
+								this.handlePrizeImgSuc({
+									ok: true,
+									data: filePath,
+									msg: '画布导出生成图片成功'
+								})
+							},
+							fail: (err) => {
+								this.handlePrizeImg({
+									ok: false,
+									data: err,
+									msg: '画布导出生成图片失败'
+								})
+							}
+						})
+					}
+					// #endif
+					// #ifdef H5
+					setStore(`${this.canvasId}LotteryImg`, data)
+					this.lotteryImg = data
+					this.handlePrizeImgSuc(res)
+
+					// console info
+					let consoleText = this.isCacheImg ? '缓存' : '导出'
+					console.info(`当前为 H5 端,使用${consoleText}中的 base64 图`)
+					// #endif
+				} else {
+					console.error('处理导出的图片失败', res)
+					uni.hideLoading()
+					// #ifdef H5
+					console.error('###当前为 H5 端,下载网络图片需要后端配置允许跨域###')
+					// #endif
+					// #ifdef MP
+					console.error('###当前为小程序端,下载网络图片需要配置域名白名单###')
+					// #endif
+				}
+			},
+			// 处理图片完成
+			handlePrizeImgSuc(res) {
+				uni.hideLoading()
+				this.$emit('finish', {
+					ok: res.ok,
+					data: res.data,
+					msg: res.ok ? this.successMsg : this.failMsg
+				})
+				this.almostLotteryTip = res.ok ? this.successMsg : this.failMsg
+			},
+			// 兼容 app 端不支持 ctx.measureText
+			// 已知问题:初始绘制时,低端安卓机 平均耗时 2s
+			// hbx 2.8.12+ 已在 app 端支持
+			getTextWidth() {
+				console.warn('正在采用兼容方式获取文本的 size 信息,虽然没有任何问题,如果可以,请将此 systemInfo 及 hbx 版本号 反馈给作者', systemInfo)
+				let query = uni.createSelectorQuery().in(this)
+				let nodesRef = query.select('.almost-lottery__measureText')
+				return new Promise((resolve, reject) => {
+					nodesRef.fields({
+						size: true,
+					}, (res) => {
+						resolve(res.width)
+					}).exec()
+				})
+			},
+			// 处理文字溢出
+			strLimit(value) {
+				let maxLength = this.strMaxLen
+				if (!value || !maxLength) return value
+				return clacTextLen(value).realLen > maxLength ? value.slice(0, maxLength - 1) + '...' : value
+			},
+			// 检查本地缓存中是否存在转盘图
+			checkCacheImg() {
+				console.log('检查本地缓存中是否存在转盘图')
+				// 检查是否已有缓存的转盘图
+				// 检查是否与本次奖品数据相同
+				this.oldLotteryImg = getStore(`${this.canvasId}LotteryImg`)
+				let oldPrizeList = getStore(`${this.canvasId}PrizeList`)
+				let newPrizeList = JSON.stringify(this.prizeList)
+				if (this.oldLotteryImg) {
+					if (oldPrizeList === newPrizeList) {
+						console.log(`经查,本地缓存中存在转盘图 => ${this.oldLotteryImg}`)
+						this.isCacheImg = true
+
+						console.log('需要继续判断这张缓存图是否可用')
+						this.handlePrizeImg({
+							ok: true,
+							data: this.oldLotteryImg,
+							msg: '画布导出生成图片成功'
+						})
+						return
+					}
+				}
+
+				console.log('经查,本地缓存中不存在转盘图')
+				this.initCanvasDraw()
+			},
+			// 初始化绘制
+			initCanvasDraw() {
+				console.log('开始初始化转盘绘制')
+				this.isCacheImg = false
+				this.lotteryImg = ''
+				clearStore(`${this.canvasId}LotteryImg`)
+				setStore(`${this.canvasId}PrizeList`, this.prizeList)
+				this.onCreateCanvas()
+			}
+			
+		},
+		mounted() {
+			this.$nextTick(() => {
+				let stoTimer = setTimeout(() => {
+					clearTimeout(stoTimer)
+					stoTimer = null
+					if (this.canvasCached) {
+						this.checkCacheImg()
+					} else {
+						this.onCreateCanvas()
+					}
+					this.transitionDuration = this.duration
+				}, 50)
+			})
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.almost-lottery {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		margin: 0 auto;
+	}
+
+	.almost-lottery__wrap {
+		position: relative;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.almost-lottery__action,
+	.almost-lottery__bg,
+	.almost-lottery__canvas {
+		position: absolute;
+	}
+
+	.almost-lottery__canvas {
+		left: -9999px;
+		opacity: 0;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.almost-lottery__canvas-img,
+	.almost-lottery__action-bg {
+		display: block;
+		transition: transform cubic-bezier(.34, .12, .05, .95);
+	}
+
+	.almost-lottery__tip {
+		color: #FFFFFF;
+		font-size: 24rpx;
+		text-align: center;
+	}
+
+	.almost-lottery__measureText {
+		position: absolute;
+		left: 0;
+		top: 0;
+		white-space: nowrap;
+		font-size: 12px;
+		opacity: 0;
+	}
+	
+</style>

+ 78 - 0
uni_modules/almost-lottery/package.json

@@ -0,0 +1,78 @@
+{
+  "id": "almost-lottery",
+  "displayName": "Almost-Lottery抽奖转盘",
+  "version": "1.7.11",
+  "description": "【荣获2021插件大赛三等奖】提供奇数、缓存等众多配置项,更有抽奖概率、抽奖次数、付费抽奖等功能内置于示例项目中,完美支持APP、各平台小程序、H5、PC",
+  "keywords": [
+    "转盘",
+    "抽奖",
+    "大转盘抽奖"
+],
+  "repository": "https://github.com/ialmost/almost-components_uniapp",
+  "engines": {
+    "HBuilderX": "^3.1.22"
+  },
+  "dcloudext": {
+    "category": [
+        "前端组件",
+        "通用组件"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "n"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        }
+      }
+    }
+  }
+}

+ 156 - 0
uni_modules/almost-lottery/readme.md

@@ -0,0 +1,156 @@
+# almost-lottery
+*使用 Canvas 绘制的抽奖转盘,提供奇数、缓存等众多配置项,更有抽奖概率、抽奖次数、付费抽奖等功能内置于示例项目中*
+
+
+> <br />
+> 
+> 如果用着还行,请支持一下
+> - 前往 [GitHub](https://github.com/ialmost/almost-components_uniapp) 给个 Star
+> - 前往 [UniApp](https://ext.dcloud.net.cn/plugin?id=1030) 给个五星
+> - 使用中遇到问题时,可以添加 **QQ群 20441313**
+> 
+> <br />
+
+
+## 高能预警
+- 本插件仅支持 `uni_modules` 模式,强烈推荐使用该模式,**非 `uni_modules` 模式不再维护**
+- 在使用本插件之前,强烈建议使用 `HBuilderX` 导入示例项目验证可用性并参照修改
+
+## 功能概要
+- [x] 可配置奖品文字
+- [x] 可配置每个奖品区块的背景颜色
+- [x] 可配置奖品区块是否开启描边以及边框的颜色,默认不开启
+- [x] 可配置转盘外环和抽奖按钮图
+- [x] 可配置每个奖品区块的奖品图片,**当图片是网络地址时,小程序端需要配置白名单,H5端需要允许跨域**
+- [x] 奖品列表支持奇数,**奇数时需尽量能被 `360` 除尽**
+- [x] 可配置内圈与外圈的间距
+- [x] 可配置轮盘旋转或指针旋转
+- [x] 可配置画板是否缓存,默认不开启
+- [x] 更多配置请查看API说明
+
+## 示例项目附加功能
+- [x] 中奖概率,**强烈推荐中奖概率应由后端控制**
+- [x] 抽奖次数
+- [x] 付费抽奖
+
+
+## 注意事项
+
+- 编译到小程序端时,请务必勾选ES6转ES5
+
+- `@reset-index="prizeIndex = -1"` 必须默认写入到 `template` 中,不可删除
+
+- 每个奖品区块的奖品图片尺寸不宜过大,图片越大,绘制的过程越慢,尽量将图片尺寸控制在 `300*300` 以内,且图片大小控制在 `100KB` 以内
+
+- 关于中奖概率的配置,请下载示例项目,参照 `pages/index/index.vue` 中的代码进行配置
+
+- 组件本身不涉及任何业务逻辑,与业务相关的代码建议都放在 `pages/index/index.vue` 中
+
+
+## 代码演示
+#### 基础用法
+```
+// template
+// @reset-index="prizeIndex = -1" 必须默认写入到 template 中,不可删除
+<almost-lottery
+  :prizeList="prizeList"
+  :prizeIndex="prizeIndex"
+  @reset-index="prizeIndex = -1"
+  @draw-start="handleDrawStart"
+  @draw-end="handleDrawEnd"
+  @finish="handleDrawFinish"
+  v-if="prizeList.length"
+/>
+
+// script
+import AlmostLottery from '@/uni_modules/almost-lottery/components/almost-lottery/almost-lottery.vue'
+export default {
+  components: {
+    AlmostLottery
+  },
+  data () {
+    return {
+      // 以下是奖品配置数据
+      // 奖品数据
+      prizeList: [],
+      // 奖品是否设有库存
+      onStock: true,
+      // 中奖下标
+      prizeIndex: -1
+    }
+  },
+  methods: {
+    // 本次抽奖开始
+    handleDrawStart () {
+      // 这里需要处理你的中奖逻辑,并得出 prizeIndex
+      // 请查看示例项目中的代码
+    },
+    // 本次抽奖结束
+    handleDrawEnd () {
+      // 完成抽奖后,这里处理你拿到结果后的逻辑
+      // 请查看示例项目中的代码
+    },
+    // 抽奖转盘绘制完成
+    handleDrawFinish (res) {
+      // 抽奖转盘准备就绪后,这里处理你的逻辑
+      // 请查看示例项目中的代码
+      // console.log('抽奖转盘绘制完成', res)
+    }
+  }
+}
+```
+
+## API
+#### Props
+参数 | 说明 | 类型 | 默认值
+:---|:---|:---|:---
+canvasId | Canvas的标识,**多画板情况下需要配置不同的标识** | *`String`* | `'almostLotteryCanvas'`
+canvasWidth | Canvas的宽度 | *`Number`* | `280`
+canvasHeight | Canvas的高度 | *`Number`* | `280`
+outerWidth | 转盘外圈的宽度 | *`Number`* | `320`
+outerHeight | 转盘外圈的高度 | *`Number`* | `320`
+canvasMargin | 内圈与外圈的间距 | *`Number`* | `5`
+actionWidth | 抽奖按钮的宽度 | *`Number`* | `120`
+actionHeight | 抽奖按钮的高度 | *`Number`* | `120`
+prizeIndex | 获奖奖品在奖品列表中的序号,**每次抽奖结束后会自动重置为 `-1`** | *`Number`* | `-1`
+prizeList | 奖品列表,支持奇数(尽量能被 `360` 除尽),**为奇数时需要重设 `colors` 参数** | *`Array`* | -
+lotteryBg | 转盘外环图片 | `String` | `默认内置的本地图片`
+actionBg | 抽奖按钮图片 | `String` | `默认内置的本地图片`
+colors | 奖品区块对应的背景颜色,默认 2 个颜色相互交替,**也可以对每个区块设置不同颜色** | *`Array`* | `['#FFFFFF', '#FFE9AA']`
+prizeNameDrawed | 是否绘制奖品名称 | *`Boolean`* | `true`
+stroked | 是否开启奖品区块描边 | *`Boolean`* | `false`
+strokeColor | 奖品区块边框颜色 | *`String`* | `'#FFE9AA'`
+rotateType | 旋转的类型,可选值 `'roulette'` => 轮盘旋转 `'pointer'` => 指针旋转 | *`String`* | `'roulette'`
+duration | 转盘旋转的动画时长,单位:秒 | *`Number`* | `8`
+ringCount | 旋转的圈数 | *`Number`* | `8`
+pointerPosition | 点击抽奖按钮指针的位置,可选值 `'edge'` => 指向边界 `'middle'` => 指向中间 | *`String`* | `'edge'`
+strFontColor | 奖品名称的颜色 | *`String`* | `'#C30B29'`
+strFontSize | 奖品名称的字号 | *`Number`* | `12`
+strLineHeight | 奖品名称多行情况下的行高 | *`Number`* | `1.2`
+strKey | 奖品名称所对应的键名 `key` ,比如 `{ name: '88元现金' }`,`strKey` 就是 `'name'` | *`String`* | `'name'`
+strMaxLen | 奖品名称长度限制 | *`Number`* | `12`
+strLineLen | 奖品名称在多行情况下第一行文字的长度 | *`Number`* | `6`
+strMarginOutside | 奖品文字相对轮盘边缘的距离 | *`Number`* | `strFontSize 的一半`
+imgMarginStr |  奖品图片相对奖品文字的距离 | *`Number`* | `25`
+imgWidth | 奖品图片的宽度 | *`Number`* | `30`
+imgHeight | 奖品图片的高度 | *`Number`* | `30`
+successMsg | 转盘绘制成功的提示 | *`String`* | `'奖品准备就绪,快来参与抽奖吧'`
+failMsg | 转盘绘制失败的提示 | *`String`* | `'奖品仍在准备中,请稍后再来...'`
+canvasCached | 是否开启缓存,避免在数据不变的情况下重复绘制,建议在生产环境中开启 | *`Boolean`* | `false`
+
+#### Events
+事件名 | 说明 | 回调参数
+:---|:---|:---
+@reset-index | 每次抽奖结束后重置获奖的序号为 `-1`,**该事件必须默认写入到 `template` 中,不可删除** | -
+@draw-start | 转盘旋转开始时触发 | -
+@draw-end | 转盘旋转结束时触发 | -
+@finish | Canvas转盘绘制完成时触发 | `{ ok: 绘制是否成功, data: 转盘的图片, msg: 绘制结果的提示 }`
+
+#### prizeList 数据结构
+键名 | 说明 | 类型
+:---|:---|:---
+prizeId | 奖品对应 `ID` | *`Number`*
+name | 奖品名称 | *`String`*
+stock | 奖品库存 | *`Number`*
+weight | 奖品权重 | *`Number`*
+prizeImage | 奖品图片地址,网络图片仅支持`http`和`https`协议 | *`String`*

+ 303 - 0
uni_modules/almost-lottery/utils/almost-utils.js

@@ -0,0 +1,303 @@
+/**
+ * 存储 localStorage 数据
+ * @param {String} name - 缓存数据的标识
+ * @param {any} content - 缓存的数据内容
+ */
+export const setStore = (name, content) => {
+  if (!name) return
+  if (typeof content !== 'string') {
+    content = JSON.stringify(content)
+  }
+	uni.setStorageSync(name, content)
+}
+
+/**
+ * 获取 localStorage 数据
+ * @param {String} name - 缓存数据的标识
+ */
+export const getStore = (name) => {
+  if (!name) return
+  return uni.getStorageSync(name)
+}
+
+/**
+ * 清除 localStorage 数据
+ * @param {String} name - 缓存数据的标识
+ */
+export const clearStore = (name) => {
+  if (name) {
+    uni.removeStorageSync(name)
+  } else {
+    console.log('清理本地全部缓存')
+    uni.clearStorageSync()
+  }
+}
+
+/**
+ * 计算文本的长度
+ * @param {String} text - 文本内容
+ */
+export const clacTextLen = (text) => {
+  if (!text) return { byteLen: 0, realLen: 0 }
+  text += ''
+  let clacLen = 0
+  for (let i = 0; i < text.length; i++) {
+    if ((text.charCodeAt(i) < 0) || (text.charCodeAt(i) > 255)) {
+      clacLen += 2
+    } else {
+      clacLen += 1
+    }
+  }
+  // console.log(`当前文本 ${text} 的长度为 ${clacLen / 2}`)
+  return {
+    byteLen: clacLen,
+    realLen: clacLen / 2
+  }
+}
+
+/**
+ * 下载文件,并返回临时路径
+ * @return {String}  临时路径
+ * @param {String} fileUrl - 网络地址
+*/
+export const downloadFile = (fileUrl) => {
+  return new Promise((resolve) => {
+    uni.downloadFile({
+      url: fileUrl,
+      success: (res) => {
+        // #ifdef MP-ALIPAY
+        if (res.errMsg === 'downloadFile:ok') {
+          resolve({
+            ok: true,
+            data: res.errMsg,
+            tempFilePath: res.tempFilePath
+          })
+        } else {
+          resolve({
+            ok: false,
+            data: res.errMsg,
+            msg: '图片下载失败'
+          })
+        }
+        // #endif
+				// #ifndef MP-ALIPAY
+				if (res.statusCode === 200) {
+				  resolve({
+				    ok: true,
+            data: res.errMsg,
+				    tempFilePath: res.tempFilePath
+				  })
+				} else {
+				  resolve({
+				    ok: false,
+            data: res.errMsg,
+				    msg: '图片下载失败'
+				  })
+				}
+				// #endif
+      },
+      fail: (err) => {
+        resolve({
+          ok: false,
+          data: err.errMsg,
+          msg: '图片下载失败'
+        })
+      }
+    })
+  })
+}
+
+/**
+ * 清理应用已缓存的文件
+*/
+export const clearCacheFile = () => {
+	// #ifndef H5
+	uni.getSavedFileList({
+		success: (res) => {
+			let fileList = res.fileList
+			if (fileList.length) {
+				for (let i = 0; i < fileList.length; i++) {
+					uni.removeSavedFile({
+						filePath: fileList[i].filePath,
+						complete: () => {
+							console.log('清除缓存已完成')
+						}
+					})
+				}
+			}
+		},
+		fail: (err) => {
+			console.log('getSavedFileList Fail')
+		}
+	})
+	// #endif
+	// #ifdef H5
+	clearStore()
+	// #endif
+}
+
+
+
+// 图像转换工具,可用于图像和base64的转换
+// https://ext.dcloud.net.cn/plugin?id=123
+const getLocalFilePath = (path) => {
+  if (
+    path.indexOf('_www') === 0 ||
+    path.indexOf('_doc') === 0 ||
+    path.indexOf('_documents') === 0 ||
+    path.indexOf('_downloads') === 0
+  ) return path
+
+  if (path.indexOf('/storage/emulated/0/') === 0) return path
+	
+  if (path.indexOf('/storage/sdcard0/') === 0) return path
+
+  if (path.indexOf('/var/mobile/') === 0) return path
+
+  if (path.indexOf('file://') === 0) return path
+
+  if (path.indexOf('/') === 0) {
+		// ios 无法获取本地路径
+    let localFilePath = plus.os.name === 'iOS' ? path : plus.io.convertLocalFileSystemURL(path)
+    if (localFilePath !== path) {
+      return localFilePath
+    } else {
+      path = path.substring(1)
+    }
+  }
+	
+  return '_www/' + path
+}
+
+export const pathToBase64 = (path) => {
+	return new Promise((resolve, reject) => {
+		if (typeof window === 'object' && 'document' in window) {
+			if (typeof FileReader === 'function') {
+				let xhr = new XMLHttpRequest()
+				xhr.open('GET', path, true)
+				xhr.responseType = 'blob'
+				xhr.onload = function() {
+					if (this.status === 200) {
+						let fileReader = new FileReader()
+						fileReader.onload = function(e) {
+							resolve(e.target.result)
+						}
+						fileReader.onerror = reject
+						fileReader.readAsDataURL(this.response)
+					}
+				}
+				xhr.onerror = reject
+				xhr.send()
+				return
+			}
+			let canvas = document.createElement('canvas')
+			let c2x = canvas.getContext('2d')
+			let img = new Image
+			img.onload = function() {
+				canvas.width = img.width
+				canvas.height = img.height
+				c2x.drawImage(img, 0, 0)
+				resolve(canvas.toDataURL())
+				canvas.height = canvas.width = 0
+			}
+			img.onerror = reject
+			img.src = path
+			return
+		}
+		
+		if (typeof plus === 'object') {
+			let tempPath = getLocalFilePath(path)
+			plus.io.resolveLocalFileSystemURL(tempPath, (entry) => {
+				entry.file((file) => {
+					let fileReader = new plus.io.FileReader()
+					fileReader.onload = function(data) {
+						resolve(data.target.result)
+					}
+					fileReader.onerror = function(error) {
+						console.log(error)
+						reject(error)
+					}
+					fileReader.readAsDataURL(file)
+				}, (error) => {
+					reject(error)
+				})
+			}, (error) => {
+				reject(error)
+			})
+			return
+		}
+		
+		if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+			wx.getFileSystemManager().readFile({
+				filePath: path,
+				encoding: 'base64',
+				success: (res) => {
+					resolve('data:image/png;base64,' + res.data)
+				},
+				fail: (error) => {
+					reject(error)
+				}
+			})
+			return
+		}
+		reject(new Error('not support'))
+	})
+}
+
+export const base64ToPath = (base64) => {
+	return new Promise((resolve, reject) => {
+		if (typeof window === 'object' && 'document' in window) {
+			base64 = base64.split(',')
+			let type = base64[0].match(/:(.*?);/)[1]
+			let str = atob(base64[1])
+			let n = str.length
+			let array = new Uint8Array(n)
+			while (n--) {
+				array[n] = str.charCodeAt(n)
+			}
+			return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], {
+				type: type
+			})))
+		}
+		let extName = base64.match(/data\:\S+\/(\S+);/)
+		if (extName) {
+			extName = extName[1]
+		} else {
+			reject(new Error('base64 error'))
+		}
+		let fileName = Date.now() + '.' + extName
+		if (typeof plus === 'object') {
+			let bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
+			bitmap.loadBase64Data(base64, () => {
+				let filePath = '_doc/uniapp_temp/' + fileName
+				bitmap.save(filePath, {}, () => {
+					bitmap.clear()
+					resolve(filePath)
+				}, (error) => {
+					bitmap.clear()
+					reject(error)
+				})
+			}, (error) => {
+				bitmap.clear()
+				reject(error)
+			})
+			return
+		}
+		if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+			let filePath = wx.env.USER_DATA_PATH + '/' + fileName
+			wx.getFileSystemManager().writeFile({
+				filePath: filePath,
+				data: base64.replace(/^data:\S+\/\S+;base64,/, ''),
+				encoding: 'base64',
+				success: () => {
+					resolve(filePath)
+				},
+				fail: (error) => {
+					reject(error)
+				}
+			})
+			return
+		}
+		reject(new Error('not support'))
+	})
+}

+ 0 - 0
unpackage/dist/dev/.automator/mp-weixin/.automator.json


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/almost-lottery/components/almost-lottery/almost-lottery.js.map

@@ -0,0 +1 @@
+{"version":3,"sources":[],"names":[],"mappings":"","file":"components/almost-lottery/components/almost-lottery/almost-lottery.js","sourceRoot":""}

File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/checkInRecord/checkInRecord.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/officialAccount/officialAccount.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/almost-lottery/components/almost-lottery/almost-lottery.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-column-notice/u-column-notice.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-icon/u-icon.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-notice-bar/u-notice-bar.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-row-notice/u-row-notice.js.map


+ 4 - 0
unpackage/dist/dev/mp-weixin/app.js

@@ -0,0 +1,4 @@
+
+require('./common/runtime.js')
+require('./common/vendor.js')
+require('./common/main.js')

+ 16 - 0
unpackage/dist/dev/mp-weixin/app.json

@@ -0,0 +1,16 @@
+{
+  "pages": [
+    "pages/index/index",
+    "pages/checkInRecord/checkInRecord",
+    "pages/officialAccount/officialAccount"
+  ],
+  "subPackages": [],
+  "window": {
+    "navigationBarTextStyle": "black",
+    "navigationBarTitleText": "幸运大抽奖",
+    "navigationBarBackgroundColor": "#F8F8F8",
+    "backgroundColor": "#F8F8F8"
+  },
+  "usingComponents": {},
+  "sitemapLocation": "sitemap.json"
+}

+ 3 - 0
unpackage/dist/dev/mp-weixin/app.wxss

@@ -0,0 +1,3 @@
+@import './common/main.wxss';
+
+[data-custom-hidden="true"],[bind-data-custom-hidden="true"]{display: none !important;}

File diff suppressed because it is too large
+ 113 - 0
unpackage/dist/dev/mp-weixin/common/main.js


+ 3319 - 0
unpackage/dist/dev/mp-weixin/common/main.wxss

@@ -0,0 +1,3319 @@
+@charset "UTF-8";
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* 颜色变量 */
+/* 行为相关颜色 */
+/* 文字基本颜色 */
+/* 背景颜色 */
+/* 边框颜色 */
+/* 尺寸变量 */
+/* 文字尺寸 */
+/* 图片尺寸 */
+/* Border Radius */
+/* 水平间距 */
+/* 垂直间距 */
+/* 透明度 */
+/* 文章场景相关 */
+/* uni.scss */
+/*每个页面公共css */
+.u-relative,
+.u-rela {
+  position: relative;
+}
+.u-absolute,
+.u-abso {
+  position: absolute;
+}
+image {
+  display: inline-block;
+}
+view,
+text {
+  box-sizing: border-box;
+}
+.u-font-xs {
+  font-size: 22rpx;
+}
+.u-font-sm {
+  font-size: 26rpx;
+}
+.u-font-md {
+  font-size: 28rpx;
+}
+.u-font-lg {
+  font-size: 30rpx;
+}
+.u-font-xl {
+  font-size: 34rpx;
+}
+.u-flex {
+
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: row;
+          flex-direction: row;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+.u-flex-wrap {
+  -webkit-flex-wrap: wrap;
+          flex-wrap: wrap;
+}
+.u-flex-nowrap {
+  -webkit-flex-wrap: nowrap;
+          flex-wrap: nowrap;
+}
+.u-col-center {
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+.u-col-top {
+  -webkit-box-align: start;
+  -webkit-align-items: flex-start;
+          align-items: flex-start;
+}
+.u-col-bottom {
+  -webkit-box-align: end;
+  -webkit-align-items: flex-end;
+          align-items: flex-end;
+}
+.u-row-center {
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+          justify-content: center;
+}
+.u-row-left {
+  -webkit-box-pack: start;
+  -webkit-justify-content: flex-start;
+          justify-content: flex-start;
+}
+.u-row-right {
+  -webkit-box-pack: end;
+  -webkit-justify-content: flex-end;
+          justify-content: flex-end;
+}
+.u-row-between {
+  -webkit-box-pack: justify;
+  -webkit-justify-content: space-between;
+          justify-content: space-between;
+}
+.u-row-around {
+  -webkit-justify-content: space-around;
+          justify-content: space-around;
+}
+.u-text-left {
+  text-align: left;
+}
+.u-text-center {
+  text-align: center;
+}
+.u-text-right {
+  text-align: right;
+}
+.u-flex-col {
+
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: column;
+          flex-direction: column;
+}
+.u-flex-0 {
+  -webkit-box-flex: 0;
+  -webkit-flex: 0;
+          flex: 0;
+}
+.u-flex-1 {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+          flex: 1;
+}
+.u-flex-2 {
+  -webkit-box-flex: 2;
+  -webkit-flex: 2;
+          flex: 2;
+}
+.u-flex-3 {
+  -webkit-box-flex: 3;
+  -webkit-flex: 3;
+          flex: 3;
+}
+.u-flex-4 {
+  -webkit-box-flex: 4;
+  -webkit-flex: 4;
+          flex: 4;
+}
+.u-flex-5 {
+  -webkit-box-flex: 5;
+  -webkit-flex: 5;
+          flex: 5;
+}
+.u-flex-6 {
+  -webkit-box-flex: 6;
+  -webkit-flex: 6;
+          flex: 6;
+}
+.u-flex-7 {
+  -webkit-box-flex: 7;
+  -webkit-flex: 7;
+          flex: 7;
+}
+.u-flex-8 {
+  -webkit-box-flex: 8;
+  -webkit-flex: 8;
+          flex: 8;
+}
+.u-flex-9 {
+  -webkit-box-flex: 9;
+  -webkit-flex: 9;
+          flex: 9;
+}
+.u-flex-10 {
+  -webkit-box-flex: 10;
+  -webkit-flex: 10;
+          flex: 10;
+}
+.u-flex-11 {
+  -webkit-box-flex: 11;
+  -webkit-flex: 11;
+          flex: 11;
+}
+.u-flex-12 {
+  -webkit-box-flex: 12;
+  -webkit-flex: 12;
+          flex: 12;
+}
+.u-font-9 {
+  font-size: 9px;
+}
+.u-font-10 {
+  font-size: 10px;
+}
+.u-font-11 {
+  font-size: 11px;
+}
+.u-font-12 {
+  font-size: 12px;
+}
+.u-font-13 {
+  font-size: 13px;
+}
+.u-font-14 {
+  font-size: 14px;
+}
+.u-font-15 {
+  font-size: 15px;
+}
+.u-font-16 {
+  font-size: 16px;
+}
+.u-font-17 {
+  font-size: 17px;
+}
+.u-font-18 {
+  font-size: 18px;
+}
+.u-font-19 {
+  font-size: 19px;
+}
+.u-font-20 {
+  font-size: 20rpx;
+}
+.u-font-21 {
+  font-size: 21rpx;
+}
+.u-font-22 {
+  font-size: 22rpx;
+}
+.u-font-23 {
+  font-size: 23rpx;
+}
+.u-font-24 {
+  font-size: 24rpx;
+}
+.u-font-25 {
+  font-size: 25rpx;
+}
+.u-font-26 {
+  font-size: 26rpx;
+}
+.u-font-27 {
+  font-size: 27rpx;
+}
+.u-font-28 {
+  font-size: 28rpx;
+}
+.u-font-29 {
+  font-size: 29rpx;
+}
+.u-font-30 {
+  font-size: 30rpx;
+}
+.u-font-31 {
+  font-size: 31rpx;
+}
+.u-font-32 {
+  font-size: 32rpx;
+}
+.u-font-33 {
+  font-size: 33rpx;
+}
+.u-font-34 {
+  font-size: 34rpx;
+}
+.u-font-35 {
+  font-size: 35rpx;
+}
+.u-font-36 {
+  font-size: 36rpx;
+}
+.u-font-37 {
+  font-size: 37rpx;
+}
+.u-font-38 {
+  font-size: 38rpx;
+}
+.u-font-39 {
+  font-size: 39rpx;
+}
+.u-font-40 {
+  font-size: 40rpx;
+}
+.u-margin-0, .u-m-0 {
+  margin: 0rpx !important;
+}
+.u-padding-0, .u-p-0 {
+  padding: 0rpx !important;
+}
+.u-m-l-0 {
+  margin-left: 0rpx !important;
+}
+.u-p-l-0 {
+  padding-left: 0rpx !important;
+}
+.u-margin-left-0 {
+  margin-left: 0rpx !important;
+}
+.u-padding-left-0 {
+  padding-left: 0rpx !important;
+}
+.u-m-t-0 {
+  margin-top: 0rpx !important;
+}
+.u-p-t-0 {
+  padding-top: 0rpx !important;
+}
+.u-margin-top-0 {
+  margin-top: 0rpx !important;
+}
+.u-padding-top-0 {
+  padding-top: 0rpx !important;
+}
+.u-m-r-0 {
+  margin-right: 0rpx !important;
+}
+.u-p-r-0 {
+  padding-right: 0rpx !important;
+}
+.u-margin-right-0 {
+  margin-right: 0rpx !important;
+}
+.u-padding-right-0 {
+  padding-right: 0rpx !important;
+}
+.u-m-b-0 {
+  margin-bottom: 0rpx !important;
+}
+.u-p-b-0 {
+  padding-bottom: 0rpx !important;
+}
+.u-margin-bottom-0 {
+  margin-bottom: 0rpx !important;
+}
+.u-padding-bottom-0 {
+  padding-bottom: 0rpx !important;
+}
+.u-margin-2, .u-m-2 {
+  margin: 2rpx !important;
+}
+.u-padding-2, .u-p-2 {
+  padding: 2rpx !important;
+}
+.u-m-l-2 {
+  margin-left: 2rpx !important;
+}
+.u-p-l-2 {
+  padding-left: 2rpx !important;
+}
+.u-margin-left-2 {
+  margin-left: 2rpx !important;
+}
+.u-padding-left-2 {
+  padding-left: 2rpx !important;
+}
+.u-m-t-2 {
+  margin-top: 2rpx !important;
+}
+.u-p-t-2 {
+  padding-top: 2rpx !important;
+}
+.u-margin-top-2 {
+  margin-top: 2rpx !important;
+}
+.u-padding-top-2 {
+  padding-top: 2rpx !important;
+}
+.u-m-r-2 {
+  margin-right: 2rpx !important;
+}
+.u-p-r-2 {
+  padding-right: 2rpx !important;
+}
+.u-margin-right-2 {
+  margin-right: 2rpx !important;
+}
+.u-padding-right-2 {
+  padding-right: 2rpx !important;
+}
+.u-m-b-2 {
+  margin-bottom: 2rpx !important;
+}
+.u-p-b-2 {
+  padding-bottom: 2rpx !important;
+}
+.u-margin-bottom-2 {
+  margin-bottom: 2rpx !important;
+}
+.u-padding-bottom-2 {
+  padding-bottom: 2rpx !important;
+}
+.u-margin-4, .u-m-4 {
+  margin: 4rpx !important;
+}
+.u-padding-4, .u-p-4 {
+  padding: 4rpx !important;
+}
+.u-m-l-4 {
+  margin-left: 4rpx !important;
+}
+.u-p-l-4 {
+  padding-left: 4rpx !important;
+}
+.u-margin-left-4 {
+  margin-left: 4rpx !important;
+}
+.u-padding-left-4 {
+  padding-left: 4rpx !important;
+}
+.u-m-t-4 {
+  margin-top: 4rpx !important;
+}
+.u-p-t-4 {
+  padding-top: 4rpx !important;
+}
+.u-margin-top-4 {
+  margin-top: 4rpx !important;
+}
+.u-padding-top-4 {
+  padding-top: 4rpx !important;
+}
+.u-m-r-4 {
+  margin-right: 4rpx !important;
+}
+.u-p-r-4 {
+  padding-right: 4rpx !important;
+}
+.u-margin-right-4 {
+  margin-right: 4rpx !important;
+}
+.u-padding-right-4 {
+  padding-right: 4rpx !important;
+}
+.u-m-b-4 {
+  margin-bottom: 4rpx !important;
+}
+.u-p-b-4 {
+  padding-bottom: 4rpx !important;
+}
+.u-margin-bottom-4 {
+  margin-bottom: 4rpx !important;
+}
+.u-padding-bottom-4 {
+  padding-bottom: 4rpx !important;
+}
+.u-margin-5, .u-m-5 {
+  margin: 5rpx !important;
+}
+.u-padding-5, .u-p-5 {
+  padding: 5rpx !important;
+}
+.u-m-l-5 {
+  margin-left: 5rpx !important;
+}
+.u-p-l-5 {
+  padding-left: 5rpx !important;
+}
+.u-margin-left-5 {
+  margin-left: 5rpx !important;
+}
+.u-padding-left-5 {
+  padding-left: 5rpx !important;
+}
+.u-m-t-5 {
+  margin-top: 5rpx !important;
+}
+.u-p-t-5 {
+  padding-top: 5rpx !important;
+}
+.u-margin-top-5 {
+  margin-top: 5rpx !important;
+}
+.u-padding-top-5 {
+  padding-top: 5rpx !important;
+}
+.u-m-r-5 {
+  margin-right: 5rpx !important;
+}
+.u-p-r-5 {
+  padding-right: 5rpx !important;
+}
+.u-margin-right-5 {
+  margin-right: 5rpx !important;
+}
+.u-padding-right-5 {
+  padding-right: 5rpx !important;
+}
+.u-m-b-5 {
+  margin-bottom: 5rpx !important;
+}
+.u-p-b-5 {
+  padding-bottom: 5rpx !important;
+}
+.u-margin-bottom-5 {
+  margin-bottom: 5rpx !important;
+}
+.u-padding-bottom-5 {
+  padding-bottom: 5rpx !important;
+}
+.u-margin-6, .u-m-6 {
+  margin: 6rpx !important;
+}
+.u-padding-6, .u-p-6 {
+  padding: 6rpx !important;
+}
+.u-m-l-6 {
+  margin-left: 6rpx !important;
+}
+.u-p-l-6 {
+  padding-left: 6rpx !important;
+}
+.u-margin-left-6 {
+  margin-left: 6rpx !important;
+}
+.u-padding-left-6 {
+  padding-left: 6rpx !important;
+}
+.u-m-t-6 {
+  margin-top: 6rpx !important;
+}
+.u-p-t-6 {
+  padding-top: 6rpx !important;
+}
+.u-margin-top-6 {
+  margin-top: 6rpx !important;
+}
+.u-padding-top-6 {
+  padding-top: 6rpx !important;
+}
+.u-m-r-6 {
+  margin-right: 6rpx !important;
+}
+.u-p-r-6 {
+  padding-right: 6rpx !important;
+}
+.u-margin-right-6 {
+  margin-right: 6rpx !important;
+}
+.u-padding-right-6 {
+  padding-right: 6rpx !important;
+}
+.u-m-b-6 {
+  margin-bottom: 6rpx !important;
+}
+.u-p-b-6 {
+  padding-bottom: 6rpx !important;
+}
+.u-margin-bottom-6 {
+  margin-bottom: 6rpx !important;
+}
+.u-padding-bottom-6 {
+  padding-bottom: 6rpx !important;
+}
+.u-margin-8, .u-m-8 {
+  margin: 8rpx !important;
+}
+.u-padding-8, .u-p-8 {
+  padding: 8rpx !important;
+}
+.u-m-l-8 {
+  margin-left: 8rpx !important;
+}
+.u-p-l-8 {
+  padding-left: 8rpx !important;
+}
+.u-margin-left-8 {
+  margin-left: 8rpx !important;
+}
+.u-padding-left-8 {
+  padding-left: 8rpx !important;
+}
+.u-m-t-8 {
+  margin-top: 8rpx !important;
+}
+.u-p-t-8 {
+  padding-top: 8rpx !important;
+}
+.u-margin-top-8 {
+  margin-top: 8rpx !important;
+}
+.u-padding-top-8 {
+  padding-top: 8rpx !important;
+}
+.u-m-r-8 {
+  margin-right: 8rpx !important;
+}
+.u-p-r-8 {
+  padding-right: 8rpx !important;
+}
+.u-margin-right-8 {
+  margin-right: 8rpx !important;
+}
+.u-padding-right-8 {
+  padding-right: 8rpx !important;
+}
+.u-m-b-8 {
+  margin-bottom: 8rpx !important;
+}
+.u-p-b-8 {
+  padding-bottom: 8rpx !important;
+}
+.u-margin-bottom-8 {
+  margin-bottom: 8rpx !important;
+}
+.u-padding-bottom-8 {
+  padding-bottom: 8rpx !important;
+}
+.u-margin-10, .u-m-10 {
+  margin: 10rpx !important;
+}
+.u-padding-10, .u-p-10 {
+  padding: 10rpx !important;
+}
+.u-m-l-10 {
+  margin-left: 10rpx !important;
+}
+.u-p-l-10 {
+  padding-left: 10rpx !important;
+}
+.u-margin-left-10 {
+  margin-left: 10rpx !important;
+}
+.u-padding-left-10 {
+  padding-left: 10rpx !important;
+}
+.u-m-t-10 {
+  margin-top: 10rpx !important;
+}
+.u-p-t-10 {
+  padding-top: 10rpx !important;
+}
+.u-margin-top-10 {
+  margin-top: 10rpx !important;
+}
+.u-padding-top-10 {
+  padding-top: 10rpx !important;
+}
+.u-m-r-10 {
+  margin-right: 10rpx !important;
+}
+.u-p-r-10 {
+  padding-right: 10rpx !important;
+}
+.u-margin-right-10 {
+  margin-right: 10rpx !important;
+}
+.u-padding-right-10 {
+  padding-right: 10rpx !important;
+}
+.u-m-b-10 {
+  margin-bottom: 10rpx !important;
+}
+.u-p-b-10 {
+  padding-bottom: 10rpx !important;
+}
+.u-margin-bottom-10 {
+  margin-bottom: 10rpx !important;
+}
+.u-padding-bottom-10 {
+  padding-bottom: 10rpx !important;
+}
+.u-margin-12, .u-m-12 {
+  margin: 12rpx !important;
+}
+.u-padding-12, .u-p-12 {
+  padding: 12rpx !important;
+}
+.u-m-l-12 {
+  margin-left: 12rpx !important;
+}
+.u-p-l-12 {
+  padding-left: 12rpx !important;
+}
+.u-margin-left-12 {
+  margin-left: 12rpx !important;
+}
+.u-padding-left-12 {
+  padding-left: 12rpx !important;
+}
+.u-m-t-12 {
+  margin-top: 12rpx !important;
+}
+.u-p-t-12 {
+  padding-top: 12rpx !important;
+}
+.u-margin-top-12 {
+  margin-top: 12rpx !important;
+}
+.u-padding-top-12 {
+  padding-top: 12rpx !important;
+}
+.u-m-r-12 {
+  margin-right: 12rpx !important;
+}
+.u-p-r-12 {
+  padding-right: 12rpx !important;
+}
+.u-margin-right-12 {
+  margin-right: 12rpx !important;
+}
+.u-padding-right-12 {
+  padding-right: 12rpx !important;
+}
+.u-m-b-12 {
+  margin-bottom: 12rpx !important;
+}
+.u-p-b-12 {
+  padding-bottom: 12rpx !important;
+}
+.u-margin-bottom-12 {
+  margin-bottom: 12rpx !important;
+}
+.u-padding-bottom-12 {
+  padding-bottom: 12rpx !important;
+}
+.u-margin-14, .u-m-14 {
+  margin: 14rpx !important;
+}
+.u-padding-14, .u-p-14 {
+  padding: 14rpx !important;
+}
+.u-m-l-14 {
+  margin-left: 14rpx !important;
+}
+.u-p-l-14 {
+  padding-left: 14rpx !important;
+}
+.u-margin-left-14 {
+  margin-left: 14rpx !important;
+}
+.u-padding-left-14 {
+  padding-left: 14rpx !important;
+}
+.u-m-t-14 {
+  margin-top: 14rpx !important;
+}
+.u-p-t-14 {
+  padding-top: 14rpx !important;
+}
+.u-margin-top-14 {
+  margin-top: 14rpx !important;
+}
+.u-padding-top-14 {
+  padding-top: 14rpx !important;
+}
+.u-m-r-14 {
+  margin-right: 14rpx !important;
+}
+.u-p-r-14 {
+  padding-right: 14rpx !important;
+}
+.u-margin-right-14 {
+  margin-right: 14rpx !important;
+}
+.u-padding-right-14 {
+  padding-right: 14rpx !important;
+}
+.u-m-b-14 {
+  margin-bottom: 14rpx !important;
+}
+.u-p-b-14 {
+  padding-bottom: 14rpx !important;
+}
+.u-margin-bottom-14 {
+  margin-bottom: 14rpx !important;
+}
+.u-padding-bottom-14 {
+  padding-bottom: 14rpx !important;
+}
+.u-margin-15, .u-m-15 {
+  margin: 15rpx !important;
+}
+.u-padding-15, .u-p-15 {
+  padding: 15rpx !important;
+}
+.u-m-l-15 {
+  margin-left: 15rpx !important;
+}
+.u-p-l-15 {
+  padding-left: 15rpx !important;
+}
+.u-margin-left-15 {
+  margin-left: 15rpx !important;
+}
+.u-padding-left-15 {
+  padding-left: 15rpx !important;
+}
+.u-m-t-15 {
+  margin-top: 15rpx !important;
+}
+.u-p-t-15 {
+  padding-top: 15rpx !important;
+}
+.u-margin-top-15 {
+  margin-top: 15rpx !important;
+}
+.u-padding-top-15 {
+  padding-top: 15rpx !important;
+}
+.u-m-r-15 {
+  margin-right: 15rpx !important;
+}
+.u-p-r-15 {
+  padding-right: 15rpx !important;
+}
+.u-margin-right-15 {
+  margin-right: 15rpx !important;
+}
+.u-padding-right-15 {
+  padding-right: 15rpx !important;
+}
+.u-m-b-15 {
+  margin-bottom: 15rpx !important;
+}
+.u-p-b-15 {
+  padding-bottom: 15rpx !important;
+}
+.u-margin-bottom-15 {
+  margin-bottom: 15rpx !important;
+}
+.u-padding-bottom-15 {
+  padding-bottom: 15rpx !important;
+}
+.u-margin-16, .u-m-16 {
+  margin: 16rpx !important;
+}
+.u-padding-16, .u-p-16 {
+  padding: 16rpx !important;
+}
+.u-m-l-16 {
+  margin-left: 16rpx !important;
+}
+.u-p-l-16 {
+  padding-left: 16rpx !important;
+}
+.u-margin-left-16 {
+  margin-left: 16rpx !important;
+}
+.u-padding-left-16 {
+  padding-left: 16rpx !important;
+}
+.u-m-t-16 {
+  margin-top: 16rpx !important;
+}
+.u-p-t-16 {
+  padding-top: 16rpx !important;
+}
+.u-margin-top-16 {
+  margin-top: 16rpx !important;
+}
+.u-padding-top-16 {
+  padding-top: 16rpx !important;
+}
+.u-m-r-16 {
+  margin-right: 16rpx !important;
+}
+.u-p-r-16 {
+  padding-right: 16rpx !important;
+}
+.u-margin-right-16 {
+  margin-right: 16rpx !important;
+}
+.u-padding-right-16 {
+  padding-right: 16rpx !important;
+}
+.u-m-b-16 {
+  margin-bottom: 16rpx !important;
+}
+.u-p-b-16 {
+  padding-bottom: 16rpx !important;
+}
+.u-margin-bottom-16 {
+  margin-bottom: 16rpx !important;
+}
+.u-padding-bottom-16 {
+  padding-bottom: 16rpx !important;
+}
+.u-margin-18, .u-m-18 {
+  margin: 18rpx !important;
+}
+.u-padding-18, .u-p-18 {
+  padding: 18rpx !important;
+}
+.u-m-l-18 {
+  margin-left: 18rpx !important;
+}
+.u-p-l-18 {
+  padding-left: 18rpx !important;
+}
+.u-margin-left-18 {
+  margin-left: 18rpx !important;
+}
+.u-padding-left-18 {
+  padding-left: 18rpx !important;
+}
+.u-m-t-18 {
+  margin-top: 18rpx !important;
+}
+.u-p-t-18 {
+  padding-top: 18rpx !important;
+}
+.u-margin-top-18 {
+  margin-top: 18rpx !important;
+}
+.u-padding-top-18 {
+  padding-top: 18rpx !important;
+}
+.u-m-r-18 {
+  margin-right: 18rpx !important;
+}
+.u-p-r-18 {
+  padding-right: 18rpx !important;
+}
+.u-margin-right-18 {
+  margin-right: 18rpx !important;
+}
+.u-padding-right-18 {
+  padding-right: 18rpx !important;
+}
+.u-m-b-18 {
+  margin-bottom: 18rpx !important;
+}
+.u-p-b-18 {
+  padding-bottom: 18rpx !important;
+}
+.u-margin-bottom-18 {
+  margin-bottom: 18rpx !important;
+}
+.u-padding-bottom-18 {
+  padding-bottom: 18rpx !important;
+}
+.u-margin-20, .u-m-20 {
+  margin: 20rpx !important;
+}
+.u-padding-20, .u-p-20 {
+  padding: 20rpx !important;
+}
+.u-m-l-20 {
+  margin-left: 20rpx !important;
+}
+.u-p-l-20 {
+  padding-left: 20rpx !important;
+}
+.u-margin-left-20 {
+  margin-left: 20rpx !important;
+}
+.u-padding-left-20 {
+  padding-left: 20rpx !important;
+}
+.u-m-t-20 {
+  margin-top: 20rpx !important;
+}
+.u-p-t-20 {
+  padding-top: 20rpx !important;
+}
+.u-margin-top-20 {
+  margin-top: 20rpx !important;
+}
+.u-padding-top-20 {
+  padding-top: 20rpx !important;
+}
+.u-m-r-20 {
+  margin-right: 20rpx !important;
+}
+.u-p-r-20 {
+  padding-right: 20rpx !important;
+}
+.u-margin-right-20 {
+  margin-right: 20rpx !important;
+}
+.u-padding-right-20 {
+  padding-right: 20rpx !important;
+}
+.u-m-b-20 {
+  margin-bottom: 20rpx !important;
+}
+.u-p-b-20 {
+  padding-bottom: 20rpx !important;
+}
+.u-margin-bottom-20 {
+  margin-bottom: 20rpx !important;
+}
+.u-padding-bottom-20 {
+  padding-bottom: 20rpx !important;
+}
+.u-margin-22, .u-m-22 {
+  margin: 22rpx !important;
+}
+.u-padding-22, .u-p-22 {
+  padding: 22rpx !important;
+}
+.u-m-l-22 {
+  margin-left: 22rpx !important;
+}
+.u-p-l-22 {
+  padding-left: 22rpx !important;
+}
+.u-margin-left-22 {
+  margin-left: 22rpx !important;
+}
+.u-padding-left-22 {
+  padding-left: 22rpx !important;
+}
+.u-m-t-22 {
+  margin-top: 22rpx !important;
+}
+.u-p-t-22 {
+  padding-top: 22rpx !important;
+}
+.u-margin-top-22 {
+  margin-top: 22rpx !important;
+}
+.u-padding-top-22 {
+  padding-top: 22rpx !important;
+}
+.u-m-r-22 {
+  margin-right: 22rpx !important;
+}
+.u-p-r-22 {
+  padding-right: 22rpx !important;
+}
+.u-margin-right-22 {
+  margin-right: 22rpx !important;
+}
+.u-padding-right-22 {
+  padding-right: 22rpx !important;
+}
+.u-m-b-22 {
+  margin-bottom: 22rpx !important;
+}
+.u-p-b-22 {
+  padding-bottom: 22rpx !important;
+}
+.u-margin-bottom-22 {
+  margin-bottom: 22rpx !important;
+}
+.u-padding-bottom-22 {
+  padding-bottom: 22rpx !important;
+}
+.u-margin-24, .u-m-24 {
+  margin: 24rpx !important;
+}
+.u-padding-24, .u-p-24 {
+  padding: 24rpx !important;
+}
+.u-m-l-24 {
+  margin-left: 24rpx !important;
+}
+.u-p-l-24 {
+  padding-left: 24rpx !important;
+}
+.u-margin-left-24 {
+  margin-left: 24rpx !important;
+}
+.u-padding-left-24 {
+  padding-left: 24rpx !important;
+}
+.u-m-t-24 {
+  margin-top: 24rpx !important;
+}
+.u-p-t-24 {
+  padding-top: 24rpx !important;
+}
+.u-margin-top-24 {
+  margin-top: 24rpx !important;
+}
+.u-padding-top-24 {
+  padding-top: 24rpx !important;
+}
+.u-m-r-24 {
+  margin-right: 24rpx !important;
+}
+.u-p-r-24 {
+  padding-right: 24rpx !important;
+}
+.u-margin-right-24 {
+  margin-right: 24rpx !important;
+}
+.u-padding-right-24 {
+  padding-right: 24rpx !important;
+}
+.u-m-b-24 {
+  margin-bottom: 24rpx !important;
+}
+.u-p-b-24 {
+  padding-bottom: 24rpx !important;
+}
+.u-margin-bottom-24 {
+  margin-bottom: 24rpx !important;
+}
+.u-padding-bottom-24 {
+  padding-bottom: 24rpx !important;
+}
+.u-margin-25, .u-m-25 {
+  margin: 25rpx !important;
+}
+.u-padding-25, .u-p-25 {
+  padding: 25rpx !important;
+}
+.u-m-l-25 {
+  margin-left: 25rpx !important;
+}
+.u-p-l-25 {
+  padding-left: 25rpx !important;
+}
+.u-margin-left-25 {
+  margin-left: 25rpx !important;
+}
+.u-padding-left-25 {
+  padding-left: 25rpx !important;
+}
+.u-m-t-25 {
+  margin-top: 25rpx !important;
+}
+.u-p-t-25 {
+  padding-top: 25rpx !important;
+}
+.u-margin-top-25 {
+  margin-top: 25rpx !important;
+}
+.u-padding-top-25 {
+  padding-top: 25rpx !important;
+}
+.u-m-r-25 {
+  margin-right: 25rpx !important;
+}
+.u-p-r-25 {
+  padding-right: 25rpx !important;
+}
+.u-margin-right-25 {
+  margin-right: 25rpx !important;
+}
+.u-padding-right-25 {
+  padding-right: 25rpx !important;
+}
+.u-m-b-25 {
+  margin-bottom: 25rpx !important;
+}
+.u-p-b-25 {
+  padding-bottom: 25rpx !important;
+}
+.u-margin-bottom-25 {
+  margin-bottom: 25rpx !important;
+}
+.u-padding-bottom-25 {
+  padding-bottom: 25rpx !important;
+}
+.u-margin-26, .u-m-26 {
+  margin: 26rpx !important;
+}
+.u-padding-26, .u-p-26 {
+  padding: 26rpx !important;
+}
+.u-m-l-26 {
+  margin-left: 26rpx !important;
+}
+.u-p-l-26 {
+  padding-left: 26rpx !important;
+}
+.u-margin-left-26 {
+  margin-left: 26rpx !important;
+}
+.u-padding-left-26 {
+  padding-left: 26rpx !important;
+}
+.u-m-t-26 {
+  margin-top: 26rpx !important;
+}
+.u-p-t-26 {
+  padding-top: 26rpx !important;
+}
+.u-margin-top-26 {
+  margin-top: 26rpx !important;
+}
+.u-padding-top-26 {
+  padding-top: 26rpx !important;
+}
+.u-m-r-26 {
+  margin-right: 26rpx !important;
+}
+.u-p-r-26 {
+  padding-right: 26rpx !important;
+}
+.u-margin-right-26 {
+  margin-right: 26rpx !important;
+}
+.u-padding-right-26 {
+  padding-right: 26rpx !important;
+}
+.u-m-b-26 {
+  margin-bottom: 26rpx !important;
+}
+.u-p-b-26 {
+  padding-bottom: 26rpx !important;
+}
+.u-margin-bottom-26 {
+  margin-bottom: 26rpx !important;
+}
+.u-padding-bottom-26 {
+  padding-bottom: 26rpx !important;
+}
+.u-margin-28, .u-m-28 {
+  margin: 28rpx !important;
+}
+.u-padding-28, .u-p-28 {
+  padding: 28rpx !important;
+}
+.u-m-l-28 {
+  margin-left: 28rpx !important;
+}
+.u-p-l-28 {
+  padding-left: 28rpx !important;
+}
+.u-margin-left-28 {
+  margin-left: 28rpx !important;
+}
+.u-padding-left-28 {
+  padding-left: 28rpx !important;
+}
+.u-m-t-28 {
+  margin-top: 28rpx !important;
+}
+.u-p-t-28 {
+  padding-top: 28rpx !important;
+}
+.u-margin-top-28 {
+  margin-top: 28rpx !important;
+}
+.u-padding-top-28 {
+  padding-top: 28rpx !important;
+}
+.u-m-r-28 {
+  margin-right: 28rpx !important;
+}
+.u-p-r-28 {
+  padding-right: 28rpx !important;
+}
+.u-margin-right-28 {
+  margin-right: 28rpx !important;
+}
+.u-padding-right-28 {
+  padding-right: 28rpx !important;
+}
+.u-m-b-28 {
+  margin-bottom: 28rpx !important;
+}
+.u-p-b-28 {
+  padding-bottom: 28rpx !important;
+}
+.u-margin-bottom-28 {
+  margin-bottom: 28rpx !important;
+}
+.u-padding-bottom-28 {
+  padding-bottom: 28rpx !important;
+}
+.u-margin-30, .u-m-30 {
+  margin: 30rpx !important;
+}
+.u-padding-30, .u-p-30 {
+  padding: 30rpx !important;
+}
+.u-m-l-30 {
+  margin-left: 30rpx !important;
+}
+.u-p-l-30 {
+  padding-left: 30rpx !important;
+}
+.u-margin-left-30 {
+  margin-left: 30rpx !important;
+}
+.u-padding-left-30 {
+  padding-left: 30rpx !important;
+}
+.u-m-t-30 {
+  margin-top: 30rpx !important;
+}
+.u-p-t-30 {
+  padding-top: 30rpx !important;
+}
+.u-margin-top-30 {
+  margin-top: 30rpx !important;
+}
+.u-padding-top-30 {
+  padding-top: 30rpx !important;
+}
+.u-m-r-30 {
+  margin-right: 30rpx !important;
+}
+.u-p-r-30 {
+  padding-right: 30rpx !important;
+}
+.u-margin-right-30 {
+  margin-right: 30rpx !important;
+}
+.u-padding-right-30 {
+  padding-right: 30rpx !important;
+}
+.u-m-b-30 {
+  margin-bottom: 30rpx !important;
+}
+.u-p-b-30 {
+  padding-bottom: 30rpx !important;
+}
+.u-margin-bottom-30 {
+  margin-bottom: 30rpx !important;
+}
+.u-padding-bottom-30 {
+  padding-bottom: 30rpx !important;
+}
+.u-margin-32, .u-m-32 {
+  margin: 32rpx !important;
+}
+.u-padding-32, .u-p-32 {
+  padding: 32rpx !important;
+}
+.u-m-l-32 {
+  margin-left: 32rpx !important;
+}
+.u-p-l-32 {
+  padding-left: 32rpx !important;
+}
+.u-margin-left-32 {
+  margin-left: 32rpx !important;
+}
+.u-padding-left-32 {
+  padding-left: 32rpx !important;
+}
+.u-m-t-32 {
+  margin-top: 32rpx !important;
+}
+.u-p-t-32 {
+  padding-top: 32rpx !important;
+}
+.u-margin-top-32 {
+  margin-top: 32rpx !important;
+}
+.u-padding-top-32 {
+  padding-top: 32rpx !important;
+}
+.u-m-r-32 {
+  margin-right: 32rpx !important;
+}
+.u-p-r-32 {
+  padding-right: 32rpx !important;
+}
+.u-margin-right-32 {
+  margin-right: 32rpx !important;
+}
+.u-padding-right-32 {
+  padding-right: 32rpx !important;
+}
+.u-m-b-32 {
+  margin-bottom: 32rpx !important;
+}
+.u-p-b-32 {
+  padding-bottom: 32rpx !important;
+}
+.u-margin-bottom-32 {
+  margin-bottom: 32rpx !important;
+}
+.u-padding-bottom-32 {
+  padding-bottom: 32rpx !important;
+}
+.u-margin-34, .u-m-34 {
+  margin: 34rpx !important;
+}
+.u-padding-34, .u-p-34 {
+  padding: 34rpx !important;
+}
+.u-m-l-34 {
+  margin-left: 34rpx !important;
+}
+.u-p-l-34 {
+  padding-left: 34rpx !important;
+}
+.u-margin-left-34 {
+  margin-left: 34rpx !important;
+}
+.u-padding-left-34 {
+  padding-left: 34rpx !important;
+}
+.u-m-t-34 {
+  margin-top: 34rpx !important;
+}
+.u-p-t-34 {
+  padding-top: 34rpx !important;
+}
+.u-margin-top-34 {
+  margin-top: 34rpx !important;
+}
+.u-padding-top-34 {
+  padding-top: 34rpx !important;
+}
+.u-m-r-34 {
+  margin-right: 34rpx !important;
+}
+.u-p-r-34 {
+  padding-right: 34rpx !important;
+}
+.u-margin-right-34 {
+  margin-right: 34rpx !important;
+}
+.u-padding-right-34 {
+  padding-right: 34rpx !important;
+}
+.u-m-b-34 {
+  margin-bottom: 34rpx !important;
+}
+.u-p-b-34 {
+  padding-bottom: 34rpx !important;
+}
+.u-margin-bottom-34 {
+  margin-bottom: 34rpx !important;
+}
+.u-padding-bottom-34 {
+  padding-bottom: 34rpx !important;
+}
+.u-margin-35, .u-m-35 {
+  margin: 35rpx !important;
+}
+.u-padding-35, .u-p-35 {
+  padding: 35rpx !important;
+}
+.u-m-l-35 {
+  margin-left: 35rpx !important;
+}
+.u-p-l-35 {
+  padding-left: 35rpx !important;
+}
+.u-margin-left-35 {
+  margin-left: 35rpx !important;
+}
+.u-padding-left-35 {
+  padding-left: 35rpx !important;
+}
+.u-m-t-35 {
+  margin-top: 35rpx !important;
+}
+.u-p-t-35 {
+  padding-top: 35rpx !important;
+}
+.u-margin-top-35 {
+  margin-top: 35rpx !important;
+}
+.u-padding-top-35 {
+  padding-top: 35rpx !important;
+}
+.u-m-r-35 {
+  margin-right: 35rpx !important;
+}
+.u-p-r-35 {
+  padding-right: 35rpx !important;
+}
+.u-margin-right-35 {
+  margin-right: 35rpx !important;
+}
+.u-padding-right-35 {
+  padding-right: 35rpx !important;
+}
+.u-m-b-35 {
+  margin-bottom: 35rpx !important;
+}
+.u-p-b-35 {
+  padding-bottom: 35rpx !important;
+}
+.u-margin-bottom-35 {
+  margin-bottom: 35rpx !important;
+}
+.u-padding-bottom-35 {
+  padding-bottom: 35rpx !important;
+}
+.u-margin-36, .u-m-36 {
+  margin: 36rpx !important;
+}
+.u-padding-36, .u-p-36 {
+  padding: 36rpx !important;
+}
+.u-m-l-36 {
+  margin-left: 36rpx !important;
+}
+.u-p-l-36 {
+  padding-left: 36rpx !important;
+}
+.u-margin-left-36 {
+  margin-left: 36rpx !important;
+}
+.u-padding-left-36 {
+  padding-left: 36rpx !important;
+}
+.u-m-t-36 {
+  margin-top: 36rpx !important;
+}
+.u-p-t-36 {
+  padding-top: 36rpx !important;
+}
+.u-margin-top-36 {
+  margin-top: 36rpx !important;
+}
+.u-padding-top-36 {
+  padding-top: 36rpx !important;
+}
+.u-m-r-36 {
+  margin-right: 36rpx !important;
+}
+.u-p-r-36 {
+  padding-right: 36rpx !important;
+}
+.u-margin-right-36 {
+  margin-right: 36rpx !important;
+}
+.u-padding-right-36 {
+  padding-right: 36rpx !important;
+}
+.u-m-b-36 {
+  margin-bottom: 36rpx !important;
+}
+.u-p-b-36 {
+  padding-bottom: 36rpx !important;
+}
+.u-margin-bottom-36 {
+  margin-bottom: 36rpx !important;
+}
+.u-padding-bottom-36 {
+  padding-bottom: 36rpx !important;
+}
+.u-margin-38, .u-m-38 {
+  margin: 38rpx !important;
+}
+.u-padding-38, .u-p-38 {
+  padding: 38rpx !important;
+}
+.u-m-l-38 {
+  margin-left: 38rpx !important;
+}
+.u-p-l-38 {
+  padding-left: 38rpx !important;
+}
+.u-margin-left-38 {
+  margin-left: 38rpx !important;
+}
+.u-padding-left-38 {
+  padding-left: 38rpx !important;
+}
+.u-m-t-38 {
+  margin-top: 38rpx !important;
+}
+.u-p-t-38 {
+  padding-top: 38rpx !important;
+}
+.u-margin-top-38 {
+  margin-top: 38rpx !important;
+}
+.u-padding-top-38 {
+  padding-top: 38rpx !important;
+}
+.u-m-r-38 {
+  margin-right: 38rpx !important;
+}
+.u-p-r-38 {
+  padding-right: 38rpx !important;
+}
+.u-margin-right-38 {
+  margin-right: 38rpx !important;
+}
+.u-padding-right-38 {
+  padding-right: 38rpx !important;
+}
+.u-m-b-38 {
+  margin-bottom: 38rpx !important;
+}
+.u-p-b-38 {
+  padding-bottom: 38rpx !important;
+}
+.u-margin-bottom-38 {
+  margin-bottom: 38rpx !important;
+}
+.u-padding-bottom-38 {
+  padding-bottom: 38rpx !important;
+}
+.u-margin-40, .u-m-40 {
+  margin: 40rpx !important;
+}
+.u-padding-40, .u-p-40 {
+  padding: 40rpx !important;
+}
+.u-m-l-40 {
+  margin-left: 40rpx !important;
+}
+.u-p-l-40 {
+  padding-left: 40rpx !important;
+}
+.u-margin-left-40 {
+  margin-left: 40rpx !important;
+}
+.u-padding-left-40 {
+  padding-left: 40rpx !important;
+}
+.u-m-t-40 {
+  margin-top: 40rpx !important;
+}
+.u-p-t-40 {
+  padding-top: 40rpx !important;
+}
+.u-margin-top-40 {
+  margin-top: 40rpx !important;
+}
+.u-padding-top-40 {
+  padding-top: 40rpx !important;
+}
+.u-m-r-40 {
+  margin-right: 40rpx !important;
+}
+.u-p-r-40 {
+  padding-right: 40rpx !important;
+}
+.u-margin-right-40 {
+  margin-right: 40rpx !important;
+}
+.u-padding-right-40 {
+  padding-right: 40rpx !important;
+}
+.u-m-b-40 {
+  margin-bottom: 40rpx !important;
+}
+.u-p-b-40 {
+  padding-bottom: 40rpx !important;
+}
+.u-margin-bottom-40 {
+  margin-bottom: 40rpx !important;
+}
+.u-padding-bottom-40 {
+  padding-bottom: 40rpx !important;
+}
+.u-margin-42, .u-m-42 {
+  margin: 42rpx !important;
+}
+.u-padding-42, .u-p-42 {
+  padding: 42rpx !important;
+}
+.u-m-l-42 {
+  margin-left: 42rpx !important;
+}
+.u-p-l-42 {
+  padding-left: 42rpx !important;
+}
+.u-margin-left-42 {
+  margin-left: 42rpx !important;
+}
+.u-padding-left-42 {
+  padding-left: 42rpx !important;
+}
+.u-m-t-42 {
+  margin-top: 42rpx !important;
+}
+.u-p-t-42 {
+  padding-top: 42rpx !important;
+}
+.u-margin-top-42 {
+  margin-top: 42rpx !important;
+}
+.u-padding-top-42 {
+  padding-top: 42rpx !important;
+}
+.u-m-r-42 {
+  margin-right: 42rpx !important;
+}
+.u-p-r-42 {
+  padding-right: 42rpx !important;
+}
+.u-margin-right-42 {
+  margin-right: 42rpx !important;
+}
+.u-padding-right-42 {
+  padding-right: 42rpx !important;
+}
+.u-m-b-42 {
+  margin-bottom: 42rpx !important;
+}
+.u-p-b-42 {
+  padding-bottom: 42rpx !important;
+}
+.u-margin-bottom-42 {
+  margin-bottom: 42rpx !important;
+}
+.u-padding-bottom-42 {
+  padding-bottom: 42rpx !important;
+}
+.u-margin-44, .u-m-44 {
+  margin: 44rpx !important;
+}
+.u-padding-44, .u-p-44 {
+  padding: 44rpx !important;
+}
+.u-m-l-44 {
+  margin-left: 44rpx !important;
+}
+.u-p-l-44 {
+  padding-left: 44rpx !important;
+}
+.u-margin-left-44 {
+  margin-left: 44rpx !important;
+}
+.u-padding-left-44 {
+  padding-left: 44rpx !important;
+}
+.u-m-t-44 {
+  margin-top: 44rpx !important;
+}
+.u-p-t-44 {
+  padding-top: 44rpx !important;
+}
+.u-margin-top-44 {
+  margin-top: 44rpx !important;
+}
+.u-padding-top-44 {
+  padding-top: 44rpx !important;
+}
+.u-m-r-44 {
+  margin-right: 44rpx !important;
+}
+.u-p-r-44 {
+  padding-right: 44rpx !important;
+}
+.u-margin-right-44 {
+  margin-right: 44rpx !important;
+}
+.u-padding-right-44 {
+  padding-right: 44rpx !important;
+}
+.u-m-b-44 {
+  margin-bottom: 44rpx !important;
+}
+.u-p-b-44 {
+  padding-bottom: 44rpx !important;
+}
+.u-margin-bottom-44 {
+  margin-bottom: 44rpx !important;
+}
+.u-padding-bottom-44 {
+  padding-bottom: 44rpx !important;
+}
+.u-margin-45, .u-m-45 {
+  margin: 45rpx !important;
+}
+.u-padding-45, .u-p-45 {
+  padding: 45rpx !important;
+}
+.u-m-l-45 {
+  margin-left: 45rpx !important;
+}
+.u-p-l-45 {
+  padding-left: 45rpx !important;
+}
+.u-margin-left-45 {
+  margin-left: 45rpx !important;
+}
+.u-padding-left-45 {
+  padding-left: 45rpx !important;
+}
+.u-m-t-45 {
+  margin-top: 45rpx !important;
+}
+.u-p-t-45 {
+  padding-top: 45rpx !important;
+}
+.u-margin-top-45 {
+  margin-top: 45rpx !important;
+}
+.u-padding-top-45 {
+  padding-top: 45rpx !important;
+}
+.u-m-r-45 {
+  margin-right: 45rpx !important;
+}
+.u-p-r-45 {
+  padding-right: 45rpx !important;
+}
+.u-margin-right-45 {
+  margin-right: 45rpx !important;
+}
+.u-padding-right-45 {
+  padding-right: 45rpx !important;
+}
+.u-m-b-45 {
+  margin-bottom: 45rpx !important;
+}
+.u-p-b-45 {
+  padding-bottom: 45rpx !important;
+}
+.u-margin-bottom-45 {
+  margin-bottom: 45rpx !important;
+}
+.u-padding-bottom-45 {
+  padding-bottom: 45rpx !important;
+}
+.u-margin-46, .u-m-46 {
+  margin: 46rpx !important;
+}
+.u-padding-46, .u-p-46 {
+  padding: 46rpx !important;
+}
+.u-m-l-46 {
+  margin-left: 46rpx !important;
+}
+.u-p-l-46 {
+  padding-left: 46rpx !important;
+}
+.u-margin-left-46 {
+  margin-left: 46rpx !important;
+}
+.u-padding-left-46 {
+  padding-left: 46rpx !important;
+}
+.u-m-t-46 {
+  margin-top: 46rpx !important;
+}
+.u-p-t-46 {
+  padding-top: 46rpx !important;
+}
+.u-margin-top-46 {
+  margin-top: 46rpx !important;
+}
+.u-padding-top-46 {
+  padding-top: 46rpx !important;
+}
+.u-m-r-46 {
+  margin-right: 46rpx !important;
+}
+.u-p-r-46 {
+  padding-right: 46rpx !important;
+}
+.u-margin-right-46 {
+  margin-right: 46rpx !important;
+}
+.u-padding-right-46 {
+  padding-right: 46rpx !important;
+}
+.u-m-b-46 {
+  margin-bottom: 46rpx !important;
+}
+.u-p-b-46 {
+  padding-bottom: 46rpx !important;
+}
+.u-margin-bottom-46 {
+  margin-bottom: 46rpx !important;
+}
+.u-padding-bottom-46 {
+  padding-bottom: 46rpx !important;
+}
+.u-margin-48, .u-m-48 {
+  margin: 48rpx !important;
+}
+.u-padding-48, .u-p-48 {
+  padding: 48rpx !important;
+}
+.u-m-l-48 {
+  margin-left: 48rpx !important;
+}
+.u-p-l-48 {
+  padding-left: 48rpx !important;
+}
+.u-margin-left-48 {
+  margin-left: 48rpx !important;
+}
+.u-padding-left-48 {
+  padding-left: 48rpx !important;
+}
+.u-m-t-48 {
+  margin-top: 48rpx !important;
+}
+.u-p-t-48 {
+  padding-top: 48rpx !important;
+}
+.u-margin-top-48 {
+  margin-top: 48rpx !important;
+}
+.u-padding-top-48 {
+  padding-top: 48rpx !important;
+}
+.u-m-r-48 {
+  margin-right: 48rpx !important;
+}
+.u-p-r-48 {
+  padding-right: 48rpx !important;
+}
+.u-margin-right-48 {
+  margin-right: 48rpx !important;
+}
+.u-padding-right-48 {
+  padding-right: 48rpx !important;
+}
+.u-m-b-48 {
+  margin-bottom: 48rpx !important;
+}
+.u-p-b-48 {
+  padding-bottom: 48rpx !important;
+}
+.u-margin-bottom-48 {
+  margin-bottom: 48rpx !important;
+}
+.u-padding-bottom-48 {
+  padding-bottom: 48rpx !important;
+}
+.u-margin-50, .u-m-50 {
+  margin: 50rpx !important;
+}
+.u-padding-50, .u-p-50 {
+  padding: 50rpx !important;
+}
+.u-m-l-50 {
+  margin-left: 50rpx !important;
+}
+.u-p-l-50 {
+  padding-left: 50rpx !important;
+}
+.u-margin-left-50 {
+  margin-left: 50rpx !important;
+}
+.u-padding-left-50 {
+  padding-left: 50rpx !important;
+}
+.u-m-t-50 {
+  margin-top: 50rpx !important;
+}
+.u-p-t-50 {
+  padding-top: 50rpx !important;
+}
+.u-margin-top-50 {
+  margin-top: 50rpx !important;
+}
+.u-padding-top-50 {
+  padding-top: 50rpx !important;
+}
+.u-m-r-50 {
+  margin-right: 50rpx !important;
+}
+.u-p-r-50 {
+  padding-right: 50rpx !important;
+}
+.u-margin-right-50 {
+  margin-right: 50rpx !important;
+}
+.u-padding-right-50 {
+  padding-right: 50rpx !important;
+}
+.u-m-b-50 {
+  margin-bottom: 50rpx !important;
+}
+.u-p-b-50 {
+  padding-bottom: 50rpx !important;
+}
+.u-margin-bottom-50 {
+  margin-bottom: 50rpx !important;
+}
+.u-padding-bottom-50 {
+  padding-bottom: 50rpx !important;
+}
+.u-margin-52, .u-m-52 {
+  margin: 52rpx !important;
+}
+.u-padding-52, .u-p-52 {
+  padding: 52rpx !important;
+}
+.u-m-l-52 {
+  margin-left: 52rpx !important;
+}
+.u-p-l-52 {
+  padding-left: 52rpx !important;
+}
+.u-margin-left-52 {
+  margin-left: 52rpx !important;
+}
+.u-padding-left-52 {
+  padding-left: 52rpx !important;
+}
+.u-m-t-52 {
+  margin-top: 52rpx !important;
+}
+.u-p-t-52 {
+  padding-top: 52rpx !important;
+}
+.u-margin-top-52 {
+  margin-top: 52rpx !important;
+}
+.u-padding-top-52 {
+  padding-top: 52rpx !important;
+}
+.u-m-r-52 {
+  margin-right: 52rpx !important;
+}
+.u-p-r-52 {
+  padding-right: 52rpx !important;
+}
+.u-margin-right-52 {
+  margin-right: 52rpx !important;
+}
+.u-padding-right-52 {
+  padding-right: 52rpx !important;
+}
+.u-m-b-52 {
+  margin-bottom: 52rpx !important;
+}
+.u-p-b-52 {
+  padding-bottom: 52rpx !important;
+}
+.u-margin-bottom-52 {
+  margin-bottom: 52rpx !important;
+}
+.u-padding-bottom-52 {
+  padding-bottom: 52rpx !important;
+}
+.u-margin-54, .u-m-54 {
+  margin: 54rpx !important;
+}
+.u-padding-54, .u-p-54 {
+  padding: 54rpx !important;
+}
+.u-m-l-54 {
+  margin-left: 54rpx !important;
+}
+.u-p-l-54 {
+  padding-left: 54rpx !important;
+}
+.u-margin-left-54 {
+  margin-left: 54rpx !important;
+}
+.u-padding-left-54 {
+  padding-left: 54rpx !important;
+}
+.u-m-t-54 {
+  margin-top: 54rpx !important;
+}
+.u-p-t-54 {
+  padding-top: 54rpx !important;
+}
+.u-margin-top-54 {
+  margin-top: 54rpx !important;
+}
+.u-padding-top-54 {
+  padding-top: 54rpx !important;
+}
+.u-m-r-54 {
+  margin-right: 54rpx !important;
+}
+.u-p-r-54 {
+  padding-right: 54rpx !important;
+}
+.u-margin-right-54 {
+  margin-right: 54rpx !important;
+}
+.u-padding-right-54 {
+  padding-right: 54rpx !important;
+}
+.u-m-b-54 {
+  margin-bottom: 54rpx !important;
+}
+.u-p-b-54 {
+  padding-bottom: 54rpx !important;
+}
+.u-margin-bottom-54 {
+  margin-bottom: 54rpx !important;
+}
+.u-padding-bottom-54 {
+  padding-bottom: 54rpx !important;
+}
+.u-margin-55, .u-m-55 {
+  margin: 55rpx !important;
+}
+.u-padding-55, .u-p-55 {
+  padding: 55rpx !important;
+}
+.u-m-l-55 {
+  margin-left: 55rpx !important;
+}
+.u-p-l-55 {
+  padding-left: 55rpx !important;
+}
+.u-margin-left-55 {
+  margin-left: 55rpx !important;
+}
+.u-padding-left-55 {
+  padding-left: 55rpx !important;
+}
+.u-m-t-55 {
+  margin-top: 55rpx !important;
+}
+.u-p-t-55 {
+  padding-top: 55rpx !important;
+}
+.u-margin-top-55 {
+  margin-top: 55rpx !important;
+}
+.u-padding-top-55 {
+  padding-top: 55rpx !important;
+}
+.u-m-r-55 {
+  margin-right: 55rpx !important;
+}
+.u-p-r-55 {
+  padding-right: 55rpx !important;
+}
+.u-margin-right-55 {
+  margin-right: 55rpx !important;
+}
+.u-padding-right-55 {
+  padding-right: 55rpx !important;
+}
+.u-m-b-55 {
+  margin-bottom: 55rpx !important;
+}
+.u-p-b-55 {
+  padding-bottom: 55rpx !important;
+}
+.u-margin-bottom-55 {
+  margin-bottom: 55rpx !important;
+}
+.u-padding-bottom-55 {
+  padding-bottom: 55rpx !important;
+}
+.u-margin-56, .u-m-56 {
+  margin: 56rpx !important;
+}
+.u-padding-56, .u-p-56 {
+  padding: 56rpx !important;
+}
+.u-m-l-56 {
+  margin-left: 56rpx !important;
+}
+.u-p-l-56 {
+  padding-left: 56rpx !important;
+}
+.u-margin-left-56 {
+  margin-left: 56rpx !important;
+}
+.u-padding-left-56 {
+  padding-left: 56rpx !important;
+}
+.u-m-t-56 {
+  margin-top: 56rpx !important;
+}
+.u-p-t-56 {
+  padding-top: 56rpx !important;
+}
+.u-margin-top-56 {
+  margin-top: 56rpx !important;
+}
+.u-padding-top-56 {
+  padding-top: 56rpx !important;
+}
+.u-m-r-56 {
+  margin-right: 56rpx !important;
+}
+.u-p-r-56 {
+  padding-right: 56rpx !important;
+}
+.u-margin-right-56 {
+  margin-right: 56rpx !important;
+}
+.u-padding-right-56 {
+  padding-right: 56rpx !important;
+}
+.u-m-b-56 {
+  margin-bottom: 56rpx !important;
+}
+.u-p-b-56 {
+  padding-bottom: 56rpx !important;
+}
+.u-margin-bottom-56 {
+  margin-bottom: 56rpx !important;
+}
+.u-padding-bottom-56 {
+  padding-bottom: 56rpx !important;
+}
+.u-margin-58, .u-m-58 {
+  margin: 58rpx !important;
+}
+.u-padding-58, .u-p-58 {
+  padding: 58rpx !important;
+}
+.u-m-l-58 {
+  margin-left: 58rpx !important;
+}
+.u-p-l-58 {
+  padding-left: 58rpx !important;
+}
+.u-margin-left-58 {
+  margin-left: 58rpx !important;
+}
+.u-padding-left-58 {
+  padding-left: 58rpx !important;
+}
+.u-m-t-58 {
+  margin-top: 58rpx !important;
+}
+.u-p-t-58 {
+  padding-top: 58rpx !important;
+}
+.u-margin-top-58 {
+  margin-top: 58rpx !important;
+}
+.u-padding-top-58 {
+  padding-top: 58rpx !important;
+}
+.u-m-r-58 {
+  margin-right: 58rpx !important;
+}
+.u-p-r-58 {
+  padding-right: 58rpx !important;
+}
+.u-margin-right-58 {
+  margin-right: 58rpx !important;
+}
+.u-padding-right-58 {
+  padding-right: 58rpx !important;
+}
+.u-m-b-58 {
+  margin-bottom: 58rpx !important;
+}
+.u-p-b-58 {
+  padding-bottom: 58rpx !important;
+}
+.u-margin-bottom-58 {
+  margin-bottom: 58rpx !important;
+}
+.u-padding-bottom-58 {
+  padding-bottom: 58rpx !important;
+}
+.u-margin-60, .u-m-60 {
+  margin: 60rpx !important;
+}
+.u-padding-60, .u-p-60 {
+  padding: 60rpx !important;
+}
+.u-m-l-60 {
+  margin-left: 60rpx !important;
+}
+.u-p-l-60 {
+  padding-left: 60rpx !important;
+}
+.u-margin-left-60 {
+  margin-left: 60rpx !important;
+}
+.u-padding-left-60 {
+  padding-left: 60rpx !important;
+}
+.u-m-t-60 {
+  margin-top: 60rpx !important;
+}
+.u-p-t-60 {
+  padding-top: 60rpx !important;
+}
+.u-margin-top-60 {
+  margin-top: 60rpx !important;
+}
+.u-padding-top-60 {
+  padding-top: 60rpx !important;
+}
+.u-m-r-60 {
+  margin-right: 60rpx !important;
+}
+.u-p-r-60 {
+  padding-right: 60rpx !important;
+}
+.u-margin-right-60 {
+  margin-right: 60rpx !important;
+}
+.u-padding-right-60 {
+  padding-right: 60rpx !important;
+}
+.u-m-b-60 {
+  margin-bottom: 60rpx !important;
+}
+.u-p-b-60 {
+  padding-bottom: 60rpx !important;
+}
+.u-margin-bottom-60 {
+  margin-bottom: 60rpx !important;
+}
+.u-padding-bottom-60 {
+  padding-bottom: 60rpx !important;
+}
+.u-margin-62, .u-m-62 {
+  margin: 62rpx !important;
+}
+.u-padding-62, .u-p-62 {
+  padding: 62rpx !important;
+}
+.u-m-l-62 {
+  margin-left: 62rpx !important;
+}
+.u-p-l-62 {
+  padding-left: 62rpx !important;
+}
+.u-margin-left-62 {
+  margin-left: 62rpx !important;
+}
+.u-padding-left-62 {
+  padding-left: 62rpx !important;
+}
+.u-m-t-62 {
+  margin-top: 62rpx !important;
+}
+.u-p-t-62 {
+  padding-top: 62rpx !important;
+}
+.u-margin-top-62 {
+  margin-top: 62rpx !important;
+}
+.u-padding-top-62 {
+  padding-top: 62rpx !important;
+}
+.u-m-r-62 {
+  margin-right: 62rpx !important;
+}
+.u-p-r-62 {
+  padding-right: 62rpx !important;
+}
+.u-margin-right-62 {
+  margin-right: 62rpx !important;
+}
+.u-padding-right-62 {
+  padding-right: 62rpx !important;
+}
+.u-m-b-62 {
+  margin-bottom: 62rpx !important;
+}
+.u-p-b-62 {
+  padding-bottom: 62rpx !important;
+}
+.u-margin-bottom-62 {
+  margin-bottom: 62rpx !important;
+}
+.u-padding-bottom-62 {
+  padding-bottom: 62rpx !important;
+}
+.u-margin-64, .u-m-64 {
+  margin: 64rpx !important;
+}
+.u-padding-64, .u-p-64 {
+  padding: 64rpx !important;
+}
+.u-m-l-64 {
+  margin-left: 64rpx !important;
+}
+.u-p-l-64 {
+  padding-left: 64rpx !important;
+}
+.u-margin-left-64 {
+  margin-left: 64rpx !important;
+}
+.u-padding-left-64 {
+  padding-left: 64rpx !important;
+}
+.u-m-t-64 {
+  margin-top: 64rpx !important;
+}
+.u-p-t-64 {
+  padding-top: 64rpx !important;
+}
+.u-margin-top-64 {
+  margin-top: 64rpx !important;
+}
+.u-padding-top-64 {
+  padding-top: 64rpx !important;
+}
+.u-m-r-64 {
+  margin-right: 64rpx !important;
+}
+.u-p-r-64 {
+  padding-right: 64rpx !important;
+}
+.u-margin-right-64 {
+  margin-right: 64rpx !important;
+}
+.u-padding-right-64 {
+  padding-right: 64rpx !important;
+}
+.u-m-b-64 {
+  margin-bottom: 64rpx !important;
+}
+.u-p-b-64 {
+  padding-bottom: 64rpx !important;
+}
+.u-margin-bottom-64 {
+  margin-bottom: 64rpx !important;
+}
+.u-padding-bottom-64 {
+  padding-bottom: 64rpx !important;
+}
+.u-margin-65, .u-m-65 {
+  margin: 65rpx !important;
+}
+.u-padding-65, .u-p-65 {
+  padding: 65rpx !important;
+}
+.u-m-l-65 {
+  margin-left: 65rpx !important;
+}
+.u-p-l-65 {
+  padding-left: 65rpx !important;
+}
+.u-margin-left-65 {
+  margin-left: 65rpx !important;
+}
+.u-padding-left-65 {
+  padding-left: 65rpx !important;
+}
+.u-m-t-65 {
+  margin-top: 65rpx !important;
+}
+.u-p-t-65 {
+  padding-top: 65rpx !important;
+}
+.u-margin-top-65 {
+  margin-top: 65rpx !important;
+}
+.u-padding-top-65 {
+  padding-top: 65rpx !important;
+}
+.u-m-r-65 {
+  margin-right: 65rpx !important;
+}
+.u-p-r-65 {
+  padding-right: 65rpx !important;
+}
+.u-margin-right-65 {
+  margin-right: 65rpx !important;
+}
+.u-padding-right-65 {
+  padding-right: 65rpx !important;
+}
+.u-m-b-65 {
+  margin-bottom: 65rpx !important;
+}
+.u-p-b-65 {
+  padding-bottom: 65rpx !important;
+}
+.u-margin-bottom-65 {
+  margin-bottom: 65rpx !important;
+}
+.u-padding-bottom-65 {
+  padding-bottom: 65rpx !important;
+}
+.u-margin-66, .u-m-66 {
+  margin: 66rpx !important;
+}
+.u-padding-66, .u-p-66 {
+  padding: 66rpx !important;
+}
+.u-m-l-66 {
+  margin-left: 66rpx !important;
+}
+.u-p-l-66 {
+  padding-left: 66rpx !important;
+}
+.u-margin-left-66 {
+  margin-left: 66rpx !important;
+}
+.u-padding-left-66 {
+  padding-left: 66rpx !important;
+}
+.u-m-t-66 {
+  margin-top: 66rpx !important;
+}
+.u-p-t-66 {
+  padding-top: 66rpx !important;
+}
+.u-margin-top-66 {
+  margin-top: 66rpx !important;
+}
+.u-padding-top-66 {
+  padding-top: 66rpx !important;
+}
+.u-m-r-66 {
+  margin-right: 66rpx !important;
+}
+.u-p-r-66 {
+  padding-right: 66rpx !important;
+}
+.u-margin-right-66 {
+  margin-right: 66rpx !important;
+}
+.u-padding-right-66 {
+  padding-right: 66rpx !important;
+}
+.u-m-b-66 {
+  margin-bottom: 66rpx !important;
+}
+.u-p-b-66 {
+  padding-bottom: 66rpx !important;
+}
+.u-margin-bottom-66 {
+  margin-bottom: 66rpx !important;
+}
+.u-padding-bottom-66 {
+  padding-bottom: 66rpx !important;
+}
+.u-margin-68, .u-m-68 {
+  margin: 68rpx !important;
+}
+.u-padding-68, .u-p-68 {
+  padding: 68rpx !important;
+}
+.u-m-l-68 {
+  margin-left: 68rpx !important;
+}
+.u-p-l-68 {
+  padding-left: 68rpx !important;
+}
+.u-margin-left-68 {
+  margin-left: 68rpx !important;
+}
+.u-padding-left-68 {
+  padding-left: 68rpx !important;
+}
+.u-m-t-68 {
+  margin-top: 68rpx !important;
+}
+.u-p-t-68 {
+  padding-top: 68rpx !important;
+}
+.u-margin-top-68 {
+  margin-top: 68rpx !important;
+}
+.u-padding-top-68 {
+  padding-top: 68rpx !important;
+}
+.u-m-r-68 {
+  margin-right: 68rpx !important;
+}
+.u-p-r-68 {
+  padding-right: 68rpx !important;
+}
+.u-margin-right-68 {
+  margin-right: 68rpx !important;
+}
+.u-padding-right-68 {
+  padding-right: 68rpx !important;
+}
+.u-m-b-68 {
+  margin-bottom: 68rpx !important;
+}
+.u-p-b-68 {
+  padding-bottom: 68rpx !important;
+}
+.u-margin-bottom-68 {
+  margin-bottom: 68rpx !important;
+}
+.u-padding-bottom-68 {
+  padding-bottom: 68rpx !important;
+}
+.u-margin-70, .u-m-70 {
+  margin: 70rpx !important;
+}
+.u-padding-70, .u-p-70 {
+  padding: 70rpx !important;
+}
+.u-m-l-70 {
+  margin-left: 70rpx !important;
+}
+.u-p-l-70 {
+  padding-left: 70rpx !important;
+}
+.u-margin-left-70 {
+  margin-left: 70rpx !important;
+}
+.u-padding-left-70 {
+  padding-left: 70rpx !important;
+}
+.u-m-t-70 {
+  margin-top: 70rpx !important;
+}
+.u-p-t-70 {
+  padding-top: 70rpx !important;
+}
+.u-margin-top-70 {
+  margin-top: 70rpx !important;
+}
+.u-padding-top-70 {
+  padding-top: 70rpx !important;
+}
+.u-m-r-70 {
+  margin-right: 70rpx !important;
+}
+.u-p-r-70 {
+  padding-right: 70rpx !important;
+}
+.u-margin-right-70 {
+  margin-right: 70rpx !important;
+}
+.u-padding-right-70 {
+  padding-right: 70rpx !important;
+}
+.u-m-b-70 {
+  margin-bottom: 70rpx !important;
+}
+.u-p-b-70 {
+  padding-bottom: 70rpx !important;
+}
+.u-margin-bottom-70 {
+  margin-bottom: 70rpx !important;
+}
+.u-padding-bottom-70 {
+  padding-bottom: 70rpx !important;
+}
+.u-margin-72, .u-m-72 {
+  margin: 72rpx !important;
+}
+.u-padding-72, .u-p-72 {
+  padding: 72rpx !important;
+}
+.u-m-l-72 {
+  margin-left: 72rpx !important;
+}
+.u-p-l-72 {
+  padding-left: 72rpx !important;
+}
+.u-margin-left-72 {
+  margin-left: 72rpx !important;
+}
+.u-padding-left-72 {
+  padding-left: 72rpx !important;
+}
+.u-m-t-72 {
+  margin-top: 72rpx !important;
+}
+.u-p-t-72 {
+  padding-top: 72rpx !important;
+}
+.u-margin-top-72 {
+  margin-top: 72rpx !important;
+}
+.u-padding-top-72 {
+  padding-top: 72rpx !important;
+}
+.u-m-r-72 {
+  margin-right: 72rpx !important;
+}
+.u-p-r-72 {
+  padding-right: 72rpx !important;
+}
+.u-margin-right-72 {
+  margin-right: 72rpx !important;
+}
+.u-padding-right-72 {
+  padding-right: 72rpx !important;
+}
+.u-m-b-72 {
+  margin-bottom: 72rpx !important;
+}
+.u-p-b-72 {
+  padding-bottom: 72rpx !important;
+}
+.u-margin-bottom-72 {
+  margin-bottom: 72rpx !important;
+}
+.u-padding-bottom-72 {
+  padding-bottom: 72rpx !important;
+}
+.u-margin-74, .u-m-74 {
+  margin: 74rpx !important;
+}
+.u-padding-74, .u-p-74 {
+  padding: 74rpx !important;
+}
+.u-m-l-74 {
+  margin-left: 74rpx !important;
+}
+.u-p-l-74 {
+  padding-left: 74rpx !important;
+}
+.u-margin-left-74 {
+  margin-left: 74rpx !important;
+}
+.u-padding-left-74 {
+  padding-left: 74rpx !important;
+}
+.u-m-t-74 {
+  margin-top: 74rpx !important;
+}
+.u-p-t-74 {
+  padding-top: 74rpx !important;
+}
+.u-margin-top-74 {
+  margin-top: 74rpx !important;
+}
+.u-padding-top-74 {
+  padding-top: 74rpx !important;
+}
+.u-m-r-74 {
+  margin-right: 74rpx !important;
+}
+.u-p-r-74 {
+  padding-right: 74rpx !important;
+}
+.u-margin-right-74 {
+  margin-right: 74rpx !important;
+}
+.u-padding-right-74 {
+  padding-right: 74rpx !important;
+}
+.u-m-b-74 {
+  margin-bottom: 74rpx !important;
+}
+.u-p-b-74 {
+  padding-bottom: 74rpx !important;
+}
+.u-margin-bottom-74 {
+  margin-bottom: 74rpx !important;
+}
+.u-padding-bottom-74 {
+  padding-bottom: 74rpx !important;
+}
+.u-margin-75, .u-m-75 {
+  margin: 75rpx !important;
+}
+.u-padding-75, .u-p-75 {
+  padding: 75rpx !important;
+}
+.u-m-l-75 {
+  margin-left: 75rpx !important;
+}
+.u-p-l-75 {
+  padding-left: 75rpx !important;
+}
+.u-margin-left-75 {
+  margin-left: 75rpx !important;
+}
+.u-padding-left-75 {
+  padding-left: 75rpx !important;
+}
+.u-m-t-75 {
+  margin-top: 75rpx !important;
+}
+.u-p-t-75 {
+  padding-top: 75rpx !important;
+}
+.u-margin-top-75 {
+  margin-top: 75rpx !important;
+}
+.u-padding-top-75 {
+  padding-top: 75rpx !important;
+}
+.u-m-r-75 {
+  margin-right: 75rpx !important;
+}
+.u-p-r-75 {
+  padding-right: 75rpx !important;
+}
+.u-margin-right-75 {
+  margin-right: 75rpx !important;
+}
+.u-padding-right-75 {
+  padding-right: 75rpx !important;
+}
+.u-m-b-75 {
+  margin-bottom: 75rpx !important;
+}
+.u-p-b-75 {
+  padding-bottom: 75rpx !important;
+}
+.u-margin-bottom-75 {
+  margin-bottom: 75rpx !important;
+}
+.u-padding-bottom-75 {
+  padding-bottom: 75rpx !important;
+}
+.u-margin-76, .u-m-76 {
+  margin: 76rpx !important;
+}
+.u-padding-76, .u-p-76 {
+  padding: 76rpx !important;
+}
+.u-m-l-76 {
+  margin-left: 76rpx !important;
+}
+.u-p-l-76 {
+  padding-left: 76rpx !important;
+}
+.u-margin-left-76 {
+  margin-left: 76rpx !important;
+}
+.u-padding-left-76 {
+  padding-left: 76rpx !important;
+}
+.u-m-t-76 {
+  margin-top: 76rpx !important;
+}
+.u-p-t-76 {
+  padding-top: 76rpx !important;
+}
+.u-margin-top-76 {
+  margin-top: 76rpx !important;
+}
+.u-padding-top-76 {
+  padding-top: 76rpx !important;
+}
+.u-m-r-76 {
+  margin-right: 76rpx !important;
+}
+.u-p-r-76 {
+  padding-right: 76rpx !important;
+}
+.u-margin-right-76 {
+  margin-right: 76rpx !important;
+}
+.u-padding-right-76 {
+  padding-right: 76rpx !important;
+}
+.u-m-b-76 {
+  margin-bottom: 76rpx !important;
+}
+.u-p-b-76 {
+  padding-bottom: 76rpx !important;
+}
+.u-margin-bottom-76 {
+  margin-bottom: 76rpx !important;
+}
+.u-padding-bottom-76 {
+  padding-bottom: 76rpx !important;
+}
+.u-margin-78, .u-m-78 {
+  margin: 78rpx !important;
+}
+.u-padding-78, .u-p-78 {
+  padding: 78rpx !important;
+}
+.u-m-l-78 {
+  margin-left: 78rpx !important;
+}
+.u-p-l-78 {
+  padding-left: 78rpx !important;
+}
+.u-margin-left-78 {
+  margin-left: 78rpx !important;
+}
+.u-padding-left-78 {
+  padding-left: 78rpx !important;
+}
+.u-m-t-78 {
+  margin-top: 78rpx !important;
+}
+.u-p-t-78 {
+  padding-top: 78rpx !important;
+}
+.u-margin-top-78 {
+  margin-top: 78rpx !important;
+}
+.u-padding-top-78 {
+  padding-top: 78rpx !important;
+}
+.u-m-r-78 {
+  margin-right: 78rpx !important;
+}
+.u-p-r-78 {
+  padding-right: 78rpx !important;
+}
+.u-margin-right-78 {
+  margin-right: 78rpx !important;
+}
+.u-padding-right-78 {
+  padding-right: 78rpx !important;
+}
+.u-m-b-78 {
+  margin-bottom: 78rpx !important;
+}
+.u-p-b-78 {
+  padding-bottom: 78rpx !important;
+}
+.u-margin-bottom-78 {
+  margin-bottom: 78rpx !important;
+}
+.u-padding-bottom-78 {
+  padding-bottom: 78rpx !important;
+}
+.u-margin-80, .u-m-80 {
+  margin: 80rpx !important;
+}
+.u-padding-80, .u-p-80 {
+  padding: 80rpx !important;
+}
+.u-m-l-80 {
+  margin-left: 80rpx !important;
+}
+.u-p-l-80 {
+  padding-left: 80rpx !important;
+}
+.u-margin-left-80 {
+  margin-left: 80rpx !important;
+}
+.u-padding-left-80 {
+  padding-left: 80rpx !important;
+}
+.u-m-t-80 {
+  margin-top: 80rpx !important;
+}
+.u-p-t-80 {
+  padding-top: 80rpx !important;
+}
+.u-margin-top-80 {
+  margin-top: 80rpx !important;
+}
+.u-padding-top-80 {
+  padding-top: 80rpx !important;
+}
+.u-m-r-80 {
+  margin-right: 80rpx !important;
+}
+.u-p-r-80 {
+  padding-right: 80rpx !important;
+}
+.u-margin-right-80 {
+  margin-right: 80rpx !important;
+}
+.u-padding-right-80 {
+  padding-right: 80rpx !important;
+}
+.u-m-b-80 {
+  margin-bottom: 80rpx !important;
+}
+.u-p-b-80 {
+  padding-bottom: 80rpx !important;
+}
+.u-margin-bottom-80 {
+  margin-bottom: 80rpx !important;
+}
+.u-padding-bottom-80 {
+  padding-bottom: 80rpx !important;
+}
+.u-reset-nvue {
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: row;
+          flex-direction: row;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+.u-type-primary-light {
+  color: #ecf5ff;
+}
+.u-type-warning-light {
+  color: #fdf6ec;
+}
+.u-type-success-light {
+  color: #dbf1e1;
+}
+.u-type-error-light {
+  color: #fef0f0;
+}
+.u-type-info-light {
+  color: #f4f4f5;
+}
+.u-type-primary-light-bg {
+  background-color: #ecf5ff;
+}
+.u-type-warning-light-bg {
+  background-color: #fdf6ec;
+}
+.u-type-success-light-bg {
+  background-color: #dbf1e1;
+}
+.u-type-error-light-bg {
+  background-color: #fef0f0;
+}
+.u-type-info-light-bg {
+  background-color: #f4f4f5;
+}
+.u-type-primary-dark {
+  color: #2b85e4;
+}
+.u-type-warning-dark {
+  color: #f29100;
+}
+.u-type-success-dark {
+  color: #18b566;
+}
+.u-type-error-dark {
+  color: #dd6161;
+}
+.u-type-info-dark {
+  color: #82848a;
+}
+.u-type-primary-dark-bg {
+  background-color: #2b85e4;
+}
+.u-type-warning-dark-bg {
+  background-color: #f29100;
+}
+.u-type-success-dark-bg {
+  background-color: #18b566;
+}
+.u-type-error-dark-bg {
+  background-color: #dd6161;
+}
+.u-type-info-dark-bg {
+  background-color: #82848a;
+}
+.u-type-primary-disabled {
+  color: #a0cfff;
+}
+.u-type-warning-disabled {
+  color: #fcbd71;
+}
+.u-type-success-disabled {
+  color: #71d5a1;
+}
+.u-type-error-disabled {
+  color: #fab6b6;
+}
+.u-type-info-disabled {
+  color: #c8c9cc;
+}
+.u-type-primary {
+  color: #2979ff;
+}
+.u-type-warning {
+  color: #ff9900;
+}
+.u-type-success {
+  color: #19be6b;
+}
+.u-type-error {
+  color: #fa3534;
+}
+.u-type-info {
+  color: #909399;
+}
+.u-type-primary-bg {
+  background-color: #2979ff;
+}
+.u-type-warning-bg {
+  background-color: #ff9900;
+}
+.u-type-success-bg {
+  background-color: #19be6b;
+}
+.u-type-error-bg {
+  background-color: #fa3534;
+}
+.u-type-info-bg {
+  background-color: #909399;
+}
+.u-main-color {
+  color: #303133;
+}
+.u-content-color {
+  color: #606266;
+}
+.u-tips-color {
+  color: #909399;
+}
+.u-light-color {
+  color: #c0c4cc;
+}
+page {
+  color: #303133;
+  font-size: 28rpx;
+}
+/* start--去除webkit的默认样式--start */
+.u-fix-ios-appearance {
+  -webkit-appearance: none;
+}
+/* end--去除webkit的默认样式--end */
+/* start--icon图标外层套一个view,让其达到更好的垂直居中的效果--start */
+.u-icon-wrap {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+/* end-icon图标外层套一个view,让其达到更好的垂直居中的效果--end */
+/* start--iPhoneX底部安全区定义--start */
+.safe-area-inset-bottom {
+  padding-bottom: 0;
+  padding-bottom: constant(safe-area-inset-bottom);
+  padding-bottom: env(safe-area-inset-bottom);
+}
+/* end-iPhoneX底部安全区定义--end */
+/* start--各种hover点击反馈相关的类名-start */
+.u-hover-class {
+  opacity: 0.6;
+}
+.u-cell-hover {
+  background-color: #f7f8f9 !important;
+}
+/* end--各种hover点击反馈相关的类名--end */
+/* start--文本行数限制--start */
+.u-line-1 {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+.u-line-2 {
+  -webkit-line-clamp: 2;
+}
+.u-line-3 {
+  -webkit-line-clamp: 3;
+}
+.u-line-4 {
+  -webkit-line-clamp: 4;
+}
+.u-line-5 {
+  -webkit-line-clamp: 5;
+}
+.u-line-2, .u-line-3, .u-line-4, .u-line-5 {
+  overflow: hidden;
+  word-break: break-all;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+}
+/* end--文本行数限制--end */
+/* start--Retina 屏幕下的 1px 边框--start */
+.u-border,
+.u-border-bottom,
+.u-border-left,
+.u-border-right,
+.u-border-top,
+.u-border-top-bottom {
+  position: relative;
+}
+.u-border-bottom:after,
+.u-border-left:after,
+.u-border-right:after,
+.u-border-top-bottom:after,
+.u-border-top:after,
+.u-border:after {
+
+  content: ' ';
+
+  position: absolute;
+  left: 0;
+  top: 0;
+  pointer-events: none;
+  box-sizing: border-box;
+  -webkit-transform-origin: 0 0;
+  transform-origin: 0 0;
+  width: 199.8%;
+  height: 199.7%;
+  -webkit-transform: scale(0.5, 0.5);
+          transform: scale(0.5, 0.5);
+  border: 0 solid #e4e7ed;
+  z-index: 2;
+}
+.u-border-top:after {
+  border-top-width: 1px;
+}
+.u-border-left:after {
+  border-left-width: 1px;
+}
+.u-border-right:after {
+  border-right-width: 1px;
+}
+.u-border-bottom:after {
+  border-bottom-width: 1px;
+}
+.u-border-top-bottom:after {
+  border-width: 1px 0;
+}
+.u-border:after {
+  border-width: 1px;
+}
+/* end--Retina 屏幕下的 1px 边框--end */
+/* start--clearfix--start */
+.u-clearfix:after,
+.clearfix:after {
+
+  content: '';
+
+  display: table;
+  clear: both;
+}
+/* end--clearfix--end */
+/* start--高斯模糊tabbar底部处理--start */
+.u-blur-effect-inset {
+  width: 750rpx;
+  height: 0px;
+  background-color: #FFFFFF;
+}
+/* end--高斯模糊tabbar底部处理--end */
+/* start--提升H5端uni.toast()的层级,避免被uView的modal等遮盖--start */
+
+
+
+
+
+
+
+
+/* end--提升H5端uni.toast()的层级,避免被uView的modal等遮盖--end */
+/* start--去除button的所有默认样式--start */
+.u-reset-button {
+  padding: 0;
+  font-size: inherit;
+  line-height: inherit;
+  background-color: transparent;
+  color: inherit;
+}
+.u-reset-button::after {
+  border: none;
+}
+/* end--去除button的所有默认样式--end */
+
+
+
+
+
+
+
+/* start--微信小程序编译后页面有组件名的元素,特别处理--start */
+u-td, u-th {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+          flex: 1;
+  -webkit-align-self: stretch;
+          align-self: stretch;
+}
+.u-td {
+  height: 100%;
+}
+u-icon {
+  display: -webkit-inline-box;
+  display: -webkit-inline-flex;
+  display: inline-flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+u-grid {
+  width: 100%;
+  -webkit-box-flex: 0;
+  -webkit-flex: 0 0 100%;
+          flex: 0 0 100%;
+}
+u-line {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+          flex: 1;
+}
+u-switch {
+  display: -webkit-inline-box;
+  display: -webkit-inline-flex;
+  display: inline-flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+u-dropdown {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+          flex: 1;
+}
+
+/* end-微信小程序编译后页面有组件名的元素,特别处理--end */
+
+
+
+
+
+/* start--头条小程序编译后页面有组件名的元素,特别处理--start */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* end-头条小程序编译后页面有组件名的元素,特别处理--end */
+
+
+
+
+
+
+
+
+
+
+
+

+ 273 - 0
unpackage/dist/dev/mp-weixin/common/runtime.js

@@ -0,0 +1,273 @@
+
+  !function(){try{var a=Function("return this")();a&&!a.Math&&(Object.assign(a,{isFinite:isFinite,Array:Array,Date:Date,Error:Error,Function:Function,Math:Math,Object:Object,RegExp:RegExp,String:String,TypeError:TypeError,setTimeout:setTimeout,clearTimeout:clearTimeout,setInterval:setInterval,clearInterval:clearInterval}),"undefined"!=typeof Reflect&&(a.Reflect=Reflect))}catch(a){}}();
+  /******/ (function(modules) { // webpackBootstrap
+/******/ 	// install a JSONP callback for chunk loading
+/******/ 	function webpackJsonpCallback(data) {
+/******/ 		var chunkIds = data[0];
+/******/ 		var moreModules = data[1];
+/******/ 		var executeModules = data[2];
+/******/
+/******/ 		// add "moreModules" to the modules object,
+/******/ 		// then flag all "chunkIds" as loaded and fire callback
+/******/ 		var moduleId, chunkId, i = 0, resolves = [];
+/******/ 		for(;i < chunkIds.length; i++) {
+/******/ 			chunkId = chunkIds[i];
+/******/ 			if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ 				resolves.push(installedChunks[chunkId][0]);
+/******/ 			}
+/******/ 			installedChunks[chunkId] = 0;
+/******/ 		}
+/******/ 		for(moduleId in moreModules) {
+/******/ 			if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
+/******/ 				modules[moduleId] = moreModules[moduleId];
+/******/ 			}
+/******/ 		}
+/******/ 		if(parentJsonpFunction) parentJsonpFunction(data);
+/******/
+/******/ 		while(resolves.length) {
+/******/ 			resolves.shift()();
+/******/ 		}
+/******/
+/******/ 		// add entry modules from loaded chunk to deferred list
+/******/ 		deferredModules.push.apply(deferredModules, executeModules || []);
+/******/
+/******/ 		// run deferred modules when all chunks ready
+/******/ 		return checkDeferredModules();
+/******/ 	};
+/******/ 	function checkDeferredModules() {
+/******/ 		var result;
+/******/ 		for(var i = 0; i < deferredModules.length; i++) {
+/******/ 			var deferredModule = deferredModules[i];
+/******/ 			var fulfilled = true;
+/******/ 			for(var j = 1; j < deferredModule.length; j++) {
+/******/ 				var depId = deferredModule[j];
+/******/ 				if(installedChunks[depId] !== 0) fulfilled = false;
+/******/ 			}
+/******/ 			if(fulfilled) {
+/******/ 				deferredModules.splice(i--, 1);
+/******/ 				result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
+/******/ 			}
+/******/ 		}
+/******/
+/******/ 		return result;
+/******/ 	}
+/******/
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// object to store loaded CSS chunks
+/******/ 	var installedCssChunks = {
+/******/ 		"common/runtime": 0
+/******/ 	}
+/******/
+/******/ 	// object to store loaded and loading chunks
+/******/ 	// undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ 	// Promise = chunk loading, 0 = chunk loaded
+/******/ 	var installedChunks = {
+/******/ 		"common/runtime": 0
+/******/ 	};
+/******/
+/******/ 	var deferredModules = [];
+/******/
+/******/ 	// script path function
+/******/ 	function jsonpScriptSrc(chunkId) {
+/******/ 		return __webpack_require__.p + "" + chunkId + ".js"
+/******/ 	}
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/ 	// This file contains only the entry chunk.
+/******/ 	// The chunk loading function for additional chunks
+/******/ 	__webpack_require__.e = function requireEnsure(chunkId) {
+/******/ 		var promises = [];
+/******/
+/******/
+/******/ 		// mini-css-extract-plugin CSS loading
+/******/ 		var cssChunks = {"uni_modules/almost-lottery/components/almost-lottery/almost-lottery":1,"uview-ui/components/u-notice-bar/u-notice-bar":1,"uview-ui/components/u-column-notice/u-column-notice":1,"uview-ui/components/u-row-notice/u-row-notice":1,"uview-ui/components/u-icon/u-icon":1};
+/******/ 		if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);
+/******/ 		else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {
+/******/ 			promises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {
+/******/ 				var href = "" + ({"uni_modules/almost-lottery/components/almost-lottery/almost-lottery":"uni_modules/almost-lottery/components/almost-lottery/almost-lottery","uview-ui/components/u-notice-bar/u-notice-bar":"uview-ui/components/u-notice-bar/u-notice-bar","uview-ui/components/u-column-notice/u-column-notice":"uview-ui/components/u-column-notice/u-column-notice","uview-ui/components/u-row-notice/u-row-notice":"uview-ui/components/u-row-notice/u-row-notice","uview-ui/components/u-icon/u-icon":"uview-ui/components/u-icon/u-icon"}[chunkId]||chunkId) + ".wxss";
+/******/ 				var fullhref = __webpack_require__.p + href;
+/******/ 				var existingLinkTags = document.getElementsByTagName("link");
+/******/ 				for(var i = 0; i < existingLinkTags.length; i++) {
+/******/ 					var tag = existingLinkTags[i];
+/******/ 					var dataHref = tag.getAttribute("data-href") || tag.getAttribute("href");
+/******/ 					if(tag.rel === "stylesheet" && (dataHref === href || dataHref === fullhref)) return resolve();
+/******/ 				}
+/******/ 				var existingStyleTags = document.getElementsByTagName("style");
+/******/ 				for(var i = 0; i < existingStyleTags.length; i++) {
+/******/ 					var tag = existingStyleTags[i];
+/******/ 					var dataHref = tag.getAttribute("data-href");
+/******/ 					if(dataHref === href || dataHref === fullhref) return resolve();
+/******/ 				}
+/******/ 				var linkTag = document.createElement("link");
+/******/ 				linkTag.rel = "stylesheet";
+/******/ 				linkTag.type = "text/css";
+/******/ 				linkTag.onload = resolve;
+/******/ 				linkTag.onerror = function(event) {
+/******/ 					var request = event && event.target && event.target.src || fullhref;
+/******/ 					var err = new Error("Loading CSS chunk " + chunkId + " failed.\n(" + request + ")");
+/******/ 					err.code = "CSS_CHUNK_LOAD_FAILED";
+/******/ 					err.request = request;
+/******/ 					delete installedCssChunks[chunkId]
+/******/ 					linkTag.parentNode.removeChild(linkTag)
+/******/ 					reject(err);
+/******/ 				};
+/******/ 				linkTag.href = fullhref;
+/******/
+/******/ 				var head = document.getElementsByTagName("head")[0];
+/******/ 				head.appendChild(linkTag);
+/******/ 			}).then(function() {
+/******/ 				installedCssChunks[chunkId] = 0;
+/******/ 			}));
+/******/ 		}
+/******/
+/******/ 		// JSONP chunk loading for javascript
+/******/
+/******/ 		var installedChunkData = installedChunks[chunkId];
+/******/ 		if(installedChunkData !== 0) { // 0 means "already installed".
+/******/
+/******/ 			// a Promise means "currently loading".
+/******/ 			if(installedChunkData) {
+/******/ 				promises.push(installedChunkData[2]);
+/******/ 			} else {
+/******/ 				// setup Promise in chunk cache
+/******/ 				var promise = new Promise(function(resolve, reject) {
+/******/ 					installedChunkData = installedChunks[chunkId] = [resolve, reject];
+/******/ 				});
+/******/ 				promises.push(installedChunkData[2] = promise);
+/******/
+/******/ 				// start chunk loading
+/******/ 				var script = document.createElement('script');
+/******/ 				var onScriptComplete;
+/******/
+/******/ 				script.charset = 'utf-8';
+/******/ 				script.timeout = 120;
+/******/ 				if (__webpack_require__.nc) {
+/******/ 					script.setAttribute("nonce", __webpack_require__.nc);
+/******/ 				}
+/******/ 				script.src = jsonpScriptSrc(chunkId);
+/******/
+/******/ 				// create error before stack unwound to get useful stacktrace later
+/******/ 				var error = new Error();
+/******/ 				onScriptComplete = function (event) {
+/******/ 					// avoid mem leaks in IE.
+/******/ 					script.onerror = script.onload = null;
+/******/ 					clearTimeout(timeout);
+/******/ 					var chunk = installedChunks[chunkId];
+/******/ 					if(chunk !== 0) {
+/******/ 						if(chunk) {
+/******/ 							var errorType = event && (event.type === 'load' ? 'missing' : event.type);
+/******/ 							var realSrc = event && event.target && event.target.src;
+/******/ 							error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
+/******/ 							error.name = 'ChunkLoadError';
+/******/ 							error.type = errorType;
+/******/ 							error.request = realSrc;
+/******/ 							chunk[1](error);
+/******/ 						}
+/******/ 						installedChunks[chunkId] = undefined;
+/******/ 					}
+/******/ 				};
+/******/ 				var timeout = setTimeout(function(){
+/******/ 					onScriptComplete({ type: 'timeout', target: script });
+/******/ 				}, 120000);
+/******/ 				script.onerror = script.onload = onScriptComplete;
+/******/ 				document.head.appendChild(script);
+/******/ 			}
+/******/ 		}
+/******/ 		return Promise.all(promises);
+/******/ 	};
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "/";
+/******/
+/******/ 	// on error function for async loading
+/******/ 	__webpack_require__.oe = function(err) { console.error(err); throw err; };
+/******/
+/******/ 	var jsonpArray = global["webpackJsonp"] = global["webpackJsonp"] || [];
+/******/ 	var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
+/******/ 	jsonpArray.push = webpackJsonpCallback;
+/******/ 	jsonpArray = jsonpArray.slice();
+/******/ 	for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
+/******/ 	var parentJsonpFunction = oldJsonpFunction;
+/******/
+/******/
+/******/ 	// run deferred modules from other chunks
+/******/ 	checkDeferredModules();
+/******/ })
+/************************************************************************/
+/******/ ([]);
+//# sourceMappingURL=../../.sourcemap/mp-weixin/common/runtime.js.map
+  

File diff suppressed because it is too large
+ 10 - 0
unpackage/dist/dev/mp-weixin/common/vendor.js


File diff suppressed because it is too large
+ 330 - 0
unpackage/dist/dev/mp-weixin/pages/checkInRecord/checkInRecord.js


+ 5 - 0
unpackage/dist/dev/mp-weixin/pages/checkInRecord/checkInRecord.json

@@ -0,0 +1,5 @@
+{
+  "navigationBarTitleText": "中奖记录",
+  "enablePullDownRefresh": false,
+  "usingComponents": {}
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/checkInRecord/checkInRecord.wxml

@@ -0,0 +1 @@
+<view class="checkInRecord"><view class="timeData"><picker mode="date" fields="month" data-event-opts="{{[['change',[['selectDataTime',['$event']]]]]}}" bindchange="__e"><block wx:if="{{isShowYeer}}"><view class="time" style="display:flex;align-items:center;"><text>{{$root.f0}}</text><image class="triangle" src="../../static/triangle.png" mode="widthFix"></image></view></block><block wx:else><view class="time"><text style="font-size:48rpx;margin-right:10rpx;">{{$root.f1}}</text><text>月</text><image class="triangle" src="../../static/triangle.png" mode="widthFix"></image></view></block></picker></view><scroll-view class="checkInList" scroll-y="true" lower-threshold="80" data-event-opts="{{[['scrolltolower',[['scrolltolower',['$event']]]]]}}" bindscrolltolower="__e"><block wx:if="{{signList.length>0}}"><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="__i0__" wx:key="id"><view class="item"><view class="left"><view class="title">{{item.$orig.describe}}</view><view class="data">{{item.f2}}</view></view><view class="right"><block wx:if="{{item.$orig.rechargeStatus===1}}"><text>已发放</text></block><block wx:else><view data-event-opts="{{[['tap',[['setAgainReceive',['$0'],[[['signList','id',item.$orig.id]]]]]]]}}" class="error" bindtap="__e">失败重领</view></block></view></view></block></block><block wx:if="{{this.total===this.signList.length}}"><view class="baseline">—— 我是有底线的 ——</view></block></scroll-view></view>

+ 108 - 0
unpackage/dist/dev/mp-weixin/pages/checkInRecord/checkInRecord.wxss

@@ -0,0 +1,108 @@
+@charset "UTF-8";
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* 颜色变量 */
+/* 行为相关颜色 */
+/* 文字基本颜色 */
+/* 背景颜色 */
+/* 边框颜色 */
+/* 尺寸变量 */
+/* 文字尺寸 */
+/* 图片尺寸 */
+/* Border Radius */
+/* 水平间距 */
+/* 垂直间距 */
+/* 透明度 */
+/* 文章场景相关 */
+/* uni.scss */
+.checkInRecord {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: column;
+          flex-direction: column;
+  -webkit-box-pack: start;
+  -webkit-justify-content: flex-start;
+          justify-content: flex-start;
+  width: 100%;
+  height: 100vh;
+}
+.timeData {
+  width: 100%;
+  height: 104rpx;
+  line-height: 104rpx;
+  padding: 0 30rpx;
+  box-sizing: border-box;
+  border-bottom: 1rpx solid #efefef;
+}
+.time {
+  font-size: 24rpx;
+}
+.time .triangle {
+  margin-left: 5rpx;
+  width: 15rpx;
+  height: 10rpx;
+}
+.checkInList {
+  height: calc(100vh - 100rpx);
+  padding-bottom: 40rpx;
+  box-sizing: border-box;
+  overflow: hidden;
+}
+.checkInList .item {
+  padding: 10rpx 0;
+  margin: 0 30rpx;
+  border-bottom: 1rpx solid #efefef;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: justify;
+  -webkit-justify-content: space-between;
+          justify-content: space-between;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+.checkInList .title {
+  font-size: 28rpx;
+  font-weight: 500;
+  color: #000000;
+}
+.checkInList .data {
+  font-size: 24rpx;
+  margin-top: 8rpx;
+  color: #808080;
+}
+.checkInList .right > text {
+  font-size: 28rpx;
+}
+.checkInList .right .error {
+  font-size: 24rpx;
+  background-color: #FC6E53;
+  width: 140rpx;
+  height: 55rpx;
+  box-sizing: border-box;
+  color: #FFFFFF;
+  text-align: center;
+  line-height: 55rpx;
+  border-radius: 30rpx;
+}
+.baseline {
+  text-align: center;
+  padding: 30rpx 0;
+  font-size: 24rpx;
+  color: #999999;
+}
+

File diff suppressed because it is too large
+ 298 - 0
unpackage/dist/dev/mp-weixin/pages/index/index.js


+ 8 - 0
unpackage/dist/dev/mp-weixin/pages/index/index.json

@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "幸运大抽奖",
+  "enablePullDownRefresh": true,
+  "usingComponents": {
+    "u-notice-bar": "/uview-ui/components/u-notice-bar/u-notice-bar",
+    "almost-lottery": "/uni_modules/almost-lottery/components/almost-lottery/almost-lottery"
+  }
+}

File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/index/index.wxml


+ 409 - 0
unpackage/dist/dev/mp-weixin/pages/index/index.wxss

@@ -0,0 +1,409 @@
+@charset "UTF-8";
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* 颜色变量 */
+/* 行为相关颜色 */
+/* 文字基本颜色 */
+/* 背景颜色 */
+/* 边框颜色 */
+/* 尺寸变量 */
+/* 文字尺寸 */
+/* 图片尺寸 */
+/* Border Radius */
+/* 水平间距 */
+/* 垂直间距 */
+/* 透明度 */
+/* 文章场景相关 */
+/* uni.scss */
+page {
+  background-color: #F0524C;
+}
+.luckyDraw {
+  position: relative;
+}
+.luckyDraw > .back {
+  width: 100%;
+}
+.luckyDrawContent {
+  position: absolute;
+  top: 0;
+  width: 100%;
+  padding: 40rpx 0;
+  margin-bottom: 20rpx;
+  font-family: PingFangSC-Medium, PingFang SC;
+}
+.luckyDrawContent .luckyDrawTop {
+  padding: 0 28rpx;
+  height: 104rpx;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: justify;
+  -webkit-justify-content: space-between;
+          justify-content: space-between;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+.luckyDrawContent .luckyDrawTop .left {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: start;
+  -webkit-justify-content: flex-start;
+          justify-content: flex-start;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+.luckyDrawContent .luckyDrawTop .left > .avatarView {
+  overflow: hidden;
+  width: 104rpx;
+  height: 104rpx;
+  background: #D8D8D8;
+  border-radius: 10px;
+}
+.luckyDrawContent .luckyDrawTop .left .userInfo {
+  margin-left: 28rpx;
+}
+.luckyDrawContent .luckyDrawTop .left .userInfo > view {
+  font-size: 32rpx;
+  font-weight: 500;
+  color: #FFFFFF;
+}
+.luckyDrawContent .luckyDrawTop .left .userInfo > view.account {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: start;
+  -webkit-justify-content: flex-start;
+          justify-content: flex-start;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+.luckyDrawContent .luckyDrawTop .left .userInfo > view.account > image {
+  width: 36rpx;
+  height: 36rpx;
+  margin-right: 10rpx;
+}
+.luckyDrawContent .luckyDrawTop .left .userInfo > view.ID {
+  margin-top: 4rpx;
+}
+.luckyDrawContent .luckyDrawTop .right {
+  width: 212rpx;
+  height: 76rpx;
+  background: #FEC435;
+  border-radius: 40rpx;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+          justify-content: center;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+.luckyDrawContent .luckyDrawTop .right > text {
+  font-size: 28rpx;
+  font-weight: 400;
+  color: #FFFFFF;
+  margin-left: 18rpx;
+}
+.luckyDrawContent .notice {
+  width: 656rpx;
+  height: 68rpx;
+  background: #C7322C;
+  box-shadow: 0px 4rpx 8rpx 0rpx rgba(49, 49, 49, 0.08);
+  border-radius: 38rpx;
+  opacity: 0.53;
+  margin: 58rpx auto 0;
+  padding: 0 30rpx;
+  box-sizing: border-box;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: start;
+  -webkit-justify-content: flex-start;
+          justify-content: flex-start;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+.luckyDrawContent .notice .horn {
+  width: 28rpx;
+  height: 28rpx;
+}
+.luckyDrawContent .notice .txts {
+  height: 68rpx;
+  width: 600rpx;
+}
+.luckyDrawContent .turntable {
+  position: relative;
+  margin-top: 40rpx;
+}
+.luckyDrawContent .turntable .decorate {
+  position: relative;
+  width: 100%;
+  height: 890rpx;
+}
+.luckyDrawContent .turntable .decorate > image {
+  width: 100%;
+  position: absolute;
+  z-index: 10;
+}
+.luckyDrawContent .turntable .decorate > image.decorateBack {
+  top: 0;
+}
+.luckyDrawContent .turntable .decorate > image.decorateChassis {
+  position: absolute;
+  z-index: 1;
+  bottom: 0;
+}
+.luckyDrawContent .turntable .turntableContent {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 20;
+  padding-top: 20rpx;
+}
+.luckyDrawContent .turntable .turntableContent .bottom {
+  margin-top: 20rpx;
+  text-align: center;
+  position: absolute;
+  bottom: 35rpx;
+  left: 50%;
+  -webkit-transform: translateX(-50%);
+          transform: translateX(-50%);
+}
+.luckyDrawContent .turntable .turntableContent .bottom .cont {
+  font-size: 28rpx;
+  font-weight: 400;
+  color: #FFFFFF;
+  margin-bottom: 22rpx;
+}
+.luckyDrawContent .turntable .turntableContent .bottom .cont text {
+  font-size: 36rpx;
+  color: #FEED22;
+  font-weight: 500;
+}
+.luckyDrawContent .turntable .turntableContent .bottom .record {
+  font-size: 28rpx;
+  font-weight: 500;
+  color: #FFFFFF;
+}
+.luckyDrawContent .myPrize {
+  margin: 40rpx 26rpx 0;
+  min-height: 352rpx;
+  background: #F4E2CA;
+  border-radius: 20rpx;
+  position: relative;
+  padding: 58rpx 0  20rpx;
+}
+.luckyDrawContent .myPrize .title {
+  position: absolute;
+  width: 232rpx;
+  height: 64rpx;
+  background: -webkit-linear-gradient(top, #FFEDD1 0%, #FFC954 100%);
+  background: linear-gradient(180deg, #FFEDD1 0%, #FFC954 100%);
+  box-shadow: 0 4rpx 8rpx 0 rgba(0, 0, 0, 0.07);
+  border-radius: 0 0 24rpx 24rpx;
+  font-size: 32rpx;
+  font-weight: 500;
+  color: #F33938;
+  text-align: center;
+  line-height: 64rpx;
+  left: 50%;
+  -webkit-transform: translateX(-50%);
+          transform: translateX(-50%);
+  top: -12rpx;
+}
+.luckyDrawContent .myPrize .chips {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: justify;
+  -webkit-justify-content: space-between;
+          justify-content: space-between;
+}
+.luckyDrawContent .myPrize .chip {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: column;
+          flex-direction: column;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+  width: 50%;
+}
+.luckyDrawContent .myPrize .chip > image {
+  width: 208rpx;
+  height: 160rpx;
+}
+.luckyDrawContent .myPrize .chip .text {
+  font-size: 32rpx;
+  font-weight: 500;
+  color: #F33938;
+  line-height: 44rpx;
+  margin-top: 12rpx;
+}
+.luckyDrawContent .myPrize .chip .progress {
+  position: relative;
+  width: 200rpx;
+  height: 40rpx;
+  margin-top: 12rpx;
+  background: #FFFCF7;
+  border-radius: 26rpx;
+  overflow: hidden;
+}
+.luckyDrawContent .myPrize .chip .progress .value {
+  position: absolute;
+  width: 1%;
+  height: 100%;
+  top: 0;
+  left: 0;
+  z-index: 1;
+  background: #F37938;
+}
+.luckyDrawContent .myPrize .chip .progress > text {
+  font-size: 28rpx;
+  font-weight: 500;
+  color: #333333;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+  z-index: 2;
+}
+.luckyDrawContent .myPrize .clearTime {
+  margin: 20rpx 0 0;
+  text-align: center;
+  font-size: 24rpx;
+  font-weight: 400;
+  color: #F33938;
+}
+.luckyDrawContent .activityRules {
+  margin: 40rpx 28rpx 0;
+  background: #F4E2CA;
+  border-radius: 20rpx;
+  color: #F33938;
+  font-size: 32rpx;
+  font-weight: 400;
+}
+.luckyDrawContent .activityRules > .top {
+  height: 92rpx;
+  padding: 0 28rpx;
+  box-sizing: border-box;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: justify;
+  -webkit-justify-content: space-between;
+          justify-content: space-between;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+}
+.luckyDrawContent .activityRules > .top > image {
+  width: 40rpx;
+}
+.luckyDrawContent .activityRules > .bottom {
+  padding: 0 28rpx 30rpx;
+  box-sizing: border-box;
+}
+.luckyDrawContent .activityRules > .bottom > view {
+  margin-bottom: 12rpx;
+  font-size: 28rpx;
+  font-weight: 400;
+  color: #666666;
+  line-height: 46rpx;
+}
+.luckyDrawContent .popup {
+  position: fixed;
+  width: 100%;
+  height: 100vh;
+  background: rgba(0, 0, 0, 0.6);
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 100;
+}
+.luckyDrawContent .popup .popupContent {
+  width: 632rpx;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+  text-align: center;
+}
+.luckyDrawContent .popup .popupContent > .content {
+  position: relative;
+}
+.luckyDrawContent .popup .popupContent > .content > image {
+  width: 100%;
+  height: 652rpx;
+}
+.luckyDrawContent .popup .popupContent > .content > .textCon {
+  position: absolute;
+  width: 100%;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  padding-top: 192rpx;
+}
+.luckyDrawContent .popup .popupContent > .content > .textCon .ts {
+  font-size: 60rpx;
+  font-weight: 500;
+  color: #F5631D;
+}
+.luckyDrawContent .popup .popupContent > .content > .textCon .reward {
+  height: 60rpx;
+  background: #FFD9A2;
+  border-radius: 31rpx;
+  font-size: 32rpx;
+  font-weight: 400;
+  display: inline-block;
+  padding: 0 32rpx;
+  color: #F5631E;
+  line-height: 60rpx;
+  margin-top: 20rpx;
+}
+.luckyDrawContent .popup .popupContent > .content > .textCon .doubleBt {
+  width: 424rpx;
+  height: 84rpx;
+  margin-top: 114rpx;
+}
+.luckyDrawContent .popup .popupContent > .content > .textCon .bt {
+  margin-top: 14rpx;
+  font-size: 32rpx;
+  font-weight: 400;
+  color: #FCE8CD;
+}
+.luckyDrawContent .popup .popupContent > .close {
+  width: 54rpx;
+  height: 54rpx;
+  margin-top: 76rpx;
+}
+

+ 155 - 0
unpackage/dist/dev/mp-weixin/pages/officialAccount/officialAccount.js

@@ -0,0 +1,155 @@
+(global["webpackJsonp"] = global["webpackJsonp"] || []).push([["pages/officialAccount/officialAccount"],{
+
+/***/ 59:
+/*!***************************************************************************************************************************!*\
+  !*** C:/Users/77876/Documents/HBuilderProjects/qc-luckyDraw/main.js?{"page":"pages%2FofficialAccount%2FofficialAccount"} ***!
+  \***************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(createPage) {__webpack_require__(/*! uni-pages */ 4);
+var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 2));
+var _officialAccount = _interopRequireDefault(__webpack_require__(/*! ./pages/officialAccount/officialAccount.vue */ 60));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
+createPage(_officialAccount.default);
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["createPage"]))
+
+/***/ }),
+
+/***/ 60:
+/*!********************************************************************************************************!*\
+  !*** C:/Users/77876/Documents/HBuilderProjects/qc-luckyDraw/pages/officialAccount/officialAccount.vue ***!
+  \********************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _officialAccount_vue_vue_type_template_id_094e718c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./officialAccount.vue?vue&type=template&id=094e718c& */ 61);
+/* harmony import */ var _officialAccount_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./officialAccount.vue?vue&type=script&lang=js& */ 63);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _officialAccount_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _officialAccount_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+/* harmony import */ var _D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js */ 10);
+
+var renderjs
+
+
+
+
+/* normalize component */
+
+var component = Object(_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+  _officialAccount_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+  _officialAccount_vue_vue_type_template_id_094e718c___WEBPACK_IMPORTED_MODULE_0__["render"],
+  _officialAccount_vue_vue_type_template_id_094e718c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+  false,
+  null,
+  null,
+  null,
+  false,
+  _officialAccount_vue_vue_type_template_id_094e718c___WEBPACK_IMPORTED_MODULE_0__["components"],
+  renderjs
+)
+
+component.options.__file = "pages/officialAccount/officialAccount.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ 61:
+/*!***************************************************************************************************************************************!*\
+  !*** C:/Users/77876/Documents/HBuilderProjects/qc-luckyDraw/pages/officialAccount/officialAccount.vue?vue&type=template&id=094e718c& ***!
+  \***************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns, recyclableRender, components */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_16_0_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_template_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_template_id_094e718c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--16-0!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/template.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./officialAccount.vue?vue&type=template&id=094e718c& */ 62);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_16_0_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_template_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_template_id_094e718c___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_16_0_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_template_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_template_id_094e718c___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "recyclableRender", function() { return _D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_16_0_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_template_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_template_id_094e718c___WEBPACK_IMPORTED_MODULE_0__["recyclableRender"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "components", function() { return _D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_16_0_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_template_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_template_id_094e718c___WEBPACK_IMPORTED_MODULE_0__["components"]; });
+
+
+
+/***/ }),
+
+/***/ 62:
+/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+  !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--16-0!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/template.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!C:/Users/77876/Documents/HBuilderProjects/qc-luckyDraw/pages/officialAccount/officialAccount.vue?vue&type=template&id=094e718c& ***!
+  \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns, recyclableRender, components */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "recyclableRender", function() { return recyclableRender; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "components", function() { return components; });
+var components
+var render = function() {
+  var _vm = this
+  var _h = _vm.$createElement
+  var _c = _vm._self._c || _h
+}
+var recyclableRender = false
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ 63:
+/*!*********************************************************************************************************************************!*\
+  !*** C:/Users/77876/Documents/HBuilderProjects/qc-luckyDraw/pages/officialAccount/officialAccount.vue?vue&type=script&lang=js& ***!
+  \*********************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _D_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_12_1_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!./node_modules/babel-loader/lib!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--12-1!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./officialAccount.vue?vue&type=script&lang=js& */ 64);
+/* harmony import */ var _D_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_12_1_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_D_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_12_1_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__);
+/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _D_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_12_1_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _D_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_12_1_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
+ /* harmony default export */ __webpack_exports__["default"] = (_D_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_12_1_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_D_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_officialAccount_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default.a); 
+
+/***/ }),
+
+/***/ 64:
+/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+  !*** ./node_modules/babel-loader/lib!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--12-1!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!C:/Users/77876/Documents/HBuilderProjects/qc-luckyDraw/pages/officialAccount/officialAccount.vue?vue&type=script&lang=js& ***!
+  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;
+
+
+
+
+
+
+var _api = __webpack_require__(/*! @/api/api.js */ 46); //
+//
+//
+//
+//
+//
+var _default = { data: function data() {return { url: '' };},
+  onLoad: function onLoad() {var _this = this;
+    (0, _api.getUrl)().then(function (res) {
+      _this.url = res.data;
+    });
+  },
+  methods: {} };exports.default = _default;
+
+/***/ })
+
+},[[59,"common/runtime","common/vendor"]]]);
+//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/officialAccount/officialAccount.js.map

+ 5 - 0
unpackage/dist/dev/mp-weixin/pages/officialAccount/officialAccount.json

@@ -0,0 +1,5 @@
+{
+  "navigationBarTitleText": "",
+  "enablePullDownRefresh": false,
+  "usingComponents": {}
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/officialAccount/officialAccount.wxml

@@ -0,0 +1 @@
+<view><web-view src="{{url}}"></web-view></view>

+ 32 - 0
unpackage/dist/dev/mp-weixin/project.config.json

@@ -0,0 +1,32 @@
+{
+  "description": "项目配置文件。",
+  "packOptions": {
+    "ignore": []
+  },
+  "setting": {
+    "urlCheck": false,
+    "es6": true
+  },
+  "compileType": "miniprogram",
+  "libVersion": "",
+  "appid": "wx021e792baf529aff",
+  "projectname": "qc-luckyDraw",
+  "condition": {
+    "search": {
+      "current": -1,
+      "list": []
+    },
+    "conversation": {
+      "current": -1,
+      "list": []
+    },
+    "game": {
+      "current": -1,
+      "list": []
+    },
+    "miniprogram": {
+      "current": -1,
+      "list": []
+    }
+  }
+}

+ 23 - 0
unpackage/dist/dev/mp-weixin/project.private.config.json

@@ -0,0 +1,23 @@
+{
+  "condition": {
+    "plugin": {
+      "list": []
+    },
+    "game": {
+      "list": []
+    },
+    "gamePlugin": {
+      "list": []
+    },
+    "miniprogram": {
+      "list": [
+        {
+          "name": "pages/index/index",
+          "pathName": "pages/index/index",
+          "query": "mpOpenId=oNiRk1jTyzYx6zza8lklpQG_Ei-M&mpAppId=wx91208c6c8651a97d&mpName=脑瓜崩阅读",
+          "scene": null
+        }
+      ]
+    }
+  }
+}

+ 7 - 0
unpackage/dist/dev/mp-weixin/sitemap.json

@@ -0,0 +1,7 @@
+{
+  "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
+  "rules": [{
+  "action": "allow",
+  "page": "*"
+  }]
+}

BIN
unpackage/dist/dev/mp-weixin/static/IDGold.png


BIN
unpackage/dist/dev/mp-weixin/static/almost-lottery1__bg2x.png


BIN
unpackage/dist/dev/mp-weixin/static/almost-lottery__action.png


BIN
unpackage/dist/dev/mp-weixin/static/almost-lottery__action2x.png


BIN
unpackage/dist/dev/mp-weixin/static/almost-lottery__action3x.png


BIN
unpackage/dist/dev/mp-weixin/static/almost-lottery__bg.png


BIN
unpackage/dist/dev/mp-weixin/static/almost-lottery__bg2x.png


BIN
unpackage/dist/dev/mp-weixin/static/almost-lottery__bg3x.png


BIN
unpackage/dist/dev/mp-weixin/static/avatar.jpg


BIN
unpackage/dist/dev/mp-weixin/static/backImg.png


BIN
unpackage/dist/dev/mp-weixin/static/chassis.png


BIN
unpackage/dist/dev/mp-weixin/static/close.png


BIN
unpackage/dist/dev/mp-weixin/static/decorate.png


BIN
unpackage/dist/dev/mp-weixin/static/doubleBt.png


BIN
unpackage/dist/dev/mp-weixin/static/git.png


BIN
unpackage/dist/dev/mp-weixin/static/horn.png


BIN
unpackage/dist/dev/mp-weixin/static/iPhone12Chip.png


BIN
unpackage/dist/dev/mp-weixin/static/logo.png


BIN
unpackage/dist/dev/mp-weixin/static/popupBack.png


BIN
unpackage/dist/dev/mp-weixin/static/retract.png


BIN
unpackage/dist/dev/mp-weixin/static/triangle.png


BIN
unpackage/dist/dev/mp-weixin/static/turntable_VIP.png


Some files were not shown because too many files changed in this diff