Sfoglia il codice sorgente

商户审核,活动审核,修改密码

hmp 4 anni fa
parent
commit
39d8dd7016

+ 8 - 10
assets/colorui/app.css

@@ -2,13 +2,15 @@
 	color: #FF9447;
 }
 
+.text-base{
+	color: #FF9447;
+}
+
 .tag-bg {
 	background-color: #FFA66D;
 	color: #FFFFFF;
 }
 
-
-
 .hoverClass {
 	opacity: 0.9;
 	background-color: #ebebeb;
@@ -26,12 +28,8 @@
 }
 
 .btn-line-color {
-	border: 1rpx solid #FF9447;
-	color: #DA3F33;
-}
-
-.text-base {
-	color: #dc311c;
+	border: 1rpx solid #EF9944;
+	color: #EF9944;
 }
 
 .bg-gradual-base {
@@ -325,11 +323,11 @@
 	left: 0;
 }
 
-/* .bottom-bar{
+.bottom-bar{
 	width: 100%;
 	height: 150rpx;
 	display: flex;
 	flex-direction: row;
 	justify-content: center;
 	padding: 30rpx;
-} */
+}

+ 14 - 1
assets/http/api.js

@@ -11,6 +11,7 @@ const sms={
 }
 //商场管理
 const mall={
+	login:p => http.post('/cyzh-ldt/appaccount/login',p),
 	detail:p => http.get("cyzh-ldt/mall/detail", {params:p}),
 	getListByPhone:p => http.get("cyzh-ldt/app/mall/getMyMallList", {params:p}),
 	getShopLabelByMallId:p => http.get("cyzh-ldt/app/mall/getShopLabelByMallId?mallId="+p),
@@ -19,6 +20,11 @@ const mall={
 	statistic:p => http.get("cyzh-ldt/app/mall/statistic?mallId="+p),
 }
 
+const appaccount={
+	login:p => http.post('/cyzh-ldt/appaccount/login',p),
+	setPassword:p => http.post('/cyzh-ldt/appaccount/setPassword',p),
+}
+
 
 const memberCenter={
 	list:p => http.get('cyzh-ldt/app/mall/getMembersByMallId',{params:p}),
@@ -28,7 +34,8 @@ const memberCenter={
 
 
 const shop={
-	stop:p => http.post('cyzh-ldt/shop/update',p),
+	update:p => http.post('cyzh-ldt/shop/update',p),
+	submit:p => http.post('cyzh-ldt/shop/submit',p),
 	detail:p => http.get("cyzh-ldt/shop/detail", {params:p}),
 }
 
@@ -43,12 +50,18 @@ const activity={
 	join:(p)=> http.post('cyzh-ldt/activityjoinrecord/submit',p),
 	//活动详情
 	detail:p => http.get("/cyzh-ldt/activity/detail", {params:p}),
+	//修改活动状态
+	submit:p => http.post("/cyzh-ldt/activity/submit", p),
+	//活动审核列表
+	auditList:p => http.get('cyzh-ldt/activity/list', {params:p}),
 }
 
+
 export const api={
 	uploadFile,
 	sms,
 	mall,
+	appaccount,
 	memberCenter,
 	shop,
 	activity

+ 6 - 3
assets/http/service.js

@@ -1,9 +1,12 @@
 import Request from 'luch-request'
 
-let baseURL = 'http://localhost:2539/'
+// let baseURL = 'http://localhost:2539/'
+// let baseURL = 'http://121.37.220.71:1890/api/'
+let baseURL = 'https://ldt.guosen-fumao.cn/api/'
+
 
 let tokenUrl = baseURL +
-	"blade-auth/oauth/token?tenantId=000000&password=21232f297a57a5a743894a0e4a801fc3&username=admin"
+	"blade-auth/oauth/token?tenantId=000000&password=f67e0b29283bb804f96e28f43ddce79f&username=admin"
 
 //获取token
 const getTokenStorage = () => {
@@ -41,7 +44,7 @@ http.interceptors.response.use(async (response) => {
 	//toekn过期处理 
 
 	//200 返回数据成功 0
-	if (response.data.code != 200) {
+	if (response.data.code != 200 && response.data.code !=400) {
 		return Promise.reject(response)
 	}
 	return response.data

+ 57 - 8
pages.json

@@ -52,14 +52,6 @@
 				"enablePullDownRefresh": false
 			}
 
-		}, {
-			"path": "pages/publish/detail",
-			"style": {
-				"navigationStyle": "custom",
-				"navigationBarTitleText": "活动详情",
-				"enablePullDownRefresh": false
-			}
-
 		}, {
 			"path": "pages/stores/stores",
 			"style": {
@@ -105,6 +97,63 @@
             }
             
         }
+        ,{
+            "path" : "pages/shopAudit/shopAudit",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "商户审核",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/shopAudit/detail",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "商户审核",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/acitvityAudit/acitvityAudit",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "活动审核",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/acitvityAudit/detail",
+            "style" :                                                                                    
+            {
+				"navigationStyle":"custom",
+                "navigationBarTitleText": "活动详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/activity/detail",
+            "style" :                                                                                    
+            {
+				"navigationStyle":"custom",
+                "navigationBarTitleText": "活动详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/login/updatePassword",
+            "style" :                                                                                    
+            {
+				"navigationStyle":"custom",
+                "navigationBarTitleText": "修改密码",
+                "enablePullDownRefresh": false
+            }
+            
+        }
     ],
 	"globalStyle": {
 		"navigationBarTextStyle": "black",

+ 95 - 0
pages/acitvityAudit/acitvityAudit.vue

@@ -0,0 +1,95 @@
+<template>
+	<view class="container">
+		<view class="tabs flex flex-direction">
+			<scroll-view scroll-x class="bg-white nav">
+				<view class="flex text-center">
+					<view class="cu-item flex-sub" :class="index==current?'text-base cur text-xl text-bold ':'text-lg'"
+						v-for="(item,index) in tabs" :key="index" @tap="tabChange(index)">
+						{{item.name}}
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+		<view style="height: 100%;">
+			<swiper style="height: 100%;" :current="current" @change="swiperChange" @animationfinish="animationfinish">
+				<swiper-item v-for="(item, index) in tabs" :key="index">
+					<scroll-view scroll-y style="height: 100%;">
+						<item @showOpinion="showOpinion" ref="mescrollItem"
+							:refresh="refresh"
+							:i="index" :item="item"
+							:type="current"></item>
+					</scroll-view>
+				</swiper-item>
+			</swiper>
+		</view>
+	</view>
+</template>
+<script>
+	import item from "./comps/item.vue"
+	export default {
+		components: {
+			item
+		},
+		data() {
+			return {
+				current: 0,
+				swiperCurrent: 0,
+				tabs: [
+					{
+						name: '待审核',
+						value: 0
+					},
+					{
+						name: '已审核',
+						value: 4
+					}
+				],
+				refresh:false
+			}
+		},
+		onShow() {
+			let page= this.$util.getPageCtx()
+			if (page.data.reload) {
+				 this.refresh=!this.refresh
+			}
+		},
+		methods: {
+			tabChange(index) {
+				this.current = index
+			},
+			swiperChange(e) {
+				uni.pageScrollTo({
+					scrollTop: 0,
+					duration: 0
+				});
+				this.current = e.detail.current
+			},
+			animationfinish({
+				detail: {
+					current
+				}
+			}) {
+				this.swiperCurrent = current;
+				this.current = current;
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		height: calc(100vh);
+		background-color: #F6F6F6;
+		padding: 78rpx 0rpx 0rpx;
+
+		.tabs {
+			position: fixed;
+			top: -10rpx;
+			left: 0;
+			width: 100%;
+			background-color: #FFFFFF;
+			box-sizing: border-box;
+			z-index: 3;
+		}
+	}
+</style>

+ 114 - 0
pages/acitvityAudit/comps/card.vue

@@ -0,0 +1,114 @@
+<template>
+	<view class="">
+		<navigator :url="`/pages/acitvityAudit/detail?id=${item.id}&current=${current}`" v-for="(item,index) in list"
+			:key="index" class="card" hover-class="none">
+			<image class="bg" :src="item.pic"></image>
+			<view class="content">
+				<text class="text-cut-1 title">{{item.title}}</text>
+				<view class="cu-tag btn-bg-color round sm tag" v-for="(item1,index1) in item.labelNames.split(',')" :key="index1">
+					{{item1}}
+				</view>
+				<view class="bottom">
+					<view class="">
+						<text class="time">报名截至时间:{{item.endTime}}</text>
+					</view>
+					<view v-if="item.auditStatus==0" class="center" style="color: #EF9944;">
+						<text >待审核</text>
+						<text class="cuIcon-right"></text>
+					</view>
+					<view v-if="item.auditStatus==4" class="center" style="color: #19be6b;">
+						<text >已审核</text>
+						<text class="cuIcon-right"></text>
+					</view>
+				</view>
+			</view>
+			
+		</navigator>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			list: Array,
+		},
+		data() {
+			return {}
+		},
+		methods: {
+
+		}
+
+	}
+</script>
+
+<style lang="scss" scoped>
+	.bottom-bar {
+		position: fixed;
+		bottom: 0;
+		z-index: 99;
+		width: 100%;
+		background-color: #FFFFFF;
+		height: 100rpx;
+		display: flex;
+
+		.left {
+			width: 70%;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			padding-left: 30rpx;
+		}
+
+		.right {
+			width: 30%;
+		}
+	}
+
+	.card {
+		overflow: hidden;
+		position: relative;
+		background-color: #FFFFFF;
+		margin: 20rpx;
+		border-radius: 20rpx;
+
+		.bg {
+			border-radius: 20rpx 20rpx 0 0;
+			width: 100vw;
+			height: 250rpx;
+		}
+
+		.status {
+			position: absolute;
+			right: 0;
+			bottom: -10rpx;
+			width: 100rpx;
+		}
+
+		.content {
+			padding: 10rpx 20rpx;
+
+			.title {
+				font-weight: 800;
+				font-size: 30rpx;
+			}
+
+			.tag {
+				text-align: center;
+				padding: 18rpx 28rpx;
+				margin: 20rpx 20rpx 20rpx 0;
+			}
+			
+			.bottom{
+				display: flex;
+				justify-content: space-between;
+				font-size: 26rpx;
+				
+				.time {
+					color: #999999;
+				}
+			}
+		}
+		
+	}
+</style>

+ 92 - 0
pages/acitvityAudit/comps/item.vue

@@ -0,0 +1,92 @@
+<template>
+	<mescroll  :up="up" :down="down" @up="upFn" :fixed="false" @down="downFn" @init="initMeScroll">
+		<card :list="list" ></card>
+	</mescroll>
+</template>
+<script>
+	import mescroll from '@/components/mescroll-body/mescroll-uni.vue'
+	import card from './card.vue'
+	export default {
+		components:{
+			mescroll,card
+		},
+		props: {
+			type: Number,
+			i: Number,
+			item:Object,
+			refresh:Boolean
+		},
+		data() {
+			return {
+				isInit: false, // 是否初始化
+				list: [], // 列表数据
+				mescroll: null, // mescroll 对象
+				// 上拉配置参数
+				up: {
+					noMoreSize: 5, 
+					auto: false,
+				},
+				// 下拉配置参数
+				down: {
+					use: false, 
+					auto: false
+				}
+			}
+		},
+		watch:{
+			type(val) {
+				if(!this.isInit && val === this.i) {
+					this.mescroll.resetUpScroll()
+				}
+			},
+			refresh(){
+				this.mescroll.resetUpScroll()
+			}
+		},
+		mounted() {
+			if(!this.isInit && this.i === 0) {
+				this.mescroll.resetUpScroll()
+			}
+		},
+		methods: {
+			initMeScroll(mescroll) {
+				this.mescroll = mescroll
+			},
+			//上拉刷新
+			upFn(mescroll) {
+				let params={
+					mallId:this.vuex_mallId,
+					current:mescroll.num,
+					size:mescroll.size,
+					sponsorType:2,//审核商户的活动
+					auditStatus:this.item.value
+				}
+				try{
+					this.$api.activity.auditList(params).then(res=>{
+						let data=res.data.records
+						let length=data.length
+						let total=res.data.total
+						mescroll.endBySize(length, total);
+						if(mescroll.num == 1) this.list = []; //如果是第一页需手动制空列表
+						this.list=this.list.concat(data); //追加新数据
+					})
+				}catch(e){
+					mescroll.endErr();
+				}
+			},
+			//下拉加载
+			downFn(mescroll) {
+				setTimeout(()=>{
+					this.$u.toast('刷新成功')
+					this.mescroll.resetUpScroll()
+				},1500)
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	view{
+		box-sizing: border-box;
+	}
+</style>

+ 300 - 0
pages/acitvityAudit/detail.vue

@@ -0,0 +1,300 @@
+<template>
+	<view class="safe-area-inset-bottom">
+		<my-bar title="活动详情" :transparent="transparent">
+			<view slot="content" class="publish">
+				<image :src="detail.pic" style="height: 380rpx;width: 100%;"></image>
+			</view>
+		</my-bar>
+		<view class="clock">
+		</view>
+
+		<view class="content">
+			<text class="title">{{detail.title}}</text>
+			<view class="data" style="margin-top: 30rpx;">
+				<u-icon name="clock" color="#EF9944"></u-icon>
+				<text class="margin-left-10">{{detail.beginTime | date('mm/dd hh:MM:ss')}} 至 {{detail.endTime | date('mm/dd hh:MM:ss')}}</text>
+			</view>
+			<!-- <view class="data">
+				<u-icon name="map"></u-icon>
+				<text class="margin-left-10">仅限全天河区内报名</text>
+			</view> -->
+			<view class="data flex">
+				<view class="flex">
+					<u-icon name="grid" color="#EF9944"></u-icon>
+					<text class="margin-left-10">{{detail.labelNames}}</text>
+				</view>
+				<view class="flex margin-left-50">
+					<u-icon name="bag" color="#EF9944"></u-icon>
+					<text class="margin-left-10">活动供应价{{detail.supplyPrice}}%</text>
+				</view>
+			</view>
+			<view class="data">
+				<u-icon name="home-fill" color="#EF9944"></u-icon>
+				<text class="margin-left-10">联营积分全场通用</text>
+			</view>
+		</view>
+
+		<view class="intro">
+			<view class="flex">
+				<u-icon name="coupon" color="#EF9944"></u-icon>
+				<text class="margin-left-10">商场活动补贴</text>
+			</view>
+			<view class="desc" style="display: flex;border-bottom: 1rpx solid #DDDDDD;align-items: center;">
+				<u-input disabled v-model="appendSupplyPrice" placeholder="请输入折扣" style="width: 90%;" />
+				<text class="padding-left-20">%</text>
+			</view>
+		</view>
+
+		<view class="intro">
+			<view class="flex">
+				<u-icon name="bookmark" color="#EF9944"></u-icon>
+				<text class="margin-left-10">活动介绍</text>
+			</view>
+			<view class="desc">
+				{{detail.detail}}
+			</view>
+		</view>
+
+		<view class="attend" v-if="!$isEmpty(detail.activityJoinRecords)">
+			<view class="margin-bottom-20">
+				<u-icon name="calendar-fill" color="#EF9944"></u-icon>
+				<text class="margin-left-10">已参加</text>
+			</view>
+
+			<view class="flex">
+				<view class="flex " style="width: 90%;">
+					<view class="data" v-for="(item,index) in detail.activityJoinRecords" :key="index">
+						<view class="item">
+							<image :src="item.joinPic" mode=""></image>
+							<view>
+								<text>{{name | ellipsis}}</text>
+								<text>{{item.finalSupplyPrice}}折</text>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view v-if="detail.activityJoinRecords.length>3" class="center" style="width: 10%;margin-right: 15rpx;">
+					<u-icon name="more-circle" size="80" color="#ababab"></u-icon>
+				</view>
+			</view>
+		</view>
+		
+		<block  v-if="detail.auditStatus==0">
+			<view class="" style="height: 90rpx;"></view>
+			<view :style="{paddingBottom:safeAreaBottom}" class="footer-fixed padding-20  bg-white flex justify-end margin-right-30" style="box-sizing: border-box;z-index: 999;border-top: 1rpx solid #f1f1f1;">
+				<view @click="pass" class="cu-btn df btn-bg-color  round margin-right-20" style="padding-left: 46rpx;padding-right: 46rpx;">
+					通过
+				</view>
+				<view @click="opinionShow=true" class="cu-btn df btn-line-color  round " style="padding-left: 46rpx;padding-right: 46rpx;">
+					拒绝
+				</view>
+			</view>
+		</block>
+		
+		<block v-else>
+			<view class="" style="height: 90rpx;"></view>
+			<view :style="{paddingBottom:safeAreaBottom}" class="footer-fixed center">
+				<view  class="cu-btn df btn-bg-color  round " style="width: 90%;height: 80rpx;">
+					<text v-if="detail.auditStatus==1">审核已通过</text>
+					<text v-if="detail.auditStatus==2">审核未通过</text>
+					<text v-if="detail.auditStatus==2">活动已停用</text>
+					<text v-if="detail.auditStatus==4">已提交,待平台审核</text>
+				</view>
+			</view>
+		</block>
+		
+		<u-modal :show-cancel-button="true" confirm-color="#FF9447" @confirm="opinionConfirm" title="审核意见" :mask-close-able="true"
+			v-model="opinionShow">
+			<view class="slot-content" style="margin: 20rpx;">
+				<u-form label-width="150" ref="uForm">
+					<u-form-item :border-bottom="false">
+						<u-input height="150" placeholder="请输入审核意见(选填)" v-model="auditAdvice" />
+					</u-form-item>
+				</u-form>
+			</view>
+		</u-modal>
+	</view>
+</template>
+
+<script>
+	import myBar from "@/components/my-bar.vue"
+	export default {
+		components: {
+			myBar
+		},
+		onPageScroll(obj) {
+			this.transparent = obj.scrollTop * 0.006;
+		},
+		filters: {
+			// 名称超出显示省略号
+			ellipsis(value) {
+				if (!value) return '';
+				if (value.length > 4) {
+					return value.slice(0, 3) + '...'
+				}
+				return value
+			}
+		},
+		data() {
+			return {
+				id: '',
+				transparent: '',
+				name: '星巴克',
+				detail: {},
+				appendSupplyPrice: 100,
+				
+				opinionShow:false,
+				auditAdvice:''
+			}
+		},
+		onLoad(options) {
+			this.id = options.id
+			if (!this.id) {
+				this.$u.toast('系统错误')
+				return
+			}
+			this.fetchDetail()
+		},
+		methods: {
+			fetchDetail() {
+				this.$api.activity.detail({
+					id: this.id
+				}).then(res => {
+					this.detail = res.data
+				})
+			},
+			opinionConfirm(){
+				let item = this.$u.deepClone(this.detail)
+				item.auditStatus = this.$global.activityStatus.refuse
+				this.$api.activity.submit(item).then(res => {
+					if (res.success == true) {
+						this.$u.toast(res.msg)
+						this.fetchDetail()
+					}
+				})
+			},
+			pass(){
+				this.$dialog.showModal('确定通过并提交到平台进行审核?').then(()=>{
+					let item=this.$u.deepClone(this.detail)
+					item.auditStatus=this.$global.activityStatus.wait_admin_audit
+					this.$api.activity.submit(item).then(res=>{
+						if (res.success == true) {
+							this.$u.toast(res.msg)
+							this.$util.waitReload()
+							this.fetchDetail()
+						}
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.publish {
+		overflow: hidden;
+		border-radius: 10rpx;
+		height: 380rpx;
+		position: absolute;
+		bottom: 20rpx;
+		left: 0;
+		right: 0;
+		width: 92%;
+		margin: 0 auto -120rpx;
+		border-radius: 10rpx;
+		box-shadow: 0rpx 16rpx 8rpx -8rpx #a8a8a8;
+
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		flex-direction: column;
+
+		text {
+			font-size: 26rpx;
+			color: #797979;
+		}
+	}
+
+	.clock {
+		background-color: #FFFFFF;
+		height: 120rpx;
+		padding-bottom: 20rpx;
+
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-end;
+		align-items: center;
+
+		.tips {
+			margin-top: 10rpx;
+			font-size: 24rpx;
+			color: #FF9447;
+		}
+	}
+
+	.content {
+		padding: 15rpx 30rpx;
+		background-color: #FFFFFF;
+
+		.title {
+			line-height: 50rpx;
+			font-weight: 800;
+			font-size: 32rpx;
+		}
+
+		.data {
+			margin: 20rpx 0;
+			color: #787878;
+		}
+	}
+
+	.intro {
+		margin-top: 15rpx;
+		padding: 15rpx 30rpx;
+		background-color: #FFFFFF;
+
+		.desc {
+			color: #9a9a9a;
+			margin-top: 20rpx;
+			line-height: 46rpx;
+			font-size: 28rpx;
+		}
+	}
+
+	.attend {
+		margin-top: 15rpx;
+		padding: 15rpx 0 15rpx 30rpx;
+		background-color: #FFFFFF;
+
+		.data {
+			margin: 10rpx 20rpx 10rpx 0;
+			$width: 80rpx;
+
+			.item {
+				width: 190rpx;
+				height: $width;
+				background-color: #eeeeee;
+				border-radius: 50rpx;
+				display: flex;
+
+				image {
+					width: $width;
+					height: $width;
+				}
+
+				view {
+					padding-left: 10rpx;
+					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					font-size: 22rpx;
+
+					text:first-child {
+						font-weight: 800;
+						margin-bottom: 4rpx;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 5 - 5
pages/activity/comps/card.vue

@@ -4,7 +4,7 @@
 			<view v-if="checkAllShow" class="center" style="width: 10%;background-color: #F1F1F1;">
 				<u-checkbox shape="circle" @change="checkboxChange" v-model="item.checked" :name="index"></u-checkbox>
 			</view>
-			<navigator :url="`/pages/publish/detail?id=${item.id}&current=${current}`" hover-class="none" class="" >
+			<navigator :url="`/pages/activity/detail?id=${item.id}&current=${current}`" hover-class="none" class="" >
 				<image class="bg" :src="item.pic"></image>
 				<view class="content">
 					<text class="text-cut-1 title">{{item.title}}</text>
@@ -16,8 +16,8 @@
 						<text>报名截至时间:{{item.endTime}}</text>
 					</view>
 				</view>
-				<image v-if="item.auditStatus==0" class="status" src="@/static/icon/await.png" mode="widthFix"></image>
-				<image v-if="item.auditStatus==1" class="status" src="@/static/icon/pass1.png" mode="widthFix"></image>
+				<image v-if="item.auditStatus==4" class="status" src="@/static/icon/await.png" mode="widthFix"></image>
+				<image v-if="item.auditStatus==1" class="status" src="@/static/icon/pass.png" mode="widthFix"></image>
 				<image v-if="item.auditStatus==2" class="status" src="@/static/icon/fail.png" mode="widthFix"></image>
 			</navigator>
 		</view>
@@ -122,8 +122,8 @@
 	
 		.status {
 			position: absolute;
-			right: 0;
-			bottom: -10rpx;
+			right: 10rpx;
+			bottom: 10rpx;
 			width: 100rpx;
 		}
 	

+ 30 - 26
pages/publish/detail.vue → pages/activity/detail.vue

@@ -1,6 +1,6 @@
 <template>
 	<view class="safe-area-inset-bottom">
-		<my-bar title="发布活动" :transparent="transparent">
+		<my-bar title="活动详情" :transparent="transparent">
 			<view slot="content" class="publish">
 				<image :src="detail.pic" style="height: 380rpx;width: 100%;"></image>
 			</view>
@@ -19,32 +19,32 @@
 		<view class="content">
 			<text class="title">{{detail.title}}</text>
 			<view class="data" style="margin-top: 30rpx;">
-				<u-icon name="clock"></u-icon>
+				<u-icon name="clock" color="#EF9944"></u-icon>
 				<text class="margin-left-10">{{detail.beginTime | date('mm/dd hh:MM:ss')}} 至 {{detail.endTime | date('mm/dd hh:MM:ss')}}</text>
 			</view>
-			<view class="data">
+			<!-- <view class="data">
 				<u-icon name="map"></u-icon>
 				<text class="margin-left-10">仅限全天河区内报名</text>
-			</view>
+			</view> -->
 			<view class="data flex">
 				<view class="flex">
-					<u-icon name="grid"></u-icon>
+					<u-icon name="grid" color="#EF9944"></u-icon>
 					<text class="margin-left-10">{{detail.labelNames}}</text>
 				</view>
 				<view class="flex margin-left-50">
-					<u-icon name="bag"></u-icon>
+					<u-icon name="bag" color="#EF9944"></u-icon>
 					<text class="margin-left-10">活动供应价{{detail.supplyPrice}}%</text>
 				</view>
 			</view>
 			<view class="data">
-				<u-icon name="home-fill"></u-icon>
+				<u-icon name="home-fill" color="#EF9944"></u-icon>
 				<text class="margin-left-10">联营积分全场通用</text>
 			</view>
 		</view>
 
 		<view class="intro" v-if="current==1">
 			<view class="flex">
-				<u-icon name="coupon"></u-icon>
+				<u-icon name="coupon" color="#EF9944"></u-icon>
 				<text class="margin-left-10">商场活动补贴</text>
 			</view>
 			<view class="desc" style="display: flex;border-bottom: 1rpx solid #DDDDDD;align-items: center;">
@@ -55,7 +55,7 @@
 
 		<view class="intro">
 			<view class="flex">
-				<u-icon name="bookmark"></u-icon>
+				<u-icon name="bookmark" color="#EF9944"></u-icon>
 				<text class="margin-left-10">活动介绍</text>
 			</view>
 			<view class="desc">
@@ -65,7 +65,7 @@
 
 		<view class="attend" v-if="!$isEmpty(detail.activityJoinRecords)">
 			<view class="margin-bottom-20">
-				<u-icon name="calendar-fill"></u-icon>
+				<u-icon name="calendar-fill" color="#EF9944"></u-icon>
 				<text class="margin-left-10">已参加</text>
 			</view>
 
@@ -86,23 +86,26 @@
 				</view>
 			</view>
 		</view>
-
-		<view @click="operate" class="center" style="margin:50rpx 0rpx 20rpx;">
-			<view class="cu-btn btn-bg-color" style="width: 90%;height: 86rpx;border-radius: 12rpx;">
-				<block v-if="current==0">
-					<text v-if="detail.auditStatus==0">待审核</text>
-					<text v-if="detail.auditStatus==1">审核通过</text>
-					<text v-if="detail.auditStatus==2">审核不通过</text>
-					<text v-if="detail.auditStatus==3">已停用</text>
-				</block>
-				<block v-if="current==1">
-					<text>参加活动</text>
-				</block>
-				<block v-if="current==2">
-					<text>退出活动</text>
-				</block>
+		
+		<block >
+			<view class="" style="height: 90rpx;"></view>
+			<view @click="operate" :style="{paddingBottom:safeAreaBottom}" class="footer-fixed center">
+				<view  class="cu-btn df btn-bg-color  round " style="width: 90%;height: 80rpx;">
+					<block v-if="current==0">
+						<text v-if="detail.auditStatus==4">待审核</text>
+						<text v-if="detail.auditStatus==1">审核通过</text>
+						<text v-if="detail.auditStatus==2">审核不通过</text>
+						<text v-if="detail.auditStatus==3">已停用</text>
+					</block>
+					<block v-if="current==1">
+						<text>参加活动</text>
+					</block>
+					<block v-if="current==2">
+						<text>退出活动</text>
+					</block>
+				</view>
 			</view>
-		</view>
+		</block>
 	</view>
 </template>
 
@@ -204,6 +207,7 @@
 
 <style lang="scss" scoped>
 	.publish {
+		background-color: #FFFFFF;
 		overflow: hidden;
 		border-radius: 10rpx;
 		height: 380rpx;

+ 16 - 6
pages/index/index.vue

@@ -130,15 +130,20 @@
 					},
 				],
 				mallMenuList:[
+					{
+						icon:'/static/icon/password.png',
+						name:'修改密码',
+						path:'/pages/login/updatePassword'
+					},
 					{
 						icon:'/static/icon/mall.png',
 						name:'商家管理',
-						path:''
+						path:'/pages/stores/stores'
 					},
 					{
 						icon:'/static/icon/shanghu.png',
 						name:'商户审核',
-						path:''
+						path:'/pages/shopAudit/shopAudit'
 					},
 					{
 						icon:'/static/icon/tag.png',
@@ -148,7 +153,7 @@
 					{
 						icon:'/static/icon/audit.png',
 						name:'活动审核',
-						path:''
+						path:'/pages/acitvityAudit/acitvityAudit'
 					},
 				]
 			}
@@ -161,13 +166,15 @@
 				uni.clearStorage()
 				this.$jump('/pages/login/account-login')
 			},
-			init(){
-				this.mallList=this.$cache.get('mallList')
+			async init(){
+				let phone=this.$cache.get('phone')
+				let res=await this.$api.mall.getListByPhone({phone})
+				this.mallList=res.data
 				this.mallId=this.mallList[0].id
 				this.mallLable=this.mallList[0].name
 				this.cacheSelectedMall()
+				//获取统计数据
 				this.getStatistic()
-			
 			},
 			getStatistic(){
 				this.$api.mall.statistic(this.mallId).then(res=>{
@@ -178,7 +185,10 @@
 				this.mallId=e[0].value
 				this.mallLable=e[0].label
 				this.cacheSelectedMall()
+				this.getStatistic()
 			},
+			
+			
 			cacheSelectedMall(){
 				let selectedMall={
 					id:this.mallId,

+ 12 - 9
pages/login/account-login.vue

@@ -39,6 +39,7 @@
 </template>
 
 <script>
+	import md5Libs from "uview-ui/libs/function/md5";
 	export default {
 		data() {
 			return {
@@ -72,7 +73,7 @@
 			this.$refs.uForm.setRules(this.rules);
 		},
 		onLoad() {
-			 if (this.$cache.get('mallList')) {
+			 if (this.$cache.get('phone')) {
 			 	uni.reLaunch({
 			 		url:"/pages/index/index"
 			 	})
@@ -91,19 +92,21 @@
 			},
 			async doLogin(){
 				let params={
-					phone:this.form.phone
+					type:1,
+					phone:this.form.phone,
+					password:md5Libs.md5(this.form.password)
 				}
-				let res=await this.$api.mall.getListByPhone(params)
-				if (this.$isEmpty(res.data)){
-					this.$u.toast('账号或者密码错误!')
-					return
-				}else{
-					this.$cache.put('mallList',res.data)
+				try{
+					let res=await this.$api.appaccount.login(params)
+					this.$cache.put('phone',this.form.phone)
 					uni.reLaunch({
 						url:"/pages/index/index"
 					})
+				}catch(e){
+					this.$u.toast('账号或者密码错误!')
+				}finally{
+					uni.hideLoading()
 				}
-				uni.hideLoading()
 			}
 		}
 	}

+ 2 - 2
pages/login/forget.vue

@@ -29,12 +29,12 @@
 					</u-form-item>
 					<u-form-item    label="密码" prop="phone" label-width="150">
 						<view style="border-bottom: 1rpx solid #DDDDDD;">
-							<u-input :border="false" placeholder="请设置新的登录密码" v-model="phone" type="number"></u-input>
+							<u-input :border="false" placeholder="请设置新的登录密码" v-model="phone" type="password"></u-input>
 						</view>
 					</u-form-item>
 					<u-form-item    label="确认密码" prop="phone" label-width="150">
 						<view style="border-bottom: 1rpx solid #DDDDDD;">
-							<u-input :border="false" placeholder="请再次输入密码" v-model="phone" type="number"></u-input>
+							<u-input :border="false" placeholder="请再次输入密码" v-model="phone" type="password"></u-input>
 						</view>
 					</u-form-item>
 				</u-form>

+ 3 - 3
pages/login/login.vue

@@ -1,7 +1,7 @@
 <template>
 	<view style="position: relative;">
-		<view class="bg"></view>
-		<view class="bg1"></view>
+		<!-- <view class="bg"></view>
+		<view class="bg1"></view> -->
 		<view class="back" @click="$back">
 			<u-icon name="arrow-left" size="50" color="#919191"></u-icon>
 		</view>
@@ -105,7 +105,7 @@
 					this.$u.toast('账号或者密码错误!')
 					return
 				}else{
-					this.$cache.put('mallList',res.data)
+					this.$cache.put('phone',this.form.phone)
 					uni.reLaunch({
 						url:"/pages/index/index"
 					})

+ 213 - 0
pages/login/updatePassword.vue

@@ -0,0 +1,213 @@
+<template>
+	<view style="position: relative;">
+		<view class="bg"></view>
+		<view class="bg1"></view>
+		<view class="back" @click="$back">
+			<u-icon name="arrow-left" size="50" color="#919191"></u-icon>
+		</view>
+		
+		<view class="content">
+			<view class="top">
+				<view class="title">
+					<text>修改登录密码</text>
+					<text>输入手机号修改密码</text>
+				</view>
+			</view>
+			
+			<view  style="width: 76%;margin-top: 80rpx;">
+				<u-form ref="uForm"  :model="form"  :error-type="['message']">
+					<u-form-item   label="手机号" prop="phone" label-width="150">
+						<view style="border-bottom: 1rpx solid #DDDDDD;">
+							<u-input disabled :border="false" placeholder="请输入手机号" v-model="form.phone" type="number"></u-input>
+						</view>
+					</u-form-item>
+					<u-form-item label="旧密码"  label-width="150" prop="oldPassword">
+						<view style="border-bottom: 1rpx solid #DDDDDD;">
+							<u-input :border="false" type="password" placeholder="请输入旧密码" v-model="form.oldPassword"></u-input>
+						</view>
+					</u-form-item>
+					<u-form-item    label="新密码" prop="password" label-width="150">
+						<view style="border-bottom: 1rpx solid #DDDDDD;">
+							<u-input :border="false" type="password" placeholder="请设置新的登录密码" v-model="form.password"></u-input>
+						</view>
+					</u-form-item>
+					<u-form-item    label="确认密码" prop="confirmPassword" label-width="150">
+						<view style="border-bottom: 1rpx solid #DDDDDD;">
+							<u-input :border="false" type="password" placeholder="请再次输入新密码" v-model="form.confirmPassword" ></u-input>
+						</view>
+					</u-form-item>
+				</u-form>
+			</view>
+			
+			<view  style="width: 86%;margin-top: 80rpx;">
+				<view @click="update" class="btn cu-btn round" style="width:100%;height: 90rpx;font-size: 34rpx;">
+					确定修改密码
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import md5Libs from "uview-ui/libs/function/md5";
+	export default {
+		data() {
+			return {
+				customStyle:{
+					'backgroundColor':'#d18c42',
+					'color':'#ffffff'
+				},
+				form:{
+					phone:this.$cache.get('phone'),
+					password:'',
+					oldPassword:'',
+					confirmPassword:'',
+				},
+				rules: {
+					phone: [{
+						required: true,
+						message: '请输入手机号',
+						trigger: ['change', 'blur'],
+					}],
+					password: [{
+						required: true,
+						message: '请设置新的登录密码',
+						trigger: ['change', 'blur'],
+					}],
+					oldPassword: [{
+						required: true,
+						message: '请输入旧密码',
+						trigger: ['change', 'blur'],
+					}],
+					confirmPassword: [{
+						required: true,
+						message: '请再次输入新密码',
+						trigger: ['change', 'blur'],
+					}]
+				},
+				codeTips: '',
+			}
+		},
+		onReady() {
+			this.$refs.uForm.setRules(this.rules);
+		},
+		methods: {
+			update() {
+				this.$refs.uForm.validate(valid => {
+					if (valid) {
+						setTimeout(()=>{
+							this.doUpdate()
+						},500)
+					}
+				});
+			},
+			async doUpdate(){
+				if (this.form.password!=this.form.confirmPassword) {
+					this.$u.toast('输入的两次新密码不一致')
+					return
+				}
+				let params={
+					type:1,
+					phone:this.form.phone,
+					password:md5Libs.md5(this.form.password),
+					oldPassword:md5Libs.md5(this.form.oldPassword)
+				}
+				this.$api.appaccount.setPassword(params).then(res=>{
+					if (res.success) {
+						this.$dialog.showModal('修改成功,请重新登录',false).then(res=>{
+							uni.clearStorage()
+							uni.reLaunch({
+								url:"./account-login"
+							})
+						})
+					}else{
+						this.$u.toast(res.msg)
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	$color:#d18c42;
+	
+	page{
+		background-color: #FFFFFF;
+	}
+	
+	.btn{
+		background-color: $color;
+		color:#FFFFFF;
+	}
+	
+	.btn{
+		background-color: $color;
+		color:#FFFFFF;
+	}
+	
+	.bg{
+		z-index: 99;
+		height: 440rpx;
+		width: 440rpx;
+		position: absolute;
+		right: -240rpx;
+		top: -240rpx;
+		background-color: #d18c42;
+		border-radius: 50%;
+		box-shadow: 0rpx 0rpx 50rpx #c5803b;
+	}
+	
+	.bg1{
+		height: 500rpx;
+		width: 500rpx;
+		position: absolute;
+		right: -240rpx;
+		top: -240rpx;
+		background-color: #d18c42;
+		border-radius: 50%;
+		box-shadow: #c6813b;
+	}
+	
+	.back{
+		position: absolute;
+		top: var(--status-bar-height);
+		left: 20rpx;
+		padding-top: var(--status-bar-height);
+	}
+	
+	.content{
+		height: 90vh;
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		
+		.top{
+			width: 76%;
+			display: flex;
+			.title{
+				margin-right: 20rpx;
+				display: flex;
+				flex-direction: column;
+				justify-content: center;
+				align-items: flex-start;
+				text-align: left;
+				
+				text:first-child{
+					font-weight: 800;
+					font-size: 50rpx;
+					color: #000;
+					margin-bottom: 20rpx;
+				}
+				
+				text:last-child{
+					font-size: 28rpx;
+					color: #7f7f7f;
+				}
+			}
+			
+			
+		}
+	}
+</style>

+ 27 - 25
pages/member-center/member-center.vue

@@ -4,7 +4,7 @@
 			<image src="../../static/icon/vip.png" mode=""></image>
 			<text>没有会员中心信息</text>
 
-			<view class="cu-btn btn-bg-color round" style="width: 48%;height: 80rpx;position: fixed;bottom: 20%;">
+			<view @click="$jump('/pages/member-center/add')" class="cu-btn btn-bg-color round" style="width: 48%;height: 80rpx;position: fixed;bottom: 20%;">
 				<u-icon name="plus-circle" size="40"></u-icon>
 				<text class="margin-left-10 text-lg">创建会员中心</text>
 			</view>
@@ -27,7 +27,7 @@
 			</view>
 
 			<view class="card">
-				<view class="flex">
+				<view class="flex tableTitle">
 					<view class="area1 title">
 						会员名称
 					</view>
@@ -39,7 +39,7 @@
 					</view>
 				</view>
 
-				<mescroll-body ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
+				<mescroll-body :height="height" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
 					:down="downOption" :up="upOption">
 					<view class="item" v-for="(item,index) in dataList" :key="index">
 						<view class="area1 flex text-bold">
@@ -75,17 +75,26 @@
 				detail: {},
 				dataList: [],
 
+				height:'300px',
 				downOption: {
-					use: false,
+					use: true,
 					auto: false // 不自动加载
 				},
 				upOption: {
-					use: false,
+					use: true,
 					auto: false // 不自动加载
 				},
 			}
 		},
+		watch:{
+			mescroll(){
+				if (this.isOpenMember) {
+					this.mescroll.resetUpScroll();
+				}
+			}
+		},
 		onLoad() {
+			this.$u.sys()
 			this.fetchShopDetail()
 		},
 		filters: {
@@ -100,36 +109,29 @@
 				return realVal;
 			},
 		},
-
+		onReady() {
+			this.getElInfo()
+		},
 		methods: {
-			fetchShopDetail() {
+			async getElInfo() {
+				let rectInfo = await this.$u.getRect('.tableTitle');
+				this.height=this.$u.sys().windowHeight - rectInfo.top + 'px'
+			},
+			async fetchShopDetail() {
 				let params = {
 					id: this.vuex_mallId
 				}
-				this.$api.mall.detail(params).then(res => {
-					if (res.data.isOpenMember == 1) {
-						this.isOpenMember = true
-						this.detail = res.data
-						//加载会员中心
-						this.useOption()
-					}
-				})
+				let res=await this.$api.mall.detail(params)
+				if (res.data.isOpenMember == 1) {
+					this.isOpenMember = true
+					this.detail = res.data
+				}
 			},
 			downCallback() {
 				setTimeout(() => {
 					this.mescroll.resetUpScroll();
 				}, 800)
 			},
-			useOption() {
-				this.downOption = {
-					use: true,
-					auto: true
-				}
-				this.upOption = {
-					use: true,
-					auto: true
-				}
-			},
 			upCallback(mescroll) {
 				let params = {
 					mallId: this.vuex_mallId,

+ 3 - 3
pages/publish/publish.vue

@@ -78,7 +78,7 @@
 		<view class="form">
 			<u-form label-position="top" label-width="160">
 				<u-form-item label-width="200" label="活动详情" left-icon="coupon">
-					<u-input type="area" height="150" v-model="form.detail" placeholder="不少于100字" />
+					<u-input type="area" height="150" v-model="form.detail" placeholder="请输入活动详情" />
 				</u-form-item>
 			</u-form>
 		</view>
@@ -131,8 +131,8 @@
 					detail: '',
 					subsidy: '',
 					hundredPointValue: '',
-					sponsorType:1,
-					auditStatus:0
+					sponsorType:this.$global.sponsorType.mall,
+					auditStatus:this.$global.activityStatus.wait_admin_audit,
 				},
 				addressDetail: '',
 

+ 157 - 0
pages/shopAudit/comps/card.vue

@@ -0,0 +1,157 @@
+<template>
+	<view>
+		<view @click="detail(item.id)" class="card" v-for="(item,index) in list" :key="index">
+			<view class="top">
+				<view class="title center">
+					<image :src="item.cover" mode=""></image>
+					<text>{{item.name}}</text>
+				</view>
+				<view class="detail">
+					<view class="">
+						<text>查看详情</text>
+						<text class="cuIcon-right margin-left-10"></text>
+					</view>
+				</view>
+			</view>
+			<view class="content">
+				<view class="">
+					<text class="label">申请人:</text>
+					<text class="value">{{item.personName}}</text>
+				</view>
+				<view class="padding-top-20">
+					<text class="label">时间:</text>
+					<text class="value">{{item.createTime}}</text>
+				</view>
+				
+				<view class="padding-top-20" style="color: #E13939;" v-if="item.auditStatus==2">
+					<text>拒绝原因:</text>
+					<text>{{item.auditAdvice}}</text>
+				</view>
+			</view>
+
+			<view class="bottom" v-if="item.auditStatus==0">
+				<view @click.stop="pass(item)" class="cu-btn round pass-btn sm"
+					style="width: 140rpx;height: 50rpx;font-size: 28rpx;">
+					通过
+				</view>
+				<view @click.stop="fail(item)" class="cu-btn round refuse-btn sm"
+					style="width: 140rpx;margin-left: 30rpx;height: 50rpx;font-size: 28rpx;">
+					拒绝
+				</view>
+			</view>
+			
+			<view class="icon" v-else>
+				<image style="width: 96rpx" mode="widthFix" v-if="item.auditStatus==1" src="../../../static/icon/pass.png"></image>
+				<image style="width: 96rpx" mode="widthFix" v-if="item.auditStatus==2" src="../../../static/icon/refuse.png"></image>
+				<image style="width: 96rpx" mode="widthFix" v-if="item.auditStatus==3" src="../../../static/icon/stop.png"></image>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			list: Array
+		},
+		data() {
+			return {
+
+			}
+		},
+		methods: {
+			pass(item) {
+				this.$emit('pass', item)
+			},
+			fail(item) {
+				this.$emit('fail', item)
+			},
+			detail(id){
+				uni.navigateTo({
+					url:"/pages/shopAudit/detail?id="+id,
+					fail: (err) => {
+						console.log(err);
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.pass-btn {
+		background-color: #EF9944;
+		color: #FFFFFF;
+	}
+
+	.refuse-btn {
+		background-color: #FFFFFF;
+		color: #EF9944;
+		border: 1rpx solid #EF9944;
+	}
+
+	.card {
+		border-radius: 30rpx;
+		background-color: #FFFFFF;
+		display: flex;
+		flex-direction: column;
+		padding: 30rpx 36rpx;
+		margin: 20rpx 0;
+		position: relative;
+
+		.top {
+			display: flex;
+			justify-content: space-between;
+
+			.title {
+				color: #252525;
+				display: flex;
+				font-size: 34rpx;
+				font-weight: 800;
+
+				image {
+					margin-right: 10rpx;
+					width: 40rpx;
+					height: 40rpx;
+					border-radius: 50%;
+				}
+			}
+
+			.detail {
+				display: flex;
+				flex-direction: column;
+				justify-content: flex-end;
+				color: #999999;
+				font-size: 26rpx;
+			}
+		}
+
+		.content {
+			margin: 30rpx 20rpx 20rpx;
+
+			.label {
+				font-size: 28rpx;
+				color: #999999;
+			}
+
+			.value {
+				color: #252525;
+			}
+		}
+
+		.bottom {
+			display: flex;
+			justify-content: flex-end;
+		}
+		
+		.icon{
+			position: absolute;
+			bottom: 20rpx;
+			right: 40rpx;
+			image{
+				width: 96rpx;
+				height: 84rpx;
+			}
+		}
+	}
+</style>

+ 132 - 0
pages/shopAudit/comps/item.vue

@@ -0,0 +1,132 @@
+<template>
+	<MeScroll  :up="up" :down="down" @up="upFn" :fixed="false" @down="downFn" @init="initMeScroll">
+		<u-toast ref="uToast"/>
+		<card @pass="pass" @fail="fail" :list="list" ></card>
+	</MeScroll>
+</template>
+<script>
+	import MeScroll from '@/components/mescroll-body/mescroll-uni.vue'
+	import card from './card.vue'
+	export default {
+		components:{
+			MeScroll,card
+		},
+		props: {
+			type: Number,
+			i: Number,
+			item:Object
+		},
+		data() {
+			return {
+				//审核不通过时展示
+				modelShow:false,
+				//审核不通过的原因
+				dataDetail:{},
+				
+				isInit: false, // 是否初始化
+				list: [], // 列表数据
+				mescroll: null, // mescroll 对象
+				// 上拉配置参数
+				up: {
+					noMoreSize: 5, 
+					auto: false,
+					page: {
+						page: 0,
+						size: 10
+					}
+				},
+				// 下拉配置参数
+				down: {
+					use: false, 
+					auto: false
+				}
+			}
+		},
+		created() {
+			
+		},
+		watch:{
+			type(val) {
+				if(!this.isInit && val === this.i) {
+					this.mescroll.resetUpScroll()
+				}
+			}
+		},
+		mounted() {
+			if(!this.isInit && this.i === 0) {
+				this.mescroll.resetUpScroll()
+			}
+		},
+		methods: {
+			/**
+			 * 通过审核
+			 */
+			pass(data){
+				let that=this
+				let item=this.$u.deepClone(data)
+				this.$dialog.showModal("确定通过?").then(res=>{
+					item.auditStatus=1
+					this.$api.shop.submit(item).then(res=>{
+						if (res.success==true) {
+							this.$u.toast(res.msg)
+							that.mescroll.resetUpScroll()
+						}
+					})
+				})
+			},
+			/**
+			 * 显示审核不通过的意见框
+			 * @param {Object} item
+			 */
+			fail(item){
+				this.$emit('showOpinion',item)
+			},
+			/**
+			 * @param {Object} mescroll 初始化组件
+			 */
+			initMeScroll(mescroll) {
+				this.mescroll = mescroll
+			},
+			/**
+			 * @param {Object} mescroll 上拉回调
+			 */
+			upFn(mescroll) {
+				let params={
+					mallId:this.vuex_mallId,
+					current:mescroll.num,
+					size:mescroll.size
+				}
+				if (this.item.value!=-1) {
+					params.auditStatus=this.item.value
+				}
+				try{
+					this.$api.mall.getShopList(params).then(res=>{
+						let data=res.data.records
+						let length=data.length
+						let total=res.data.total
+						mescroll.endBySize(length, total);
+						if(mescroll.num == 1) this.list = []; //如果是第一页需手动制空列表
+						this.list=this.list.concat(data); //追加新数据
+					})
+				}catch(e){
+					mescroll.endErr();
+				}
+			},
+			/**
+			 * 下拉回调
+			 * */
+			downFn(mescroll) {
+				setTimeout(()=>{
+					this.$u.toast('刷新成功')
+					this.mescroll.resetUpScroll()
+				},1500)
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	view{
+		box-sizing: border-box;
+	}
+</style>

+ 196 - 0
pages/shopAudit/detail.vue

@@ -0,0 +1,196 @@
+<template>
+	<view class="safe-area-inset-bottom">
+		<view class="card">
+			<view class="title">
+				申请信息
+			</view>
+			<view class="item">
+				<text  class="left">状态</text>
+				<text v-if="detail.auditStatus==0" class="right" style="color: #ff9900;">待审核</text>
+				<text v-if="detail.auditStatus==1" class="right" style="color: #19be6b;">已通过</text>
+				<text v-if="detail.auditStatus==2" class="right" style="color: #E13939;">已拒绝</text>
+				<text v-if="detail.auditStatus==3" class="right" style="color: #E13939;">已停用</text>
+			</view>
+			<view class="item" v-if="detail.auditStatus==2">
+				<text  class="left">拒绝原因</text>
+				<text class="right">{{detail.auditAdvice}}</text>
+			</view>
+			<view class="item">
+				<text  class="left">申请时间</text>
+				<text class="right">{{detail.createTime}}</text>
+			</view>
+			<view class="item">
+				<text  class="left">商户名</text>
+				<text class="right">{{detail.name}}</text>
+			</view>
+			<view class="item">
+				<text  class="left">申请人</text>
+				<text class="right">{{detail.personName}}</text>
+			</view>
+			<view class="item">
+				<text  class="left">身份证号码</text>
+				<text class="right">{{detail.personIdCard}}</text>
+			</view>
+			<view class="item" style="justify-content: space-around;">
+				<image @click="$util.preview(detail.idCardFront)" style="width: 48%;height: 160rpx;" :src="detail.idCardFront"></image>
+				<image @click="$util.preview(detail.idCardContrary)" style="width: 48%;height: 160rpx;" :src="detail.idCardContrary" ></image>
+			</view>
+		</view>
+		
+		<view class="card">
+			<text class="title">商户信息</text>
+			<view class="item">
+				<text  class="left">门店地区</text>
+				<text class="right">{{detail.province}} - {{detail.city}} - {{detail.area}}</text>
+			</view>
+			<view class="item">
+				<text class="left">所属商场</text>
+				<text class="right">{{detail.mallName}}</text>
+			</view>
+			<view class="item">
+				<text class="left">具体地址</text>
+				<text class="right">{{detail.address || '暂无'}}</text>
+			</view>
+			<view class="item">
+				<text class="left">商场区域</text>
+				<text class="right">{{detail.mallAreaName}}</text>
+			</view>
+			<view class="item">
+				<text class="left">单位全称</text>
+				<text class="right">{{detail.fullName}}</text>
+			</view>
+			<view class="item">
+				<text class="left">公司网址</text>
+				<text class="right">{{detail.webUrl}}</text>
+			</view>
+			<view class="item">
+				<text class="left">公司法人姓名</text>
+				<text class="right">{{detail.legalPersonName}}</text>
+			</view>
+			<view class="item">
+				<text class="left">公司法人姓名</text>
+				<text class="right">{{detail.legalPersonName}}</text>
+			</view>
+			<view class="item">
+				<text class="left">公司总类</text>
+				<view class="right">
+					<view class="cu-tag tag-bg round sm" v-for="(item,index) in tags" :key="index">
+						{{item}}
+					</view>
+				</view>
+			</view>
+			<view class="item" style="justify-content: flex-start;flex-direction: column;">
+				<text class="left">营业执照</text>
+				<view class="center padding-top-20">
+					<image @click="$util.preview(detail.businessLicense)" style="width: 50%;height: 250rpx;" :src="detail.businessLicense" mode=""></image>
+				</view>
+			</view>
+			<view class="item" style="justify-content: flex-start;flex-direction: column;">
+				<text class="left">店铺实况</text>
+				<view class="flex justify-start padding-top-20 flex-wrap">
+					<image @click="$util.preview(detail.businessLicense)" style="width: 30%;height: 120rpx;margin: 10rpx;" :src="detail.businessLicense" mode=""></image>
+				</view>
+			</view>
+		</view>
+		
+		<block  v-if="detail.auditStatus==0">
+			<view class="" style="height: 90rpx;"></view>
+			<view :style="{paddingBottom:safeAreaBottom}" class="footer-fixed padding-20  bg-white flex justify-end margin-right-30" style="box-sizing: border-box;z-index: 999;border-top: 1rpx solid #f1f1f1;">
+				<view @click="pass" class="cu-btn df btn-bg-color  round margin-right-20" style="padding-left: 46rpx;padding-right: 46rpx;">
+					通过
+				</view>
+				<view @click="opinionShow=true" class="cu-btn df btn-line-color  round " style="padding-left: 46rpx;padding-right: 46rpx;">
+					拒绝
+				</view>
+			</view>
+		</block>
+		
+		<u-modal :show-cancel-button="true" confirm-color="#FF9447" @confirm="opinionConfirm" title="审核意见" :mask-close-able="true"
+			v-model="opinionShow">
+			<view class="slot-content" style="margin: 20rpx;">
+				<u-form label-width="150" ref="uForm">
+					<u-form-item :border-bottom="false">
+						<u-input height="150" placeholder="请输入审核意见(选填)" v-model="opinion" />
+					</u-form-item>
+				</u-form>
+			</view>
+		</u-modal>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				id:'',
+				detail:{},
+				tags:[],
+				opinionShow:false,
+				auditAdvice:''
+			}
+		},
+		onLoad(options) {
+			this.id=options.id
+			this.fetchDetail()
+		},
+		methods: {
+			fetchDetail(){
+				this.$api.shop.detail({id:this.id}).then(res=>{
+					this.detail=res.data
+					this.tags=this.detail.labelNames.split(',')
+				})
+			},
+			opinionConfirm() {
+				let item = this.$u.deepClone(this.detail)
+				item.auditStatus = 2
+				this.$api.shop.submit(item).then(res => {
+					if (res.success == true) {
+						this.$u.toast(res.msg)
+						this.fetchDetail()
+					}
+				})
+			},
+			pass(data){
+				let item=this.$u.deepClone(this.detail)
+				this.$dialog.showModal("确定通过?").then(res=>{
+					item.auditStatus=1
+					this.$api.shop.submit(item).then(res=>{
+						if (res.success==true) {
+							this.$u.toast(res.msg)
+							this.fetchDetail()
+						}
+					})
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.card{
+		margin: 30rpx;
+		padding: 20rpx;
+		border-radius: 20rpx;
+		background-color: #FFFFFF;
+		
+		.title{
+			font-size: 32rpx;
+			font-weight: 800;
+			padding-bottom: 10rpx;
+		}
+		
+		.item{
+			padding: 20rpx 0;
+			display: flex;
+			justify-content: space-between;
+			
+			.left{
+				color: #999999;
+			}
+			
+			.right{
+				color: #252525;
+			}
+		}
+	}
+</style>

+ 171 - 0
pages/shopAudit/shopAudit.vue

@@ -0,0 +1,171 @@
+<template>
+	<view class="container">
+		<u-toast ref="uToast" />
+		<u-modal :show-cancel-button="true" confirm-color="#FF9447" @confirm="opinionConfirm" title="审核意见" :mask-close-able="true"
+			v-model="opinionShow">
+			<view class="slot-content" style="margin: 20rpx;">
+				<u-form label-width="150" ref="uForm">
+					<u-form-item :border-bottom="false">
+						<u-input height="150" placeholder="请输入审核意见(选填)" v-model="opinion" />
+					</u-form-item>
+				</u-form>
+			</view>
+		</u-modal>
+
+		<view class="tabs flex flex-direction">
+			<scroll-view scroll-x class="bg-white nav">
+				<view class="flex text-center">
+					<view class="cu-item flex-sub" :class="index==current?'text-base cur text-xl text-bold ':'text-lg'"
+						v-for="(item,index) in tabs" :key="index" @tap="tabChange(index)">
+						{{item.name}}
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+		<view style="height: 100%;">
+			<swiper style="height: 100%;" :current="current" @change="swiperChange" @animationfinish="animationfinish">
+				<swiper-item v-for="(item, index) in tabs" :key="index">
+					<scroll-view scroll-y style="height: 100%;">
+						<item @showOpinion="showOpinion" ref="mescrollItem" :i="index" :item="item"
+							:type="current"></item>
+					</scroll-view>
+				</swiper-item>
+			</swiper>
+		</view>
+	</view>
+</template>
+<script>
+	import item from "./comps/item.vue"
+	export default {
+		components: {
+			item
+		},
+		data() {
+			return {
+				// 审核不通过的审核意见
+				opinion: '',
+				// 显示审核不通过对话框
+				opinionShow: false,
+				// 审核不通过的对象
+				failItem: {},
+				
+				current: 0,
+				swiperCurrent: 0,
+				tabs: [
+					{
+						name: '待审核',
+						value: 0
+					},
+					{
+						name: '已通过',
+						value: 1
+					},
+					{
+						name: '已拒绝',
+						value: 2
+					},
+					{
+						name: '已停用',
+						value: 3
+					}
+				],
+			}
+		},
+		onShow() {
+			let pages = getCurrentPages(); //获取所有页面栈实例列表
+			let currPage = pages[pages.length - 1]; //当前页页面实例
+			if (currPage.data.flag == true) {
+				this.refreshMescroll()
+			}
+		},
+		onLoad() {
+
+		},
+		methods: {
+			showOpinion(item) {
+				this.opinionShow = true
+				this.failItem = item
+			},
+			/**
+			 * 审核不通过
+			 */
+			opinionConfirm() {
+				let item = this.$u.deepClone(this.failItem)
+				let that = this
+				item.auditStatus = 2
+				item.auditAdvice = that.opinion
+				that.$api.shop.submit(item).then(res => {
+					if (res.success == true) {
+						this.$u.toast(res.msg)
+						that.$nextTick(() => {
+							that.refreshMescroll()
+						})
+					}
+				})
+			},
+			/**
+			 * 刷新列表
+			 */
+			refreshMescroll() {
+				let curMescroll = this.getMescroll(this.current)
+				curMescroll && curMescroll.resetUpScroll()
+			},
+			/**
+			 * 获取Mescroll对象
+			 * @param {Object} i
+			 */
+			getMescroll(i) {
+				let mescrollItems = this.$refs.mescrollItem;
+				if (mescrollItems) {
+					let item = mescrollItems[i]
+					if (item) return item.mescroll
+				}
+				return null
+			},
+			tabChange(index) {
+				this.current = index
+			},
+			swiperChange(e) {
+				uni.pageScrollTo({
+					scrollTop: 0,
+					duration: 0
+				});
+				this.current = e.detail.current
+			},
+			animationfinish({
+				detail: {
+					current
+				}
+			}) {
+				this.swiperCurrent = current;
+				this.current = current;
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.text-blue {
+		color: $base-color;
+	}
+
+	.text-xl {
+		font-size: 34rpx;
+	}
+
+	.container {
+		height: calc(100vh);
+		background-color: #F6F6F6;
+		padding: 78rpx 0rpx 0rpx;
+
+		.tabs {
+			position: fixed;
+			top: -10rpx;
+			left: 0;
+			width: 100%;
+			background-color: #FFFFFF;
+			box-sizing: border-box;
+			z-index: 3;
+		}
+	}
+</style>

+ 2 - 2
pages/stores/comps/card.vue

@@ -9,12 +9,12 @@
 				<view class="cu-avatar  xl" :style="'background-image: url('+item.cover+')'"></view>
 				<view class="content">
 					<view class="flex-direction flex">	
-						<text class="text-cut-1" style="width: 96%;font-size: 32rpx;">{{item.fullName}}</text>
+						<text class="text-cut-1" style="width: 96%;font-size: 32rpx;">{{item.name}}</text>
 						<view class="" style="width: 96%;">
 							<text class="sub-title text-cut-1">{{item.slogan}}</text>
 						</view>
 					</view>
-					<view class="margin-bottom-10">
+					<view class="margin-bottom-10" v-if="item.mallAreaName">
 						<view class="cu-tag tag-bg round sm"
 							style="font-size: 24rpx;padding: 0rpx 40rpx;height: 40rpx;line-height: 42rpx;">
 							{{item.mallAreaName}}

+ 7 - 3
pages/stores/stores.vue

@@ -12,7 +12,7 @@
 		<view class="bg-white padding-20">
 			<u-tabs :list="tagsList" active-color="#FF9447" :is-scroll="true" :current="current" @change="change">
 			</u-tabs>
-			<view class="padding-top-10" v-if="areaList">
+			<view class="padding-top-10" v-if="areaList.length>1">
 				<scroll-view scroll-x class="bg-white" style="white-space: nowrap;" scroll-with-animation>
 					<view @click="selectArea(index)" v-for="(item,index) in areaList" :key="index" class="cu-tag"
 						:style="areaIndex==index?'background-color: #FFA66D;color: #FFFFFF;':'background-color: #F5F5F6;color: #6C6C6C;'"
@@ -59,7 +59,11 @@
 				list: [],
 				keyword:null,
 
-				areaIndex: 0
+				areaIndex: 0,
+				
+				downOption:{
+					auto:false
+				}
 			}
 		},
 		watch:{
@@ -86,7 +90,7 @@
 						id,
 						auditStatus: 3
 					}
-					this.$api.shop.stop(params).then(res => {
+					this.$api.shop.update(params).then(res => {
 						if (res.success) {
 							this.mescroll.resetUpScroll();
 						}

BIN
static/bank/ABC.png


BIN
static/bank/BOC.png


BIN
static/bank/CCB.png


BIN
static/bank/CGB.png


BIN
static/bank/CMBCHINA.png


BIN
static/bank/ECITIC.png


BIN
static/bank/HXB.png


BIN
static/bank/ICBC.png


BIN
static/del/del.png


BIN
static/del/del1.png


BIN
static/del/del2.png


BIN
static/del/del3.png


BIN
static/del/del4.png


BIN
static/icon/pass.png


BIN
static/icon/password.png


BIN
static/icon/refuse.png


BIN
static/icon/stop.png


+ 1 - 0
uni.scss

@@ -1,5 +1,6 @@
 @import 'uview-ui/theme.scss';
 /* 行为相关颜色 */
+$base-color:#FF9447;
 $uni-color-primary: #007aff;
 $uni-color-success: #4cd964;
 $uni-color-warning: #f0ad4e;

+ 19 - 5
utils/global.js

@@ -1,9 +1,23 @@
 let global = {
+	
+	//发起者类型
+	sponsorType:{
+		mall:'1',//商场
+		shop:'2'//店铺
+	},
 
-  wxParams:{
-	  APPID:'wx5d30bdd3d0f579af',//appid
-	  SECRET:"3e3a7793022808fcb63e215bfa1e1f93"
-  },
+	activityStatus: {
+		wait_mall_audit:'0',//待审核
+		pass:'1', //审核通过
+		refuse:'2',//审核不通过
+		stop:'3',//已停用
+		wait_admin_audit:'4' //待平台审核
+	},
+
+	wxParams: {
+		APPID: 'wx5d30bdd3d0f579af', //appid
+		SECRET: "3e3a7793022808fcb63e215bfa1e1f93"
+	},
 }
 
-export default global 
+export default global

+ 1 - 1
utils/mixin.js

@@ -33,7 +33,7 @@ let page = {
 			'pages/test/test',
 		]
 		if (!WHiTE_LIST.includes(currentPage)) {
-			if (!this.$cache.get('mallList')) {
+			if (!this.$cache.get('phone')) {
 				uni.reLaunch({
 					url: "/pages/login/login"
 				})