@dongkboy 8 месяцев назад
Родитель
Сommit
2dd6119530

+ 52 - 30
App.vue

@@ -1,5 +1,5 @@
 <style lang="scss">
-		@import "@/uni_modules/uview-ui/index.scss";
+	@import "@/uni_modules/uview-ui/index.scss";
 </style>
 <script>
 	import Vue from 'vue'
@@ -8,7 +8,7 @@
 		onLaunch: function() {
 			uni.getSystemInfo({
 				success: function(e) {
-					
+
 					// #ifdef APP-PLUS
 					// 检测升级
 					appUpdate()
@@ -33,38 +33,57 @@
 					Vue.prototype.StatusBar = e.statusBarHeight;
 					Vue.prototype.CustomBar = e.statusBarHeight + e.titleBarHeight;
 					// #endif
-					
+
 					// #ifdef APP-PLUS
 					//Vue.prototype.$api.listenTranMsg()
-			// 		var info = plus.push.getClientInfo();
-			
-			// 		/* 5+  push 消息推送 ps:使用:H5+的方式监听,实现推送*/
-			// 		plus.push.addEventListener("click", function(msg) {
-			// 			console.log("click:" + JSON.stringify(msg));
-			// 			console.log(msg.payload);
-			// 			console.log(JSON.stringify(msg));
-			// 			//这里可以写跳转业务代码
-			// 		}, false);
-			// 		// 监听在线消息事件    
-			// 		plus.push.addEventListener("receive", function(msg) {
-			// 			// plus.ui.alert(2);  
-			// 			//这里可以写跳转业务代码
-			// 			console.log("recevice:" + JSON.stringify(msg))
-			// 		}, false);
+					// 		var info = plus.push.getClientInfo();
+
+					// 		/* 5+  push 消息推送 ps:使用:H5+的方式监听,实现推送*/
+					// 		plus.push.addEventListener("click", function(msg) {
+					// 			console.log("click:" + JSON.stringify(msg));
+					// 			console.log(msg.payload);
+					// 			console.log(JSON.stringify(msg));
+					// 			//这里可以写跳转业务代码
+					// 		}, false);
+					// 		// 监听在线消息事件    
+					// 		plus.push.addEventListener("receive", function(msg) {
+					// 			// plus.ui.alert(2);  
+					// 			//这里可以写跳转业务代码
+					// 			console.log("recevice:" + JSON.stringify(msg))
+					// 		}, false);
 					// #endif
-					
+
 					//Vue.prototype.$api.initLogin()
-					
+
 				}
 			})
-            Vue.prototype.NavBarColor='bg-gradual-blue'
-            Vue.prototype.Radio_Check_Size='scale(0.7)'
-            Vue.prototype.bannerList=[
-           		  {id:1,type: 'image',url: 'https://static.jeecg.com/upload/test/banner0_1595850438042.jpeg', link: ''},
-           		  {id:2,type: 'image',url: 'https://static.jeecg.com/upload/test/banner2_1595818081327.jpg', link: ''},
-           		  {id:3,type: 'image',url: 'https://static.jeecg.com/upload/test/oabanner-2_1595648520760.png', link: ''},
-           		  {id:4,type: 'image',url: 'https://static.jeecg.com/upload/test/banner5_1595818089013.jpeg', link: ''},
-           	]	
+			Vue.prototype.NavBarColor = 'bg-gradual-blue'
+			Vue.prototype.Radio_Check_Size = 'scale(0.7)'
+			Vue.prototype.bannerList = [{
+					id: 1,
+					type: 'image',
+					url: 'https://static.jeecg.com/upload/test/banner0_1595850438042.jpeg',
+					link: ''
+				},
+				{
+					id: 2,
+					type: 'image',
+					url: 'https://static.jeecg.com/upload/test/banner2_1595818081327.jpg',
+					link: ''
+				},
+				{
+					id: 3,
+					type: 'image',
+					url: 'https://static.jeecg.com/upload/test/oabanner-2_1595648520760.png',
+					link: ''
+				},
+				{
+					id: 4,
+					type: 'image',
+					url: 'https://static.jeecg.com/upload/test/banner5_1595818089013.jpeg',
+					link: ''
+				},
+			]
 			Vue.prototype.ColorList = [{
 					title: '嫣红',
 					name: 'red',
@@ -156,7 +175,10 @@
 <style>
 	@import "plugin/colorui/main.css";
 	@import "plugin/colorui/icon.css";
-    @import "plugin/colorui/animation.css";
+	@import "plugin/colorui/animation.css";
+	/* 公共样式库 */
+	@import "/style/zcm-main.css";
+
 	.nav-list {
 		display: flex;
 		flex-wrap: wrap;
@@ -285,4 +307,4 @@
 			transform: translateY(0px);
 		}
 	}
-</style>
+</style>

+ 55 - 37
common/router/modules/routes.js

@@ -8,37 +8,55 @@ const routes = [{
 	{
 		path: "/pages/login/xieyi",
 		name: 'xieyi',
-			meta: {
-				title: '用户协议',
-			},
-		},{
+		meta: {
+			title: '用户协议',
+		},
+	}, {
 		path: "/pages/login/mimi",
 		name: 'mimi',
-			meta: {
-				title: '隐秘协议',
-			},
+		meta: {
+			title: '隐秘协议',
 		},
-		{
+	},
+	{
 		path: "/pages/login/resetpassword",
 		name: 'resetpassword',
-			meta: {
-				title: '忘记密码',
-			},
+		meta: {
+			title: '忘记密码',
 		},
-		{
+	},
+
+	{
+		path: "/pages/adManagement/adlist",
+		name: 'adlist',
+		meta: {},
+	},
+	{
+		path: "/pages/adManagement/createFullscreenAd",
+		name: 'adlist',
+		meta: {},
+	},
+	{
+		path: "/pages/adManagement/fullscreenAdDetails",
+		name: 'adlist',
+		meta: {},
+	},
+
+
+	{
 		path: "/pages/login/register",
 		name: 'register',
-			meta: {
-				title: '注册',
-			},
+		meta: {
+			title: '注册',
 		},
-		{
-			path: "/pages/login/settled",
-			name: 'settled',
-			meta: {
-				title: '申请入驻',
-			},
+	},
+	{
+		path: "/pages/login/settled",
+		name: 'settled',
+		meta: {
+			title: '申请入驻',
 		},
+	},
 	{
 		path: "/pages/login/loginOauth2",
 		name: 'oauth2Login',
@@ -374,19 +392,19 @@ const routes = [{
 		meta: {
 			title: '店铺设置',
 		},
-	},{
+	}, {
 		path: '/pages/store/brandMessage',
 		name: 'brandMessage',
 		meta: {
 			title: '品牌信息',
 		},
-	},		{
+	}, {
 		path: '/pages/login/map',
 		name: 'amap',
 		meta: {
 			title: '地图',
 		},
-	},	{
+	}, {
 		path: '/pages/login/aMap',
 		name: 'amap',
 		meta: {
@@ -400,14 +418,14 @@ const routes = [{
 			title: '经营信息',
 		},
 	},
-		{
-			path: '/pages/store/headPhoto',
-			name: 'headPhoto',
-			meta: {
-				title: '商户形象',
-			},
+	{
+		path: '/pages/store/headPhoto',
+		name: 'headPhoto',
+		meta: {
+			title: '商户形象',
 		},
-		{
+	},
+	{
 		path: '/pages/store/businessQua',
 		name: 'businessInfor',
 		meta: {
@@ -420,13 +438,13 @@ const routes = [{
 		meta: {
 			title: '其他',
 		},
-	},{
+	}, {
 		path: '/pages/store/advertising',
 		name: 'advertising',
 		meta: {
 			title: '广告素材',
 		},
-	},	{
+	}, {
 		path: '/pages/store/addHours',
 		name: 'addHours',
 		meta: {
@@ -482,7 +500,7 @@ const routes = [{
 			title: '优惠劵详情',
 		},
 	},
-	
+
 	{
 		path: '/pages/coupon/activity',
 		name: 'activity',
@@ -531,19 +549,19 @@ const routes = [{
 		meta: {
 			title: '购买积分',
 		},
-	},{
+	}, {
 		path: '/pages/financial/balanceBill',
 		name: 'buyPoints',
 		meta: {
 			title: '余额账单',
 		},
-	},{
+	}, {
 		path: '/pages/financial/balanceBean',
 		name: 'balanceBean',
 		meta: {
 			title: '金豆账单',
 		},
-	},{
+	}, {
 		path: '/pages/financial/balancePonts',
 		name: 'balancePonts',
 		meta: {

+ 361 - 0
components/date-picker.vue

@@ -0,0 +1,361 @@
+<template>
+	<div>
+		<u-popup ref="popup" class="popup" :mask="true" mode="bottom" border-radius="20" :closeable="true">
+			<view>
+				<view class="popup-title ">
+					<text>时间筛选</text>
+					<!-- <text @click="$refs.popup.close()">×</text> -->
+				</view>
+				<!-- <view class="quickOptions dis f-c ">
+					<text class="title">快捷选择</text>
+					<view class=" dis a-c j-start">
+						<view class="tab" :class="{tabactive:OptionsTabIndex==index}"
+							v-for="(item,index) in quickOptions" :key="index" @click="OptionsTabSelect(item,index)">
+							<text>{{item}}</text>
+						</view>
+					</view>
+				</view> -->
+				<!-- <text style="margin-left: 42rpx;font-size: 30rpx;color: #333;">自定义时间</text> -->
+				<view style="padding:20rpx  42rpx">
+					<view class="popup-data dis j-s">
+						<text :class="startShow? 'active' :''"
+							@click="startClick()">{{ interviewStartTime||'开始时间' }}</text>至
+						<text :class="endShow? 'active' :''" @click="endClick()">{{ interviewEndTime || '结束时间' }}</text>
+					</view>
+					<picker-view v-show="visible" :indicator-style="indicatorStyle" :value="value" @change="bindChange"
+						class="picker-view">
+						<picker-view-column>
+							<view class="item dis a-c j-c " v-for="(item,index) in years" :key="index">{{item}}年</view>
+						</picker-view-column>
+						<picker-view-column>
+							<view class="item dis a-c j-c " v-for="(item,index) in months" :key="index">{{item}}月</view>
+						</picker-view-column>
+						<picker-view-column>
+							<view class="item dis a-c j-c " v-for="(item,index) in days" :key="index">{{item}}日</view>
+						</picker-view-column>
+					</picker-view>
+				</view>
+			</view>
+			<view class="popup-footer dis j-s">
+				<text @click.stop="reset">重置</text>
+				<text @click.stop="confirm">确定</text>
+			</view>
+		</u-popup>
+	</div>
+</template>
+<script>
+	export default {
+		data() {
+			return {
+				quickOptions: ["今日", "本月", "本年"], //快捷选项
+				OptionsTabIndex: null, //下标
+				startShow: false,
+				endShow: false,
+				interviewStartTime: '',
+				interviewEndTime: '',
+				years: [],
+				year: null,
+				months: [],
+				month: null,
+				days: [],
+				day: null,
+				hours: [],
+				hour: null,
+				minutes: [],
+				minute: null,
+				value: [],
+				indicatorStyle: `height: 50px;color:#2D6DFF `,
+				visible: false
+			}
+		},
+		props: {
+			// visible: {
+			//   type: Boolean,
+			//   default: true
+			// },
+
+			// interviewTime: {
+			//   type: String,
+			//   default() {
+			//     return '';
+			//   },
+			// }
+		},
+		mounted() {
+			this.init();
+		},
+		watch: {
+			// visible: {
+			//   handler(newValue, oldValue) {
+			//     if (newValue) {
+			//       if (this.interviewTime) {
+			//         this.init(this.interviewTime);
+			//       }
+			//     }
+			//   },
+			//   immediate: false,
+			//   deep: true
+			// }
+		},
+		methods: {
+			//快捷选择
+			OptionsTabSelect(item, index) {
+				switch (item) {
+					case "今日":
+						let dotayDate = new Date().toISOString().split('T')[0] //今日日期
+						this.interviewStartTime = dotayDate;
+						this.interviewEndTime = dotayDate;
+						break;
+					case "本月":
+						const currentMonthRange = this.getCurrentMonthRange();
+						this.interviewStartTime = currentMonthRange.start;
+						this.interviewEndTime = currentMonthRange.end;
+						break;
+					case "本年":
+						const currentYear = new Date().getFullYear();
+						this.interviewStartTime = `${currentYear}-01-01`;
+						this.interviewEndTime = `${currentYear}-12-31`;
+						break;
+					default:
+						break;
+				}
+				this.OptionsTabIndex = index;
+			},
+			//获取本月
+			getCurrentMonthRange() {
+				const today = new Date();
+				const firstDay = new Date(today.getFullYear(), today.getMonth(), 1); // 本月第一天
+				const lastDay = new Date(today.getFullYear(), today.getMonth() + 1, 0); // 本月最后一天
+
+				// 格式化为 YYYY-MM-DD
+				const formatDate = (date) => {
+					const year = date.getFullYear();
+					const month = String(date.getMonth() + 1).padStart(2, '0');
+					const day = String(date.getDate()).padStart(2, '0');
+					return `${year}-${month}-${day}`;
+				};
+
+				return {
+					start: formatDate(firstDay),
+					end: formatDate(lastDay)
+				};
+			},
+			open() {
+				this.$refs.popup.open()
+			},
+			bindChange: function(e) {
+				const val = e.detail.value
+				let year = this.years[val[0]]
+				let isDay = 30,
+					days = [];
+				if (val[1] + 1 == 2) {
+					if ((val[0] % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
+						console.log('闰年')
+						isDay = 29;
+					} else {
+						isDay = 28;
+						console.log('平年')
+					}
+				} else if ([1, 3, 5, 7, 8, 10, 12].includes(val[1] + 1)) {
+					isDay = 31;
+				} else {
+					isDay = 30;
+				}
+
+				for (let i = 1; i <= isDay; i++) {
+					days.push(i)
+				}
+				this.days = days;
+				this.year = this.years[val[0]]
+				this.month = this.months[val[1]]
+				this.day = this.days[val[2]]
+				if (this.startShow) {
+					this.interviewStartTime = this.year + '-' + this.month + '-' + this.day
+				}
+				if (this.endShow) {
+					this.interviewEndTime = this.year + '-' + this.month + '-' + this.day
+				}
+			},
+			init() {
+				const date = new Date();
+				const years = []
+				const year = date.getFullYear()
+				const months = []
+				const month = date.getMonth() + 1
+				const days = []
+				const day = date.getDate()
+
+				let isDay = 30;
+				if (month == 2) {
+					if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
+						isDay = 29;
+					} else {
+						isDay = 28;
+					}
+				} else if ([1, 3, 5, 7, 8, 10, 12].includes(month)) {
+					isDay = 31;
+				} else {
+					isDay = 30;
+				}
+
+				for (let i = date.getFullYear(); i >= 1900; i--) {
+					years.push(i)
+				}
+				for (let i = 1; i <= 12; i++) {
+					months.push(i)
+				}
+				for (let i = 1; i <= isDay; i++) {
+					days.push(i)
+				}
+
+				this.years = years
+				this.year = year
+				this.months = months
+				this.month = month
+				this.days = days
+				this.day = day
+				this.value = [0, month - 1, day - 1]
+			},
+			// 补0
+			padZeroStr(originStr) {
+				if (+originStr < 10) {
+					return String(originStr).padStart(2, '0')
+				}
+				return originStr + ''
+			},
+			close() {
+				this.$emit('update:visible', false);
+			},
+			reset() {
+				this.$emit('update:visible', false);
+				this.interviewStartTime = ''
+				this.interviewEndTime = ''
+			},
+			startClick() {
+				// this.interviewStartTime=''
+				this.interviewStartTime = this.year + '-' + this.month + '-' + this.day
+				this.visible = true
+				this.startShow = true
+				this.endShow = false
+			},
+			endClick() {
+				this.interviewEndTime = this.year + '-' + this.month + '-' + this.day
+				this.visible = true
+				this.startShow = false
+				this.endShow = true
+			},
+			confirm() {
+				// let monthStr = this.padZeroStr(this.month)
+				// let dayStr = this.padZeroStr(this.day)
+				// let hourStr = this.padZeroStr(this.hour)
+				// let minuteStr = this.padZeroStr(this.minute)
+				// this.timeValue = `${this.year}/${monthStr}/${dayStr} ${hourStr}:${minuteStr}:00`;
+				this.$emit('confirmPickDate', this.interviewStartTime, this.interviewEndTime);
+				this.$refs.popup.close()
+			},
+		},
+	}
+</script>
+<style lang="scss" scoped>
+	.popup {
+		border-radius: 10px 10px 0 0 !important;
+	}
+
+	.popup-title {
+		font-size: 15px;
+		color: #333333;
+		padding: 28rpx;
+		margin-bottom: 10px;
+		position: relative;
+		text-align: center;
+		border-bottom: 1rpx solid #eee;
+
+		text:first-child {
+			font-weight: 600;
+		}
+
+		// text:last-child {
+		// 	position: absolute;
+		// 	right: 10px;
+		// 	font-size: 21px;
+		// 	color: #999999;
+		// 	line-height: 23px;
+		// }
+	}
+
+	.quickOptions {
+		padding: 0 42rpx;
+		box-sizing: border-box;
+		margin-bottom: 37rpx;
+
+		.title {
+			font-size: 30rpx;
+			color: #333;
+			margin-bottom: 20rpx;
+		}
+
+		.tab {
+			padding: 7rpx 20rpx;
+			box-sizing: border-box;
+			font-size: 26rpx;
+			color: #666;
+			border-radius: 4rpx 4rpx 4rpx 4rpx;
+			border: 1rpx solid #EEEEEE;
+			margin-right: 30rpx;
+		}
+
+		.tabactive {
+			background: rgba(45, 109, 255, 0.1);
+			color: #2D6DFF;
+			border: 1rpx solid #fff;
+		}
+	}
+
+	.popup-footer {
+		margin: 10px 15px;
+
+		text {
+			font-size: 16px;
+			padding: 5px 0;
+			color: #FFFFFF;
+			display: inline-block;
+			width: 45%;
+			text-align: center;
+		}
+
+		text:first-child {
+			color: #2D6DFF;
+			background: rgba(45, 109, 255, 0.1);
+			border-radius: 5px 5px 5px 5px;
+		}
+
+		text:last-child {
+			background: linear-gradient(132deg, #2DD9FF 0%, #2D6DFF 100%);
+			border-radius: 5px 5px 5px 5px;
+		}
+	}
+
+	.popup-data {
+		line-height: 25px;
+
+		text {
+			font-size: 14px;
+			color: #999999;
+			display: inline-block;
+			width: 45%;
+			text-align: center;
+			border: 1px solid #DDDDDD;
+			border-radius: 2px 2px 2px 2px;
+		}
+
+		.active {
+			border: 1px solid #2D6DFF;
+			color: #2D6DFF;
+		}
+	}
+
+	.picker-view {
+		width: 100%;
+		height: 150px;
+	}
+</style>

+ 12 - 7
components/dengrq-datetime-picker/customPickerView/index.css

@@ -1,19 +1,24 @@
 .picker-view {
-  height: 356rpx;
+	height: 356rpx;
 }
 
 .picker-view-column {
-  font-size: 14px;
-  line-height: 34px;
-  text-align: center;
-  color: #333;
+	font-size: 14px;
+	line-height: 34px;
+	text-align: center;
+	color: #333;
 }
 
 /* 覆盖默认样式,样式可以按需自己改 */
 .uni-picker-view-indicator {
-  background-color: rgba(106, 123, 255, 0.1);
+	background-color: rgba(106, 123, 255, 0.1);
 }
+
 .uni-picker-view-indicator::before,
 .uni-picker-view-indicator::after {
-  content: none;
+	content: none;
 }
+
+.uni-system-preview-image {
+	z-index: 9999;
+}

+ 133 - 128
components/index_nav.vue

@@ -7,154 +7,159 @@
 	</swiper> -->
 	<view class="item">
 		<view class="card" v-for="(item,index) in swiperList" :key="index" @click="jump(item)">
-			<image :src="item.url" mode="aspectFill"></image>
+			<image :src="item.url" mode="aspectFill"
+				:style="{width:item.name=='广告管理'?'52rpx':'56rpx',height:item.name=='广告管理'?'52rpx':'56rpx',}">
+			</image>
 			{{item.name}}
 		</view>
 		<!-- 弹窗 -->
-		<Modal ref="myModal"
-			:title="modalText.title" 
-			:content="modalText.content" 
-			:showCancelButton="false"
-		/>
+		<Modal ref="myModal" :title="modalText.title" :content="modalText.content" :showCancelButton="false" />
 	</view>
 </template>
 
 <script>
-import Modal from '@/components/modal/index.vue';
-export default {
-	name: 'indexNav',
-	components: {
-		Modal,
-	},
-	data() {
-		return {
-			dotStyle: true,
-			swiperList: [{
-					name: '店铺设置',
-					url: '/static/index/shop.png',
-					path: '/pages/store/settings'
+	import Modal from '@/components/modal/index.vue';
+	export default {
+		name: 'indexNav',
+		components: {
+			Modal,
+		},
+		data() {
+			return {
+				dotStyle: true,
+				swiperList: [{
+						name: '店铺设置',
+						url: '/static/index/shop.png',
+						path: '/pages/store/settings'
+					},
+					{
+						name: '团餐活动',
+						url: '/static/index/groupMeal.png',
+						path: '/pages/groupMeal/goods/list'
+					},
+					{
+						name: '优惠券',
+						url: '/static/index/coupon.png',
+						path: '/pages/coupon/coupon'
+					},
+					{
+						name: '退款管理',
+						url: '/static/index/refund.png'
+					},
+					{
+						name: '订单管理',
+						url: '/static/index/indent.png'
+					},
+					// {
+					// 	name: '审核查询',
+					// 	url: '/static/index/audit.png',
+					// 	path: '/pages/store/examine'
+					// },
+					{
+						name: '商品管理',
+						url: '/static/index/product.png',
+						path: '/pages/product/index'
+					},
+					{
+						name: '提现管理',
+						url: '/static/index/withdraw.png'
+					},
+					{
+						name: '广告管理',
+						url: '/static/index/ad.png',
+						path: '/pages/adManagement/adlist'
+					},
+					{
+						name: '秒杀活动',
+						url: '/static/index/seckill.png'
+					},
+					{
+						name: '客户评价',
+						url: '/static/index/evaluate.png',
+						path: '/pages/evaluate/evaluate'
+					},
+					{
+						name: '全部服务',
+						url: '/static/index/all.png',
+						path: '/pages/index/full'
+					},
+				],
+				// 弹窗
+				modalText: {
+					title: '提示',
+					btntext: '好的',
+					// 很抱歉,您没有通过平台审核,如有疑问请联系平台客服。
+					content: '报名成功,请等待平台审核'
 				},
-				{
-					name: '团餐活动',
-					url: '/static/index/groupMeal.png',
-					path: '/pages/groupMeal/goods/list'
-				},
-				{
-					name: '优惠券',
-					url: '/static/index/coupon.png',
-					path: '/pages/coupon/coupon'
-				},
-				{
-					name: '退款管理',
-					url: '/static/index/refund.png'
-				},
-				{
-					name: '订单管理',
-					url: '/static/index/indent.png'
-				},
-				// {
-				// 	name: '审核查询',
-				// 	url: '/static/index/audit.png',
-				// 	path: '/pages/store/examine'
-				// },
-				{
-					name: '商品管理',
-					url: '/static/index/product.png',
-					path: '/pages/product/index'
-				},
-				{
-					name: '提现管理',
-					url: '/static/index/withdraw.png'
-				},
-				{
-					name: '秒杀活动',
-					url: '/static/index/seckill.png'
-				},
-				{
-					name: '客户评价',
-					url: '/static/index/evaluate.png',
-					path: '/pages/evaluate/evaluate'
-				},
-				{
-					name: '全部服务',
-					url: '/static/index/all.png',
-					path: '/pages/index/full'
-				},
-			],
-			// 弹窗
-			modalText: {
-				title: '提示',
-				btntext: '好的',
-				// 很抱歉,您没有通过平台审核,如有疑问请联系平台客服。
-				content: '报名成功,请等待平台审核'
-			},
-		}
-	},
-	methods: {
-		jump(item) {
-			// 需要先报名
-			if (item.name === '团餐活动') {
-				this.$http.post('/groupmeal/gmMerchantApplicationRecord/isApply', {}).then(res => {
-					if (!res.data.result) {
-						uni.navigateTo({
-							url: '/pages/groupMeal/goods/index'
-						});
-					} else {
-						let status = res.data.result.status;
-						if (status == 1) {
+			}
+		},
+		methods: {
+			jump(item) {
+				// 需要先报名
+				if (item.name === '团餐活动') {
+					this.$http.post('/groupmeal/gmMerchantApplicationRecord/isApply', {}).then(res => {
+						if (!res.data.result) {
 							uni.navigateTo({
-								url: item.path
+								url: '/pages/groupMeal/goods/index'
 							});
 						} else {
-							this.modalText.content = status == 2 ? '很抱歉,您没有通过平台审核,如有疑问请联系平台客服。' : '团餐活动报名审核中,请耐心等待';
-							this.$refs.myModal.onOpen();
+							let status = res.data.result.status;
+							if (status == 1) {
+								uni.navigateTo({
+									url: item.path
+								});
+							} else {
+								this.modalText.content = status == 2 ? '很抱歉,您没有通过平台审核,如有疑问请联系平台客服。' :
+									'团餐活动报名审核中,请耐心等待';
+								this.$refs.myModal.onOpen();
+							}
 						}
-					}
+					});
+					return;
+				}
+				if (!item.path) return;
+				uni.navigateTo({
+					url: item.path
 				});
-				return;
 			}
-			if (!item.path) return;
-			uni.navigateTo({
-				url: item.path
-			});
 		}
 	}
-}
 </script>
 
 <style scoped lang="scss">
-.item {
-	width: 100%;
-	display: flex;
-	flex-wrap: wrap;
-	justify-content: space-between;
-	
-}
+	.item {
+		width: 100%;
+		display: flex;
+		flex-wrap: wrap;
+		justify-content: space-between;
 
-.card {
-	width: 20%;
-	height: 96rpx;
-	display: flex;
-	flex-direction: column;
-	flex-wrap: wrap;
-	justify-content: center;
-	align-items: center;
-	font-size: 24rpx;
-	image {
-		width: 56rpx;
-		height: 56rpx;
-		margin-bottom: 4rpx;
 	}
-}
-.card:nth-child(-n+5){
-	margin-bottom: 40rpx;
-}
 
-::v-deep .uni-swiper-wrapper {
-	-webkit-transform: translate3d(0px, 0, 0);
-	-moz-transform: translate3d(0px, 0, 0);
-	-o-transform: translate(0px, 0px);
-	-ms-transform: translate3d(0px, 0, 0);
-	transform: translate3d(0px, 0, 0);
-}
+	.card {
+		width: 20%;
+		display: flex;
+		flex-direction: column;
+		flex-wrap: wrap;
+		justify-content: space-between;
+		align-items: center;
+		font-size: 24rpx;
+
+		image {
+			width: 56rpx;
+			height: 56rpx;
+			margin-bottom: 4rpx;
+		}
+	}
+
+	.card:nth-child(-n+5) {
+		margin-bottom: 40rpx;
+	}
+
+	::v-deep .uni-swiper-wrapper {
+		-webkit-transform: translate3d(0px, 0, 0);
+		-moz-transform: translate3d(0px, 0, 0);
+		-o-transform: translate(0px, 0px);
+		-ms-transform: translate3d(0px, 0, 0);
+		transform: translate3d(0px, 0, 0);
+	}
 </style>

+ 145 - 0
components/uni-NavBar/uni-NavBar.vue

@@ -0,0 +1,145 @@
+<template>
+	<view class="navbar dis a-c j-s" :style="{background:background}">
+		<image class="icon-left" :src="backActionimg" mode="" @tap="back()"></image>
+		<template v-if="!isSlot">
+			<text class="title font-weight" :style="titleStyle">{{headerTitle}}</text>
+			<template v-if="!rightSlot">
+				<view class="dis f-c a-c" :style="{opacity:isShared?1:0}">
+					<image v-if="rightIcon" class="icon-right" :src="computedRightIcon" mode="" @tap="share">
+					</image>
+					<text v-if="rightText" class="right-text" @tap="share" :style="rightTextStyle">{{rightText}}</text>
+				</view>
+			</template>
+			<template v-else>
+				<view class="dis a-c ">
+					<slot name="rightSlot">
+					</slot>
+				</view>
+			</template>
+		</template>
+		<template v-else>
+			<slot name="search">
+			</slot>
+		</template>
+	</view>
+</template>
+
+<script>
+	// import {
+	// 	turnBase64Image
+	// } from '@/plugins/utils.js';
+	export default {
+		name: 'name', //插件名称
+		props: {
+			isSlot: {
+				type: Boolean,
+				default: false,
+			},
+			rightSlot: {
+				type: Boolean,
+				default: false,
+			},
+			headerTitle: {
+				type: String,
+				default: 'xxxx'
+			},
+			background: {
+				type: String,
+				default: '#fff'
+			},
+			titleStyle: {
+				type: Object,
+				default: () => {
+					return {};
+				}
+			},
+			rightTextStyle: {
+				type: Object,
+				default: () => {
+					return {};
+				}
+			},
+			rightIcon: {
+				type: Boolean,
+				default: true,
+			},
+			iconImage: {
+				type: String,
+				default: null
+			},
+			rightBtnType: {
+				type: String,
+				default: 'icon' //icon 图标按钮  text 文字按钮
+			},
+			rightText: {
+				type: String,
+				default: "",
+			},
+			isShared: {
+				type: Boolean,
+				default: true,
+			}
+
+		},
+		computed: {
+
+		},
+		data() {
+			return {
+				backActionimg: '/static/icon/backAction.png', //返回图标
+				shareimg: '',
+				computedRightIcon: "",
+			};
+		},
+		async mounted() {
+
+		},
+		methods: {
+			share() {
+				this.$emit('share')
+			},
+			back() {
+				uni.navigateBack({
+					delta: 1
+				});
+			}
+		}
+	};
+</script>
+
+<!--使用scss,只在本组件生效-->
+<style lang="scss" scoped>
+	.navbar {
+		padding: 116rpx 40rpx 28rpx;
+		box-sizing: border-box;
+		position: relative;
+		z-index: 999;
+
+		.title {
+			font-size: 36rpx;
+			color: #333;
+			position: absolute;
+			/* 绝对定位 */
+			left: 50%;
+			/* 从左侧50%开始 */
+			transform: translateX(-50%);
+			/* 向左移动自身宽度的一半 */
+		}
+
+		.icon-left {
+			width: 64rpx;
+			height: 60rpx;
+		}
+
+		.icon-right {
+			width: 48rpx;
+			height: 48rpx;
+		}
+
+		.right-text {
+			color: #333;
+			font-size: 20rpx;
+		}
+
+	}
+</style>

+ 158 - 158
manifest.json

@@ -1,159 +1,159 @@
 {
-    "name" : "掌柜生活商户版",
-    "appid" : "__UNI__D5F9FE3",
-    "description" : "",
-    "versionName" : "0.0.1.0",
-    "versionCode" : "0010",
-    "transformPx" : false,
-    "app-plus" : {
-        /* 5+App特有相关 */
-        "modules" : {
-            "Maps" : {},
-            "Geolocation" : {},
-            "Barcode" : {},
-            "Camera" : {},
-            "VideoPlayer" : {}
-        },
-        /* 模块配置 */
-        "distribute" : {
-            /* 应用发布信息 */
-            "android" : {
-                "network" : {
-                    "wifiState" : true,
-                    "fineLocation" : true,
-                    "coarseLocation" : true
-                },
-                /* android打包配置 */
-                "permissions" : [
-                    "<uses-feature android:name=\"android.hardware.camera\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
-                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
-                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
-                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
-                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
-                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
-                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
-                ],
-                "targetSdkVersion" : 30
-            },
-            "ios" : {
-                "privacy" : {
-                    "LocationWhenInUse" : true,
-                    "LocationAlways" : true
-                },
-                "privacyDescription" : {
-                    "NSCameraUsageDescription" : "用于扫码功能",
-                    "NSPhotoLibraryUsageDescription" : "用于上传图片"
-                },
-                "dSYMs" : false
-            },
-            /* ios打包配置 */
-            "sdkConfigs" : {
-                "ad" : {},
-                "maps" : {
-                    "amap" : {
-                        "apiKey" : "6b8b0fd9f75da24fb1c13edf7b2d7daa",
-                        "name" : "amap_13141345053C5qRtPuC2",
-                        "appkey_ios" : "6b8b0fd9f75da24fb1c13edf7b2d7daa",
-                        "appkey_android" : "6b8b0fd9f75da24fb1c13edf7b2d7daa"
-                    }
-                },
-                "geolocation" : {
-                    "amap" : {
-                        "name" : "amap_13141345053C5qRtPuC2",
-                        "__platform__" : [ "android" ],
-                        "appkey_ios" : "6b8b0fd9f75da24fb1c13edf7b2d7daa",
-                        "appkey_android" : "6b8b0fd9f75da24fb1c13edf7b2d7daa"
-                    },
-                    "system" : {
-                        "__platform__" : [ "ios", "android" ]
-                    }
-                },
-                "push" : {
-                    "unipush" : {}
-                }
-            },
-            "icons" : {
-                "android" : {
-                    "hdpi" : "unpackage/res/icons/72x72.png",
-                    "xhdpi" : "unpackage/res/icons/96x96.png",
-                    "xxhdpi" : "unpackage/res/icons/144x144.png",
-                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
-                },
-                "ios" : {
-                    "appstore" : "unpackage/res/icons/1024x1024.png",
-                    "ipad" : {
-                        "app" : "unpackage/res/icons/76x76.png",
-                        "app@2x" : "unpackage/res/icons/152x152.png",
-                        "notification" : "unpackage/res/icons/20x20.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "proapp@2x" : "unpackage/res/icons/167x167.png",
-                        "settings" : "unpackage/res/icons/29x29.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "spotlight" : "unpackage/res/icons/40x40.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
-                    },
-                    "iphone" : {
-                        "app@2x" : "unpackage/res/icons/120x120.png",
-                        "app@3x" : "unpackage/res/icons/180x180.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "notification@3x" : "unpackage/res/icons/60x60.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "settings@3x" : "unpackage/res/icons/87x87.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
-                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
-                    }
-                }
-            }
-        }
-    },
-    /* SDK配置 */
-    "quickapp" : {},
-    /* 快应用特有相关 */
-    "mp-weixin" : {
-        "appid" : "wxe57ddfbe230bcfba",
-        "setting" : {
-            "urlCheck" : false,
-            "es6" : true
-        },
-        "permission" : {
-            "Geolocation" : {
-                "desc" : "你的位置信息将用于地图显示"
-            },
-            "scope.userLocation" : {
-                "desc" : "有定位功能需要导航定位"
-            }
-        }
-    },
-    "h5" : {
-        "title" : "商户端",
-        "domain" : "myhjdc.cn",
-        "sdkConfigs" : {
-            "maps" : {
-                "amap" : {
-                    "key" : "6b8b0fd9f75da24fb1c13edf7b2d7daa",
-                    "securityJsCode" : "",
-                    "serviceHost" : ""
-                }
-            }
-        },
-        "router" : {
-            "base" : "merchanth5"
-        }
-    }
-}
+	"name": "掌柜生活商户版",
+	"appid": "__UNI__D5F9FE3",
+	"description": "",
+	"versionName": "0.0.1.0",
+	"versionCode": "0010",
+	"transformPx": false,
+	"app-plus": {
+		/* 5+App特有相关 */
+		"modules": {
+			"Maps": {},
+			"Geolocation": {},
+			"Barcode": {},
+			"Camera": {},
+			"VideoPlayer": {}
+		},
+		/* 模块配置 */
+		"distribute": {
+			/* 应用发布信息 */
+			"android": {
+				"network": {
+					"wifiState": true,
+					"fineLocation": true,
+					"coarseLocation": true
+				},
+				/* android打包配置 */
+				"permissions": [
+					"<uses-feature android:name=\"android.hardware.camera\"/>",
+					"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+					"<uses-permission android:name=\"android.permission.CAMERA\"/>",
+					"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+					"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+					"<uses-permission android:name=\"android.permission.INTERNET\"/>",
+					"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+					"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+					"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+					"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+					"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+					"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+				],
+				"targetSdkVersion": 30
+			},
+			"ios": {
+				"privacy": {
+					"LocationWhenInUse": true,
+					"LocationAlways": true
+				},
+				"privacyDescription": {
+					"NSCameraUsageDescription": "用于扫码功能",
+					"NSPhotoLibraryUsageDescription": "用于上传图片"
+				},
+				"dSYMs": false
+			},
+			/* ios打包配置 */
+			"sdkConfigs": {
+				"ad": {},
+				"maps": {
+					"amap": {
+						"apiKey": "6b8b0fd9f75da24fb1c13edf7b2d7daa",
+						"name": "amap_13141345053C5qRtPuC2",
+						"appkey_ios": "6b8b0fd9f75da24fb1c13edf7b2d7daa",
+						"appkey_android": "6b8b0fd9f75da24fb1c13edf7b2d7daa"
+					}
+				},
+				"geolocation": {
+					"amap": {
+						"name": "amap_13141345053C5qRtPuC2",
+						"__platform__": ["android"],
+						"appkey_ios": "6b8b0fd9f75da24fb1c13edf7b2d7daa",
+						"appkey_android": "6b8b0fd9f75da24fb1c13edf7b2d7daa"
+					},
+					"system": {
+						"__platform__": ["ios", "android"]
+					}
+				},
+				"push": {
+					"unipush": {}
+				}
+			},
+			"icons": {
+				"android": {
+					"hdpi": "unpackage/res/icons/72x72.png",
+					"xhdpi": "unpackage/res/icons/96x96.png",
+					"xxhdpi": "unpackage/res/icons/144x144.png",
+					"xxxhdpi": "unpackage/res/icons/192x192.png"
+				},
+				"ios": {
+					"appstore": "unpackage/res/icons/1024x1024.png",
+					"ipad": {
+						"app": "unpackage/res/icons/76x76.png",
+						"app@2x": "unpackage/res/icons/152x152.png",
+						"notification": "unpackage/res/icons/20x20.png",
+						"notification@2x": "unpackage/res/icons/40x40.png",
+						"proapp@2x": "unpackage/res/icons/167x167.png",
+						"settings": "unpackage/res/icons/29x29.png",
+						"settings@2x": "unpackage/res/icons/58x58.png",
+						"spotlight": "unpackage/res/icons/40x40.png",
+						"spotlight@2x": "unpackage/res/icons/80x80.png"
+					},
+					"iphone": {
+						"app@2x": "unpackage/res/icons/120x120.png",
+						"app@3x": "unpackage/res/icons/180x180.png",
+						"notification@2x": "unpackage/res/icons/40x40.png",
+						"notification@3x": "unpackage/res/icons/60x60.png",
+						"settings@2x": "unpackage/res/icons/58x58.png",
+						"settings@3x": "unpackage/res/icons/87x87.png",
+						"spotlight@2x": "unpackage/res/icons/80x80.png",
+						"spotlight@3x": "unpackage/res/icons/120x120.png"
+					}
+				}
+			}
+		}
+	},
+	/* SDK配置 */
+	"quickapp": {},
+	/* 快应用特有相关 */
+	"mp-weixin": {
+		"appid": "wxe57ddfbe230bcfba",
+		"setting": {
+			"urlCheck": false,
+			"es6": true
+		},
+		"permission": {
+			"Geolocation": {
+				"desc": "你的位置信息将用于地图显示"
+			},
+			"scope.userLocation": {
+				"desc": "有定位功能需要导航定位"
+			}
+		}
+	},
+	"h5": {
+		"title": "商户端",
+		"domain": "myhjdc.cn",
+		"sdkConfigs": {
+			"maps": {
+				"amap": {
+					"key": "6b8b0fd9f75da24fb1c13edf7b2d7daa",
+					"securityJsCode": "",
+					"serviceHost": ""
+				}
+			}
+		},
+		"router": {
+			// "base" : "merchanth5"
+		}
+	}
+}

+ 61 - 41
pages.json

@@ -10,20 +10,20 @@
 		{
 			"path": "pages/login/login",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/login/mimi",
 			"style": {}
 		}, {
 			"path": "pages/login/xieyi",
 			"style": {}
-		},  {
+		}, {
 			"path": "pages/login/register",
 			"style": {}
-		},   
+		},
 		{
 			"path": "pages/login/resetpassword",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/login/settled",
 			"style": {}
 		}, {
@@ -74,7 +74,7 @@
 			"path": "pages/order/record",
 			"style": {}
 		},
-		
+
 		{
 			"path": "pages/index/full",
 			"style": {}
@@ -122,16 +122,16 @@
 		{
 			"path": "pages/evaluate/evaluate",
 			"style": {
-				"app-plus" : {
-								"bounce" : "none" // 取消APP端iOS回弹,避免与下拉刷新冲突 (可统一配在 'globalStyle')
-							}
+				"app-plus": {
+					"bounce": "none" // 取消APP端iOS回弹,避免与下拉刷新冲突 (可统一配在 'globalStyle')
+				}
 			}
 		},
 		{
 			"path": "pages/scan/scan",
 			"style": {
-				"app-plus":{
-					"titleNView":false
+				"app-plus": {
+					"titleNView": false
 				}
 			}
 		},
@@ -301,96 +301,95 @@
 		}, {
 			"path": "pages/common/helloWorld",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/store/settings",
 			"style": {}
-			
-		},{
+
+		}, {
 			"path": "pages/login/map",
 			"style": {}
-			
-		},{
+
+		}, {
 			"path": "pages/login/aMap",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/store/brandMessage",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/store/businessInfor",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/store/otherSet",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/store/businessQua",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/store/advertising",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/store/headPhoto",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/store/addHours",
 			"style": {}
 		},
 		{
 			"path": "pages/store/editStore",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/store/examine",
 			"style": {}
-		}
-		,{
+		}, {
 			"path": "pages/coupon/coupon",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/coupon/creatcoupon",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/coupon/activity",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/coupon/storeUsers",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/coupon/creatReduction",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/coupon/creatDiscount",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/coupon/couponDetail",
 			"style": {}
 		},
 		{
 			"path": "pages/coupon/usersList",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/financial/management",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/financial/recharge",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/financial/buyBean",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/financial/buyPoints",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/financial/balanceBill",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/financial/balancePonts",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/financial/balanceBean",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/product/creatStandard",
 			"style": {}
-		},{
+		}, {
 			"path": "pages/download/index",
 			"style": {}
 		},
@@ -449,6 +448,27 @@
 		{
 			"path": "pages/groupMeal/users/team-member",
 			"style": {}
+		},
+
+
+		// 广告---------------
+		{
+			"path": "pages/adManagement/adlist",
+			"style": {
+				"navigationBarTitleText": "广告列表"
+			}
+		},
+		{
+			"path": "pages/adManagement/createFullscreenAd",
+			"style": {
+				"navigationBarTitleText": "广告创建"
+			}
+		},
+		{
+			"path": "pages/adManagement/fullscreenAdDetails",
+			"style": {
+				"navigationBarTitleText": "广告详情"
+			}
 		}
 	],
 	"globalStyle": {
@@ -460,7 +480,7 @@
 		"navigationBarBackgroundColor": "#0081ff",
 		"navigationBarTitleText": "JEECG BOOT",
 		"navigationStyle": "custom",
-		"navigationBarTextStyle": "white"
+		"navigationBarTextStyle": "black"
 	},
 	"tabBar": {
 		"color": "#ADB4B8",

+ 587 - 0
pages/adManagement/adlist.vue

@@ -0,0 +1,587 @@
+<template>
+	<view class="page">
+		<u-sticky :h5-nav-height="0" z-index="9099" :offset-top='0'>
+			<uni-NavBar headerTitle="广告列表" background="linear-gradient(230deg, #CFE6FF 40%, #FFFFFF 100%)"
+				:isSlot="false"></uni-NavBar>
+			<div class="search dis a-c j-s ">
+				<u-search v-model="selectedOptions.name" @custom="custom" @search="search" shape="square" :height='68'
+					color="#AAAAAA" bg-color="#F6F8FC" :input-style="{background:'transparent'}"
+					:actionStyle="{position: 'absolute',right:'50px',boxSiting:'border-box',borderLeft:'2rpx solid #DDDDDD'}"
+					placeholder-color="#AAAAAA" :clearabled="true" @clear="clear" placeholder="请输入关键词"></u-search>
+				<u-icon name="list" class="ml-2" color="#333" size="48" @click="categoryFilterShow=true"></u-icon>
+			</div>
+		</u-sticky>
+		<!-- 广告列表 -->
+		<view class="adlist dis f-c  ">
+			<view class="dataView dis a-c j-s" v-for="(item,index) in dataList" :key="index" @click="godetails(item)">
+				<view class="dataView-left dis a-start">
+					<image src="/static/banner/banner3.jpg" mode=""></image>
+					<view class="content dis  f-c ">
+						<text class="title">{{item.name}}</text>
+						<view class="tag dis a-c ">
+							<text>{{adTypeMap(item.type)}}</text>
+							<text>{{item.positionName}}</text>
+						</view>
+						<view class="dis a-c mb-1">
+							<view class="time-tag mr-1">始</view>
+							<text class="time-text"> 开始时间:{{item.startDate}} </text>
+						</view>
+						<view class="dis a-c">
+							<view class="time-tag mr-1" style="background-color: #FF5353;">终</view>
+							<text class="time-text"> 结束时间:{{item.endDate}} </text>
+						</view>
+					</view>
+				</view>
+				<view class="dataView-right ">
+					<text class="status"
+						:style="{color:statusColorMap(item.status)}">{{statusTypeMap(item.status)}}</text>
+					<u-icon name="arrow-right" class="ml-1" color="#979797" size="24"></u-icon>
+				</view>
+			</view>
+		</view>
+		<view class="footer">
+			<view class="btn dis a-c j-c" @click="createAdShow=true">
+				<image src="/static/ad/createAd.png" mode="" style="width: 32rpx ; height: 32rpx;margin-right: 13rpx;">
+				</image>
+				<text>创建广告</text>
+			</view>
+		</view>
+		<u-popup v-model="createAdShow" mode="center" width="580rpx" :closeable="true" border-radius="20">
+			<view class="popup">
+				<view class="header dis a-c j-c ">
+					<text>选择广告类型</text>
+				</view>
+				<view class="createAd-content dis f-wrap j-s">
+					<view class="adimage dis f-c j-c" v-for="(item,index) in adbgImage" :key="index"
+						:style="{ backgroundImage: `url('${item.image}')` }" @click="adTypeSelect(item.value)">
+						<text class="mb-1">{{item.name}}</text>
+						<text>{{item.content}}</text>
+					</view>
+				</view>
+			</view>
+
+		</u-popup>
+		<u-popup v-model="categoryFilterShow" mode="bottom" :closeable="true" border-radius="20" height="730px">
+			<view class="popup">
+				<view class="header dis a-c j-c ">
+					<text>请选择</text>
+				</view>
+				<view class="categoryFilter">
+					<view class="view dis f-c " v-for="(item,index) in categoryFilter" :key="index">
+						<text class="title">{{item.title}}</text>
+						<view class="dis f-wrap a-c">
+							<view class="status-options dis a-c j-c" :class="{ 'active': isActive(item, Filteritem) }"
+								v-for="(Filteritem,Filterindex) in item.options" :key="Filterindex"
+								@click="optionsClick(item, Filteritem)">
+								<text>{{Filteritem.label}}</text>
+							</view>
+						</view>
+					</view>
+					<view class="view dis f-c ">
+						<text class="title">投放页面</text>
+						<view class="dis f-wrap a-c">
+							<view class="status-options dis a-c j-c"
+								:class="{'active':selectedOptions.positionId==item.id}"
+								v-for="(item,index) in adSlotList" :key="index" @click="adSlotOptions(item)">
+								<text>{{item.positionName}}</text>
+							</view>
+						</view>
+					</view>
+					<view class="view dis f-c ">
+						<text class="title">广告日期</text>
+						<view class="time-select dis a-c j-s" @click="timeChange">
+							<text class="">{{startTime && endTime ? startTime+" - "+endTime:'请选择' }}</text>
+							<u-icon name="arrow-right" color="#979797" size="28"></u-icon>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="categoryFilter-footer dis a-c j-s">
+				<view class="dis a-c j-c" @click="categoryFilterShow=false">
+					重置
+				</view>
+				<view class="dis a-c j-c" @click="queryType">
+					查询
+				</view>
+			</view>
+		</u-popup>
+		<my-date-picker ref="datePicker" @confirmPickDate="confirmPickDate" />
+	</view>
+</template>
+<script>
+	import myDatePicker from '@/components/date-picker.vue';
+	import uniNavBar from '@/components/uni-NavBar/uni-NavBar.vue'
+	import {
+		USER_INFO
+	} from '@/common/util/constants.js'
+	export default {
+		components: {
+			myDatePicker,
+			uniNavBar
+		},
+		data() {
+			return {
+				categoryFilterShow: false, //分类筛选
+				createAdShow: false, //创建广告弹窗
+				selectedOptions: {
+					type: null,
+					status: null,
+					positionId: null,
+					name: "",
+					startDate: "",
+					endDate: "",
+				},
+				startTime: "",
+				endTime: "",
+				adbgImage: [{
+						name: "全屏广告",
+						value: "0",
+						content: "沉浸式覆盖",
+						image: "../static/ad/adtype1.png"
+					},
+					{
+						name: "轮播广告",
+						value: "2",
+						content: "多内容循环展示",
+						image: "../../static/ad/adtype2.png"
+					}, {
+						name: "页面嵌入广告",
+						value: "3",
+						content: "自然融入页面",
+						image: "../../static/ad/adtype3.png"
+					}, {
+						name: "弹窗广告",
+						value: "1",
+						content: "强提醒触达",
+						image: "../../static/ad/adtype4.png"
+					}
+				],
+
+				categoryFilter: [{
+					title: "广告类型",
+					filed: "type",
+					options: [{
+							id: 0,
+							label: "全部",
+							value: "",
+						},
+						{
+							id: 1,
+							label: "全屏广告",
+							value: "0",
+						},
+						{
+							id: 2,
+							label: "弹窗广告",
+							value: "1",
+						},
+						{
+							id: 3,
+							label: "轮播广告",
+							value: "2",
+						},
+						{
+							id: 4,
+							label: "嵌入商品列表广告",
+							value: "3",
+						},
+					]
+
+				}, {
+					title: "状态",
+					filed: "status",
+					options: [{
+							id: 0,
+							label: "全部",
+							value: " ",
+						},
+						{
+							id: 1,
+							label: "待审核",
+							value: "0",
+						},
+						{
+							id: 2,
+							label: "审核驳回",
+							value: "1",
+						},
+						{
+							id: 3,
+							label: "审核通过",
+							value: "2",
+						},
+						{
+							id: 4,
+							label: "未开始",
+							value: "3",
+						},
+						{
+							id: 5,
+							label: "已生效",
+							value: "4"
+						},
+						{
+							id: 6,
+							label: "已作废",
+							value: "5",
+						},
+						{
+							id: 7,
+							label: "已结束",
+							value: "6",
+						},
+					]
+
+				}, ],
+				dataList: [], //广告列表
+				userInfo: {},
+				adSlotList: [], //广告位列表
+
+			}
+		},
+		onShow() {
+			this.pageLlist(); //列表接口
+			this.queryAdSlot(); //查询广告位
+		},
+		onLoad() {
+			this.userInfo = uni.getStorageSync(USER_INFO);
+		},
+		methods: {
+			adSlotOptions(item) {
+				this.selectedOptions.positionId = item.id;
+			},
+			queryAdSlot() {
+				this.$http.get('/adPosition/queryPageList').then(res => {
+					if (res.data.code == 200) {
+						if (res.data.code == 200) {
+							res.data.result.records.unshift({
+								id: "",
+								positionName: "全部"
+							})
+							this.adSlotList = res.data.result.records
+						}
+					}
+				})
+			},
+			queryType() {
+				this.pageLlist();
+				this.categoryFilterShow = false
+
+			},
+			adTypeMap(ele) {
+				const map = {
+					0: '全屏广告',
+					1: '弹窗广告',
+					2: '轮播广告',
+					3: '页面嵌入广告',
+				}
+				return map[ele] || ''
+			},
+			statusTypeMap(ele) {
+				const map = {
+					0: '待审核',
+					1: '审核驳回',
+					2: '审核通过',
+					3: '未开始',
+					4: '已生效',
+					5: '已作废',
+					6: '已结束',
+				}
+				return map[ele] || ''
+			},
+			statusColorMap(ele) {
+				const map = {
+					0: '#E68D00',
+					1: '#F00000',
+					2: '#006DFF',
+					3: '#777777',
+					4: '#006DFF',
+					5: '#0081AB',
+					6: '#AF60FF',
+				}
+				return map[ele] || ''
+			},
+			pageLlist() {
+				this.$http.get('advert/localAdvertTask/list', {
+					params: {
+						pageNo: 1,
+						pageSize: 10,
+						adType: "1",
+						merchantId: this.userInfo.merchantId,
+						merchantName: this.userInfo.merchantName,
+						...this.selectedOptions,
+					}
+				}).then(res => {
+					if (res.data.code == '200') {
+						this.dataList = res.data.result.records
+					}
+				})
+			},
+			godetails(item) {
+				uni.navigateTo({
+					url: '/pages/adManagement/fullscreenAdDetails?info=' + JSON.stringify(item)
+				})
+			},
+			//回车搜索事件
+			search(val) {
+				this.pageLlist();
+			},
+			//搜索按钮事件
+			custom(val) {
+				this.pageLlist();
+			},
+			clear(val) {
+				this.pageLlist();
+			},
+			optionsClick(item, Filteritem) {
+				if (item.filed) {
+					this.selectedOptions[item.filed] = Filteritem.value;
+				}
+			},
+			isActive(item, Filteritem) {
+				return this.selectedOptions[item.filed] === Filteritem.value;
+			},
+			timeChange() {
+				this.$refs.datePicker.open()
+			},
+			confirmPickDate(dateStr, dateStr1) {
+				if (dateStr) {
+					dateStr += ' 00:00:00'
+				}
+				if (dateStr1) {
+					dateStr1 += ' 23:59:59'
+				}
+				this.selectedOptions.startTime = dateStr;
+				this.selectedOptions.endTime = dateStr1;
+			},
+			adTypeSelect(value) {
+				uni.navigateTo({
+					url: '/pages/adManagement/createFullscreenAd?adType=' + value
+				})
+				this.createAdShow = false
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.page {
+		background-color: #F7F8FC;
+		height: 100vh;
+	}
+
+	.search {
+		background-color: #fff;
+		padding: 14rpx 24rpx;
+		box-sizing: border-box;
+		border-bottom: 1rpx solid #eee;
+
+		image {
+			width: 36rpx;
+			height: 36rpx;
+		}
+
+		::v-deep {
+			.u-close-wrap {
+				margin-right: 70rpx;
+			}
+		}
+	}
+
+	.dataView {
+		background: #FFFFFF;
+		margin-bottom: 20rpx;
+		padding: 30rpx 24rpx;
+		box-sizing: border-box;
+		height: 100%;
+
+		.dataView-left {
+			height: 100%;
+			flex: 1;
+
+			.content {
+				height: 100%;
+
+				.title {
+					font-size: 30rpx;
+					font-weight: bold;
+					color: #000;
+					margin-bottom: 10rpx;
+				}
+
+				.tag {
+					margin-bottom: 10rpx;
+
+					text {
+						font-size: 24rpx;
+						color: #777;
+						border-right: 1rpx solid #777;
+						padding-right: 10rpx;
+						margin-right: 10rpx;
+					}
+
+					text:last-child {
+						border: none;
+					}
+
+				}
+
+				.time-tag {
+					background-color: #3C96FF;
+					padding: 3rpx 6rpx;
+					box-sizing: border-box;
+					color: #fff;
+					border-radius: 4rpx;
+					font-size: 20rpx;
+				}
+
+				.time-text {
+					font-size: 22rpx;
+					color: #8F96AC;
+				}
+			}
+
+			>image {
+				width: 160rpx;
+				height: 160rpx;
+				margin-right: 25rpx;
+				border-radius: 10rpx;
+			}
+		}
+
+		.dataView-right {
+			font-size: 24rpx;
+
+		}
+	}
+
+	.footer {
+		box-sizing: border-box;
+		padding: 17rpx 24rpx;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: #fff;
+
+		.btn {
+			box-sizing: border-box;
+			padding: 26rpx;
+			border-radius: 40rpx;
+			background-color: #4B9DFF;
+			font-size: 30rpx;
+			color: #fff;
+		}
+	}
+
+	.popup {
+		padding: 0 20rpx;
+		box-sizing: border-box;
+
+		.header {
+			padding: 28rpx;
+			box-sizing: border-box;
+			font-size: 34rpx;
+			color: #333;
+			font-weight: bold;
+			border-bottom: 1rpx solid #eee;
+		}
+	}
+
+	.createAd-content {
+		padding: 30rpx 0;
+		box-sizing: border-box;
+
+		.adimage {
+			width: 260rpx;
+			height: 143rpx;
+			border-radius: 10rpx;
+			background-size: 100% 100%;
+			margin-bottom: 20rpx;
+			padding: 0 20rpx;
+
+			text:first-child {
+				font-size: 26rpx;
+				color: #333;
+			}
+
+			text:last-child {
+				font-size: 22rpx;
+				color: #888;
+			}
+		}
+	}
+
+	.categoryFilter {
+		padding: 30rpx 0;
+		box-sizing: border-box;
+
+		.view {
+			margin-bottom: 20rpx;
+
+			.title {
+				font-size: 26rpx;
+				color: #666;
+				margin-bottom: 32rpx;
+			}
+
+			.status-options {
+				min-width: 165rpx;
+				background: #F7F8FC;
+				border-radius: 5rpx;
+				margin-bottom: 14rpx;
+				margin-right: 16rpx;
+				padding: 26rpx 28rpx;
+				box-sizing: border-box;
+				font-size: 28rpx;
+				color: #333;
+				border: 1px solid transparent;
+			}
+
+			.active {
+				background: #ECF5FF;
+				border: 1px solid #3F99FF;
+				color: #1476EA;
+			}
+
+			.time-select {
+				height: 88rpx;
+				background: #F7F8FC;
+				border-radius: 5rpx;
+				padding: 30rpx 24rpx;
+				box-sizing: border-box;
+			}
+		}
+	}
+
+	.categoryFilter-footer {
+		position: absolute;
+		bottom: 0;
+		width: 100%;
+		padding: 17rpx 24rpx;
+		box-sizing: border-box;
+		background: #fff;
+		box-shadow: 0rpx 0rpx 12rpx 1rpx rgba(225, 225, 225, 0.3);
+		font-size: 30rpx;
+
+		view:first-child {
+			width: 30%;
+			background: #FFFFFF;
+			padding: 27rpx;
+			box-sizing: border-box;
+			border-radius: 100px;
+			border: 1px solid #E5E5E5;
+			color: #888;
+		}
+
+		view:last-child {
+			width: 70%;
+			background: #4B9DFF;
+			color: #fff;
+			padding: 27rpx;
+			box-sizing: border-box;
+			border-radius: 100px;
+			margin-left: 24rpx;
+		}
+	}
+</style>

+ 996 - 0
pages/adManagement/createFullscreenAd.vue

@@ -0,0 +1,996 @@
+<template>
+	<view class="page">
+		<u-sticky :h5-nav-height="0" z-index="9099" :offset-top='0'>
+			<uni-NavBar headerTitle="全屏广告创建" background="#fff" :isSlot="false"></uni-NavBar>
+		</u-sticky>
+		<u-form :model="adForm" :rules="adrules" ref="uForm" :label-width="200"
+			style="padding: 20rpx 24rpx 135rpx;box-sizing: border-box;">
+			<view class="module">
+				<text class="module-title ">基本信息</text>
+				<u-form-item label="投放计划名称" prop="name" required>
+					<u-input v-model="adForm.name" :custom-style="{textAlign:'right'}"
+						placeholder="请输入...(最多20个字符)"></u-input>
+				</u-form-item>
+				<u-form-item label="选择广告位" prop="positionName" required :border-bottom="false">
+					<u-input v-model="adForm.positionName" type="select" :select-open="adSlotShow"
+						@click="adSlotShow=true" :custom-style="{textAlign:'right'}" placeholder="请选择"></u-input>
+				</u-form-item>
+			</view>
+			<view class="module">
+				<text class="module-title ">投放区域</text>
+				<u-form-item label="省市区" prop="district" :label-width="100" required :border-bottom="false">
+					<u-input v-model="queryTreeValue" type="select" :select-open="queryTreeShow"
+						@click="queryTreeShow=true" :custom-style="{textAlign:'right'}" placeholder="请选择"></u-input>
+				</u-form-item>
+			</view>
+			<view class="module">
+				<text class="module-title ">投放时间</text>
+				<u-form-item label="投放开始时间" required prop="startDate">
+					<u-input v-model="adForm.startDate" type="select" :select-open="startDateShow"
+						@click="startDateShow=true" :custom-style="{textAlign:'right'}" placeholder="请选择"></u-input>
+				</u-form-item>
+				<u-form-item label="投放结束时间" required prop="endDate">
+					<u-input v-model="adForm.endDate" type="select" :select-open="endDateShow" @click="endDateShow=true"
+						:custom-style="{textAlign:'right'}" placeholder="请选择"></u-input>
+				</u-form-item>
+				<view class="dis f-c ">
+					<u-form-item label="生效周期" prop="validPeriodType" required
+						:border-bottom="adForm.validPeriodType && adForm.validPeriodType!='0'? false:true">
+						<view class="dis a-c  j-end" style="width: 100%;">
+							<view class="tab-view  dis a-c  j-c"
+								:class="{'tab-view-active':adForm.validPeriodType==item.value}"
+								v-for="(item,index) in validPeriodTypeList" :key="index"
+								@click="validPeriodTypeSelect(item)">
+								<text>{{item.label}}</text>
+							</view>
+						</view>
+					</u-form-item>
+					<!-- 周期策略选择 -->
+					<u-form-item prop="validPeriodValue" :border-bottom='false'
+						v-if="adForm.validPeriodType && adForm.validPeriodType!='0'">
+						<view class="extendArea dis a-c  f-wrap" style="padding-bottom: 0;">
+							<view class="cycleStrategy dis a-c j-c" v-for="(item,index) in cycleStrategylist"
+								:key="index" :class="{ 'tcycleStrategy-active': selectedDays.includes(item.value) }"
+								@click="toggleDaySelection(item.value)">
+								<text>{{item.label}}</text>
+							</view>
+						</view>
+					</u-form-item>
+
+				</view>
+				<view class="dis f-c  ">
+					<u-form-item label="生效时段" prop="validTimeRangeType" required :border-bottom="false">
+						<view class="dis a-c  j-end" style="width: 100%;">
+							<view class="tab-view  dis a-c  j-c"
+								:class="{'tab-view-active':adForm.validTimeRangeType==item.value}"
+								v-for="(item,index) in validTimeRangeTypeList" :key="index"
+								@click="timeSegmentSelect(item)">
+								<text>{{item.label}}</text>
+							</view>
+						</view>
+					</u-form-item>
+					<view class="extendArea mb-3 " style="font-size: 26rpx;" v-if="adForm.validTimeRangeType=='1'">
+						<view class=" dis a-c j-s mb-3">
+							<text style="color: #333;">开始时间</text>
+							<view class="dis a-c" @click="timeSegmentStartShow=true">
+								<text style="color: #aaa;" class="mr-1">{{timeSegmentStart|| '请选择'}}</text>
+								<u-icon name="arrow-right" color="#979797" size="26"></u-icon>
+							</view>
+						</view>
+						<view class=" dis a-c j-s ">
+							<text style="color: #333;">开始时间</text>
+							<view class="dis a-c" @click="timeSegmentEndShow=true">
+								<text style="color: #aaa;" class="mr-1">{{timeSegmentEnd || "请选择"}}</text>
+								<u-icon name="arrow-right" color="#979797" size="26"></u-icon>
+							</view>
+						</view>
+					</view>
+				</view>
+
+			</view>
+			<view class="module">
+				<text class="module-title ">投放内容</text>
+				<!-- 图片上传 -->
+				<view class="fileUpload ">
+					<view class="tabs dis a-end" v-if="tabList.length>1">
+						<view v-for="(item, index) in tabList" :key="index" class="tab dis a-c j-c" :class="{
+				  active: fileUploadActiveTab === index,
+				  tab1: fileUploadActiveTab !== index,
+				  left: fileUploadActiveTab === 0,
+				  right: fileUploadActiveTab === 1
+				}" @click="handleTab(index,item)">
+							<view class="tabtitle">
+								<view class="">
+									{{ item.label }}
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="fileUploadView" v-if="adForm.imageType=='1'">
+						<view class="p-2" v-show="imgFileList.length>0">
+							<u-upload ref="Upload" :file-list="imgFileList" :action="action"
+								@on-list-change="onListChange" @on-success="detailsSuccess" :source-type="['album']"
+								width="150" height="150">
+							</u-upload>
+						</view>
+						<view class="default dis f-c a-c j-c " @click="triggerUpload" v-if="!imgFileList.length">
+							<image src="/static/ad/ggtp.png" mode=""></image>
+							<text class="title">请上传广告图片</text>
+							<text>
+								尺寸建议:建议图片1125*2436px,支持jpg、png格式,体积小于1Mb。因手机分辨率问题,部分机型可能图片展示不全,重要信息尽量展示在图片中部。
+							</text>
+						</view>
+
+					</view>
+					<view class="fileUploadView" v-if="adForm.imageType=='2'">
+						<view class="p-2 dis f-c " v-if="adForm.taskImage">
+							<video id="myVideo" :src="adForm.taskImage" :style="{width:'100%',height:'330rpx'}"
+								:muted="false" :enable-progress-gesture="true">
+							</video>
+							<view class="dis a-c j-end mt-2" style="width: 100%;">
+								<u-button size="medium" type="primary" plain style="margin-left: auto;"
+									@click="videoDel">删除</u-button>
+							</view>
+						</view>
+						<view class="default dis f-c a-c j-c " @click="uploadVideo" v-else>
+							<image src="/static/ad/ggsp.png" mode=""></image>
+							<text class="title">请上传广告视频</text>
+							<text>尺寸建议:画面比例9:16,支持MP4格式,时长小于等于30秒。因手机分辨率问题,部分机型可能画面展示不全,重要信息尽量展示在画面中部。</text>
+						</view>
+
+					</view>
+				</view>
+			</view>
+			<view class="module" v-if="adPricingModelList.length>0">
+				<text class="module-title">计费方式</text>
+				<u-radio-group v-model="adForm.relId" :wrap="true" active-color="#4B9DFF">
+					<view class="dis a-c j-c BillingModelView" v-for="(item, index) in adPricingModelList" :key="index">
+						<u-radio :name="item.id" label-size="26">
+							<text style="margin-right: 60rpx;">{{item.pricingName}}</text>
+							<text>{{ item.amount }} {{ item.pricingUnit }}</text>
+						</u-radio>
+					</view>
+				</u-radio-group>
+			</view>
+			<view class="module">
+				<text class="module-title ">投放频次</text>
+				<view class="deliveryFrequency dis a-c ">
+					<view class="title">每人每天展示次数</view>
+					<u-radio-group v-model="userDailyImpCount" @change="userDailyImpCountChange" active-color="#4B9DFF">
+						<u-radio name="1" label-size="26">不限</u-radio>
+						<u-radio name="2" label-size="26">限制</u-radio>
+					</u-radio-group>
+					<view class="dis a-c flex-1" v-if="userDailyImpCount=='2'">
+						<u-input v-model="adForm.userDailyDisplayLimit" :custom-style="{width:'100rpx',minHeight:'0'}"
+							placeholder="请输入"></u-input>
+						<text>次</text>
+					</view>
+
+				</view>
+				<view class="deliveryFrequency dis a-c ">
+					<view class="title">每人展示次数</view>
+					<u-radio-group v-model="userImpCount" @change="userImpCountChange" active-color="#4B9DFF">
+						<u-radio name="1" label-size="26">不限</u-radio>
+						<u-radio name="2" label-size="26">限制</u-radio>
+					</u-radio-group>
+					<view class="dis a-c flex-1" v-if="userImpCount=='2'">
+						<u-input v-model="adForm.userTotalDisplayLimit" :custom-style="{width:'50rpx',minHeight:'0'}"
+							placeholder="请输入"></u-input>
+						<text>次</text>
+					</view>
+				</view>
+				<view class="deliveryFrequency dis a-c ">
+					<view class="title">展示时间间隔</view>
+					<u-radio-group v-model="displayTimeInterval" @change="displayTimeIntervalChange"
+						active-color="#4B9DFF">
+						<u-radio name="1" label-size="26">不限</u-radio>
+						<u-radio name="2" label-size="26">限制</u-radio>
+					</u-radio-group>
+					<view class="dis a-c flex-1" v-if="displayTimeInterval=='2'">
+						<u-input v-model="adForm.showInterval" :custom-style="{width:'50rpx',minHeight:'0'}"
+							placeholder="请输入"></u-input>
+						<text>分钟</text>
+					</view>
+				</view>
+			</view>
+			<view class="module">
+				<text class="module-title ">广告预算</text>
+				<u-form-item label="广告预算" prop="adBudget" required :border-bottom="false">
+					<u-input v-model="adForm.adBudget" :custom-style="{textAlign:'right'}"></u-input>
+					<text class="ml-1">元</text>
+				</u-form-item>
+				<text class="mb-3" style="font-size: 22rpx;color: #aaa;">为保证广告正常投放,请保证余额账户有充足余额,余额不足时,广告 将自动暂停投放。</text>
+			</view>
+		</u-form>
+		<view class="footer-view">
+			<view class="dis a-c j-c " @click="submit">
+				提交审核
+			</view>
+		</view>
+		<!-- 省市区 -->
+		<u-select v-model="queryTreeShow" mode="mutil-column-auto" label-name="areaCname" value-name="areaCode"
+			child-name="child" :list="queryTreeList" @confirm="queryTreeConfirm"></u-select>
+		<!-- 广告位 -->
+		<u-select v-model="adSlotShow" mode="single-column" label-name="positionName" value-name="id" :list="adSlotList"
+			@confirm="adSlotConfirm"></u-select>
+		<!-- 投放日期 -->
+		<u-calendar v-model="startDateShow" mode="date" @change="startDateChange" max-date="2050-12-31"></u-calendar>
+		<u-calendar v-model="endDateShow" mode="date" @change="endDateChange" max-date="2050-12-31"></u-calendar>
+		<!-- 投放时间 -->
+		<u-picker v-model="timeSegmentStartShow" mode="time" :params="params"
+			@confirm="timeSegmentStartConfirm"></u-picker>
+		<u-picker v-model="timeSegmentEndShow" mode="time" :params="params" @confirm="timeSegmentEndConfirm"></u-picker>
+		<!-- 自定义加载动画 -->
+		<u-mask :show="lodingShow" style="background-color: rgba(255, 255, 255, 0.6);">
+			<view class="dis a-c j-c " style="height: 100%;">
+				<u-loading mode="circle"></u-loading>
+			</view>
+		</u-mask>
+	</view>
+</template>
+
+<script>
+	import {
+		ACCESS_TOKEN,
+		USER_INFO
+	} from '@/common/util/constants.js'
+	import configService from '@/common/service/config.service'
+	export default {
+		data() {
+			return {
+				adSlotPriceList: [], //价格列表
+				adPricingModelList: [], //计费模式列表
+				queryTreeList: [], //省市区optinos
+				adSlotList: [], //广告位options
+				queryTreeValue: "", //省市区回显
+				lodingShow: false, //loding组件
+				startDateShow: false, //开始日期选择
+				endDateShow: false, //结束日期选择
+				queryTreeShow: false, //省市区选择
+				adSlotShow: false, //广告位选择
+				timeSegmentStartShow: false, //开始时间
+				timeSegmentEndShow: false, //结果时间
+				params: {
+					year: false,
+					month: false,
+					day: false,
+					hour: true,
+					minute: true,
+					second: true
+				},
+				value: 'orange',
+				value1: "",
+				adForm: {
+					id: "",
+					name: '', //投放计划名称
+					positionId: null, //广告位id
+					positionName: "", //广告位name
+					startDate: "", //投放开始时间
+					endDate: "", //投放结束时间
+					province: "", //省
+					provinceCode: "",
+					city: "", //市
+					cityCode: "",
+					district: "", //区
+					districtCode: "",
+					street: "", //街道
+					streetCode: "",
+					validPeriodType: "", //生效周期
+					validPeriodValue: "", //周期策略
+					validTimeRangeType: "", //生效时段类型
+					validTimeRangeValue: "", //生效时段值
+					relId: "", //计费方式
+					userDailyDisplayLimit: "", //每人每天展示次数
+					userTotalDisplayLimit: "", //每人总次数
+					showInterval: "", //展示时间间隔
+					taskImage: "", //文件路径
+					imageType: "1", //文件类型
+					type: "", //广告类型
+					adBudget: "", //广告预算
+					merchantId: "", //商户id
+					merchantName: "", //商户name
+				},
+				timeSegmentStart: "", //生效时段开始
+				timeSegmentEnd: "", //生效时段结束
+				userDailyImpCount: "1",
+				userImpCount: "1",
+				displayTimeInterval: "1",
+				adrules: {
+					name: [{
+						required: true,
+						message: '请输入名称',
+						trigger: ['change', 'blur'],
+					}],
+					positionName: [{
+						required: true,
+						message: '请选择广告位',
+						trigger: ['change', 'blur'],
+					}],
+					district: [{
+						required: true,
+						message: '请选择投放区域',
+						trigger: ['change', 'blur'],
+					}],
+					startDate: [{
+						required: true,
+						message: '时间必选',
+						trigger: ['change', 'blur'],
+					}],
+					endDate: [{
+						required: true,
+						message: '时间必选',
+						trigger: ['change', 'blur'],
+					}],
+					validPeriodType: [{
+						required: true,
+						message: '生效周期必选',
+						trigger: ['blur'],
+					}],
+					validTimeRangeType: [{
+						required: true,
+						message: '生效时段必传',
+						trigger: ['blur'],
+					}],
+					adBudget: [{
+						required: true,
+						message: '广告预算必填',
+						trigger: ['blur'],
+					}],
+					taskImage: [{
+						required: true,
+						message: '投放内容必传',
+						trigger: ['change'],
+					}],
+					validPeriodValue: [{
+						required: true,
+						message: '生效周期至少选择一天',
+						trigger: ['change'],
+					}],
+				},
+				weekList: [], //周
+				monthList: [], //月
+				selectedDays: [], //周期策略选中日期
+				timeSegment: "", //生效时段
+				validTimeRangeTypeList: [{
+						label: "全天",
+						value: "0",
+					},
+					{
+						label: "指定时间段",
+						value: "1",
+					},
+				],
+				//生效周期
+				validPeriodTypeList: [{
+						label: "每天",
+						value: "0",
+					},
+					{
+						label: "每周",
+						value: "1",
+					},
+					{
+						label: "每月",
+						value: "2",
+					}
+				],
+				tabList: [],
+				fileUploadActiveTab: 0,
+				//文件回显列表
+				imgFileList: [], //图片数组
+				action: configService.apiUrl + '/sys/common/upload', //图片上传地址
+				token: "",
+				userInfo: {}
+			}
+		},
+		onShow() {},
+		async onLoad(options) {
+			if (options.type) {
+				this.adForm.type = options.adType;
+			}
+			if (options.id) {
+				this.$http.get('advert/localAdvertTask/queryById?id=' + options.id).then(res => {
+					if (res.data.code == '200') {
+						delete res.data.result.adPositionPriceRel
+						delete res.data.result.createBy;
+						delete res.data.result.createTime;
+						delete res.data.result.isDelete;
+						delete res.data.result.updateBy;
+						delete res.data.result.updateTime;
+						this.adForm = res.data.result
+						this.queryTreeValue =
+							`${this.adForm.province}-${this.adForm.city}-${this.adForm.district}-${this.adForm.street}`;
+						this.getadBillingModel();
+						this.selectedDays = this.adForm.validPeriodValue.split(',')
+						let list = this.adForm.validTimeRangeValue.split(',');
+						this.timeSegmentStart = list[0];
+						this.timeSegmentEnd = list[1];
+						let imglist = this.adForm.taskImage.split(",")
+						this.imgFileList = imglist.map(val => {
+							return {
+								url: val
+							}
+						})
+						if (this.adForm.userDailyDisplayLimit) {
+							this.userDailyImpCount = '2';
+						}
+						if (this.adForm.userTotalDisplayLimit) {
+							this.userImpCount = '2';
+						}
+						if (this.adForm.showInterval) {
+							this.displayTimeInterval = '2';
+						}
+						this.adForm.validTimeRangeType = this.adForm.validTimeRangeType + '';
+						this.adForm.validPeriodType = this.adForm.validPeriodType + '';
+						this.adForm.adBudget = this.adForm.adBudget + '';
+						console.log(this.adForm);
+					}
+				})
+			}
+			this.token = uni.getStorageSync(ACCESS_TOKEN);
+			this.userInfo = uni.getStorageSync(USER_INFO);
+			this.adForm.merchantId = this.userInfo.merchantId;
+			this.adForm.merchantName = this.userInfo.merchantName;
+			await this.queryTree(); //获取省市区数据
+			await this.queryAdSlot(); // 获取广告位数据
+			this.generateWeek();
+			this.generatemonth();
+
+		},
+		onReady() {
+			this.$refs.uForm.setRules(this.adrules);
+		},
+		computed: {
+			//区分月和周
+			cycleStrategylist() {
+				return this.adForm.validPeriodType == '1' ? this.weekList : this.monthList;
+			}
+		},
+		methods: {
+			submit() {
+				if (this.adForm.validTimeRangeType == '1' && this.timeSegmentStart && this.timeSegmentEnd) {
+					this.adForm.validTimeRangeValue = this.timeSegmentStart + "," + this.timeSegmentEnd;
+				}
+				console.log(this.adForm);
+				this.$refs.uForm.validate(valid => {
+					if (valid) {
+						if (!this.adForm.taskImage) {
+							return uni.showToast({
+								title: "素材不能为空",
+								icon: 'none'
+							})
+						}
+						if (!this.timeSegmentStart && this.timeSegmentEnd) {
+							return uni.showToast({
+								title: "生效时间段补充完整",
+								icon: 'none'
+							})
+						}
+						if (this.adForm.id) {
+							this.$http.post('advert/localAdvertTask/merchantEdit', this.adForm).then(res => {
+								if (res.data.code == '200') {
+									uni.showToast({
+										title: res.data.message,
+										icon: "none"
+									})
+									uni.navigateBack({
+										delta: 1
+									});
+								}
+							})
+						} else {
+							this.$http.post('advert/localAdvertTask/merchantAdd', this.adForm).then(res => {
+								if (res.data.code == '200') {
+									uni.showToast({
+										title: res.data.message,
+										icon: "none"
+									})
+									uni.navigateBack({
+										delta: 1
+									});
+								}
+							})
+						}
+
+					} else {
+						console.log('验证失败');
+					}
+				});
+			},
+			videoDel() {
+				this.adForm.taskImage = "";
+			},
+			//视频上传
+			async uploadVideo(type, imageIdList, imgurl) {
+				let [chooseImageErr, chooseImageRes] = await uni.chooseVideo({
+					sourceType: ['album']
+				});
+				if (chooseImageRes) {
+					uni.uploadFile({
+						url: configService.apiUrl + '/sys/common/upload',
+						name: "file",
+						file: chooseImageRes.tempFile,
+						header: {
+							Authorization: this.token,
+						},
+						success: async (Res) => {
+							let data = JSON.parse(Res.data);
+							this.adForm.taskImage = configService.apiUrl + '/' + data.message;
+							console.log(this.adForm.taskImage);
+						},
+					});
+				}
+			},
+			triggerUpload() {
+				this.$refs.Upload.selectFile(); // ref调用文件选择*****************************
+			},
+			//图片上传事件
+			detailsSuccess(res, index, lists) {
+				const fileList = lists.map((file) => {
+					if (file.response) {
+						// 拼接地址前缀
+						file.url = configService.apiUrl + '/' + file.response.message;
+					}
+					return file.url;
+				});
+				this.adForm.taskImage = fileList.join(",") //图片地址逗号拼接
+				this.imgFileList = lists;
+			},
+			//图片多选上传
+			onListChange(lists) {
+
+			},
+			handleTab(index, item) {
+				this.fileUploadActiveTab = index
+				this.adForm.imageType = item.value;
+				this.adForm.taskImage = "";
+				this.imgFileList = [];
+			},
+			getadBillingModel() {
+				this.$http.get('/adPricingPrice/queryPageList', {
+					params: {
+						adPositionId: this.adForm.positionId,
+						city: this.adForm.cityCode,
+						pageNo: 1,
+						pageSize: 1000,
+					}
+				}).then(res => {
+					if (res.data.result.records.length > 0) {
+						this.adSlotPriceList = res.data.result.records[0]?.adPositionPriceRelList;
+						this.$http.get('/adPricingModel/queryPageList', {
+							params: {
+								pageNo: 1,
+								pageSize: 1000,
+								isDelete: 0,
+							}
+						}).then(res => {
+							const pricingUnitMap = {
+								"1": "元/点击",
+								"2": "元/天",
+								"3": "元/笔销售",
+								"4": "元/千次曝光",
+							}
+							this.adPricingModelList = res.data.result.records.map(val => {
+								return {
+									adPricingModelId: val.id,
+									pricingName: val.pricingName,
+									pricingUnit: pricingUnitMap[val.pricingUnit],
+									checked: false,
+									amount: "",
+								}
+							})
+							const result = this.adPricingModelList.map(model => {
+								const matchedPrice = this.adSlotPriceList.find(price => price
+									.adPricingModelId === model.adPricingModelId);
+								return {
+									...model,
+									amount: matchedPrice ? matchedPrice.amount : model.amount,
+									checked: false,
+									id: matchedPrice?.id,
+								};
+							}).filter(val => val.amount)
+							this.adPricingModelList = result;
+						})
+					} else {
+						uni.showToast({
+							icon: "none",
+							title: "该区域暂无计费模式相关配置"
+						})
+					}
+
+				})
+			},
+			queryAdSlot() {
+				this.$http.get('/adPosition/queryPageList').then(res => {
+					if (res.data.code == 200) {
+						if (res.data.code == 200) {
+							this.adSlotList = res.data.result.records
+							console.log(res.data.result);
+						}
+					}
+				})
+			},
+			queryTree() {
+				this.lodingShow = true;
+				this.$http.post('/sys/area/queryTree').then(res => {
+					if (res.data.code == 200) {
+						console.log(res);
+						this.queryTreeList = res.data.result
+						this.lodingShow = false;
+					}
+				})
+			},
+			//省市区选择事件
+			queryTreeConfirm(value) {
+				this.queryTreeValue = `${value[0].label}-${value[1].label}-${value[2].label}-${value[3].label}`
+				this.adForm.provinceCode = value[0].value;
+				this.adForm.cityCode = value[1].value;
+				this.adForm.districtCode = value[2].value;
+				this.adForm.streetCode = value[3].value;
+				this.adForm.province = value[0].label;
+				this.adForm.city = value[1].label;
+				this.adForm.district = value[2].label;
+				this.adForm.street = value[3].label;
+				this.getadBillingModel() //获取计费方式
+			},
+			//广告位选择后续操作
+			adSlotConfirm(value) {
+				let info = this.adSlotList.find(val => val.id == value[0].value).supportMaterial.split(','); //获取投放内容类型
+				if (info.length > 1) {
+					this.tabList = info.map(val => {
+						return {
+							label: val == 1 ? '图片' : '视频',
+							value: val
+						}
+					})
+
+				} else {
+					this.tabList = [];
+				}
+				this.adForm.imageType = info[0];
+				this.adForm.positionId = value[0].value;
+				this.adForm.positionName = value[0].label;
+			},
+			//日期选择
+			startDateChange(e) {
+				this.adForm.startDate = e.result + " 00:00:00"
+			},
+			endDateChange(e) {
+				this.adForm.endDate = e.result + " 23:59:59"
+			},
+			// 时间选择
+			timeSegmentStartConfirm(value) {
+				this.timeSegmentStart = `${value.hour}:${value.minute}:${value.second}`
+			},
+			timeSegmentEndConfirm(value) {
+				this.timeSegmentEnd = `${value.hour}:${value.minute}:${value.second}`
+			},
+			userDailyImpCountChange(value) {
+				if (value == 1) {
+					this.adForm.userDailyDisplayLimit = ' ';
+				} else {
+					this.adForm.userDailyDisplayLimit = '';
+				}
+			},
+			userImpCountChange(value) {
+				if (value == 1) {
+					this.adForm.userTotalDisplayLimit = ' ';
+				} else {
+					this.adForm.userTotalDisplayLimit = '';
+				}
+			},
+			displayTimeIntervalChange(value) {
+				if (value == 1) {
+					this.adForm.showInterval = ' ';
+				} else {
+					this.adForm.showInterval = '';
+				}
+			},
+			//周列表
+			generateWeek() {
+				const weekList = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'].map((val, index) => {
+					return {
+						label: val,
+						value: (index + 1).toString()
+					}
+				})
+				this.weekList = weekList;
+			},
+			// 月列表
+			generatemonth() {
+				const monthList = Array.from({
+					length: 31
+				}, (_, index) => {
+					const value = (index + 1).toString();
+					return {
+						label: value,
+						value
+					};
+				});
+				this.monthList = monthList;
+			},
+			// 周期策略选择
+			toggleDaySelection(dayValue) {
+				const index = this.selectedDays.indexOf(dayValue);
+				if (index > -1) {
+					// 如果找到,移除该元素
+					this.selectedDays.splice(index, 1);
+				} else {
+					// 如果未找到,添加该元素
+					this.selectedDays.push(dayValue);
+				}
+				this.adForm.validPeriodValue = this.selectedDays.join(',')
+			},
+			//生效周期选择
+			validPeriodTypeSelect(item) {
+				this.adForm.validPeriodType = item.value
+				this.selectedDays = [];
+
+			},
+			timeSegmentSelect(item) {
+				this.adForm.validTimeRangeType = item.value
+				if (item.value == 0) {
+					this.adForm.validTimeRangeValue = "00:00:00,23:59:59"
+				} else {
+					this.adForm.validTimeRangeValue = "";
+					this.timeSegmentStart = "";
+					this.timeSegmentEnd = "";
+				}
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.page {
+		background-color: #F7F8FC;
+	}
+
+	.module {
+		width: 100%;
+		background: #FFFFFF;
+		border-radius: 10rpx;
+		padding: 30rpx 30rpx 0;
+		box-sizing: border-box;
+		margin-bottom: 20rpx;
+		display: flex;
+		flex-direction: column;
+
+		.module-title {
+			font-size: 34rpx;
+			color: #333;
+			font-weight: bold;
+
+		}
+
+		.tab-view {
+			background: #FFFFFF;
+			border-radius: 10rpx;
+			border: 1px solid #E5E5E5;
+			font-size: 26rpx;
+			color: #333;
+			padding: 10rpx 32rpx;
+			box-sizing: border-box;
+			margin-left: 20rpx;
+
+			text {
+				line-height: 1;
+			}
+		}
+
+		.tab-view-active {
+			background: #E0EDFF;
+			color: #006DFF;
+			border: 1rpx solid #E0EDFF;
+		}
+
+		.extendArea {
+			padding: 20rpx 20rpx;
+			box-sizing: border-box;
+			background: #F6F8FC;
+			border-radius: 10rpx;
+		}
+
+		.cycleStrategy {
+			min-width: 100rpx;
+			background: #FFFFFF;
+			border-radius: 10rpx;
+			border: 1px solid #E5E5E5;
+			font-size: 26rpx;
+			color: #333;
+			padding: 10rpx 32rpx;
+			box-sizing: border-box;
+			margin-left: 20rpx;
+			margin-bottom: 20rpx;
+
+			text {
+				line-height: 1;
+			}
+		}
+
+		.tcycleStrategy-active {
+			background: #E0EDFF;
+			color: #006DFF;
+			border: 1rpx solid #E0EDFF;
+		}
+
+		//计费模式
+		.BillingModelView {
+			width: 100%;
+			border-bottom: 1rpx solid #eee;
+			padding: 32rpx 0;
+			box-sizing: border-box;
+
+		}
+
+		.deliveryFrequency {
+			padding: 32rpx 0;
+			box-sizing: border-box;
+			border-bottom: 1rpx solid #eee;
+
+			.title {
+				font-size: 26rpx;
+				color: #333;
+				width: 250rpx;
+			}
+		}
+
+		.deliveryFrequency:last-child {
+			border-bottom: none;
+		}
+	}
+
+	::v-deep {
+		.u-radio__label {
+			color: #333;
+		}
+
+		// 图片上传预览视图层级提升
+
+	}
+
+	.uni-system-preview-image {
+		background: #4B9DFF !important;
+		z-index: 9999 !important;
+	}
+
+	.footer-view {
+		z-index: 99;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: #fff;
+		padding: 17rpx 24rpx;
+		box-sizing: border-box;
+		box-shadow: 0rpx 0rpx 12rpx 1rpx rgba(225, 225, 225, 0.3);
+
+		>view {
+			width: 100%;
+			padding: 26rpx;
+			box-sizing: border-box;
+			background: #4B9DFF;
+			border-radius: 40rpx;
+			font-size: 30rpx;
+			color: #fff;
+		}
+	}
+
+	.fileUpload {
+		position: relative;
+		width: 100%;
+		margin: 0 auto;
+		box-sizing: border-box;
+		border-radius: 0px 10rpx 10rpx 10rpx;
+		margin: 30rpx 0;
+
+		.tabs {
+			display: flex;
+			position: relative;
+			overflow: hidden;
+			border-radius: 10rpx 10rpx 0 0;
+		}
+
+		.tab {
+			flex: 1;
+			height: 70rpx;
+			color: #333;
+			font-size: 30rpx;
+			position: relative;
+			border-top-right-radius: 10rpx;
+			border-top-left-radius: 10rpx;
+
+
+			&.active {
+				background: #F6F8FC;
+				color: #006DFF;
+				font-size: 30rpx;
+				border-top-right-radius: 10rpx;
+				border-top-left-radius: 10rpx;
+			}
+
+
+			&.left.active {
+				border-top-right-radius: 0;
+
+				&::after {
+					content: "";
+					position: absolute;
+					top: 0;
+					right: -50px;
+					height: 100%;
+					width: 50px;
+					z-index: 2;
+					background-color: #F6F8FC;
+					clip-path: path("M0 0 C13.5 0 13.5 25 25 45 L0 50 Z");
+
+				}
+			}
+
+			// 右侧标签的曲线
+			&.right.active {
+				border-top-left-radius: 0;
+
+				&::before {
+					content: "";
+					position: absolute;
+					top: 0;
+					left: -49px;
+					height: 100%;
+					width: 50px;
+					z-index: 2;
+					background-color: #F6F8FC;
+					clip-path: path("M50 0 C37.5 0 37.5 25 25 45 L50 50 Z");
+				}
+			}
+		}
+
+		.tab1 {
+			flex: 1;
+			height: 70rpx;
+			position: relative;
+			border-top-right-radius: 10rpx;
+			border-top-left-radius: 10rpx;
+			background-color: #EBF2FA;
+		}
+
+		// 文件区域样式
+
+		.tabtitle {
+			position: relative;
+			z-index: 1; // 父级降低层级
+			font-size: 28rpx;
+		}
+	}
+
+	.fileUploadView {
+		width: 100%;
+		background-color: #F6F8FC;
+		border-radius: 10rpx 10rpx 10rpx 10rpx;
+		min-height: 330rpx;
+
+		.default {
+			min-height: 330rpx;
+			padding: 30rpx 40rpx;
+			box-sizing: border-box;
+
+			image {
+				width: 83rpx;
+				height: 74rpx;
+			}
+
+			text {
+				font-size: 26rpx;
+				color: #333;
+			}
+
+			.title {
+				margin: 15rpx 0 40rpx;
+			}
+
+			text:last-child {
+				font-size: 22rpx;
+				color: #aaa;
+			}
+		}
+	}
+</style>

+ 573 - 0
pages/adManagement/fullscreenAdDetails.vue

@@ -0,0 +1,573 @@
+<template>
+	<view class="page">
+		<u-sticky :h5-nav-height="0" z-index="9099" :offset-top='0'>
+			<uni-NavBar headerTitle="全屏广告详情" background="#fff" :isSlot="false"></uni-NavBar>
+			<view class="status-message dis a-c " :style="{background:detailsInfo.styleCOlor.backcolor}">
+				<text>{{adTypeMap}}</text>
+				<view class="status"
+					:style="{background:detailsInfo.styleCOlor.backcolor1,color:detailsInfo.styleCOlor.color}">
+					{{statusTypeMap}}
+				</view>
+				<text class="error" v-if="detailsInfo.status=='1'" @click="rejectReasonShow=true">查看驳回原因</text>
+			</view>
+		</u-sticky>
+		<view class="body">
+			<view class="module dis f-c ">
+				<text class="module-title ">基本信息</text>
+				<view class="views dis a-c j-s ">
+					<text>投放计划名称</text>
+					<text>{{detailsInfo.name}}</text>
+				</view>
+				<view class="views dis a-c j-s ">
+					<text>位置名称</text>
+					<text>{{detailsInfo.positionName}}</text>
+				</view>
+				<view class="views dis a-c j-s ">
+					<text>广告类型</text>
+					<text>{{adTypeMap}}</text>
+				</view>
+			</view>
+			<view class="module dis f-c ">
+				<text class="module-title ">投放区域</text>
+				<text
+					class="address">{{detailsInfo.province}}-{{detailsInfo.city}}-{{detailsInfo.district}}-{{detailsInfo.street}}</text>
+			</view>
+			<view class="module dis f-c ">
+				<text class="module-title ">投放时间</text>
+				<view class="views dis a-c j-s ">
+					<text>投放开始日期</text>
+					<text>{{detailsInfo.startDate}}</text>
+				</view>
+				<view class="views dis a-c j-s ">
+					<text>投放结束日期</text>
+					<text>{{detailsInfo.endDate}}</text>
+				</view>
+				<view class="views dis a-c j-s ">
+					<text>生效周期</text>
+					<text>{{detailsInfo.validPeriodType==0?'每天':detailsInfo.validPeriodType==1 ? '每周':'每月'}}</text>
+				</view>
+				<view class="extendArea dis a-c  f-wrap mt-2" style="padding-bottom: 0;"
+					v-if="detailsInfo.validPeriodType!='0'">
+					<view class="cycleStrategy dis a-c j-c" v-for="(item,index) in cycleStrategylist" :key="index"
+						:class="{ 'tcycleStrategy-active': selectedDays.includes(item.value) }">
+						<text>{{item.label}}</text>
+					</view>
+				</view>
+				<view class="views dis a-c j-s ">
+					<text>生效时段</text>
+					<text>{{detailsInfo.validTimeRangeType==0?'全天':'指定时间段'}}</text>
+				</view>
+				<view class="extendArea  mt-2" style="font-size: 26rpx;" v-if="detailsInfo.validTimeRangeType=='1'">
+					<view class=" dis a-c j-s mb-3">
+						<text style="color: #333;">开始时间</text>
+						<text style="color: #aaa;" class="mr-1">{{timeSegmentStart}}</text>
+					</view>
+					<view class=" dis a-c j-s ">
+						<text style="color: #333;">开始时间</text>
+						<text style="color: #aaa;" class="mr-1">{{timeSegmentEnd }}</text>
+					</view>
+				</view>
+			</view>
+			<view class="module dis f-c ">
+				<text class="module-title ">投放内容</text>
+				<view class="admaterial mt-3 ">
+					<u-swiper :list="imagelist" mode="number" indicator-pos="bottomRight" height="330"
+						v-if="detailsInfo.imageType=='1'"></u-swiper>
+					<video v-else id="myVideo" :src="detailsInfo.taskImage"
+						:style="{height:'330rpx',width:'100%',borderRadius:'10rpx'}" :muted="false"
+						:enable-progress-gesture="true">
+					</video>
+				</view>
+			</view>
+			<view class="module dis f-c ">
+				<text class="module-title ">计费方式</text>
+				<view class="views dis a-c j-s " v-for="(item,index) in adPricingModelList" :key="index">
+					<text>{{item.pricingName}}</text>
+					<text>{{item.amount}} {{item.pricingUnit}}</text>
+				</view>
+			</view>
+			<view class="module dis f-c ">
+				<text class="module-title ">投放频次</text>
+				<view class="views dis a-c j-s ">
+					<text>每人每天展示次数</text>
+					<text>{{detailsInfo.userDailyDisplayLimit || '不限'}}次</text>
+				</view>
+				<view class="views dis a-c j-s ">
+					<text>每人展示总次数</text>
+					<text>{{detailsInfo.userTotalDisplayLimit || '不限'}}次</text>
+				</view>
+				<view class="views dis a-c j-s ">
+					<text>展示时间间隔</text>
+					<text>{{detailsInfo.showInterval || '不限'}}分钟</text>
+				</view>
+
+			</view>
+			<view class="module dis f-c ">
+				<text class="module-title ">广告预算</text>
+				<view class="views dis a-c j-s">
+					<text>广告预算</text>
+					<text>{{detailsInfo.adBudget}}元</text>
+				</view>
+			</view>
+		</view>
+		<view class="footer-view dis a-c j-s ">
+			<view class="dis a-c j-c " @click="adEdit">
+				编辑
+			</view>
+			<view class="dis a-c j-c " @click="delShow=true">
+				作废
+			</view>
+		</view>
+		<u-popup v-model="rejectReasonShow" mode="center" width="580rpx" :closeable="false" border-radius="20">
+			<view class="popup">
+				<view class="header dis a-c j-c ">
+					<text>驳回原因</text>
+				</view>
+				<view class="content dis f-c  a-c ">
+					{{detailsInfo.rejectReason}}
+				</view>
+			</view>
+			<view class="popup-footer dis a-c j-s">
+				<view class="dis a-c j-c" @click="rejectReasonShow=false">
+					我知道了
+				</view>
+				<view class="dis a-c j-c" @click="adEdit">
+					去修改
+				</view>
+			</view>
+		</u-popup>
+		<u-popup v-model="delShow" mode="center" width="580rpx" :closeable="false" border-radius="20">
+			<view class="popup">
+				<view class="header dis a-c j-c ">
+					<text>提示</text>
+				</view>
+				<view class="content dis f-c  a-c ">
+					<text class="title mb-3">是否将此广告作废?</text>
+					<text>广告一旦作废将无法使用,只能重新 投放新广告哦~</text>
+				</view>
+			</view>
+			<view class="popup-footer dis a-c j-s">
+				<view class="dis a-c j-c" @click="delShow=false">
+					取消
+				</view>
+				<view class="dis a-c j-c" @click="markAsInvalid">
+					确定
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				rejectReasonShow: false, //驳回弹窗
+				delShow: false, //作废弹窗
+				timeSegmentStart: "", //生效开始时间
+				timeSegmentEnd: "", //生效结束时间
+				imagelist: [], //图片回显列表
+				colorList: [{
+						id: 0,
+						color: "rgba(230, 141, 0, 1)",
+						backcolor: "rgba(230, 141, 0, 0.1)",
+						backcolor1: "rgba(230, 141, 0, 0.2)",
+					},
+					{
+						id: 1,
+						color: "rgba(255, 19, 19, 1)",
+						backcolor: "rgba(255, 19, 19, 0.1)",
+						backcolor1: "rgba(255, 19, 19, 0.2)",
+					},
+					{
+						id: 2,
+						color: "rgba(100, 166, 255, 1)",
+						backcolor: "rgba(100, 166, 255, 0.1)",
+						backcolor1: "rgba(100, 166, 255, 0.2)",
+					},
+					{
+						id: 3,
+						color: "rgba(119, 119, 120, 1)",
+						backcolor: "rgba(119, 119, 120, 0.1)",
+						backcolor1: "rgba(119, 119, 120, 0.2)",
+					},
+					{
+						id: 4,
+						color: "rgba(100, 166, 255, 1)",
+						backcolor: "rgba(100, 166, 255, 0.1)",
+						backcolor1: "rgba(100, 166, 255, 0.2)",
+					},
+					{
+						id: 5,
+						color: "rgba(0, 129, 171, 1)",
+						backcolor: "rgba(0, 129, 171, 0.1)",
+						backcolor1: "rgba(0, 129, 171, 0.2)",
+					},
+					{
+						id: 6,
+						color: "rgba(175, 96, 255, 1)",
+						backcolor: "rgba(175, 96, 255, 0.1)",
+						backcolor1: "rgba(175, 96, 255, 0.2)",
+					}
+				],
+				detailsInfo: {}, //详情数据
+				weekList: [], //周
+				monthList: [], //月
+				selectedDays: [], //周期策略选中日期
+				adPricingModelList: [], //计费模式列表
+				adSlotPriceList: [], //广告位价格列表
+			}
+		},
+		onShow() {
+
+		},
+		computed: {
+
+			//区分月和周
+			cycleStrategylist() {
+				return this.detailsInfo.validPeriodType == '1' ? this.weekList : this.monthList;
+			},
+			//广告类型
+			adTypeMap() {
+				const map = {
+					0: '全屏广告',
+					1: '弹窗广告',
+					2: '轮播广告',
+					3: '页面嵌入广告',
+				}
+				return map[this.detailsInfo.type] || ''
+			},
+			//状态
+			statusTypeMap() {
+				const map = {
+					0: '待审核',
+					1: '审核驳回',
+					2: '审核通过',
+					3: '未开始',
+					4: '已生效',
+					5: '已作废',
+					6: '已结束',
+				}
+				return map[this.detailsInfo.status] || ''
+			}
+		},
+		async onLoad(options) {
+			this.generateWeek();
+			this.generatemonth();
+			this.detailsInfo = JSON.parse(options.info);
+			this.colorList.map(val => {
+				if (val.id == this.detailsInfo.status) {
+					this.detailsInfo.styleCOlor = val;
+				}
+				return val;
+			})
+			await this.getadBillingModel();
+			this.imagelist = this.detailsInfo.taskImage.split(',');
+			this.selectedDays = this.detailsInfo.validPeriodValue.split(',');
+			let list = this.detailsInfo.validTimeRangeValue.split(',');
+			this.timeSegmentStart = list[0];
+			this.timeSegmentEnd = list[1];
+			console.log(this.detailsInfo);
+		},
+		methods: {
+			adEdit() {
+				uni.navigateTo({
+					url: '/pages/adManagement/createFullscreenAd?id=' + this.detailsInfo.id,
+				})
+			},
+			//作废操作
+			markAsInvalid() {
+				this.$http.delete('advert/localAdvertTask/cancelDispatch?id=' + this.detailsInfo.id).then(res => {
+					if (res.data.code == 200) {
+						uni.navigateBack({
+							delta: 1
+						});
+					}
+				})
+			},
+			//获取计费模式
+			getadBillingModel() {
+				this.$http.get('/adPricingPrice/queryPageList', {
+					params: {
+						adPositionId: this.detailsInfo.positionId,
+						city: this.detailsInfo.cityCode,
+						pageNo: 1,
+						pageSize: 1000,
+					}
+				}).then(res => {
+					if (res.data.result.records.length > 0) {
+						this.adSlotPriceList = res.data.result.records[0]?.adPositionPriceRelList;
+						this.$http.get('/adPricingModel/queryPageList', {
+							params: {
+								pageNo: 1,
+								pageSize: 1000,
+								isDelete: 0,
+							}
+						}).then(res => {
+							const pricingUnitMap = {
+								"1": "元/点击",
+								"2": "元/天",
+								"3": "元/笔销售",
+								"4": "元/千次曝光",
+							}
+							this.adPricingModelList = res.data.result.records.map(val => {
+								return {
+									adPricingModelId: val.id,
+									pricingName: val.pricingName,
+									pricingUnit: pricingUnitMap[val.pricingUnit],
+									checked: false,
+									amount: "",
+								}
+							})
+							const result = this.adPricingModelList.map(model => {
+								const matchedPrice = this.adSlotPriceList.find(price => price
+									.adPricingModelId === model.adPricingModelId);
+								return {
+									...model,
+									amount: matchedPrice ? matchedPrice.amount : model.amount,
+									checked: false,
+									id: matchedPrice?.id,
+								};
+							}).filter(val => val.amount).filter(val => val.id == this.detailsInfo
+								.relId)
+							this.adPricingModelList = result;
+							console.log(this.adPricingModelList);
+						})
+					} else {
+						uni.showToast({
+							icon: "none",
+							title: "该区域暂无计费模式相关配置"
+						})
+					}
+
+				})
+			},
+			//周列表
+			generateWeek() {
+				const weekList = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'].map((val, index) => {
+					return {
+						label: val,
+						value: (index + 1).toString()
+					}
+				})
+				this.weekList = weekList;
+			},
+			// 月列表
+			generatemonth() {
+				const monthList = Array.from({
+					length: 31
+				}, (_, index) => {
+					const value = (index + 1).toString();
+					return {
+						label: value,
+						value
+					};
+				});
+				this.monthList = monthList;
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	::v-deep {
+		.u-sticky {
+			background-color: #fff;
+		}
+	}
+
+	.page {
+		background-color: #F7F8FC;
+
+	}
+
+	.body {
+		padding: 0 24rpx 154rpx;
+		box-sizing: border-box;
+	}
+
+	.status-message {
+		z-index: 9999;
+		padding: 13rpx 24rpx;
+		box-sizing: border-box;
+
+		text {
+			font-size: 26rpx;
+			color: #333;
+		}
+
+		.status {
+			border-radius: 10rpx;
+			margin-left: 27rpx;
+			padding: 10rpx 20rpx;
+			box-sizing: border-box;
+			font-size: 26rpx;
+			font-weight: bold;
+			line-height: 1;
+		}
+
+		.error {
+			margin-left: auto;
+			color: #F00000;
+		}
+	}
+
+	.module {
+		padding: 30rpx 20rpx;
+		box-sizing: border-box;
+		margin-top: 20rpx;
+		background-color: #fff;
+		border-radius: 10rpx;
+
+		.module-title {
+			font-size: 34rpx;
+			color: #333;
+			font-weight: bold;
+		}
+
+		.views {
+			margin-top: 30rpx;
+
+			text:first-child {
+				font-size: 26rpx;
+				color: #666;
+			}
+
+			text:last-child {
+				font-size: 26rpx;
+				color: #333;
+			}
+		}
+
+		.address {
+			margin-top: 30rpx;
+			font-size: 26rpx;
+			color: #666;
+		}
+
+		.admaterial {
+			border-radius: 10rpx;
+		}
+	}
+
+	.footer-view {
+		z-index: 99;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: #fff;
+		padding: 17rpx 24rpx;
+		box-sizing: border-box;
+		box-shadow: 0rpx 0rpx 12rpx 1rpx rgba(225, 225, 225, 0.3);
+
+		>view {
+			width: 50%;
+			padding: 26rpx;
+			box-sizing: border-box;
+			border-radius: 100rpx;
+			font-size: 30rpx;
+		}
+
+		:first-child {
+			background: #fff;
+			color: #888;
+			border: 1px solid #E5E5E5;
+			margin-right: 20rpx;
+		}
+
+		:last-child {
+			background: #4B9DFF;
+			color: #fff;
+		}
+	}
+
+	.extendArea {
+		padding: 20rpx 20rpx;
+		box-sizing: border-box;
+		background: #F6F8FC;
+		border-radius: 10rpx;
+	}
+
+	.cycleStrategy {
+		min-width: 100rpx;
+		background: #FFFFFF;
+		border-radius: 10rpx;
+		border: 1px solid #E5E5E5;
+		font-size: 26rpx;
+		color: #333;
+		padding: 10rpx 32rpx;
+		box-sizing: border-box;
+		margin-left: 20rpx;
+		margin-bottom: 20rpx;
+
+		text {
+			line-height: 1;
+		}
+	}
+
+	.tcycleStrategy-active {
+		background: #E0EDFF;
+		color: #006DFF;
+		border: 1rpx solid #E0EDFF;
+	}
+
+	.popup {
+		padding: 0 20rpx;
+		box-sizing: border-box;
+
+		.header {
+			padding: 28rpx;
+			box-sizing: border-box;
+			font-size: 34rpx;
+			color: #333;
+			font-weight: bold;
+			border-bottom: 1rpx solid #eee;
+		}
+
+		.content {
+			min-height: 350rpx;
+			font-size: 26rpx;
+			color: #888;
+			padding: 50rpx;
+			box-sizing: border-box;
+
+			.title {
+				font-size: 32rpx;
+				color: #333;
+				font-weight: bold;
+			}
+		}
+	}
+
+	.popup-footer {
+		position: absolute;
+		bottom: 0;
+		width: 100%;
+		padding: 17rpx 24rpx;
+		box-sizing: border-box;
+		background: #fff;
+		box-shadow: 0rpx 0rpx 12rpx 1rpx rgba(225, 225, 225, 0.3);
+		font-size: 30rpx;
+
+		view:first-child {
+			width: 50%;
+			background: #FFFFFF;
+			padding: 20rpx;
+			box-sizing: border-box;
+			border-radius: 100px;
+			border: 1px solid #E5E5E5;
+			color: #888;
+		}
+
+		view:last-child {
+			width: 50%;
+			background: #4B9DFF;
+			color: #fff;
+			padding: 20rpx;
+			box-sizing: border-box;
+			border-radius: 100px;
+			margin-left: 24rpx;
+		}
+	}
+</style>

+ 35 - 17
plugin/colorui/main.css

@@ -155,13 +155,15 @@ checkbox .wx-checkbox-input,
 radio .uni-radio-input,
 checkbox .uni-checkbox-input {
 	margin: 0;
-	transform:rotate(0.5)
-	/* width: 24upx;
+	transform: rotate(0.5)
+		/* width: 24upx;
 	height: 24upx; */
 }
-checkbox .uni-checkbox::befor{
+
+checkbox .uni-checkbox::befor {
 	font-size: 30upx;
 }
+
 checkbox.round .wx-checkbox-input,
 checkbox.round .uni-checkbox-input {
 	border-radius: 100upx;
@@ -290,16 +292,19 @@ radio.red.checked .uni-radio-input {
 	border-color: #e54d42 !important;
 	color: #ffffff !important;
 }
+
 radio .uni-radio-input {
 	width: 26upx;
-    height: 26upx;
+	height: 26upx;
 }
-radio::before{
+
+radio::before {
 	right: 0;
 	font-size: 20upx;
 	width: 26upx;
 
 }
+
 switch.orange[checked] .wx-switch-input,
 checkbox.orange[checked] .wx-checkbox-input,
 radio.orange[checked] .wx-radio-input,
@@ -1876,7 +1881,6 @@ button.cuIcon.lg {
 	font-size: 36upx;
 	display: block;
 	position: relative;
-	border-bottom: 1px solid #EEEEEE;
 }
 
 .cu-custom .cu-bar .content {
@@ -2346,6 +2350,7 @@ button.cuIcon.lg {
 .cu-form-group+.cu-form-group {
 	border-bottom: 1upx solid #eee;
 }
+
 .cu-form-group .title {
 	text-align: justify;
 	padding-right: 30upx;
@@ -2354,13 +2359,15 @@ button.cuIcon.lg {
 	height: 60upx;
 	line-height: 60upx;
 }
-.text-bg{
-    display: block;
-    width: 108rpx;
-    height: 5rpx;
-    background: linear-gradient( 90deg, #88BFFF 0%, #449AFF 100%);
-    border-radius: 4px 4px 4px 4px;
+
+.text-bg {
+	display: block;
+	width: 108rpx;
+	height: 5rpx;
+	background: linear-gradient(90deg, #88BFFF 0%, #449AFF 100%);
+	border-radius: 4px 4px 4px 4px;
 }
+
 .cu-form-group input {
 	flex: 1;
 	font-size: 30upx;
@@ -2522,11 +2529,13 @@ button.cuIcon.lg {
 .cu-modal.drawer-modal.show .cu-dialog {
 	transform: translateX(0%);
 }
-.cu-modal .cu-dialog>.cu-bar:first-child .action{
-  min-width: 100rpx;
-  margin-right: 0;
-  min-height: 100rpx;
+
+.cu-modal .cu-dialog>.cu-bar:first-child .action {
+	min-width: 100rpx;
+	margin-right: 0;
+	min-height: 100rpx;
 }
+
 /* ==================
          轮播
  ==================== */
@@ -2956,11 +2965,13 @@ scroll-view.cu-steps .cu-item {
 	position: relative;
 	overflow: hidden;
 }
+
 .grid.grid-square>view.bg-img image {
 	width: 100%;
 	height: 100%;
 	position: absolute;
 }
+
 .grid.col-1.grid-square>view {
 	padding-bottom: 100%;
 	height: 0;
@@ -3055,9 +3066,11 @@ scroll-view.cu-steps .cu-item {
 .margin-top {
 	margin-top: 30upx;
 }
+
 .margin-top1 {
 	margin-top: 26upx;
 }
+
 .margin-top-lg {
 	margin-top: 40upx;
 }
@@ -3433,10 +3446,12 @@ scroll-view.cu-steps .cu-item {
 	background-color: #e54d42;
 	color: #ffffff;
 }
+
 .bg-fff {
 	background-color: #ffffff;
 
 }
+
 .bg-orange {
 	background-color: #f37b1d;
 	color: #ffffff;
@@ -3606,9 +3621,11 @@ scroll-view.cu-steps .cu-item {
 	background-image: linear-gradient(45deg, #0081ff, #1cbbb4);
 	color: #ffffff;
 }
+
 .bg-gradual-blue1 {
-	background: linear-gradient( 180deg, #D6E9FF 0%, #FFFFFF 100%);
+	background: linear-gradient(180deg, #D6E9FF 0%, #FFFFFF 100%);
 }
+
 .shadow[class*="-red"] {
 	box-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2);
 }
@@ -3836,6 +3853,7 @@ scroll-view.cu-steps .cu-item {
 	font-size: 30upx;
 	font-weight: bold;
 }
+
 .text-center {
 	text-align: center;
 }

BIN
static/ad/adtype1.png


BIN
static/ad/adtype2.png


BIN
static/ad/adtype3.png


BIN
static/ad/adtype4.png


BIN
static/ad/createAd.png


BIN
static/ad/ggsp.png


BIN
static/ad/ggtp.png


BIN
static/icon/backAction.png


Разница между файлами не показана из-за своего большого размера
+ 642 - 0
static/index.css


BIN
static/index/ad.png


+ 1217 - 0
style/zcm-main.css

@@ -0,0 +1,1217 @@
+/* 防止图片闪一下 */
+image {
+	will-change: transform
+}
+
+/* scroll-view */
+.scroll-row {
+	width: 100%;
+	white-space: nowrap;
+}
+
+.scroll-row-item {
+	display: inline-block;
+}
+
+.box-sizing {
+	box-sizing: border-box
+}
+
+.dis {
+	display: flex;
+}
+
+.j-s {
+	justify-content: space-between;
+}
+
+.j-c {
+	justify-content: center;
+}
+
+.j-start {
+	justify-content: flex-start;
+}
+
+.j-end {
+	justify-content: flex-end;
+}
+
+.a-c {
+	align-items: center;
+}
+
+.a-start {
+	align-items: flex-start;
+}
+
+.a-end {
+	align-items: flex-end;
+}
+
+.f-c {
+	flex-direction: column;
+}
+
+.f-wrap {
+	flex-wrap: wrap;
+}
+
+.p-1 {
+	padding: 10px;
+}
+
+.p-2 {
+	padding: 20px;
+}
+
+.m-top-10 {
+	margin-top: 10px;
+}
+
+.m-top-15 {
+	margin-top: 10px;
+}
+
+.m-btn-10 {
+	margin-bottom: 10px;
+}
+
+.m-btn-15 {
+	margin-bottom: 15px;
+}
+
+body {
+	--primary: #007bff;
+	--secondary: #6c757d;
+	--success: #28a745;
+	--danger: #dc3545;
+	--warning: #ffc107;
+	--info: #17a2b8;
+	--light: #f8f9fa;
+	--dark: #343a40;
+	--muted: #6c757d;
+	--white: #fff;
+	--borderColor: #dee2e6;
+	--lightmuted: #B2B2B2;
+}
+
+/* 阴影 */
+.shadow-sm {
+	box-shadow: 0 2upx 4upx rgba(114, 130, 138, 0.2) !important;
+}
+
+.shadow {
+	box-shadow: 0 8upx 16upx rgba(114, 130, 138, 0.2) !important;
+}
+
+.shadow-lg {
+	box-shadow: 0 16upx 48upx rgba(114, 130, 138, 0.2) !important;
+}
+
+/* 定位 */
+.position-absolute {
+	position: absolute;
+}
+
+.position-fixed {
+	position: fixed;
+}
+
+.position-relative {
+	position: relative;
+}
+
+.left-0 {
+	left: 0;
+}
+
+.top-0 {
+	top: 0;
+}
+
+.bottom-0 {
+	bottom: 0;
+}
+
+.right-0 {
+	right: 0;
+}
+
+/* 宽高 */
+.w-100 {
+	width: 100%;
+}
+
+.w-50 {
+	width: 50%;
+}
+
+.h-100 {
+	height: 1250upx;
+}
+
+.h-50 {
+	width: 625upx;
+}
+
+/* 字体 */
+.font {
+	font-size: 25upx;
+}
+
+.font-sm {
+	font-size: 22upx;
+}
+
+.font-md {
+	font-size: 30upx;
+}
+
+.font-lg {
+	font-size: 40upx;
+}
+
+.font-lgr {
+	font-size: 50upx;
+}
+
+.font-big {
+	font-size: 60upx;
+}
+
+.font-weight {
+	font-weight: bold !important;
+}
+
+.font-weight-100 {
+	font-weight: 100 !important;
+}
+
+.line-h0 {
+	line-height: 0 !important;
+}
+
+.line-h {
+	line-height: 1 !important;
+}
+
+.line-h-sm {
+	line-height: 1.2 !important;
+}
+
+.line-h-md {
+	line-height: 1.5 !important;
+}
+
+.line-h-lg {
+	line-height: 2 !important;
+}
+
+.line-h-big {
+	line-height: 3 !important;
+}
+
+.line-through {
+	text-decoration: line-through;
+}
+
+.text-center {
+	text-align: center;
+}
+
+.text-left {
+	text-align: left;
+}
+
+.text-right {
+	text-align: right;
+}
+
+
+[class*='col-'],
+[class*='span-'],
+[class*='span24-'] {
+	min-height: 1px;
+	box-sizing: border-box !important;
+}
+
+/* 栅栏一 */
+.col-1 {
+	width: 62.5upx;
+}
+
+.col-2 {
+	width: 125upx;
+}
+
+.col-3 {
+	width: 187.5upx;
+}
+
+.col-4 {
+	width: 250upx;
+}
+
+.col-5 {
+	width: 312.5upx;
+}
+
+.col-6 {
+	width: 375upx;
+}
+
+.col-7 {
+	width: 437.5upx;
+}
+
+.col-8 {
+	width: 500upx;
+}
+
+.col-9 {
+	width: 562.5upx;
+}
+
+.col-10 {
+	width: 625upx;
+}
+
+.col-11 {
+	width: 687.5upx;
+}
+
+.col-12 {
+	width: 750upx;
+}
+
+/* 栅栏二 */
+.span-1 {
+	width: 5%;
+}
+
+.span-2 {
+	width: 10%;
+}
+
+.span-3 {
+	width: 15%;
+}
+
+.span-4 {
+	width: 20%;
+}
+
+.span-5 {
+	width: 25%;
+}
+
+.span-6 {
+	width: 30%;
+}
+
+.span-7 {
+	width: 35%;
+}
+
+.span-8 {
+	width: 40%;
+}
+
+.span-9 {
+	width: 45%;
+}
+
+.span-10 {
+	width: 50%;
+}
+
+.span-11 {
+	width: 55%;
+}
+
+.span-12 {
+	width: 60%;
+}
+
+.span-13 {
+	width: 65%;
+}
+
+.span-14 {
+	width: 70%;
+}
+
+.span-15 {
+	width: 75%;
+}
+
+.span-16 {
+	width: 80%;
+}
+
+.span-17 {
+	width: 85%;
+}
+
+.span-18 {
+	width: 90%;
+}
+
+.span-19 {
+	width: 95%;
+}
+
+.span-20 {
+	width: 100%;
+}
+
+/* 栅栏三 */
+.span24-1 {
+	width: 4.17%;
+}
+
+.span24-2 {
+	width: 8.33%;
+}
+
+.span24-3 {
+	width: 12.5%;
+}
+
+.span24-4 {
+	width: 16.67%;
+}
+
+.span24-5 {
+	width: 20.83%;
+}
+
+.span24-6 {
+	width: 25%;
+}
+
+.span24-7 {
+	width: 29.17%;
+}
+
+.span24-8 {
+	width: 33.33%;
+}
+
+.span24-9 {
+	width: 37.5%;
+}
+
+.span24-10 {
+	width: 41.67%;
+}
+
+.span24-11 {
+	width: 45.83%;
+}
+
+.span24-12 {
+	width: 50%;
+}
+
+.span24-13 {
+	width: 54.17%;
+}
+
+.span24-14 {
+	width: 58.33%;
+}
+
+.span24-15 {
+	width: 62.5%;
+}
+
+.span24-16 {
+	width: 66.67%;
+}
+
+.span24-17 {
+	width: 70.83%;
+}
+
+.span24-18 {
+	width: 75%;
+}
+
+.span24-19 {
+	width: 79.17%;
+}
+
+.span24-20 {
+	width: 83.33%;
+}
+
+.span24-21 {
+	width: 87.5%;
+}
+
+.span24-22 {
+	width: 91.67%;
+}
+
+.span24-23 {
+	width: 95.83%;
+}
+
+.span24-24 {
+	width: 100%;
+}
+
+
+/* flex布局 */
+.d-flex {
+	display: flex;
+}
+
+.d-block {
+	display: block;
+}
+
+.d-inline-block {
+	display: inline-block;
+}
+
+.flex-1 {
+	flex: 1;
+}
+
+.flex-column {
+	flex-direction: column;
+}
+
+.flex-row {
+	flex-direction: row;
+}
+
+.flex-wrap {
+	flex-wrap: wrap;
+}
+
+.flex-nowrap {
+	flex-wrap: nowrap;
+}
+
+.flex-shrink {
+	flex-shrink: 0;
+}
+
+.j-start {
+	justify-content: flex-start;
+}
+
+.j-center {
+	justify-content: center;
+}
+
+.j-end {
+	justify-content: flex-end;
+}
+
+.j-sb {
+	justify-content: space-between;
+}
+
+.a-center {
+	align-items: center;
+}
+
+.a-start {
+	align-items: flex-start;
+}
+
+.a-end {
+	align-items: flex-end;
+}
+
+.a-stretch {
+	align-items: stretch;
+}
+
+.a-self-start {
+	align-self: flex-start;
+}
+
+.a-self-auto {
+	align-self: auto;
+}
+
+.a-self-end {
+	align-self: flex-end;
+}
+
+.a-self-stretch {
+	align-self: stretch;
+}
+
+.a-self-baseline {
+	align-self: baseline;
+}
+
+/* Border */
+.border {
+	border-width: 1px;
+	border-style: solid;
+	border-color: var(--borderColor);
+}
+
+.border-top {
+	border-top-width: 1px;
+	border-top-style: solid;
+	border-top-color: var(--borderColor);
+}
+
+.border-right {
+	border-right-width: 1px;
+	border-right-style: solid;
+	border-right-color: var(--borderColor);
+}
+
+.border-bottom {
+	border-bottom-width: 1px;
+	border-bottom-style: solid;
+	border-bottom-color: var(--borderColor);
+}
+
+.border-left {
+	border-left-width: 1px;
+	border-left-style: solid;
+	border-left-color: var(--borderColor);
+}
+
+.border-0 {
+	border-width: 0;
+}
+
+.border-top-0 {
+	border-top-width: 0;
+}
+
+.border-right-0 {
+	border-right-width: 0;
+}
+
+.border-bottom-0 {
+	border-bottom-width: 0;
+}
+
+.border-left-0 {
+	border-left-width: 0;
+}
+
+.border-primary {
+	border-color: var(--primary) !important
+}
+
+.border-secondary {
+	border-color: var(--secondary) !important
+}
+
+.border-success {
+	border-color: var(--success) !important
+}
+
+.border-danger {
+	border-color: var(--danger) !important
+}
+
+.border-warning {
+	border-color: var(--warning) !important
+}
+
+.border-info {
+	border-color: var(--info) !important
+}
+
+.border-light {
+	border-color: var(--light) !important
+}
+
+.border-dark {
+	border-color: var(--dark) !important
+}
+
+.border-white {
+	border-color: var(--white) !important
+}
+
+.border-light-secondary {
+	border-color: #F1F1F1 !important;
+}
+
+.rounded {
+	border-radius: 5upx;
+}
+
+.rounded-circle {
+	border-radius: 100%;
+}
+
+.rounded-0 {
+	border-radius: 0;
+}
+
+/* color */
+.text-primary {
+	color: var(--primary) !important;
+}
+
+.text-secondary {
+	color: var(--secondary) !important;
+}
+
+.text-success {
+	color: var(--success) !important;
+}
+
+.text-danger {
+	color: var(--danger) !important;
+}
+
+.text-warning {
+	color: var(--warning) !important;
+}
+
+.text-info {
+	color: var(--info) !important;
+}
+
+.text-light {
+	color: var(--light) !important;
+}
+
+.text-dark {
+	color: var(--dark) !important;
+}
+
+.text-muted {
+	color: var(--muted) !important;
+}
+
+.text-light-muted {
+	color: var(--lightmuted) !important;
+}
+
+.text-white {
+	color: var(--white) !important;
+}
+
+.bg-primary {
+	background-color: var(--primary) !important;
+}
+
+.bg-secondary {
+	background-color: var(--secondary) !important;
+}
+
+.bg-success {
+	background-color: var(--success) !important;
+}
+
+.bg-danger {
+	background-color: var(--danger) !important;
+}
+
+.bg-warning {
+	background-color: var(--warning) !important;
+}
+
+.bg-info {
+	background-color: var(--info) !important;
+}
+
+.bg-light {
+	background-color: var(--light) !important;
+}
+
+.bg-dark {
+	background-color: var(--dark) !important;
+}
+
+.bg-white {
+	background-color: var(--white) !important;
+}
+
+.bg-light-secondary {
+	background-color: #F1F1F1 !important;
+}
+
+/* Spacing */
+.m-0 {
+	margin-left: 0;
+	margin-right: 0;
+	margin-top: 0;
+	margin-bottom: 0;
+}
+
+.m {
+	margin-left: 5upx;
+	margin-right: 5upx;
+	margin-top: 5upx;
+	margin-bottom: 5upx;
+}
+
+.m-1 {
+	margin-left: 10upx;
+	margin-right: 10upx;
+	margin-top: 10upx;
+	margin-bottom: 10upx;
+}
+
+.m-2 {
+	margin-left: 20upx;
+	margin-right: 20upx;
+	margin-top: 20upx;
+	margin-bottom: 20upx;
+}
+
+.m-3 {
+	margin-left: 30upx;
+	margin-right: 30upx;
+	margin-top: 30upx;
+	margin-bottom: 30upx;
+}
+
+.m-4 {
+	margin-left: 40upx;
+	margin-right: 40upx;
+	margin-top: 40upx;
+	margin-bottom: 40upx;
+}
+
+.m-5 {
+	margin-left: 50upx;
+	margin-right: 50upx;
+	margin-top: 50upx;
+	margin-bottom: 50upx;
+}
+
+.mx-0 {
+	margin-left: 0;
+	margin-right: 0;
+}
+
+.mx {
+	margin-left: 5upx;
+	margin-right: 5upx;
+}
+
+.mx-1 {
+	margin-left: 10upx;
+	margin-right: 10upx;
+}
+
+.mx-2 {
+	margin-left: 20upx;
+	margin-right: 20upx;
+}
+
+.mx-3 {
+	margin-left: 30upx;
+	margin-right: 30upx;
+}
+
+.mx-4 {
+	margin-left: 40upx;
+	margin-right: 40upx;
+}
+
+.mx-5 {
+	margin-left: 50upx;
+	margin-right: 50upx;
+}
+
+.my-0 {
+	margin-top: 0;
+	margin-bottom: 0;
+}
+
+.my {
+	margin-top: 5upx;
+	margin-bottom: 5upx;
+}
+
+.my-1 {
+	margin-top: 10upx;
+	margin-bottom: 10upx;
+}
+
+.my-2 {
+	margin-top: 20upx;
+	margin-bottom: 20upx;
+}
+
+.my-3 {
+	margin-top: 30upx;
+	margin-bottom: 30upx;
+}
+
+.my-4 {
+	margin-top: 40upx;
+	margin-bottom: 40upx;
+}
+
+.my-5 {
+	margin-top: 50upx;
+	margin-bottom: 50upx;
+}
+
+.mt-0 {
+	margin-top: 0;
+}
+
+.mt {
+	margin-top: 5upx;
+}
+
+.mt-auto {
+	margin-top: auto;
+}
+
+.mt-1 {
+	margin-top: 10upx;
+}
+
+.mt-2 {
+	margin-top: 20upx;
+}
+
+.mt-3 {
+	margin-top: 30upx;
+}
+
+.mt-4 {
+	margin-top: 40upx;
+}
+
+.mt-5 {
+	margin-top: 50upx;
+}
+
+.mb-0 {
+	margin-bottom: 0;
+}
+
+.mb {
+	margin-bottom: 5upx;
+}
+
+.mb-auto {
+	margin-bottom: auto;
+}
+
+.mb-1 {
+	margin-bottom: 10upx;
+}
+
+.mb-2 {
+	margin-bottom: 20upx;
+}
+
+.mb-3 {
+	margin-bottom: 30upx;
+}
+
+.mb-4 {
+	margin-bottom: 40upx;
+}
+
+.mb-5 {
+	margin-bottom: 50upx;
+}
+
+.ml-0 {
+	margin-left: 0;
+}
+
+.ml {
+	margin-left: 5upx;
+}
+
+.ml-auto {
+	margin-left: auto;
+}
+
+.ml-1 {
+	margin-left: 10upx;
+}
+
+.ml-2 {
+	margin-left: 20upx;
+}
+
+.ml-3 {
+	margin-left: 30upx;
+}
+
+.ml-4 {
+	margin-left: 40upx;
+}
+
+.ml-5 {
+	margin-left: 50upx;
+}
+
+.mr-0 {
+	margin-right: 0;
+}
+
+.mr {
+	margin-right: 5upx;
+}
+
+.mr-1 {
+	margin-right: 10upx;
+}
+
+.mr-2 {
+	margin-right: 20upx;
+}
+
+.mr-3 {
+	margin-right: 30upx;
+}
+
+.mr-4 {
+	margin-right: 40upx;
+}
+
+.mr-5 {
+	margin-right: 50upx;
+}
+
+.p-0 {
+	padding-left: 0;
+	padding-right: 0;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.p {
+	padding-left: 5upx;
+	padding-right: 5upx;
+	padding-top: 5upx;
+	padding-bottom: 5upx;
+}
+
+.p-1 {
+	padding-left: 10upx;
+	padding-right: 10upx;
+	padding-top: 10upx;
+	padding-bottom: 10upx;
+}
+
+.p-2 {
+	padding-left: 20upx;
+	padding-right: 20upx;
+	padding-top: 20upx;
+	padding-bottom: 20upx;
+}
+
+.p-3 {
+	padding-left: 30upx;
+	padding-right: 30upx;
+	padding-top: 30upx;
+	padding-bottom: 30upx;
+}
+
+.p-4 {
+	padding-left: 40upx;
+	padding-right: 40upx;
+	padding-top: 40upx;
+	padding-bottom: 40upx;
+}
+
+.p-5 {
+	padding-left: 50upx;
+	padding-right: 50upx;
+	padding-top: 50upx;
+	padding-bottom: 50upx;
+}
+
+.px-0 {
+	padding-left: 0;
+	padding-right: 0;
+}
+
+.px {
+	padding-left: 5upx;
+	padding-right: 5upx;
+}
+
+.px-1 {
+	padding-left: 10upx;
+	padding-right: 10upx;
+}
+
+.px-2 {
+	padding-left: 20upx;
+	padding-right: 20upx;
+}
+
+.px-3 {
+	padding-left: 30upx;
+	padding-right: 30upx;
+}
+
+.px-4 {
+	padding-left: 40upx;
+	padding-right: 40upx;
+}
+
+.px-5 {
+	padding-left: 50upx;
+	padding-right: 50upx;
+}
+
+.py-0 {
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.py {
+	padding-top: 5upx;
+	padding-bottom: 5upx;
+}
+
+.py-1 {
+	padding-top: 10upx;
+	padding-bottom: 10upx;
+}
+
+.py-2 {
+	padding-top: 20upx;
+	padding-bottom: 20upx;
+}
+
+.py-3 {
+	padding-top: 30upx;
+	padding-bottom: 30upx;
+}
+
+.py-4 {
+	padding-top: 40upx;
+	padding-bottom: 40upx;
+}
+
+.py-5 {
+	padding-top: 50upx;
+	padding-bottom: 50upx;
+}
+
+.pt-0 {
+	padding-top: 0;
+}
+
+.pt {
+	padding-top: 5upx;
+}
+
+.pt-1 {
+	padding-top: 10upx;
+}
+
+.pt-2 {
+	padding-top: 20upx;
+}
+
+.pt-3 {
+	padding-top: 30upx;
+}
+
+.pt-4 {
+	padding-top: 40upx;
+}
+
+.pt-5 {
+	padding-top: 50upx;
+}
+
+.pb-0 {
+	padding-bottom: 0;
+}
+
+.pb {
+	padding-bottom: 5upx;
+}
+
+.pb-1 {
+	padding-bottom: 10upx;
+}
+
+.pb-2 {
+	padding-bottom: 20upx;
+}
+
+.pb-3 {
+	padding-bottom: 30upx;
+}
+
+.pb-4 {
+	padding-bottom: 40upx;
+}
+
+.pb-5 {
+	padding-bottom: 50upx;
+}
+
+.pl-0 {
+	padding-left: 0;
+}
+
+.pl {
+	padding-left: 5upx;
+}
+
+.pl-1 {
+	padding-left: 10upx;
+}
+
+.pl-2 {
+	padding-left: 20upx;
+}
+
+.pl-3 {
+	padding-left: 30upx;
+}
+
+.pl-4 {
+	padding-left: 40upx;
+}
+
+.pl-5 {
+	padding-left: 50upx;
+}
+
+.pr-0 {
+	padding-right: 0;
+}
+
+.pr {
+	padding-right: 5upx;
+}
+
+.pr-1 {
+	padding-right: 10upx;
+}
+
+.pr-2 {
+	padding-right: 20upx;
+}
+
+.pr-3 {
+	padding-right: 30upx;
+}
+
+.pr-4 {
+	padding-right: 40upx;
+}
+
+.pr-5 {
+	padding-right: 50upx;
+}

+ 54 - 0
template.h5.html

@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+	<head>
+		<meta charset="utf-8">
+		<meta http-equiv="X-UA-Compatible" content="IE=edge">
+		<meta name="referrer" content="no-referrer" />
+		<meta name="viewport"
+			content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+		<title>
+			<%= htmlWebpackPlugin.options.title %>
+		</title>
+
+		<script>
+			var UA = window.navigator.userAgent.toLowerCase();
+			var isAndroid = UA.indexOf('android') > 0;
+			var isIOS = /iphone|ipad|ipod|ios/.test(UA);
+			if (!(isAndroid || isIOS)) {
+				// 正式发布的时候使用,开发期间不启用。
+				// window.location.href = '/demo/picture/website/pcguide.html';
+			}
+		</script>
+		<script>
+			document.addEventListener('DOMContentLoaded', function() {
+				document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
+			})
+		</script>
+		<link rel="stylesheet" href="<%= BASE_URL %>static/index.css" />
+	</head>
+	<body>
+		<!-- 该文件为 H5 平台的模板 HTML,并非应用入口,请勿直接运行此文件。 -->
+		<!-- 详见文档:https://uniapp.dcloud.io/collocation/manifest?id=h5-template -->
+		<noscript>
+			<strong>Please enable JavaScript to continue.</strong>
+		</noscript>
+		<div id="app"></div>
+		<!-- 微信SDK文件 -->
+		<script src="<%= BASE_URL %>static/mp-h5/jweixin-1.4.0.js"></script>
+		<!-- 高德地图文件 -->
+		<!-- <script type="text/javascript"
+			src="https://webapi.amap.com/maps?v=1.4.15&key=6484038843257c1966e26483c431777a&plugin=AMap.ToolBar">
+		</script> -->
+		<script src="//webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
+		<!-- built files will be auto injected -->
+		<!-- <script>
+			var _hmt = _hmt || [];
+			(function() {
+				var hm = document.createElement("script");
+				hm.src = "https://hm.baidu.com/hm.js?fe3b7a223fc08c795f0f4b6350703e6f";
+				var s = document.getElementsByTagName("script")[0];
+				s.parentNode.insertBefore(hm, s);
+			})();
+		</script> -->
+	</body>
+</html>

Некоторые файлы не были показаны из-за большого количества измененных файлов