hmp 4 anni fa
parent
commit
5f446eafab
45 ha cambiato i file con 2154 aggiunte e 2224 eliminazioni
  1. 1 1
      assets/colorui/app.css
  2. 63 33
      assets/http/api.js
  3. 2 7
      assets/http/service.js
  4. 0 311
      components/mp-tree/code.js
  5. 0 66
      components/mp-tree/components/search/index.vue
  6. 0 342
      components/mp-tree/css/icon.css
  7. 0 116
      components/mp-tree/css/style.scss
  8. 0 69
      components/mp-tree/tree.vue
  9. 14 4
      pages.json
  10. 7 3
      pages/acitvityAudit/acitvityAudit.vue
  11. 114 0
      pages/acitvityAudit/comps/card-old.vue
  12. 106 83
      pages/acitvityAudit/comps/card.vue
  13. 3 3
      pages/acitvityAudit/comps/item.vue
  14. 169 98
      pages/acitvityAudit/detail.vue
  15. 74 128
      pages/activity/activity.vue
  16. 123 114
      pages/activity/comps/card.vue
  17. 118 0
      pages/activity/comps/item.vue
  18. 217 111
      pages/activity/detail.vue
  19. 0 116
      pages/chooseLable/chooseLable.vue
  20. 22 21
      pages/index/index.vue
  21. 59 0
      pages/index/submit-success.vue
  22. 60 38
      pages/index/tag-manage.vue
  23. 104 100
      pages/login/forget.vue
  24. 29 32
      pages/login/login.vue
  25. 5 3
      pages/login/updatePassword.vue
  26. 9 6
      pages/member-center/add.vue
  27. 221 0
      pages/member-center/detail.vue
  28. 42 71
      pages/member-center/member-center.vue
  29. 60 72
      pages/publish/publish.vue
  30. 5 9
      pages/shopAudit/comps/card.vue
  31. 0 192
      pages/shopAudit/detail.vue
  32. 90 0
      pages/shopAudit/detail/comps/audit-info.vue
  33. 249 0
      pages/shopAudit/detail/comps/shop-info.vue
  34. 100 0
      pages/shopAudit/detail/detail.vue
  35. 4 4
      pages/shopAudit/shopAudit.vue
  36. 23 11
      pages/stores/comps/card.vue
  37. 18 9
      pages/stores/detail.vue
  38. 22 48
      pages/stores/stores.vue
  39. BIN
      static/icon/default.png
  40. BIN
      static/icon/enable.png
  41. BIN
      static/icon/map.png
  42. BIN
      static/icon/success2.png
  43. 1 1
      utils/dialog.js
  44. 5 0
      utils/digital.js
  45. 15 2
      utils/global.js

+ 1 - 1
assets/colorui/app.css

@@ -317,7 +317,7 @@
 
 .footer-fixed {
 	position: fixed;
-	z-index: 99999;
+	z-index: 99;
 	width: 100%;
 	bottom: 0;
 	left: 0;

+ 63 - 33
assets/http/api.js

@@ -6,69 +6,99 @@ const uploadFile =(p)=> http.upload('blade-resource/oss/endpoint/put-file', {nam
 
 //手机验证码
 const sms={
-	send:p => http.post('huawei/sms/sendSms'+p),
-	validCode:(p)=> http.post('huawei/sms/validCode'+p)
+	send:p => http.post('/sms/sendSms'+p)
 }
+
+
 //商场管理
 const mall={
 	login:p => http.post('/shop/account/login',p),
-	detail:p => http.get("cyzh-ldt/mall/detail", {params:p}),
+	detail:p => http.get("ldt_mall/mall/detail", {params:p}),
+	submit:p => http.post("ldt_mall/mall/submit", p),
 	getListByPhone:p => http.get("/ldt_mall/mall/list", {params:p}),
-	getShopLabelByMallId:p => http.get("cyzh-ldt/app/mall/getShopLabelByMallId?mallId="+p),
-	getMallAreaByMallId:p => http.get("cyzh-ldt/app/mall/getMallAreaByMallId?mallId="+p),
-	getShopList:p => http.get("cyzh-ldt/app/mall/getShopList",{params:p}),
-	statistic:p => http.get("cyzh-ldt/app/mall/statistic?mallId="+p),
-	getTagManageList:p => http.get("cyzh-ldt/mallshoplabel/list",{params:p}),
-	getTagSelect:p => http.get("cyzh-ldt/gxlabel/list",{params:p}),
-	getSetTag:p => http.post("cyzh-ldt/mallshoplabel/mall/setLabels",p),
-	getTagRemove:p => http.post("cyzh-ldt/mallshoplabel/remove?ids="+p)
+	memberInfo:p => http.get('mall/memberInfo',{params:p}),
+	getShopList:p => http.get("shop/list",{params:p}),
+	statistic:p => http.get("mall/statistic?mallId="+p),
+	getTagSelect:p => http.get("blade-system/dict-biz/list",{params:p}),
+	getSetTag:p => http.post("ldt_mall/mall/submit",p),
+	getTagRemove:p => http.post("cyzh-ldt/mallshoplabel/remove?ids="+p),
 }
 
+
+
 const appaccount={
 	login:p => http.post('/common/account/login',p),
-	setPassword:p => http.post('/cyzh-ldt/appaccount/setPassword',p),
-	forgetPassword:p => http.post('/cyzh-ldt/appaccount/forgetPassword',p),
+	forgetPsw :p=> http.post('/common/account/forgetPsw',p),
+	phoneLogin:p => http.post('/common/account/phoneLogin',p),
+	setPassword:p => http.post('/common/account/updatePsw',p),
 }
 
 
-const memberCenter={
-	list:p => http.get('cyzh-ldt/app/mall/getMembersByMallId',{params:p}),
-	create:(p)=> http.post('cyzh-ldt/app/mall/createMemberCenter',p),
-	update:(p)=> http.post('cyzh-ldt/app/mall/updateMemberCenter',p),
+//会员中心
+const member={
+	list:p => http.get('ldt_user/member/list',{params:p}),
 }
 
 
 
 const shop={
-	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}),
+	update:p => http.post('ldt_shop/shop/update',p),
+	submit:p => http.post('ldt_shop/shop/submit',p),
+	detail:p => http.get("ldt_shop/shop/detail", {params:p}),
+	indexInfo:p => http.get("shop/indexInfo", {params:p}),
+}
+
+const audit={
+	list:p => http.get("ldt_shop/audit/list", {params:p}),
+	submit:p => http.post('ldt_shop/audit/submit',p),
+	detail:p => http.get("ldt_shop/audit/detail", {params:p}),
 }
 
 const activity={
-	publish:(p)=> http.post('/cyzh-ldt/activity/submit',p),
-	list:p => http.get("cyzh-ldt/app/mall/getActivity", {params:p}),
+	//发起活动
+	publish:(p)=> http.post('/common/activity/publish',p),
+	//已发起的活动
+	list:p => http.get("/common/activity/list", {params:p}),
+	//可参加的活动
+	getCanJoinActivity:p => http.get("/common/activity/getCanJoinActivity", {params:p}),
+	//活动详情
+	detail:p => http.get("ldt_activity/activity/detail", {params:p}),
 	//结束活动
-	stop:(p)=> http.post('/cyzh-ldt/activity/updateBatch',p),
+	stop:(p)=> http.post('ldt_activity/activity/submit',p),
+}
+
+const joinRecord={
+	//活动详情查看该活动的参加者
+	list:p => http.get("ldt_activity/joinrecord/list", {params:p}),
+	//活动清单中查看自己参加的活动
+	joined:p => http.get("common/joinrecord/list", {params:p}),
 	//退出活动
-	exit:(p)=> http.post('cyzh-ldt/activityjoinrecord/exitBatch',p),
+	remove:p => http.post("ldt_activity/joinrecord/remove?ids="+p),
 	//参加活动
-	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}),
+	submit:(p)=> http.post('ldt_activity/joinrecord/submit',p),
 }
 
 
+const flow={
+	//获取流程自定义主键
+	getProcessDefinitionId:p => http.get('blade-flow/work/start-list',{params:p}),
+	//获取任务id
+	getTaskId:p => http.get('blade-flow/work/todo-list', {params:p}),
+	//获取流程历史记录
+	historyFlowList:p => http.get('blade-flow/process/history-flow-list', {params:p}),
+	//提交审核流程
+	flowAuditSubmit:p => http.post("blade-flow/work/complete-task", p),
+}
+
 export const api={
 	uploadFile,
 	sms,
 	mall,
 	appaccount,
-	memberCenter,
+	member,
 	shop,
-	activity
+	audit,
+	activity,
+	joinRecord,
+	flow
 }

+ 2 - 7
assets/http/service.js

@@ -1,12 +1,12 @@
 import Request from 'luch-request'
 
-let baseURL = 'http://localhost:2366/'
+let baseURL = 'http://192.168.1.168:2366/'
 // let baseURL = 'http://192.168.1.244:1888/api/'
 // let baseURL = 'https://ldt.guosen-fumao.cn/api/'
 
 
 let tokenUrl = baseURL +
-	"blade-auth/oauth/token?tenantId=000000&password=f67e0b29283bb804f96e28f43ddce79f&username=admin"
+	"blade-auth/oauth/token?tenantId=000000&password=21232f297a57a5a743894a0e4a801fc3&username=admin"
 
 //获取token
 const getTokenStorage = () => {
@@ -80,11 +80,6 @@ http.interceptors.response.use(async (response) => {
 			})
 		}
 	}
-	uni.showToast({
-		icon: 'none',
-		position: 'bottom',
-		title: '网络异常'
-	})
 	return Promise.reject(err)
 })
 export {

+ 0 - 311
components/mp-tree/code.js

@@ -1,311 +0,0 @@
-	import search from './components/search/index.vue'
-	export default {
-		name: "tree",
-		props: {
-			trees: {
-				type: Array,
-				default: () => {
-					return []
-				}
-			},
-			//是否开启选中
-			isCheck: {
-				type: Boolean,
-				default: () => {
-					return false
-				}
-			},
-			parent:{
-				type: Boolean,
-				default: () => {
-					return false
-				}
-			},
-			max:{
-				type: Number,
-				default: () => {
-					return 2
-				}
-			},
-			checkList: {
-				type: Array,
-				default: () => []
-			},
-			parentList: {
-				type: Array,
-				default: () => []
-			},
-			searchIf: {
-				type: Boolean,
-				default: () => true
-			},
-			props: {
-				type: Object,
-				default: () => {
-					return {
-						label: 'name',
-						children: 'children',
-						multiple: false,
-						checkStrictly: false,//不关联
-					}
-				}
-			}
-		},
-		data() {
-			return {
-				isre: false,
-				tree: this.trees,
-				newNum: 0,
-				oldNum: 0,
-				allData: this.trees,
-				tree_stack: [1],
-				parent_data: this.parentList||[],//选择父辈
-				searchResult: [],
-				tochild: false,
-				newCheckList: this.checkList,
-				scrollLeft: 999,
-				nodePathArray: []
-			}
-		},
-		components: {
-			search
-		},
-		mounted() {
-			if(this.props.multiple&&this.props.checkStrictly){
-				if(this.newCheckList.length!=0){
-					 this.checkAllChoose();
-					 return
-				}
-				for(let i = 0; i<this.tree.length;i++){
-					this.$set(this.tree[i],'bx',0)
-					this.$set(this.tree[i],'qx',0)
-				}
-			}
-			if(!this.props.multiple&&this.newCheckList.length>0) {
-				this.getNodeRoute(this.allData,this.newCheckList[0].id)
-				let arr = this.nodePathArray.reverse()
-				if(arr.length == 0)return
-				this.tree_stack = this.tree_stack.concat(arr);
-				this.tree = this.tree_stack[this.tree_stack.length-1].children;
-			}
-		},
-		methods: {
-			//多选
-			async checkboxChange(item, index, bx, qx) {
-				var that = this;
-				if(!this.props.multiple) return;
-				let findIdex = that.newCheckList.findIndex(e=>{return item.id==e.id});
-				if (findIdex>-1) { //反选
-					if (that.props.checkStrictly) {//关联子级
-						if (item.hasChildren) {//用户
-							that.newCheckList.splice(findIdex,1) 
-						} else {//非用户,取消所有下一级
-							that.getIdBydelete(item.children)
-						}
-					} else {
-						that.newCheckList.splice(findIdex,1) 
-					}
-				} else { //选中
-					if (!item.hasChildren&&that.props.checkStrictly) {//选中下一级
-						if(qx||bx){//取消下级
-							await that.getIdBydelete(item.children);
-							item.qx = 0;item.bx = 0;
-						}
-						else{
-							item.qx = 1;item.bx = 0;
-							await that.chooseChild(item.children,item.id);
-						}
-						that.$forceUpdate()
-						return
-					}
-					// if(item.hasChildren&&this.props.checkStrictly) this.getNodeRoute(this.allData,item.id);
-					that.newCheckList.push({...item});
-				}
-			},
-			// 取消下一级的选中
-			getIdBydelete(arr) {
-				arr.forEach(e=>{
-					if(e.hasChildren){
-						for(var i = 0; i<this.newCheckList.length;i++){
-							if(e.id == this.newCheckList[i].id) {
-								this.newCheckList.splice(i,1)
-								break;
-							}
-						}
-					}
-					if(!e.hasChildren){
-						this.getIdBydelete(e.children)
-					}
-				})
-			},
-			//取消父级
-			// deleteParent(id){
-			// 	for(var i = 0; i<this.parent_data.length;i++){
-			// 		if(id == this.parent_data[i].id) {
-			// 			this.parent_data.splice(i,1)
-			// 			break;
-			// 		}
-			// 	}
-			// },
-			
-			// 关联下一级,选中
-			chooseChild(arr,pid) {
-				let that = this;
-				for (var i = 0, len = arr.length; i < len; i++) {
-					let item = arr[i];
-					if(item.hasChildren) {
-						that.newCheckList.push({...item,tree_stackId:pid})
-					}
-					if (!item.hasChildren) {
-						this.chooseChild(item.children,item.id)
-					}
-				}
-			},
-			
-			// (tree为目标树,targetId为目标节点id) 
-			 getNodeRoute(tree, targetId) {
-				for (let index = 0; index < tree.length; index++) {
-					if (tree[index].children) {
-						let endRecursiveLoop = this.getNodeRoute(tree[index].children, targetId)
-						if (endRecursiveLoop) {
-							this.nodePathArray.push(tree[index])
-							return true
-						}
-					}
-					if (tree[index].id === targetId) {
-						return true
-					}
-				}
-			},
-			
-			//单选
-			checkbox(item, index) {
-				var that = this;
-				that.newCheckList = []
-				that.newCheckList.push(that.tree[index])
-			},
-			//到下一级
-			 toChildren(item) {
-				if(item.hasChildren) return
-				var that = this;
-				this.tochild = true;
-				let children = that.props.children;
-				if (!item.hasChildren && item[children].length > 0) {
-					that.tree = item[children];
-					if (that.tree_stack[0].id == item.id) {
-					} else {
-						that.tree_stack.push(item);
-					}
-				}
-				this.$nextTick(() => {
-					this.scrollLeft += 200;
-				})
-				if(this.props.checkStrictly) this.checkAllChoose();
-				this.$forceUpdate()
-			},
-			//搜索
-			confirmSearch(val) {
-				this.searchResult = []
-				this.search(this.allData, val)
-				this.isre = true
-				this.tree_stack.splice(1, 6666)
-				uni.showLoading({
-					title: '正在查找'
-				})
-				setTimeout(() => {
-					this.tree = this.searchResult
-					uni.hideLoading()
-				}, 300)
-			},
-			search(data, keyword) {
-				var that = this
-				let children = that.props.children
-				for (var i = 0, len = data.length; i < len; i++) {
-					if (data[i].name.indexOf(keyword) >= 0) {
-						that.searchResult.push(data[i])
-					}
-					if (!data[i].hasChildren && data[i][children].length > 0) {
-						that.search(data[i][children], keyword)
-					}
-				}
-			},
-			
-			 checkAllChoose(){
-				 let o = false,t = true;
-				this.tree.forEach((e,i)=>{
-					console.log(e.hasChildren,"****");
-					if(!e.hasChildren){
-						e.qx = o;
-						e.bx = o;
-						let num2 = this.computAllNumber(e.children);
-						if(this.newNum!=0&&this.oldNum!=0){
-							if(this.newNum==this.oldNum) {
-								e.qx = t;e.bx = o;
-							}else{
-								e.qx = o;e.bx = t;
-							}
-						}
-						if(this.newNum!=0&&this.oldNum == 0){
-							this.$set(this.tree[i],'bx',o); this.$set(this.tree[i],'qx',o);
-						}
-						this.$forceUpdate()
-						this.newNum=0
-						this.oldNum=0
-					}
-				})
-			},
-
-			computAllNumber(arr) {
-				for(let j = 0; j<arr.length;j++){
-					var e = arr[j];
-					if(arr[j].hasChildren) {this.newNum ++;}
-					this.checkSum(e.id)
-					if(!e.hasChildren){
-						this.computAllNumber(e.children)
-					}
-				}
-			},
-			
-			checkSum(id){
-				for(let i = 0; i<this.newCheckList.length;i++){
-					if(id == this.newCheckList[i].id) {
-						this.oldNum++;
-						break
-					}
-				}
-			},
-			
-			//返回其它层
-			backTree(item, index) {
-				let that = this,max = this.max;
-				if (index == -1) {
-					that.tree = that.allData
-					that.tree_stack.splice(1, max)
-					that.isre = false
-					that.$refs.sea.clears()
-				} else if (index == -2) {
-					that.tree = that.searchResult
-					that.tree_stack.splice(1, max)
-				} else {
-					if (that.tree_stack.length - index > 2) {
-						that.tree_stack.forEach((item, i) => {
-							if (i > index) {
-								that.tree_stack.splice(i, max)
-							}
-						})
-					} else if (index == that.tree_stack.length - 1) {
-						
-					} else {
-						that.tree_stack.splice(that.tree_stack.length - 1, 1)
-					}
-					that.tree = item[that.props.children]
-				}
-				if(this.props.checkStrictly) this.checkAllChoose();
-				this.$forceUpdate()
-			},
-			backConfirm(){
-				this.$emit('sendValue',this.newCheckList,'back')
-			}
-
-		}
-	}

+ 0 - 66
components/mp-tree/components/search/index.vue

@@ -1,66 +0,0 @@
-<template>
-	<view class="tmp-box">
-		<view class='filterBox'>
-			<view class='filter-input'>
-				<text style="color: #b8b8b8;"  class="iconfont icon-sousuo filterImg"/>
-				<input class="text" type='text' v-model="inputVal" confirm-type="搜索" @confirm='handleFllter' placeholder='搜索'></input>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				inputVal: "",
-
-			};
-		},
-		methods: {
-			handleFllter(e) {
-				// console.log(e.detail.value)
-				this.$emit("confirm", e.detail.value)
-			},
-			clears(){
-				console.log(this.inputVal)
-				this.inputVal=""
-				console.log('清除了内容')
-			}
-		},
-	}
-</script>
-
-<style lang="scss" scoped>
-	.filterBox {
-		padding: 15rpx 32rpx;
-		background-color: #fff;
-		.filter-input {
-			height: 80rpx;
-			background-color: #eeeff0;
-			border-radius: 40rpx;
-			display: flex;
-			align-items: center;
-			
-			padding-left: 40rpx;
-			.filterImg {
-				width: 32rpx;
-				height: 32rpx;
-				margin-right: 20rpx;
-				margin-bottom: 5rpx;
-			}
-			.filterImgs {
-				width: 32rpx;
-				height: 32rpx;
-				
-			}
-			.text {
-				width: 84%;
-				background-color: #eeeff0;
-				font-size: 32rpx;
-				color: #000;
-			}
-		}
-	}
-	@import url("../../css/icon.css");
-</style>

+ 0 - 342
components/mp-tree/css/icon.css

@@ -1,342 +0,0 @@
-@font-face {
-  font-family: "iconfont"; /* Project id 2009600 */
-  src: url('https://at.alicdn.com/t/font_2009600_gpzp7pxtnw.woff2?t=1620633089023') format('woff2'),
-       url('https://at.alicdn.com/t/font_2009600_gpzp7pxtnw.woff?t=1620633089023') format('woff'),
-       url('https://at.alicdn.com/t/font_2009600_gpzp7pxtnw.ttf?t=1620633089023') format('truetype');
-}
-
-.iconfont {
-  font-family: "iconfont" !important;
-  font-size: 16px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-banxuanzhongshousuo1-shi:before {
-  content: "\e682";
-}
-
-.icon-xuanzhong3:before {
-  content: "\e6bb";
-}
-
-.icon-weixuanzhong2:before {
-  content: "\e62e";
-}
-
-.icon-danxuanxuanzhong:before {
-  content: "\e631";
-}
-
-.icon-xuanzhong4:before {
-  content: "\e63e";
-}
-
-.icon-xuanzhong1:before {
-  content: "\e62d";
-}
-
-.icon-xuanzhong2:before {
-  content: "\e656";
-}
-
-.icon-selected:before {
-  content: "\e615";
-}
-
-.icon-weixuanzhong1:before {
-  content: "\e614";
-}
-
-.icon-xingzhuang6kaobei3-copy-copy:before {
-  content: "\e613";
-}
-
-.icon-radio-checked:before {
-  content: "\e63f";
-}
-
-.icon-huifu:before {
-  content: "\e619";
-}
-
-.icon-dizhi:before {
-  content: "\e64a";
-}
-
-.icon-kuaijiecaidan:before {
-  content: "\e60a";
-}
-
-.icon-z043:before {
-  content: "\e62f";
-}
-
-.icon-guanbi:before {
-  content: "\e607";
-}
-
-.icon-xuanze:before {
-  content: "\e623";
-}
-
-.icon-caidanzhaolinggan:before {
-  content: "\e616";
-}
-
-.icon-xitongshezhi:before {
-  content: "\e60c";
-}
-
-.icon-xitongshezhi1:before {
-  content: "\e633";
-}
-
-.icon-lunbo:before {
-  content: "\e692";
-}
-
-.icon-shuping:before {
-  content: "\e659";
-}
-
-.icon-tongzhi:before {
-  content: "\e641";
-}
-
-.icon-pinglunguanlishezhi:before {
-  content: "\e6ac";
-}
-
-.icon-icon:before {
-  content: "\e600";
-}
-
-.icon-liuyanguanli:before {
-  content: "\e61d";
-}
-
-.icon-xuanzhong:before {
-  content: "\e669";
-}
-
-.icon--:before {
-  content: "\e622";
-}
-
-.icon-tushu:before {
-  content: "\e604";
-}
-
-.icon-huishouzhan:before {
-  content: "\e61c";
-}
-
-.icon-yonghutouxiang:before {
-  content: "\e617";
-}
-
-.icon-liebiao:before {
-  content: "\e630";
-}
-
-.icon-fenlei:before {
-  content: "\e621";
-}
-
-.icon-tushu1:before {
-  content: "\e605";
-}
-
-.icon-tubiao-:before {
-  content: "\e620";
-}
-
-.icon-weixuanze:before {
-  content: "\e624";
-}
-
-.icon-tushujieyue:before {
-  content: "\e690";
-}
-
-.icon-lunbo1:before {
-  content: "\e6c5";
-}
-
-.icon-shanchu:before {
-  content: "\e67b";
-}
-
-.icon-lunbo2:before {
-  content: "\e61e";
-}
-
-.icon-huaban:before {
-  content: "\e663";
-}
-
-.icon-kehuan:before {
-  content: "\e608";
-}
-
-.icon-icon02:before {
-  content: "\e601";
-}
-
-.icon-huishouzhan1:before {
-  content: "\e612";
-}
-
-.icon-huishouzhan2:before {
-  content: "\e63d";
-}
-
-.icon-sousuo:before {
-  content: "\e62c";
-}
-
-.icon-xingzhuang:before {
-  content: "\e625";
-}
-
-.icon-lunbobankuai:before {
-  content: "\e61f";
-}
-
-.icon-shangchuan:before {
-  content: "\e602";
-}
-
-.icon-yonghu:before {
-  content: "\e761";
-}
-
-.icon-tongzhi1:before {
-  content: "\e603";
-}
-
-.icon-jingsong:before {
-  content: "\e65c";
-}
-
-.icon-fenlei1:before {
-  content: "\e6c6";
-}
-
-.icon-xieshupingicon:before {
-  content: "\e72d";
-}
-
-.icon-liuyan:before {
-  content: "\e626";
-}
-
-.icon-weixuanzhong:before {
-  content: "\e627";
-}
-
-.icon-youxiang:before {
-  content: "\e646";
-}
-
-.icon-lunboguanggao:before {
-  content: "\e6b3";
-}
-
-.icon-xuanze1:before {
-  content: "\e60d";
-}
-
-.icon-chushaixuanxiang:before {
-  content: "\e606";
-}
-
-.icon-liuyanguanli1:before {
-  content: "\e61a";
-}
-
-.icon-shanchu1:before {
-  content: "\e609";
-}
-
-.icon-huishouzhan3:before {
-  content: "\e642";
-}
-
-.icon-shangchuan1:before {
-  content: "\e823";
-}
-
-.icon-huishouzhan4:before {
-  content: "\e61b";
-}
-
-.icon-chuangzuo:before {
-  content: "\e8ad";
-}
-
-.icon-dianzan:before {
-  content: "\e8ae";
-}
-
-.icon-paihangbang:before {
-  content: "\e8b3";
-}
-
-.icon-shouye:before {
-  content: "\e8b9";
-}
-
-.icon-shoucang:before {
-  content: "\e8c6";
-}
-
-.icon-addApp:before {
-  content: "\e60b";
-}
-
-.icon-huishouzhan5:before {
-  content: "\e63a";
-}
-
-.icon-add1:before {
-  content: "\e60e";
-}
-
-.icon-shoucang1:before {
-  content: "\e60f";
-}
-
-.icon-canshutongji:before {
-  content: "\e618";
-}
-
-.icon-rizhiguanli:before {
-  content: "\e628";
-}
-
-.icon-shanchu2:before {
-  content: "\e629";
-}
-
-.icon-xinzeng:before {
-  content: "\e62a";
-}
-
-.icon-zhankailiebiao:before {
-  content: "\e62b";
-}
-
-.icon-xiala-copy:before {
-  content: "\e610";
-}
-
-.icon-shangla:before {
-  content: "\e64e";
-}
-
-.icon-xianxingshezhi:before {
-  content: "\e611";
-}

+ 0 - 116
components/mp-tree/css/style.scss

@@ -1,116 +0,0 @@
-.flex_between_center {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-	}
-
-	.checkbox {
-		position: relative;
-		height: 36rpx;
-		margin-left: 10rpx;
-		margin-right: 0px;
-		width: 36rpx;
-		.color {
-			color: #00aaff;
-			background-color: #00aaff;
-		}
-		.txt {
-			font-size: 44rpx;
-			line-height: 36rpx;
-			width: 100%;
-			height: 100%;
-			display: flex;
-		}
-	}
-	.checkBorder {
-		border: 1px solid #ecdee4;
-	}
-	.header {
-		width: 100%;
-		position: fixed;
-		background-color: #fff;
-		z-index: 9999;
-		.title {
-			height: 90rpx;
-			padding: 0 32rpx;
-			line-height: 90rpx;
-			font-size: 30rpx;
-			background-color: #f5f5f5;
-			color: #606064;
-			.iconclass {
-				display: inline-block;
-				margin: 0 12rpx;
-				color: #D0D4DB;
-				font-size: 28rpx;
-			}
-		}
-	}
-	.container-list {
-		overflow-y: scroll;
-		overflow-x: hidden;
-		padding-bottom: 160rpx;
-		padding-top: 200rpx;
-		.common {
-			background-color: #fff;
-			border-bottom: 1rpx solid #f4f4f4;
-			padding-left: 10rpx;
-			.content {
-				display: flex;
-				align-items: center;
-				min-height: 60rpx;
-				width: 100%;
-				padding: 15rpx 0;
-				position: relative;
-				font-size: 32rpx;
-				
-				.right {
-					position: absolute;
-					right: 30rpx;
-					color: #babdc3;
-					font-size: 32rpx;
-				}
-			}
-		}
-	}
-	.active {
-		color: #4297ED !important;
-	}
-	.none {
-		color: #666666;
-	}
-	.icon-selected{
-		color: #0095F2!important;
-		font-size: 40rpx!important;
-	}
-	.icons{
-		color: #0095F2!important;
-		font-size: 40rpx!important;
-	}
-	.inline-item {
-		display: inline-block
-	}
-	
-	.content-item{
-		display: flex;
-		position: relative;
-		align-items: center;
-	}
-	
-	.box_sizing {
-		-webkit-box-sizing: border-box;
-		-moz-box-sizing: border-box;
-		box-sizing: border-box;
-	}
-	
-	.btn {
-		position: fixed;
-		bottom: 0;
-		padding: 10px;
-		background-color: #fff;
-		width: 100%;
-	
-		.sureBtn {
-			background-color: #0095F2;
-			color: #fff;
-		}
-	}

+ 0 - 69
components/mp-tree/tree.vue

@@ -1,69 +0,0 @@
-<template>
-	<view>
-		<view class="header">
-			<search v-if="searchIf" ref="sea" @confirm="confirmSearch" />
-			<view class="title">
-				<scroll-view scroll-x style="width: 100%;white-space: nowrap;" :scroll-left="scrollLeft">
-					<view v-for="(item,index) in tree_stack" class="inline-item" :key="index">
-						<view class="inline-item" v-if="index==0" @click="backTree(item,-1)">
-							<text v-if="index==tree_stack.length-1&&!isre" class="none">全部</text>
-							<text v-else class="active">全部</text>
-						</view>
-						<view v-if="index==0&&isre" @click="backTree(item,-2)" :class="[index==tree_stack.length-1&&isre]?'none inline-item':'active inline-item'">
-							<i class="iconfont icon-z043 iconclass"/>
-							搜索结果
-						</view>
-						<view class="inline-item" @click="backTree(item,index)" v-if="index!=0">
-							<i v-if="index!=0" class="iconfont icon-z043 iconclass"/>
-							<text v-if="index==tree_stack.length-1" class="none inline-item">
-								{{item[props.label]}}
-							</text>
-							<text v-else class="active">
-								{{item[props.label]}}
-							</text>
-						</view>
-					</view>
-				</scroll-view>
-			</view>
-		</view>
-		<view>
-			<view class="container-list">
-				<view class="common" v-for="(item, index) in tree" @click="toChildren(item)" :key="index">
-					<label class="content">
-						<view class="checkbox" v-if="isCheck&&props.multiple" @click.stop="checkboxChange(item,index,item.bx,item.qx)">
-							<span v-if="(newCheckList.findIndex(e=>{return item.id==e.id}))>-1&&!item.qx">
-								<i v-if="item.bx&&props.multiple" class="iconfont icon-banxuanzhongshousuo1-shi icons"/>
-								<i v-else class="iconfont icon-xuanzhong txt icon-selected"/>
-							</span>
-							<i v-else-if="props.multiple&&item.qx" class="iconfont icon-xuanzhong txt icon-selected"/>
-							<i v-else-if="item.bx&&props.multiple" class="iconfont icon-banxuanzhongshousuo1-shi icons"/>
-							<i style="color: #b8b8b8;" v-else class="iconfont icon-weixuanzhong txt"/>
-						</view>
-						<view class="checkbox" v-if="isCheck&&!props.multiple&&props.nodes&&item.user" @click.stop="checkbox(item,index)">
-							<i v-if="newCheckList.length>0&&item.id == newCheckList[0].id" class="txt iconfont icon-selected"/>
-							<i style="color: #b8b8b8;" v-else class="txt iconfont icon-weixuanzhong1"/>
-						</view>
-						<view class="checkbox" v-if="isCheck&&!props.multiple&&!props.nodes" @click.stop="checkbox(item,index)">
-							<i v-if="newCheckList.length>0&&item.id == newCheckList[0].id" class="txt iconfont icon-selected"/>
-							<i style="color: #b8b8b8;" v-else class="txt iconfont icon-weixuanzhong1"/>
-						</view>
-						<view v-if="item.user" @click.stop="checkboxChange(item,index,item.bx,item.qx)"><slot v-bind:item="item"></slot></view>
-						<slot v-else v-bind:item="item"></slot>
-						<view class="right"><i v-if="!item.user&&item.children.length>0" class="iconfont icon-z043"></i></view>
-					</label>
-				</view>
-			</view>
-		</view>
-		<view class="btn box_sizing">
-			<button class="sureBtn" type="primary" @click="backConfirm">确认</button>
-		</view>
-	</view>
-</template>
-
-<script src="./code.js" type="text/javascript"></script>
-<style lang="scss" scoped>
-	@import './css/style.scss';
-	@import url("./css/icon.css");
-</style>
-
-

+ 14 - 4
pages.json

@@ -107,7 +107,7 @@
             
         }
         ,{
-            "path" : "pages/shopAudit/detail",
+            "path" : "pages/shopAudit/detail/detail",
             "style" :                                                                                    
             {
                 "navigationBarTitleText": "商户审核",
@@ -181,18 +181,28 @@
             
         }
         ,{
-            "path" : "pages/chooseLable/chooseLable",
+            "path" : "pages/test/test",
             "style" :                                                                                    
             {
-                "navigationBarTitleText": "选择标签",
+                "navigationBarTitleText": "提交成功",
                 "enablePullDownRefresh": false
             }
             
         }
         ,{
-            "path" : "pages/test/test",
+            "path" : "pages/member-center/detail",
             "style" :                                                                                    
             {
+                "navigationBarTitleText": "会员详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/index/submit-success",
+            "style" :                                                                                    
+            {
+				"navigationStyle":"custom",
                 "navigationBarTitleText": "提交成功",
                 "enablePullDownRefresh": false
             }

+ 7 - 3
pages/acitvityAudit/acitvityAudit.vue

@@ -37,11 +37,15 @@
 				tabs: [
 					{
 						name: '待审核',
-						value: 0
+						value: 'WAITING'
 					},
 					{
-						name: '已审核',
-						value: 4
+						name: '已通过',
+						value: 'PASS'
+					},
+					{
+						name: '已拒绝',
+						value: 'FAIL'
 					}
 				],
 				refresh:false

+ 114 - 0
pages/acitvityAudit/comps/card-old.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" mode="aspectFill" :src="item.poster"></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.labelKey.split(',')" :key="index1">
+					{{item1}}
+				</view>
+				<view class="bottom">
+					<view class="">
+						<text class="time">报名截至时间:{{item.endTime}}</text>
+					</view>
+					<view v-if="item.auditStatus.includes('WAITING')" class="center" style="color: #EF9944;">
+						<text >待审核</text>
+						<text class="cuIcon-right"></text>
+					</view>
+					<view v-if="item.auditStatus=='PASS'" 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: 360rpx;
+		}
+
+		.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>

+ 106 - 83
pages/acitvityAudit/comps/card.vue

@@ -1,29 +1,29 @@
 <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 class="cu-list menu-avatar" v-if="list">
+			<view @click="goDetail(item.id)" hover-class="none"
+				style="margin: 15rpx 10rpx 15rpx 15rpx;border-radius: 20rpx 0 0 20rpx;padding: 10rpx;" class=" cu-item"
+				v-for="(item,index) in list" :key="index">
+				<image  class="cu-avatar xl" :src="item.poster" mode="aspectFill"></image>
+				<view class="content">
+					<view class="flex-direction flex">	
+						<text class="text-cut-1" style="width: 96%;font-size: 32rpx;">{{item.title}}</text>
+						<view class="" style="width: 96%;">
+							<text class="sub-title text-cut-1">{{item.intro}}</text>
+						</view>
 					</view>
-					<view v-if="item.auditStatus==0" class="center" style="color: #EF9944;">
-						<text >待审核</text>
-						<text class="cuIcon-right"></text>
+					<view style="width: 90%;" class="margin-bottom-10 text-cut-1" v-if="item.labelKey">
+						<u-tag color="#FF9447" style="margin-left: 10rpx;" :key="index1" v-for="(item1,index1) in item.labelKey.split(',')" :text="item1" size="mini" type="warning  " mode="plain"/>
 					</view>
-					<view v-if="item.auditStatus==4" class="center" style="color: #19be6b;">
-						<text >已审核</text>
+				</view>
+				<view  style="position: absolute;right: 10rpx;bottom: 10rpx;font-size: 26rpx;">
+					<view v-if="item.auditStatus.includes('WAITING')" class="center" style="color: #EF9944;">
+						<text >待审核</text>
 						<text class="cuIcon-right"></text>
 					</view>
 				</view>
 			</view>
-			
-		</navigator>
+		</view>
 	</view>
 </template>
 
@@ -36,79 +36,102 @@
 			return {}
 		},
 		methods: {
-
+			goDetail(id){
+				uni.navigateTo({
+					url:"/pages/acitvityAudit/detail?id="+id
+				})
+			}
 		}
 
 	}
 </script>
 
 <style lang="scss" scoped>
-	.bottom-bar {
-		position: fixed;
-		bottom: 0;
-		z-index: 99;
-		width: 100%;
-		background-color: #FFFFFF;
-		height: 100rpx;
+	.cu-avatar {
+	    font-variant: small-caps;
+	    margin: 0;
+	    padding: 0;
+	    display: inline-flex;
+	    text-align: center;
+	    justify-content: center;
+	    align-items: center;
+	    background-color: #FFFFFF;
+	    color: #ffffff;
+	    white-space: nowrap;
+	    background-size: cover;
+	    background-position: center;
+	    vertical-align: middle;
+	}
+	
+	
+	.tag-bg {
+		background-color: #FFA66D;
+		color: #FFFFFF;
+	}
+	
+	.cu-list>.cu-item .move {
+		position: absolute;
+		right: 0rpx;
+		display: -webkit-box;
+		display: -webkit-flex;
 		display: flex;
-
-		.left {
-			width: 70%;
-			display: flex;
-			flex-direction: column;
-			justify-content: center;
-			padding-left: 30rpx;
-		}
-
-		.right {
-			width: 30%;
-		}
+		width: 170rpx;
+		height: 100%;
+		-webkit-transform: translateX(100%);
+		transform: translateX(100%);
 	}
-
-	.card {
-		overflow: hidden;
+	
+	.cu-list.menu-avatar>.cu-item .content {
+		position: absolute;
+		left: 220rpx;
+		height: 90%;
+		width: calc(100% - 96rpx - 60rpx - 100rpx - 20rpx);
+		display: flex;
+		justify-content: space-between;
+		flex-direction: column;
+	}
+	
+	.cu-list.menu-avatar>.cu-item .action {
+		width: 60rpx;
+		text-align: center;
+	}
+	
+	.cu-list.menu-avatar>.cu-item {
 		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;
-				}
-			}
-		}
-		
+		display: -webkit-box;
+		display: -webkit-flex;
+		display: flex;
+		padding-right: 10rpx;
+		height: 180rpx;
+		background-color: #ffffff;
+		-webkit-box-pack: end;
+		-webkit-justify-content: flex-end;
+		justify-content: flex-end;
+		-webkit-box-align: center;
+		-webkit-align-items: center;
+		align-items: center;
+	}
+	
+	.cu-list>.cu-item.move-cur {
+		transform: translateX(-160upx)
+	}
+	
+	.cu-list.menu-avatar>.cu-item>.cu-avatar {
+		position: absolute;
+		left: 10rpx;
+	}
+	
+	.cu-avatar.xl {
+		border-radius: 10rpx;
+		width: 200rpx;
+		height: 90%;
+	}
+	
+	
+	
+	.sub-title {
+		margin-top: 5rpx;
+		color: #6C6C6C;
+		font-size: 24rpx;
 	}
 </style>

+ 3 - 3
pages/acitvityAudit/comps/item.vue

@@ -55,14 +55,14 @@
 			//上拉刷新
 			upFn(mescroll) {
 				let params={
-					mallId:this.vuex_mallId,
 					current:mescroll.num,
 					size:mescroll.size,
-					sponsorType:2,//审核商户的活动
+					mallId:this.vuex_mallId,
+					launchType:this.$global.sponsorType.shop,//审核商户的活动
 					auditStatus:this.item.value
 				}
 				try{
-					this.$api.activity.auditList(params).then(res=>{
+					this.$api.activity.list(params).then(res=>{
 						let data=res.data.records
 						let length=data.length
 						let total=res.data.total

+ 169 - 98
pages/acitvityAudit/detail.vue

@@ -2,113 +2,131 @@
 	<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>
+				<image @click="$util.preview(detail.poster)" :src="detail.poster" style="height: 340rpx;width: 100%;"></image>
 			</view>
 		</my-bar>
 		<view class="clock">
 		</view>
-
 		<view class="content">
 			<text class="title">{{detail.title}}</text>
+
+			<view class="data flex" style="margin-top: 30rpx;">
+				<u-icon name="eye" color="#EF9944"></u-icon>
+				<view v-if="detail.auditStatus=='WAITING_MALL'" class="margin-left-10">
+					审核状态:
+					<text style="color: #EF9944;">待审核</text>
+				</view>
+				<view v-if="detail.auditStatus=='WAITING_PLATFORM'" class="margin-left-10">
+					审核状态:
+					<text style="color: #EF9944;">待平台审核</text>
+				</view>
+				<view v-if="detail.auditStatus=='PASS'" class="margin-left-10">
+					审核状态:
+					<text style="color: #19be6b;">已通过</text>
+				</view>
+				<view v-if="detail.auditStatus=='FAIL'" class="margin-left-10">
+					审核状态:
+					<text style="color: #fa3534;">已拒绝</text>
+				</view>
+				<view v-if="detail.auditStatus=='STOP'" class="margin-left-10">
+					审核状态:
+					<text style="color: #fa3534;">已停用</text>
+				</view>
+			</view>
 			<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>
+				<text class="margin-left-10">开始时间:{{detail.beginTime}}</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 class="data" style="margin-top: 30rpx;">
+				<u-icon name="clock" color="#EF9944"></u-icon>
+				<text class="margin-left-10">结束时间:{{detail.endTime}}</text>
 			</view>
-			<view class="data">
-				<u-icon name="home-fill" color="#EF9944"></u-icon>
-				<text class="margin-left-10">联营积分全场通用</text>
+			<view class="data" style="margin-top: 30rpx;">
+				<u-icon name="grid" color="#EF9944"></u-icon>
+				<text class="margin-left-10">活动分类:{{detail.labelKey}}</text>
 			</view>
-		</view>
-
-		<view class="intro">
-			<view class="flex">
+			<view class="data" style="margin-top: 30rpx;">
 				<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>
+				<text class="margin-left-10">活动折扣:{{detail.discount * 10}} 折</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}}
+				{{detail.intro}}
 			</view>
 		</view>
+		
+		<view @click="open=!open" class="intro" style="width: 100%;" >
+			<text class="text-bold text-lg">审核流程</text>
+			<text :class="open?'cuIcon-fold':'cuIcon-unfold'" class=" margin-left-10"></text>
+		</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 class="history" v-if="open" :style="{marginBottom:safeAreaBottom}">
+			<u-time-line>
+				<u-time-line-item nodeTop="2" v-for="(item,index) in historyList" :key="index">
+					<template v-slot:node>
+						<view class="u-node bg-white">
+							<u-icon name="clock-fill" color="#e0e3ea" :size="28"></u-icon>
+						</view>
+					</template>
+					<template v-slot:content>
+						<view>
+							<view class="">{{item.createTime}}</view>
+							<view style="width: 636rpx;">
+								<view class="content">
+									<view class="nav-title">
+										<view class="">
+											<text>【{{item.assigneeName?item.assigneeName:'联兑通平台'}}】在
+												[{{item.createTime}}] 开始处理 [{{item.historyActivityName}}] 环节</text>
+										</view>
+										<view class="" v-if="item.historyActivityDurationTime">
+											任务历时:
+											[{{item.historyActivityDurationTime}}]
+										</view>
+										<view class="" v-if="item.comment">
+											批复意见:
+											[{{item.comment}}]
+										</view>
+										<view class="" v-if="item.endTime">
+											结束时间:
+											[{{item.endTime}}]
+										</view>
+									</view>
+								</view>
 							</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>
+					</template>
+				</u-time-line-item>
+			</u-time-line>
 		</view>
-		
-		<block  v-if="detail.auditStatus==0">
+
+
+		<block v-if="detail.auditStatus=='WAITING_MALL'">
 			<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 :style="{marginBottom: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="opinionShow=true;pass=true" 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 @click="opinionShow=true;pass=false" 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">
+
+		<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-input height="150" placeholder="请输入审核意见" v-model="auditAdvice" />
 					</u-form-item>
 				</u-form>
 			</view>
@@ -139,12 +157,17 @@
 			return {
 				id: '',
 				transparent: '',
-				name: '星巴克',
+				//活动详情
 				detail: {},
-				appendSupplyPrice: 100,
-				
-				opinionShow:false,
-				auditAdvice:''
+				opinionShow: false,
+				pass: false,
+				auditAdvice: '',
+				pass: false,
+				//流程详情
+				flowDetail: {},
+				//审核历史
+				historyList: [],
+				open:true
 			}
 		},
 		onLoad(options) {
@@ -156,34 +179,59 @@
 			this.fetchDetail()
 		},
 		methods: {
+			async getHistoryFlowList(processInstanceId) {
+				this.$api.flow.historyFlowList({
+					processInstanceId
+				}).then(res => {
+					this.historyList = res.data
+				})
+			},
 			fetchDetail() {
 				this.$api.activity.detail({
 					id: this.id
 				}).then(res => {
 					this.detail = res.data
+					this.getTaskId(this.detail.processInstanceId)
+					this.getHistoryFlowList(this.detail.processInstanceId)
 				})
 			},
-			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()
+			getTaskId(processInstanceId) {
+				let params = {
+					assignee: this.$global.flow_prefix.mall + this.vuex_mallId,
+					processInstanceId
+				}
+				this.$api.flow.getTaskId(params).then(res => {
+					this.flowDetail = res.data.records[0]
+				})
+			},
+			opinionConfirm() {
+				if (this.pass) {
+					this.doPass()
+				} else {
+					this.doFail()
+				}
+			},
+			doPass() {
+				this.flowDetail.comment = this.auditAdvice ? this.auditAdvice : '同意'
+				this.flowDetail.flag = 'ok'
+				this.flowDetail.variables.pass = true
+				this.$api.flow.flowAuditSubmit(this.flowDetail).then(res => {
+					if (res.success) {
+						this.$dialog.showModal('操作成功', false).then(() => {
+							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()
+			doFail() {
+				this.flowDetail.comment = this.auditAdvice ? this.auditAdvice : '不同意'
+				this.flowDetail.variables.pass = true
+				this.$api.flow.flowAuditSubmit(this.flowDetail).then(res => {
+					if (res.success) {
+						this.$dialog.showModal('操作成功', false).then(() => {
 							this.fetchDetail()
-						}
-					})
+						})
+					}
 				})
 			}
 		}
@@ -194,13 +242,13 @@
 	.publish {
 		overflow: hidden;
 		border-radius: 10rpx;
-		height: 380rpx;
+		height: 320rpx;
 		position: absolute;
 		bottom: 20rpx;
 		left: 0;
 		right: 0;
-		width: 92%;
-		margin: 0 auto -120rpx;
+		width: 90%;
+		margin: 0 auto -50rpx;
 		border-radius: 10rpx;
 		box-shadow: 0rpx 16rpx 8rpx -8rpx #a8a8a8;
 
@@ -217,7 +265,7 @@
 
 	.clock {
 		background-color: #FFFFFF;
-		height: 120rpx;
+		height: 80rpx;
 		padding-bottom: 20rpx;
 
 		display: flex;
@@ -233,7 +281,7 @@
 	}
 
 	.content {
-		padding: 15rpx 30rpx;
+		padding: 0rpx 30rpx 15rpx;
 		background-color: #FFFFFF;
 
 		.title {
@@ -297,4 +345,27 @@
 			}
 		}
 	}
+
+
+
+	.history {
+		background-color: #ffff;
+		box-sizing: border-box;
+		padding: 40rpx 20rpx 20rpx 50rpx;
+	}
+
+	.nav-title {
+		font-weight: 300;
+		font-size: 28upx;
+		padding-top: 20rpx;
+		line-height: 50rpx;
+	}
+
+	.content {
+		box-shadow: 0 8rpx 10rpx rgba(234, 234, 234, 0.5), 8rpx 0rpx 10rpx rgba(234, 234, 234, .5), -8rpx 0rpx 10rpx rgba(234, 234, 234, .5);
+		background-color: #FFFFFF;
+		padding: 20rpx;
+		border-radius: 10rpx;
+		margin: 20rpx 0;
+	}
 </style>

+ 74 - 128
pages/activity/activity.vue

@@ -1,153 +1,99 @@
 <template>
-	<view class="safe-area-inset-bottom">
-		<u-sticky>
-			<view class="flex">
-				<view class="" style="width: 85%;">
-					<u-tabs active-color="#FF9447" :list="list" :is-scroll="false" :current="current" @change="change">
-					</u-tabs>
+	<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>
-				<view class="bg-white center" style="width: 15%;">
-					<image @click="checkAll" style="width: 50rpx;height: 50rpx;" src="../../static/icon/setting.png"></image>
-				</view>
-			</view>
-		</u-sticky>
-		<mescroll-body ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption"
-			:up="upOption">
-			<card @operate="operate" :current="current" @checkboxChange="checkboxChange" @checkAllChange="checkAllChange" :cardList="dataList" ref="cardRef"></card>
-		</mescroll-body>
+			</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 MescrollMixin from "@/components/mescroll-body/mescroll-mixins.js";
-	import card from "./comps/card.vue"
+	import item from "./comps/item.vue"
 	export default {
-		mixins: [MescrollMixin],
-		components:{
-			card
+		components: {
+			item
 		},
 		data() {
 			return {
-				list: [{
-					name: '发起',
-					value:1
-				}, {
-					name: '可参加',
-					value:2
-				},
-				{
-					name:'已参加',
-					value:3
-				}],
 				current: 0,
-				dataList:[]
+				swiperCurrent: 0,
+				tabs: [
+					{
+						name: '发起',
+						value: 0
+					},
+					{
+						name: '可参加',
+						value: 1
+					},
+					{
+						name: '已参加',
+						value: 2
+					}
+				],
+				refresh:false
 			}
 		},
 		onShow() {
-			this.$util.reload(this.mescroll)
+			let page= this.$util.getPageCtx()
+			if (page.data.reload) {
+				 this.refresh=!this.refresh
+			}
 		},
-		methods:{
-			checkboxChange(e){
-				let index=e.name
-				this.dataList[index].checked=e.value
-				this.$forceUpdate()
-			},
-			checkAllChange(e){
-				this.dataList.forEach(item=>{
-					item.checked = e.value
-				})
-				this.$forceUpdate()
-			},
-			change(index) {
+		methods: {
+			tabChange(index) {
 				this.current = index
-				this.mescroll.resetUpScroll();
 			},
-			checkAll(){
-				if (!this.$isEmpty(this.dataList) && this.current !=1) {
-					this.$refs.cardRef.showCheckAll()	
-				}
-			},
-			operate(){
-				if (this.current==0) {
-					this.stop()
-				}else if (this.current==2) {
-					this.exit()
-				}
+			swiperChange(e) {
+				uni.pageScrollTo({
+					scrollTop: 0,
+					duration: 0
+				});
+				this.current = e.detail.current
 			},
-			exit(){
-				let ids= this.dataList.filter(item=>item.checked==true).map(item=>item.id)
-				if (this.$isEmpty(ids)) {
-					this.$u.toast('至少选择一项活动')
-					return
+			animationfinish({
+				detail: {
+					current
 				}
-				this.$dialog.showModal("确定退出?").then(res=>{
-					let operateList=[]
-					ids.forEach(item=>{
-						let tmp={
-							activityId:item,
-							joinType:1,
-							joinId:this.vuex_mallId
-						}
-						operateList.push(tmp)
-					})
-					this.$api.activity.exit(operateList).then(res=>{
-						if (res.success) {
-							this.$refs.cardRef.hideCheckAll()
-							this.mescroll.resetUpScroll();
-						}
-					})
-				})
+			}) {
+				this.swiperCurrent = current;
+				this.current = current;
 			},
-			stop(){
-				let tmp=this.$u.deepClone(this.dataList)
-				let operateList= tmp.filter(item=>item.checked==true)
-				if (this.$isEmpty(operateList)) {
-					this.$u.toast('至少选择一项活动')
-					return
-				}
-				this.$dialog.showModal('确定停用活动?').then(res=>{
-					operateList.forEach(item=>{
-						item.auditStatus=3
-					})
-					this.$api.activity.stop(operateList).then(res=>{
-						if (res.success) {
-							this.$refs.cardRef.hideCheckAll()
-							this.mescroll.resetUpScroll();
-						}
-					})
-				})
-			},
-			downCallback(){
-				this.$refs.cardRef.hideCheckAll()
-				this.mescroll.resetUpScroll();
-			},
-			upCallback(mescroll) {
-				let params = {
-					selectType:this.list[this.current].value,
-					mallId:this.vuex_mallId,
-					current:mescroll.num,
-					size:mescroll.size,
-				}
-				try {
-					this.$api.activity.list(params).then(res => {
-						let data = res.data.records
-						let total = res.data.total
-						mescroll.endBySize(data.length, total);
-						if (mescroll.num == 1) this.dataList = []; //如果是第一页需手动制空列表
-						this.dataList = this.dataList.concat(data); //追加新数据
-						this.dataList.forEach(item=>{
-							item.checked=false
-							item.labels=item.labelNames.split(',')
-						})
-					})
-				} catch (e) {
-					this.mescroll.endErr()
-				}
-			}
 		}
 	}
 </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>

+ 123 - 114
pages/activity/comps/card.vue

@@ -1,86 +1,72 @@
 <template>
 	<view class="">
-		<view class="card" style="display: flex;" v-for="(item,index) in cardList" :key="index">
-			<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/activity/detail?id=${item.id}&current=${current}`" hover-class="none" class="">
-				<image class="bg" :src="item.pic"></image>
+		<view class="cu-list menu-avatar" v-if="list">
+			<view @click="goDetail(item)" hover-class="none"
+				style="margin: 15rpx 10rpx 15rpx 15rpx;border-radius: 20rpx 0 0 20rpx;padding: 10rpx;" class=" cu-item"
+				v-for="(item,index) in list" :key="index">
+				<image class="cu-avatar xl" :src="item.poster" mode="aspectFill"></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.labels" :key="index1">
-						{{item1}}
+					<view class="flex-direction flex">
+						<text class="text-cut-1" style="width: 96%;font-size: 32rpx;">{{item.title}}</text>
+						<view class="flex" style="width: 96%;" v-if="item.auditStatus.includes('WAITING')">
+							<view class="center" style="margin-bottom: -4rpx;">
+								<u-icon name="coupon" color="#ff7001" size="30"></u-icon>
+							</view>
+							<view class="">
+								<text class="sub-title text-cut-1 margin-left-10">{{item.discount * 10}}折</text>
+							</view>
+						</view>
+						<view v-else class="flex" style="width: 96%;">
+							<text class="sub-title text-cut-1">{{item.intro}}</text>
+						</view>
 					</view>
-
-					<view class="time">
-						<text>报名截至时间:{{item.endTime}}</text>
+					<view style="width: 90%;" class="margin-bottom-10 text-cut-1" v-if="item.labelKey">
+						<u-tag color="#FF9447" style="margin-left: 10rpx;" :key="index1"
+							v-for="(item1,index1) in item.labelKey.split(',')" :text="item1" size="mini"
+							type="warning  " mode="plain" />
 					</view>
 				</view>
-				<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>
-
-		<block v-if="checkAllShow">
-			<view class="" style="height: 110rpx;"></view>
-			<view class="bottom-bar">
-				<view class="left">
-					<u-checkbox @change="checkAllChange" shape="circle" v-model="checkAll">
-						全选
-					</u-checkbox>
+				<view v-if="item.auditStatus.includes('WAITING')"
+					style="position: absolute;right: 10rpx;bottom: 10rpx;font-size: 26rpx;">
+					<view class="center" style="color: #EF9944;">
+						<text>待审核</text>
+						<text class="cuIcon-right"></text>
+					</view>
 				</view>
-				<view @click="operate" style="font-size: 28rpx;" class="btn-bg-color center round right">
-					<text v-if="current==0">结束活动</text>
-					<text v-if="current==1">参加活动</text>
-					<text v-if="current==2">退出活动</text>
+				<view v-else style="position: absolute;right: 10rpx;bottom: 10rpx;font-size: 26rpx;">
+					<view class="center" style="color: #EF9944;">
+						<u-icon name="coupon" color="#ff7001" size="30"></u-icon>
+						<text style="margin-left: 6rpx;">{{item.discount * 10}}折</text>
+					</view>
+				</view>
+				<view v-if="current==2&&index==0" style="position: absolute;right: 0rpx;top: 0rpx;">
+					<image style="width: 80rpx;height: 80rpx;" src="@/static/icon/enable.png" mode=""></image>
 				</view>
-
 			</view>
-		</block>
+		</view>
 	</view>
 </template>
 
 <script>
 	export default {
 		props: {
-			cardList: Array,
-			current: Number
+			current:Number,
+			list: Array,
 		},
 		data() {
-			return {
-				checkAllShow: false,
-			}
-		},
-		computed: {
-			checkAll: {
-				get() {
-					let tmpList = this.cardList.filter(item => item.checked == true)
-					if (tmpList.length == this.cardList.length) {
-						return true
-					}
-					return false
-				},
-				set() {
-
-				}
-			}
+			return {}
 		},
 		methods: {
-			showCheckAll() {
-				this.checkAllShow = !this.checkAllShow
-			},
-			hideCheckAll() {
-				this.checkAllShow = false
-			},
-			checkboxChange(e) {
-				this.$emit('checkboxChange', e)
-			},
-			checkAllChange(e) {
-				this.$emit('checkAllChange', e)
-			},
-			operate() {
-				this.$emit('operate')
+			goDetail(item) {
+				let joinRecordId=item.joinRecordId?item.joinRecordId:null
+				let params={
+					id:item.id,
+					joinRecordId,
+					current:this.current
+				}
+				uni.navigateTo({
+					url: "/pages/activity/detail" + this.$u.queryParams(params)
+				})
 			}
 		}
 
@@ -88,68 +74,91 @@
 </script>
 
 <style lang="scss" scoped>
-	.bottom-bar {
-		position: fixed;
-		bottom: env(safe-area-inset-bottom);
-		z-index: 99;
-		width: 100%;
+	.cu-avatar {
+		font-variant: small-caps;
+		margin: 0;
+		padding: 0;
+		display: inline-flex;
+		text-align: center;
+		justify-content: center;
+		align-items: center;
 		background-color: #FFFFFF;
-		height: 100rpx;
-		display: flex;
-		padding: 20rpx 30rpx;
+		color: #ffffff;
+		white-space: nowrap;
+		background-size: cover;
+		background-position: center;
+		vertical-align: middle;
+	}
 
-		.left {
-			width: 75%;
-			display: flex;
-			flex-direction: column;
-			justify-content: flex-end;
-			padding-left: 30rpx;
-		}
 
-		.right {
-			width: 25%;
-		}
+	.tag-bg {
+		background-color: #FFA66D;
+		color: #FFFFFF;
 	}
 
-	.card {
-		overflow: hidden;
-		position: relative;
-		background-color: #FFFFFF;
-		margin: 20rpx;
-		border-radius: 20rpx;
+	.cu-list>.cu-item .move {
+		position: absolute;
+		right: 0rpx;
+		display: -webkit-box;
+		display: -webkit-flex;
+		display: flex;
+		width: 170rpx;
+		height: 100%;
+		-webkit-transform: translateX(100%);
+		transform: translateX(100%);
+	}
 
-		.bg {
-			border-radius: 20rpx 20rpx 0 0;
-			width: 100vw;
-			height: 250rpx;
-		}
+	.cu-list.menu-avatar>.cu-item .content {
+		position: absolute;
+		left: 220rpx;
+		height: 90%;
+		width: calc(100% - 96rpx - 60rpx - 100rpx - 20rpx);
+		display: flex;
+		justify-content: space-between;
+		flex-direction: column;
+	}
 
-		.status {
-			position: absolute;
-			right: 10rpx;
-			bottom: 10rpx;
-			width: 100rpx;
-		}
+	.cu-list.menu-avatar>.cu-item .action {
+		width: 60rpx;
+		text-align: center;
+	}
 
-		.content {
-			padding: 10rpx 20rpx;
+	.cu-list.menu-avatar>.cu-item {
+		position: relative;
+		display: -webkit-box;
+		display: -webkit-flex;
+		display: flex;
+		padding-right: 10rpx;
+		height: 180rpx;
+		background-color: #ffffff;
+		-webkit-box-pack: end;
+		-webkit-justify-content: flex-end;
+		justify-content: flex-end;
+		-webkit-box-align: center;
+		-webkit-align-items: center;
+		align-items: center;
+	}
 
-			.title {
-				font-weight: 800;
-				font-size: 30rpx;
-			}
+	.cu-list>.cu-item.move-cur {
+		transform: translateX(-160upx)
+	}
 
-			.tag {
-				padding: 20rpx 32rpx;
-				margin: 20rpx 20rpx 20rpx 0;
-			}
+	.cu-list.menu-avatar>.cu-item>.cu-avatar {
+		position: absolute;
+		left: 10rpx;
+	}
 
-			.time {
-				font-size: 24rpx;
-				margin-bottom: 20rpx;
-			}
+	.cu-avatar.xl {
+		border-radius: 10rpx;
+		width: 200rpx;
+		height: 90%;
+	}
 
 
-		}
+
+	.sub-title {
+		margin-top: 5rpx;
+		color: #6C6C6C;
+		font-size: 24rpx;
 	}
 </style>

+ 118 - 0
pages/activity/comps/item.vue

@@ -0,0 +1,118 @@
+<template>
+	<MeScroll  :up="up" :down="down" @up="upFn" :fixed="false" @down="downFn" @init="initMeScroll">
+		<card  :list="list" :current="type"></card>
+	</MeScroll>
+</template>
+<script>
+	import MeScroll from '@/components/mescroll-body/mescroll-uni.vue'
+	import card from './card.vue'
+	export default {
+		components:{
+			MeScroll,card
+		},
+		props: {
+			refresh:false,
+			type: Number,
+			i: Number,
+			item:Object
+		},
+		data() {
+			return {
+				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()
+				}
+			},
+			refresh(val) {
+				console.log(val);
+				this.mescroll.resetUpScroll()
+			}
+		},
+		mounted() {
+			if(!this.isInit && this.i === 0) {
+				this.mescroll.resetUpScroll()
+			}
+		},
+		methods: {
+			//初始化组件
+			initMeScroll(mescroll) {
+				this.mescroll = mescroll
+			},
+			//上拉回调
+			async upFn(mescroll) {
+				let res=null
+				let params={
+					current:mescroll.num,
+					size:mescroll.size,
+				}
+				if (this.item.value==0) {
+					//自己发起的活动
+					params.launchId=this.vuex_mallId || '-1',
+					params.launchType=this.$global.sponsorType.mall
+					res=await this.$api.activity.list(params)
+				}
+				if (this.item.value==1) {
+					//可参加的活动
+					//该商场发布的活动或者该商场下的商户发布的活动
+					params.mallId=this.vuex_mallId || '-1'
+					params.launchId=this.vuex_mallId || '-1',
+					params.launchType=this.$global.sponsorType.mall
+					res=await this.$api.activity.getCanJoinActivity(params)
+				}
+				if (this.item.value==2) {
+					// 已参加的活动
+					params.joinId=this.vuex_mallId || '-1'
+					params.joinType=this.$global.sponsorType.mall
+					res=await this.$api.joinRecord.joined(params)
+				}
+				console.log(res);
+				try{
+					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>

+ 217 - 111
pages/activity/detail.vue

@@ -2,22 +2,38 @@
 	<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>
+				<image @click="$util.preview(detail.poster)" :src="detail.poster" style="height: 340rpx;width: 100%;">
+				</image>
 			</view>
 		</my-bar>
 		<view class="clock">
-			<!-- <view class="cu-btn round sm" style="background-color: #dcdcdc;">
-				<u-icon name="clock"></u-icon>
-				<text class="margin-left-10">设置响应倒计时</text>
-			</view>
-			<view class="tips">
-				<text>*</text>
-				<text>如未在限定时间内响应,系统默认自动推送给旗下商户。</text>
-			</view> -->
 		</view>
-
 		<view class="content">
 			<text class="title">{{detail.title}}</text>
+
+			<view class="data flex" style="margin-top: 30rpx;">
+				<u-icon name="eye" color="#EF9944"></u-icon>
+				<view v-if="detail.auditStatus=='WAITING_MALL'" class="margin-left-10">
+					审核状态:
+					<text style="color: #EF9944;">待审核</text>
+				</view>
+				<view v-if="detail.auditStatus=='WAITING_PLATFORM'" class="margin-left-10">
+					审核状态:
+					<text style="color: #EF9944;">待平台审核</text>
+				</view>
+				<view v-if="detail.auditStatus=='PASS'" class="margin-left-10">
+					审核状态:
+					<text style="color: #19be6b;">审核通过</text>
+				</view>
+				<view v-if="detail.auditStatus=='FAIL'" class="margin-left-10">
+					审核状态:
+					<text style="color: #fa3534;">审核不通过</text>
+				</view>
+				<view v-if="detail.auditStatus=='STOP'" class="margin-left-10">
+					审核状态:
+					<text style="color: #fa3534;">活动已停用</text>
+				</view>
+			</view>
 			<view class="data" style="margin-top: 30rpx;">
 				<u-icon name="clock" color="#EF9944"></u-icon>
 				<text class="margin-left-10">开始时间:{{detail.beginTime}}</text>
@@ -26,90 +42,122 @@
 				<u-icon name="clock" color="#EF9944"></u-icon>
 				<text class="margin-left-10">结束时间:{{detail.endTime}}</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/10}} 折</text>
-				</view>
+			<view class="data" style="margin-top: 30rpx;">
+				<u-icon name="grid" color="#EF9944"></u-icon>
+				<text class="margin-left-10">活动分类:{{detail.labelKey}}</text>
 			</view>
-			<view class="data">
-				<u-icon name="home-fill" color="#EF9944"></u-icon>
-				<text class="margin-left-10">联营积分全场通用</text>
+			<view class="data" style="margin-top: 30rpx;">
+				<u-icon name="coupon" color="#EF9944"></u-icon>
+				<text class="margin-left-10">活动折扣:{{detail.discount * 10}} 折</text>
 			</view>
 		</view>
 
-		<view class="intro" v-if="current==1">
-			<view class="flex">
-				<u-icon name="coupon" color="#EF9944"></u-icon>
-				<text class="margin-left-10">商场活动补贴</text>
+		<view class="attend" v-if="!$isEmpty(joinRecords)">
+			<view class="margin-bottom-20">
+				<u-icon name="calendar-fill" 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 v-model="appendSupplyPrice" placeholder="请输入折扣" style="width: 90%;" />
-				<text class="padding-left-20">%</text>
+			<view class="flex">
+				<view class="flex " style="width: 90%;">
+					<view class="data" v-for="(item,index) in joinRecords" :key="index">
+						<view class="item">
+							<image style="border-radius: 50%;" :src="item.joinLogo" mode="aspectFill"></image>
+							<view>
+								<text>{{item.joinName | ellipsis}}</text>
+								<text>{{item.discount * 10}}折</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>
 
+
 		<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}}
+				{{detail.intro}}
 			</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 class="" v-if="current==0">
+			<view @click="open=!open" class="intro" style="width: 100%;">
+				<text class="text-bold text-lg">审核流程</text>
+				<text :class="open?'cuIcon-fold':'cuIcon-unfold'" 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 style="border-radius: 50%;" :src="item.joinPic" mode=""></image>
+			<view class="history" v-if="open" :style="{marginBottom:safeAreaBottom}">
+				<u-time-line>
+					<u-time-line-item nodeTop="2" v-for="(item,index) in historyList" :key="index">
+						<template v-slot:node>
+							<view class="u-node bg-white">
+								<u-icon name="clock-fill" color="#e0e3ea" :size="28"></u-icon>
+							</view>
+						</template>
+						<template v-slot:content>
 							<view>
-								<text>{{name | ellipsis}}</text>
-								<text>{{item.finalSupplyPrice}}折</text>
+								<view class="">{{item.createTime}}</view>
+								<view style="width: 636rpx;">
+									<view class="content">
+										<view class="nav-title">
+											<view class="">
+												<text>【{{item.assigneeName?item.assigneeName:'联兑通平台'}}】在
+													[{{item.createTime}}] 开始处理 [{{item.historyActivityName}}] 环节</text>
+											</view>
+											<view class="" v-if="item.historyActivityDurationTime">
+												任务历时:
+												[{{item.historyActivityDurationTime}}]
+											</view>
+											<view class="" v-if="item.comment">
+												批复意见:
+												[{{item.comment}}]
+											</view>
+											<view class="" v-if="item.endTime">
+												结束时间:
+												[{{item.endTime}}]
+											</view>
+										</view>
+									</view>
+								</view>
 							</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>
+						</template>
+					</u-time-line-item>
+				</u-time-line>
 			</view>
 		</view>
-		
-		<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==0 || 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>
+
+
+
+		<block v-if="isShowBtn">
+			<view class="" style="height: 50rpx;"></view>
+			<view :style="{paddingBottom:safeAreaBottom}" class=" center" :class="current==0?'':'footer-fixed'">
+				<view @click="operate" class="cu-btn df btn-bg-color  radius " style="width: 90%;height: 80rpx;">
+					<text v-if="current==1">参加活动</text>
+					<text v-if="current==2">退出活动</text>
 				</view>
 			</view>
 		</block>
+
+		<u-modal :show-cancel-button="true" confirm-color="#FF9447" @confirm="join" title="提示" :mask-close-able="true"
+			v-model="modalShow">
+			<view class="slot-content" style="margin: 20rpx;">
+				<u-form label-width="150" ref="uForm">
+					<u-form-item :border-bottom="false">
+						<view class="flex center">
+							<u-input style="width: 80%;" height="150" placeholder="请输入活动折扣(如输入9,表示9折)"
+								v-model="discount" />
+							<text class="center margin-left-10">折</text>
+						</view>
+					</u-form-item>
+				</u-form>
+			</view>
+		</u-modal>
 	</view>
 </template>
 
@@ -135,92 +183,128 @@
 		data() {
 			return {
 				id: '',
-				current: 0, //0 发起活动详情,1可参加活动详情,2已参加活动详情
+				current: 0,
 				transparent: '',
-				name: '星巴克',
+				//活动详情
 				detail: {},
-				appendSupplyPrice: 100
+				//流程详情
+				flowDetail: {},
+				//审核历史
+				open: true,
+				historyList: [],
+				//参加活动
+				discount: '',
+				joinRecords: [],
+				isShowBtn: false,
+				modalShow: false,
+
+				//退出活动
+				joinRecordId: ''
 			}
 		},
 		onLoad(options) {
 			this.id = options.id
-			this.current = options.current || 0
+			this.current = options.current
+			this.joinRecordId = options.joinRecordId ? options.joinRecordId : ''
 			if (!this.id) {
 				this.$u.toast('系统错误')
 				return
 			}
 			this.fetchDetail()
+			this.getJoinRecord()
 		},
 		methods: {
+			getJoinRecord() {
+				let params = {
+					activityId: this.id
+				}
+				this.$api.joinRecord.list(params).then(res => {
+					this.joinRecords = res.data.records
+				})
+			},
+			async getHistoryFlowList(processInstanceId) {
+				this.$api.flow.historyFlowList({
+					processInstanceId
+				}).then(res => {
+					this.historyList = res.data
+				})
+			},
 			fetchDetail() {
 				this.$api.activity.detail({
 					id: this.id
 				}).then(res => {
 					this.detail = res.data
+					if (!this.detail.auditStatus.includes('WAITING') && this.detail.auditStatus != this.$global
+						.shop_auditStatus.FAIL&&this.current!=0) {
+						this.isShowBtn = true
+					}
+
+					this.getHistoryFlowList(this.detail.processInstanceId)
 				})
 			},
 			operate() {
 				if (this.current == 0) {
-					return
-				}
-				if (this.current == 1) {
-					//参加活动
-					this.join()
+					//暂时不需要停用活动这个操作
+				} else if (this.current == 1) {
+					this.modalShow = true
 				} else if (this.current == 2) {
-					//退出活动
 					this.exit()
 				}
-
 			},
-			join() {
-				this.$dialog.showModal("确定参加?").then(res => {
-					let operateList = {
-						activityId: this.id,
-						joinType: 1,
-						joinId: this.vuex_mallId,
-						appendSupplyPrice: this.appendSupplyPrice
-					}
-					this.$api.activity.join(operateList).then(res => {
+			stop() {
+				let item = this.$u.deepClone(this.detail)
+				item.auditStatus = this.$global.shop_auditStatus.STOP
+				this.$dialog.showModal('确定停用?').then(() => {
+					this.$api.activity.stop(item).then(res => {
 						if (res.success) {
-							this.$dialog.showModal("参加成功", false).then(() => {
-								this.$util.isReloadAndBack()
-							})
+							this.$util.isReloadAndBack()
 						}
 					})
 				})
+
+
+			},
+			join() {
+				let mall = this.$cache.get('selectedMall')
+				let params = {
+					activityId: this.id,
+					joinType: this.$global.sponsorType.mall,
+					joinId: this.vuex_mallId,
+					joinName: mall.mallName,
+					discount: this.discount ? (this.discount / 10) : this.detail.discount,
+					joinLogo: mall.logo
+				}
+				this.$api.joinRecord.submit(params).then(res => {
+					if (res.success) {
+						this.$util.isReloadAndBack()
+					}
+				})
 			},
 			exit() {
-				this.$dialog.showModal("确定退出?").then(res => {
-					let operateList = [{
-						activityId: this.id,
-						joinType: 1,
-						joinId: this.vuex_mallId
-					}]
-					this.$api.activity.exit(operateList).then(res => {
+				this.$dialog.showModal('确定退出活动?').then(() => {
+					this.$api.joinRecord.remove(this.joinRecordId).then(res => {
 						if (res.success) {
-							this.$dialog.showModal("退出成功", false).then(() => {
-								this.$util.isReloadAndBack()
-							})
+							this.$util.isReloadAndBack()
 						}
 					})
 				})
 			},
+
 		}
 	}
 </script>
 
 <style lang="scss" scoped>
 	.publish {
-		background-color: #FFFFFF;
 		overflow: hidden;
 		border-radius: 10rpx;
-		height: 380rpx;
+		height: 320rpx;
 		position: absolute;
 		bottom: 20rpx;
 		left: 0;
 		right: 0;
-		width: 92%;
-		margin: 0 auto -120rpx;
+		width: 90%;
+		margin: 0 auto -50rpx;
 		border-radius: 10rpx;
 		box-shadow: 0rpx 16rpx 8rpx -8rpx #a8a8a8;
 
@@ -237,7 +321,7 @@
 
 	.clock {
 		background-color: #FFFFFF;
-		height: 120rpx;
+		height: 80rpx;
 		padding-bottom: 20rpx;
 
 		display: flex;
@@ -253,7 +337,7 @@
 	}
 
 	.content {
-		padding: 15rpx 30rpx;
+		padding: 0rpx 30rpx 15rpx;
 		background-color: #FFFFFF;
 
 		.title {
@@ -291,9 +375,9 @@
 			$width: 80rpx;
 
 			.item {
-				width: 190rpx;
+				width: 200rpx;
 				height: $width;
-				background-color: #eeeeee;
+				background-color: #f0f0f0;
 				border-radius: 50rpx;
 				display: flex;
 
@@ -307,14 +391,36 @@
 					display: flex;
 					flex-direction: column;
 					justify-content: center;
-					font-size: 22rpx;
+					font-size: 20rpx;
 
 					text:first-child {
-						font-weight: 800;
 						margin-bottom: 4rpx;
 					}
 				}
 			}
 		}
 	}
+
+
+
+	.history {
+		background-color: #ffff;
+		box-sizing: border-box;
+		padding: 40rpx 20rpx 20rpx 50rpx;
+	}
+
+	.nav-title {
+		font-weight: 300;
+		font-size: 28upx;
+		padding-top: 20rpx;
+		line-height: 50rpx;
+	}
+
+	.content {
+		box-shadow: 0 8rpx 10rpx rgba(234, 234, 234, 0.5), 8rpx 0rpx 10rpx rgba(234, 234, 234, .5), -8rpx 0rpx 10rpx rgba(234, 234, 234, .5);
+		background-color: #FFFFFF;
+		padding: 20rpx;
+		border-radius: 10rpx;
+		margin: 20rpx 0;
+	}
 </style>

+ 0 - 116
pages/chooseLable/chooseLable.vue

@@ -1,116 +0,0 @@
-<template>
-	<view>
-		<mp-tree v-slot:default="{item}" :checkList="checkList" v-if="tree.length>0"  :props="prop"
-			@sendValue="confirm" :parent="false" :isCheck="true" :trees="tree">
-			<!-- 内容插槽 -->
-			<view>
-				<view class="content-item">
-					<view class="word">{{item.dictKey}}</view>
-				</view>
-			</view>
-		</mp-tree>
-
-	</view>
-</template>
-
-<script>
-	import mpTree from '@/components/mp-tree/tree.vue';
-	export default {
-		components: {
-			mpTree
-		},
-		data() {
-			return {
-				tree: [],
-				checkList: [{
-					dictKey: "美食",
-					dictValue: "美食",
-					hasChildren: true,
-					id: "1430416319940947969"
-				}],
-				prop: {
-					label: 'dictKey',
-					children: 'children',
-					multiple: true,
-					checkStrictly: true
-				},
-			}
-		},
-		onLoad(option) {
-			this.getLabel()
-		},
-		methods: {
-			getLabel(){
-				let params={
-					code:'business_label'
-				}
-				this.$api.dict.dictionaryTree(params).then(res=>{
-					this.tree=res.data
-				})
-			},
-			//获取选中的值
-			confirm(val, back) {
-				let checkList=[]
-				val.forEach(item=>{
-					let obj={
-						id:item.id,
-						hasChildren:item.hasChildren,
-						dictKey:item.dictKey,
-						dictValue:item.dictValue
-					}
-					checkList.push(obj)
-				})
-				console.log(checkList);
-			},
-		}
-	}
-</script>
-
-<style lang="scss">
-	.box_sizing {
-		-webkit-box-sizing: border-box;
-		-moz-box-sizing: border-box;
-		box-sizing: border-box;
-	}
-
-	.btn {
-		position: fixed;
-		bottom: 0;
-		padding: 10px;
-		background-color: #fff;
-		width: 100%;
-
-		.sureBtn {
-			background-color: #0095F2;
-			color: #fff;
-		}
-	}
-
-	.content-item {
-		display: flex;
-		position: relative;
-		align-items: center;
-
-		.person {
-			height: 64rpx;
-			min-width: 64rpx;
-			border-radius: 50%;
-			border: 1rpx solid rgba(0, 149, 235, 0.15);
-			background-color: rgba(0, 149, 235, 0.1);
-			margin-left: 0px;
-			color: #0095F2;
-			line-height: 64rpx;
-			font-size: 22rpx;
-			text-align: center;
-			margin-left: 20rpx;
-		}
-
-		.word {
-			margin-left: 16rpx;
-			font-size: 30rpx;
-			color: #5b5757;
-			width: 500rpx;
-			word-break: break-all;
-		}
-	}
-</style>

+ 22 - 21
pages/index/index.vue

@@ -30,7 +30,7 @@
 						</view>
 						<view class="padding-top-20 text-df">
 							<text>门店数量</text>
-							<text class="padding-left-20">{{statistic.shopCount}}</text>
+							<text class="padding-left-20">{{statistic.shopNum}}</text>
 						</view>
 					</view>
 					<view class="menu menu2" @click="$jump('/pages/member-center/member-center')">
@@ -42,22 +42,22 @@
 						</view>
 						<view class="padding-top-20 text-df">
 							<text>会员总数</text>
-							<text class="padding-left-20">{{statistic.memberCount}}</text>
+							<text class="padding-left-20">{{statistic.memberNum}}</text>
 						</view>
 					</view>
 				</view>
 				
 				<view class="cu-list grid col-3 no-border" style="border-radius:20rpx ;">
 					<view class="cu-item" >
-						<text style="color: #FF9447;font-size: 34rpx;font-weight: 800;">{{statistic.todayIncome}}</text>
+						<text style="color: #FF9447;font-size: 34rpx;font-weight: 800;">{{statistic.todayCharge}}</text>
 						<text  style="color: #242424;font-size: 26rpx;" >今日营收</text>
 					</view>
 					<view class="cu-item" >
-						<text style="color: #FF9447;font-size: 34rpx;font-weight: 800;">{{statistic.todayOrderCount}}</text>
+						<text style="color: #FF9447;font-size: 34rpx;font-weight: 800;">{{statistic.transactionNum}}</text>
 						<text  style="color: #242424;font-size: 26rpx;" >交易笔数</text>
 					</view>
 					<view class="cu-item" >
-						<text style="color: #FF9447;font-size: 34rpx;font-weight: 800;">{{statistic.todayMemberIn}}</text>
+						<text style="color: #FF9447;font-size: 34rpx;font-weight: 800;">{{statistic.newMember}}</text>
 						<text  style="color: #242424;font-size: 26rpx;" >新增会员</text>
 					</view>
 				</view>
@@ -99,7 +99,7 @@
 		
 		<view class="" style="height: 60rpx;" v-if="safeAreaBottom == 0"></view>
 		
-		<u-select @confirm="mallConfirm" v-model="mallShow" value-name="id" label-name="name" :list="mallList"></u-select>
+		<u-select @confirm="mallConfirm" v-model="mallShow" value-name="id" label-name="mallName" :list="mallList"></u-select>
 	</view>
 </template>
 
@@ -130,36 +130,37 @@
 					},
 				],
 				mallMenuList:[
-					{
-						icon:'/static/icon/password.png',
-						name:'修改密码',
-						path:'/pages/login/updatePassword'
-					},
-					{
-						icon:'/static/icon/mall.png',
-						name:'商家管理',
-						path:'/pages/stores/stores'
-					},
 					{
 						icon:'/static/icon/shanghu.png',
 						name:'商户审核',
 						path:'/pages/shopAudit/shopAudit'
 					},
+					{
+						icon:'/static/icon/audit.png',
+						name:'活动审核',
+						path:'/pages/acitvityAudit/acitvityAudit'
+					},
 					{
 						icon:'/static/icon/tag.png',
 						name:'标签管理',
 						path:'/pages/index/tag-manage'
 					},
 					{
-						icon:'/static/icon/audit.png',
-						name:'活动审核',
-						path:'/pages/acitvityAudit/acitvityAudit'
+						icon:'/static/icon/mall.png',
+						name:'商家管理',
+						path:'/pages/stores/stores'
+					},
+					{
+						icon:'/static/icon/password.png',
+						name:'修改密码',
+						path:'/pages/login/updatePassword'
 					},
 				]
 			}
 		},
 		onLoad() {
 			this.init()
+			
 		},
 		methods: {
 			logout(){
@@ -171,9 +172,9 @@
 			async init(){
 				let phone=this.$cache.get('phone')
 				let res=await this.$api.mall.getListByPhone({personTel:phone})
-				this.mallList=res.data
+				this.mallList=res.data.records
 				this.mallId=this.mallList[0].id
-				this.mallLable=this.mallList[0].name
+				this.mallLable=this.mallList[0].mallName
 				this.cacheSelectedMall(this.mallList[0])
 				//获取统计数据
 				this.getStatistic()

+ 59 - 0
pages/index/submit-success.vue

@@ -0,0 +1,59 @@
+<template>
+	<view>
+		<u-navbar  :is-back="false" title="提交成功"></u-navbar>
+		<view class="content">
+			<image src="@/static/icon/success2.png" mode=""></image>
+			<text class="tips">活动发布成功,请耐心等待审核</text>
+			<view  class="cu-btn round btn" @click="$jump('/pages/index/index')">
+				确认
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+	page{
+		background-color: #FFFFFF;
+	}
+</style>
+<style lang="scss" scoped>
+	.content{
+		margin-top: 140rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		flex-direction: column;
+		
+		image{
+			width: 200rpx;
+			height: 200rpx;
+		}
+		
+		.tips{
+			margin-top: 50rpx;
+			color: #313131;
+			font-size: 28rpx;
+		}
+		
+		.btn{
+			margin-top: 150rpx;
+			background-color: #FF9447;
+			color: #FFFFFF;
+			width: 74%;
+			padding: 46rpx;
+		}
+	}
+</style>

+ 60 - 38
pages/index/tag-manage.vue

@@ -3,14 +3,14 @@
 		<u-cell-item  title="已添加标签" hover-class="none" :arrow="false" :value-style="valueStyle" :value="isEdit?'完成':'编辑'" @click="edit"></u-cell-item>
 		<view class="content">
 			<u-row gutter="0" justify="center" >
-				<u-col span="3" v-for="(item,index) in tagsList" :key="index" @click="deleteTag(item.id)">
+				<u-col span="3" v-for="(item,index) in tagsList" :key="index" >
 					<view class="item" >
-						<text>{{item.name}}</text>
-						<u-icon v-if="isEdit" class="u-icon" name="close-circle-fill" ></u-icon>
+						<text>{{item.dictKey}}</text>
+						<u-icon v-if="isEdit" @click="deleteTag(item,index)" class="u-icon" name="close-circle-fill" ></u-icon>
 					</view>
 				</u-col>
 				<u-col span="3">
-					<view class="item add" @click="add"><u-icon name="plus"></u-icon></view>
+					<view class="item add" @click="show=true"><u-icon name="plus"></u-icon></view>
 				</u-col>
 			</u-row>
 		</view>
@@ -18,10 +18,10 @@
 			<view class="popup-title">添加新标签</view>
 			<scroll-view scroll-y="true">
 				<view class="popup-content">
-					<view v-for="(item,index) in tagsSelect" :class="[selectTags.indexOf(item.id)!='-1'?'active':'','popupItem']" :key="index" @click="selectTag(item.id)">{{item.name}}</view>
+					<view v-for="(item,index) in tagsSelect" :class="[selectTags.indexOf(item.id)!='-1'?'active':'','popupItem']" :key="index" @click="selectTag(item)">{{item.dictValue}}</view>
 				</view>
 			</scroll-view>
-			<view class="popup-confirm" @click="confirm">确定</view>
+			<view class="popup-confirm" @click="getSetTag">确定</view>
 		</u-popup>
 	</view>
 </template>
@@ -41,68 +41,90 @@
 				tagsSelect:[],
 				isEdit:false,
 				show:false,
-				selectTags:[]
+				selectTags:[],
+				labelKey:[],
+				labelParentIds:new Set()
 			}
 		},
 		onLoad() {
 			this.getTagManageList()
+			this.getTagSelect()
 		},
 		methods:{
 			getTagManageList(){
-				let params = {}
-				// params['name'] = ''
-				params['size'] = 50
-				params['current'] = 0
-				params['mallId'] = this.vuex_mallId
-				this.$api.mall.getTagManageList(params).then(res => {
-					this.tagsList = res.data.records
-					this.selectTags = res.data.records.map((item)=>{
-						return item.labelId
-					})
+				let params = {
+					id:this.vuex_mallId
+				}
+				this.$api.mall.detail(params).then(res => {
+					let detail=res.data
+					if (detail.labelParentIds) {
+						let tmp= detail.labelParentIds.split(",")
+						this.labelParentIds=new Set(tmp)
+						console.log(this.labelParentIds);
+					}
+					this.labelKey=detail.labelKey? detail.labelKey.split(","):[]
+					this.tagsList =detail.labelJson?JSON.parse(detail.labelJson):[]
+					this.selectTags =detail.labelValue?detail.labelValue.split(","):[]
 				})
 			},
-			selectTag(id){
+			selectTag(item){
+				let id=item.id
+				let name=item.dictValue
+				let parentId=item.parentId
+				
 				if(this.selectTags.indexOf(id)=="-1"){
 					this.selectTags.push(id)
+					this.labelKey.push(name)
+					this.labelParentIds.add(parentId)
+					
 				}else{
 					let idx = this.selectTags.indexOf(id)
 					this.selectTags.splice(idx,1)
+					this.labelKey.splice(idx,1)
+					this.labelParentIds.delete(parentId)
 				}
 			},
-			add(){
-				this.show = true
-				let params = {}
-				params['size'] = 50
-				params['current'] = 0
+			getTagSelect(){
+				let params = {
+					current:1,
+					size:50,
+					code:'business_label',
+					parentId:'1430415753412112385'
+				}
 				this.$api.mall.getTagSelect(params).then(res => {
-					this.tagsSelect = res.data.records
+					this.tagsSelect = res.data
 				})
 			},
-			confirm() {
-				this.getSetTag()
-			},
 			edit(){
 				this.isEdit = !this.isEdit
 			},
 			getSetTag(type){
+				let tmp=this.tagsSelect.filter(item=>this.selectTags.includes(item.id))
+				let labelJson= JSON.stringify(tmp)
+				
 				let params = {}
-				params['labelIds'] = this.selectTags.length>0?this.selectTags.join(","):''
-				params['mallId'] = this.vuex_mallId
+				params['labelKey'] = this.labelKey.length>0?this.labelKey.join(","):''
+				params['labelValue'] = this.selectTags.length>0?this.selectTags.join(","):''
+				params['id'] = this.vuex_mallId
+				params['labelJson'] = labelJson
+				
+				if (this.isEdit) {
+					this.labelParentIds=new Set(tmp.map(item=>item.parentId))
+				}
+				params['labelParentIds']=Array.from(this.labelParentIds).join(",")
+				
 				this.$api.mall.getSetTag(params).then(res => {
 					this.show = false
 					this.getTagManageList()
 				})
 			},
-			getTagRemove(id){
-				this.$api.mall.getTagRemove(id).then(res => {
-					this.show = false
-					this.getTagManageList()
-				})
-			},
-			deleteTag(id){
+			deleteTag(item,index){
 				if(!this.isEdit)return
-				// this.selectTag(id)
-				this.getTagRemove(id)
+				let idx= this.labelKey.indexOf(item.dictKey)
+				this.labelKey.splice(idx,1)
+				let idx1= this.selectTags.indexOf(item.id)
+				this.selectTags.splice(idx1,1)
+				this.getSetTag()
 			}
 		}
 	}

+ 104 - 100
pages/login/forget.vue

@@ -5,43 +5,39 @@
 		<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>
+					<text>输入手机号进行找回密码</text>
 				</view>
 			</view>
-
-			<view style="width: 76%;margin-top: 80rpx;">
-				<u-form>
-					<u-form-item label="手机号" prop="phone" label-width="150">
+			
+			<view  style="width: 76%;margin-top: 80rpx;">
+				<u-form :model="form" ref="uForm" :rules="rules"  :error-type="['message']">
+					<u-form-item    label="手机号" prop="phone" label-width="150">
 						<u-input :border="false" placeholder="请输入手机号" v-model="form.phone" type="number"></u-input>
 					</u-form-item>
-					<u-form-item label="验证码" prop="code" label-width="150">
-						<u-input style="width: 100%;" :border="false" placeholder="请输入验证码" v-model="form.code"
-							type="text"></u-input>
-						<u-button shape="circle" slot="right" :custom-style="customStyle" size="mini" @click="getCode">
-							{{codeTips}}</u-button>
-					</u-form-item>
-					<u-form-item label="新密码" prop="phone" label-width="150">
-						<u-input :border="false" placeholder="请设置新的登录密码" v-model="form.password" type="password">
-						</u-input>
+					<u-form-item    label="验证码" prop="code" label-width="150">
+						<view class="flex" >
+							<u-input style="width: 100%;" :border="false" placeholder="请输入验证码" v-model="form.code" type="text"></u-input>
+							<u-button shape="circle" slot="right" :custom-style="customStyle" size="mini" @click="getCode">{{codeTips}}</u-button>
+						</view>
 					</u-form-item>
-					<u-form-item label="确认新密码" prop="phone" label-width="170">
-						<u-input :border="false" placeholder="请再次输入新密码" v-model="form.confirmPassword" type="password">
-						</u-input>
+					<u-form-item    label="新密码" prop="password" label-width="150">
+						<u-input :border="false" placeholder="请设置新的登录密码" v-model="form.password" type="number"></u-input>
 					</u-form-item>
 				</u-form>
 			</view>
-			<view style="width: 86%;margin-top: 80rpx;">
+			
+			<view  style="width: 86%;margin-top: 80rpx;">
 				<view @click="submit" class="btn cu-btn round" style="width:100%;height: 90rpx;font-size: 34rpx;">
-					确认修改密码
+					确认修改
 				</view>
 			</view>
 		</view>
-
+		
 		<u-verification-code seconds="60" ref="uCode" @change="codeChange"></u-verification-code>
 	</view>
 </template>
@@ -51,55 +47,66 @@
 	export default {
 		data() {
 			return {
-				customStyle: {
-					'backgroundColor': '#d18c42',
-					'color': '#ffffff'
+				customStyle:{
+					'backgroundColor':'#d18c42',
+					'color':'#ffffff'
 				},
 				codeTips: '',
-				form: {
-					phone: '',
-					password: '',
-					confirmPassword: '',
-					code: '',
+				form:{
+					phone:'',
+					code:'',
+					password:'',
 				},
-
+				rules: {
+					phone: [{
+						required: true,
+						message: '请输入手机号',
+						trigger: ['change', 'blur'],
+						
+					},{
+						message: '手机号码不正确',
+						trigger: ['change', 'blur'],
+						validator: (rule, value, callback) => {
+							return this.$u.test.mobile(value);
+						},
+					}],
+					code: [{
+						required: true,
+						message: '请输入验证码',
+						trigger: ['change', 'blur'],
+					}],
+					password: [{
+						required: true,
+						message: '请输入登录密码',
+						trigger: ['change', 'blur'],
+					}],
+				}
 			}
 		},
+		onReady() {
+			this.$refs.uForm.setRules(this.rules);
+		},
 		methods: {
-			async submit() {
-				if (this.$isEmpty(this.form.phone)) {
-					this.$u.toast('请输入手机号')
-					return
-				}
-				if (this.$isEmpty(this.form.code)) {
-					this.$u.toast('请输入验证码')
-					return
-				}
-				if (this.$isEmpty(this.form.password)) {
-					this.$u.toast('请输入新密码')
-					return
-				}
-				if (this.$isEmpty(this.form.confirmPassword)) {
-					this.$u.toast('请再次输入新密码')
-					return
-				}
-				if (this.form.password != this.form.confirmPassword) {
-					this.$u.toast('两次输入的新密码不正确!')
-					return
-				}
-				let params = {
-					type: 1,
-					code:this.form.code,
-					phone: this.form.phone,
-					password: md5Libs.md5(this.form.password),
+			async forgetPaw(){
+				let p={
+					type:'MALL',
+					phone:this.form.phone,
+					secret:md5Libs.md5(this.form.password),
+					value:this.form.code,
+					smsId:this.$cache.get('smsId'),
 				}
-				let res = await this.$api.appaccount.forgetPassword(params)
+				let res=await this.$api.appaccount.forgetPsw(p)
 				if (res.success) {
-					this.$dialog.showModalAndBack('操作成功')
-				} else {
-					this.$u.toast(res.msg)
+					this.$dialog.showModalAndBack("修改成功,请重新登录")
 				}
 			},
+			async submit(){
+				this.$refs.uForm.validate(valid => {
+					if (valid) {
+						this.forgetPaw()
+					}
+				});
+			}, 
 			codeChange(text) {
 				this.codeTips = text;
 			},
@@ -116,55 +123,53 @@
 						mask: true
 					})
 					setTimeout(() => {
-						let params = {
-							phone: this.form.phone
+						let params={
+							phone:this.form.phone
 						}
-						let p = this.$u.queryParams(params)
-						this.$api.sms.send(p).then(res => {
-							if (res.data == "success") {
+						let p=this.$u.queryParams(params)
+						this.$api.sms.send(p).then(res=>{
+							if (res.data.success) {
+								this.$cache.put('smsId',res.data.id)
 								this.$u.toast('验证码已发送');
 								// 通知验证码组件内部开始倒计时
-							} else {
+							}else{
 								this.$u.toast(res.data);
 							}
 							this.$refs.uCode.start();
 						})
+						uni.hideLoading()
 					}, 2000);
 				} else {
 					this.$u.toast('倒计时结束后再发送');
 				}
-			}
+			},
+			
 		}
 	}
 </script>
 
 <style>
-	page {
+	page{
 		background-color: #FFFFFF;
 	}
 </style>
-
 <style lang="scss" scoped>
 	$color:#d18c42;
 
-	page {
-		background-color: #FFFFFF;
-	}
-
-	.btn {
+	.btn{
 		background-color: $color;
-		color: #FFFFFF;
+		color:#FFFFFF;
 	}
-
-	.btn {
+	
+	.btn{
 		background-color: $color;
-		color: #FFFFFF;
+		color:#FFFFFF;
 	}
-
-	.bg {
+	
+	.bg{
 		z-index: 99;
-		height: 440rpx;
-		width: 440rpx;
+		height: 400rpx;
+		width: 400rpx;
 		position: absolute;
 		right: -240rpx;
 		top: -240rpx;
@@ -172,10 +177,10 @@
 		border-radius: 50%;
 		box-shadow: 0rpx 0rpx 50rpx #c5803b;
 	}
-
-	.bg1 {
-		height: 500rpx;
-		width: 500rpx;
+	
+	.bg1{
+		height: 460rpx;
+		width: 460rpx;
 		position: absolute;
 		right: -240rpx;
 		top: -240rpx;
@@ -183,47 +188,46 @@
 		border-radius: 50%;
 		box-shadow: #c6813b;
 	}
-
-	.back {
+	
+	.back{
 		position: absolute;
 		top: var(--status-bar-height);
 		left: 20rpx;
 		padding-top: var(--status-bar-height);
 	}
-
-	.content {
+	
+	.content{
 		height: 90vh;
 		display: flex;
 		flex-direction: column;
 		justify-content: center;
 		align-items: center;
-
-		.top {
+		
+		.top{
 			width: 76%;
 			display: flex;
-
-			.title {
+			.title{
 				margin-right: 20rpx;
 				display: flex;
 				flex-direction: column;
 				justify-content: center;
 				align-items: flex-start;
 				text-align: left;
-
-				text:first-child {
+				
+				text:first-child{
 					font-weight: 800;
 					font-size: 60rpx;
 					color: #000;
 					margin-bottom: 20rpx;
 				}
-
-				text:last-child {
+				
+				text:last-child{
 					font-size: 28rpx;
 					color: #7f7f7f;
 				}
 			}
-
-
+			
+			
 		}
 	}
 </style>

+ 29 - 32
pages/login/login.vue

@@ -24,10 +24,12 @@
 						<u-input :border="false" placeholder="请输入手机号" v-model="form.phone" type="number"></u-input>
 					</u-form-item>
 					<u-form-item  label="验证码" prop="code" >
-						<u-input style="width: 100%;" :border="false" placeholder="请输入验证码" v-model="form.code"
-							type="text"></u-input>
-						<u-button shape="circle" slot="right" :custom-style="customStyle" size="mini"
-							@click="getCode">{{codeTips}}</u-button>
+						<view class="flex" >
+							<u-input style="width: 100%;" :border="false" placeholder="请输入验证码" v-model="form.code"
+								type="text"></u-input>
+							<u-button shape="circle" slot="right" :custom-style="customStyle" size="mini"
+								@click="getCode">{{codeTips}}</u-button>
+						</view>
 					</u-form-item>
 				</u-form>
 			</view>
@@ -38,7 +40,7 @@
 				</view>
 				<!-- <view class="center" style="margin-top: 100rpx;">
 					<text style="color: #949494;">登录即代表已阅读并同意</text>
-					<text style="color: #0000ff;">《软件服务协议》</text>
+					<text style="color: #0000ff;" @click="protocol">《软件服务协议》</text>
 				</view> -->
 			</view>
 		</view>
@@ -78,6 +80,11 @@
 			this.$refs.uForm.setRules(this.rules);
 		},
 		methods: {
+			protocol(){
+				uni.navigateTo({
+					url:"/pages/webView/webView?url="+this.$global.protocol
+				})
+			},
 			login() {
 				this.$refs.uForm.validate(valid => {
 					if (valid) {
@@ -89,38 +96,28 @@
 				});
 			},
 			async doLogin(){
-				let flag=await this.verifyCode()
-				if (!flag) {
-					return
-				}
 				let params={
-					personTel:this.form.phone
+					type:"MALL",
+					phone:this.form.phone,
+					value:this.form.code,
+					smsId:this.$cache.get('smsId')	
 				}
-				let res=await this.$api.mall.getListByPhone(params)
-				if (this.$isEmpty(res.data)){
-					this.$u.toast('账号或者密码错误!')
+				let res=await this.$api.appaccount.phoneLogin(params)
+				uni.hideLoading()
+				if (!res.success) {
+					//登录失败
+					this.$u.toast(res.msg)
 					return
-				}else{
-					this.$cache.put('phone',this.form.phone)
-					uni.reLaunch({
-						url:"/pages/index/index"
-					})
 				}
-				uni.hideLoading()
+				this.$cache.put('phone',this.form.phone)
+				uni.navigateTo({
+					url:"/pages/index/index"
+				})
+				
 			},
 			codeChange(text) {
 				this.codeTips = text;
 			},
-			async verifyCode(){
-				let p=this.$u.queryParams(this.form)
-				let res=await this.$api.sms.validCode(p)
-				if (res.data == "success") {
-					return true
-				}else{
-					this.$u.toast(res.data)
-					return false
-				}
-			}, 
 			// 获取验证码
 			getCode() {
 				if (this.$isEmpty(this.form.phone)) {
@@ -134,13 +131,13 @@
 						mask: true
 					})
 					setTimeout(() => {
-						uni.hideLoading();
 						let params={
 							phone:this.form.phone
 						}
 						let p=this.$u.queryParams(params)
 						this.$api.sms.send(p).then(res=>{
-							if (res.data=="success") {
+							if (res.data.success) {
+								this.$cache.put('smsId',res.data.id)
 								this.$u.toast('验证码已发送');
 								// 通知验证码组件内部开始倒计时
 							}else{
@@ -148,7 +145,7 @@
 							}
 							this.$refs.uCode.start();
 						})
-					}, 2000);
+					}, 200);
 				} else {
 					this.$u.toast('倒计时结束后再发送');
 				}

+ 5 - 3
pages/login/updatePassword.vue

@@ -107,10 +107,10 @@
 					return
 				}
 				let params={
-					type:1,
+					type:'MALL',
 					phone:this.form.phone,
-					password:md5Libs.md5(this.form.password),
-					oldPassword:md5Libs.md5(this.form.oldPassword)
+					secret:md5Libs.md5(this.form.password),
+					oldSecret:md5Libs.md5(this.form.oldPassword)
 				}
 				this.$api.appaccount.setPassword(params).then(res=>{
 					if (res.success) {
@@ -123,6 +123,8 @@
 					}else{
 						this.$u.toast(res.msg)
 					}
+				}).catch(err=>{
+					this.$u.toast(err.data.msg)
 				})
 			},
 		}

+ 9 - 6
pages/member-center/add.vue

@@ -28,7 +28,7 @@
 					<text>=</text>
 				</view>
 				<view class="center" style="width: 45%;">
-					<u-input height="50" :border="true" :clearable="false" v-model="form.pointValue" placeholder="请输入积分值" />
+					<u-input height="50" :border="true" :clearable="false" v-model="form.pointValue" placeholder="请输入积分值" />
 					<view class="cu-tag bg-color radius">
 					</view>
@@ -91,13 +91,16 @@
 					return
 				}
 				
-				this.form.id=this.vuex_mallId
-				this.$api.memberCenter.create(this.form).then(res=>{
+				let id=this.vuex_shopId
+				this.$api.shop.submit({
+					id,
+					sendPointUnit: this.form.consumeOnePoint,
+					pointRate: 0.01,
+					isOpenMember: 1
+				}).then(res=>{
 					if (res.success) {
-						const selectedMall = this.$cache.get("selectedMall")
-						this.$cache.put("selectedMall",Object.assign(selectedMall,this.form))
 						this.$dialog.showModal('创建成功',false).then(res=>{
-							this.$jump('/pages/member-center/member-center')
+							this.$jump('/pages/member/member')
 						})
 					}else{
 						this.$u.toast(res.msg)

+ 221 - 0
pages/member-center/detail.vue

@@ -0,0 +1,221 @@
+<template>
+	<view>
+		<view class="headCard">
+			<image class="avatar" :src="detail.avatar" mode="aspectFit" ></image>
+			<view class="itemCard">
+				<text>会员名称</text>
+				<text>{{detail.nickName  || '暂无'}}</text>
+			</view>
+			<view class="itemCard">
+				<text>手机号码</text>
+				<text>{{detail.phone || '暂无'}}</text>
+			</view>
+		</view>
+		<view class="cell">
+			<text class="cell-item" style="font-weight: bold;font-size: 28rpx;">消费记录</text>
+			<text class="cell-item" style="color: #D18C42;font-size: 22rpx;">消费总额¥{{detail.payTotal}}</text>
+		</view>
+		<view class="card">
+			<view class="u-flex">
+				<view class="area1 area-padding " style="padding-left: 40rpx;">
+					<text>交易日期</text>
+				</view>
+				<view class="area2 area-padding">
+					<image style="width: 35rpx;height: 35rpx;margin-right: 10rpx;margin-bottom: -10rpx;"
+						src="@/static/icon/points-value.png"></image>
+					<text>获赠积分</text>
+				</view>
+				<view class="area3 area-padding u-text-right u-p-r-20">
+					<text>消费金额</text>
+				</view>
+			</view>
+			<mescroll-body :height="height" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
+				:down="downOption" :up="upOption">
+				<view class="item" v-for="(item,index) in list" :key="index">
+					<view class="area1">
+						<view class="item-padding">
+							<text>{{item.updateTime}}</text>
+						</view>
+					</view>
+					<view class="area2 text-area" style="width: 15%;">
+						<view class="item-padding">
+							<text style="font-size: 32rpx;margin-left: 10rpx;color: #F39248;">{{item.point || '0'}}</text>
+						</view>
+					</view>
+					<view class="area3 text-area u-p-r-20" style="width: 30%;">
+						<view class="item-padding" style="flex:1;text-align: right;font-size: 34rpx;">¥{{item.payAmount}}</view>
+					</view>
+				</view>
+			</mescroll-body>
+				
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/components/mescroll-body/mescroll-mixins.js";
+	export default{
+		mixins: [MescrollMixin],
+		data(){
+			return{
+				userId:'',
+				detail:null,
+				downOption: {
+					auto: false,
+					height:'',
+				},
+				list:[]
+			}
+		},
+		onReady() {
+			this.getElInfo()
+		},
+		onLoad(options) {
+			if(options.userId){
+				this.userId = options.userId
+			}
+		},
+		methods:{
+			async getElInfo() {
+				let rectInfo = await this.$u.getRect('.card');
+				this.height=this.$u.sys().windowHeight - rectInfo.top + 'px'
+			},
+			upCallback(mescroll) {
+				if (!this.vuex_shopId) {
+					return
+				}
+				let params = {
+					id: this.detail.id,
+					shopId: this.vuex_shopId,
+					current: mescroll.num,
+					size: mescroll.size,
+				}
+				try {
+					this.$api.memberCenter.billList(params).then(res => {
+						console.log(res)
+						let data = res.data.records
+						let total = res.data.total
+						mescroll.endBySize(data.length, total);
+						if (mescroll.num == 1) this.list = []; //如果是第一页需手动制空列表
+						this.list = this.list.concat(data); //追加新数据
+					})
+			
+				} catch (e) {
+					this.mescroll.endErr()
+				}
+			},
+			downCallback() {
+				setTimeout(() => {
+					this.mescroll.resetUpScroll();
+				}, 200)
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.headCard {
+		margin-top: 100rpx;
+		padding: 70rpx 30rpx 30rpx;
+		background-color: #FFFFFF;
+		position: relative;
+		.avatar{
+			position: absolute;
+			margin: 0 auto;
+			transform: translateY(-50%);
+			width: 120rpx;
+			height: 120rpx;
+			border-radius: 50%;
+			left: 0;
+			right: 0;
+			top: 0;
+		}
+		.itemCard{
+			padding: 20rpx 0;
+			font-size: 28rpx;
+			color: #888888;
+			margin: 0 20rpx;
+			display: flex;
+			justify-content: space-between;
+		}
+	}
+	.cell{
+		display: flex;
+		justify-content: space-between;
+		align-items: flex-end;
+		height: 60rpx;
+		padding: 30rpx 30rpx;
+		box-sizing: content-box;
+	}
+	.card {
+		background-color: #FFFFFF;
+	
+		.area-padding {
+			padding: 40rpx 0 20rpx;
+		}
+	
+		.text-area {
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+		}
+	
+		.area1 {
+			padding-left: 30rpx;
+			width: 55%;
+	
+			view:first-child {
+				display: flex;
+	
+				image {
+					width: 80rpx;
+					height: 80rpx
+				}
+	
+				view {
+					padding-left: 15rpx;
+					padding-bottom: 5rpx;
+					display: flex;
+					flex-direction: column;
+	
+					text:first-child {
+						font-size: 32rpx;
+						padding-bottom: 10rpx;
+						color: #000;
+					}
+	
+					text:last-child {
+						font-size: 22rpx;
+						color: #888888;
+					}
+				}
+			}
+		}
+	
+		.area2 {
+			width: 25%;
+		}
+	
+		.area3 {
+			width: 20%;
+		}
+	
+		.item-padding {
+			padding: 20rpx 0;
+		}
+	
+		.item {
+			padding: 5rpx;
+			display: flex;
+			border-bottom: 1rpx solid #DDDDDD;
+		}
+	
+		.item:last-child {
+			border: none;
+		}
+	
+	
+	
+	}
+</style>

+ 42 - 71
pages/member-center/member-center.vue

@@ -4,7 +4,7 @@
 			<image src="../../static/icon/vip.png" mode=""></image>
 			<text>没有会员中心信息</text>
 
-			<view @click="$jump('/pages/member-center/add')" class="cu-btn btn-bg-color round" style="width: 48%;height: 80rpx;position: fixed;bottom: 20%;">
+			<view @click="$jump('/pages/member/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>
@@ -12,10 +12,10 @@
 
 		<block v-else>
 			<view class="top-menu">
-				<view class="leftFixed">{{selectedMall.point}}积分等于{{selectedMall.pointValue}}元</view>
+				<view class="leftFixed">1积分等于{{detail.pointUnitValue}}元</view>
 				<view class="u-flex u-row-between">
 					<view class="item">
-						<text>{{detail.memberCount}}</text>
+						<text>{{detail.memberNum}}</text>
 						<text>会员数量</text>
 					</view>
 					
@@ -25,10 +25,11 @@
 					</view>
 				</view>
 				<view class="u-m-t-50 u-flex u-col-center u-row-center">
-					<text class="u-font-24 u-m-r-20">规则:消费1元赠送{{selectedMall.consumeOnePoint}}积分</text>
+					<text class="u-font-24 u-m-r-20">规则:消费1元赠送{{detail.sendPointUnit}}积分</text>
 					<u-button size="mini" shape="circle" @click="showPopup=true">更改规则</u-button>
 				</view>
 			</view>
+			
 			<view class="padding-20 text-bold text-xl">
 				<text>会员列表</text>
 			</view>
@@ -36,7 +37,7 @@
 			<view class="card">
 				<view class="flex tableTitle">
 					<view class="area1 title">
-						会员名称
+						会员信息
 					</view>
 					<view class="area2 title">
 						积分数
@@ -45,12 +46,12 @@
 						价值
 					</view>
 				</view>
-
 				<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="item" v-for="(item,index) in dataList" :key="index" @click="$jump('/pages/member-center/detail?userId='+item.userId)">
 						<view class="area1 flex text-bold">
-							<image class="img-avatar" :src="item.avatar">
+							<image class="img-avatar"
+								:src="item.avatar">
 							</image>
 							<view class="center padding-left-10">
 								<text>{{item.nickName}}</text>
@@ -59,11 +60,11 @@
 						<view class="area2 center text-bold text-lg"
 							style="justify-content: flex-start;margin-left: 10rpx;color: #F37A1E;">
 							<image class="img-points" src="../../static/icon/points-value.png"></image>
-							<text class="margin-left-10">{{item.pointTotal | numFilter}}</text>
+							<text class="margin-left-10">{{$digital.keepTwoDecimal(item.pointTotal)}}</text>
 						</view>
 
 						<view class="area3  center text-lg">
-							<text class="text-price text-bold">{{item.pointValue | numFilter}}</text>
+							<text class="text-price text-bold">{{$digital.keepTwoDecimal(item.pointValue)}}</text>
 						</view>
 					</view>
 				</mescroll-body>
@@ -73,30 +74,9 @@
 			<view class="u-popup-content">
 				<text>更改积分规则</text>
 				<u-form>
-					<view class="u-flex">
-						<u-input
-						v-model="selectedMall.point" 
-						border="true" 
-						border-color="#eaeaea"  
-						type="number" 
-						:clearable="false" 
-						placeholder="请输入积分"
-						/>
-						<view style="width: 150rpx;">积分</view>
-						<view style="width: 150rpx;">等于</view>
-						<u-input
-						v-model="selectedMall.pointValue" 
-						border="true" 
-						border-color="#eaeaea"  
-						type="number" 
-						:clearable="false" 
-						placeholder="请输入金额"
-						/>
-						<view>元</view>
-					</view>
 					<u-form-item label-width="180"  label="消费1元赠送">
 						<u-input 
-						v-model="selectedMall.consumeOnePoint" 
+						v-model="sendPointUnit" 
 						border="true" 
 						border-color="#eaeaea"  
 						type="number" 
@@ -122,7 +102,7 @@
 				isOpenMember: false,
 				detail: {},
 				dataList: [],
-
+				
 				height:'300px',
 				downOption: {
 					use: true,
@@ -133,7 +113,8 @@
 					auto: false // 不自动加载
 				},
 				showPopup:false,
-				consumeOnePoint:'',
+				//消费一元赠送的积分值
+				sendPointUnit:'',
 				customStyle1:{
 					backgroundColor:'#D18C42',
 					color:'#fff',
@@ -152,36 +133,20 @@
 				}
 			}
 		},
-		onLoad() {
-			this.$u.sys()
-			this.fetchShopDetail()
-		},
-		filters: {
-			numFilter(value) {
-				let realVal = "";
-				if (!isNaN(value) && value !== "") {
-					// 截取当前数据到小数点后两位,改变toFixed的值即可截取你想要的数值
-					realVal = parseFloat(value).toFixed(2);
-				} else {
-					realVal = "--";
-				}
-				return realVal;
-			},
-		},
 		onReady() {
 			this.getElInfo()
-			this.selectedMall = this.$cache.get("selectedMall")
+		},
+		onLoad() {
+			this.fetchMemberInfo()
 		},
 		methods: {
 			update(){
 				let params = {
-					id: this.vuex_shopId,
-					consumeOnePoint:this.selectedMall.consumeOnePoint,
-					point:this.selectedMall.point,
-					pointValue:this.selectedMall.pointValue
+					id: this.vuex_mallId,
+					sendPointUnnit:this.sendPointUnit
 				}
-				this.$api.memberCenter.update(params).then(res => {
-					this.$cache.put("selectedMall",this.selectedMall)
+				this.$api.mall.submit(params).then(res => {
+					this.fetchMemberInfo()
 					this.showPopup = false
 				})
 			},
@@ -189,29 +154,32 @@
 				let rectInfo = await this.$u.getRect('.tableTitle');
 				this.height=this.$u.sys().windowHeight - rectInfo.top + 'px'
 			},
-			async fetchShopDetail() {
-				let params = {
-					id: this.vuex_mallId
-				}
-				let res=await this.$api.mall.detail(params)
-				if (res.data.isOpenMember == 1) {
-					this.isOpenMember = true
-					this.detail = res.data
+			fetchMemberInfo(){
+				let params={
+					mallId:this.vuex_mallId
 				}
+				this.$api.mall.memberInfo(params).then(res=>{
+					if (res.data.isOpenMember == 1) {
+						this.isOpenMember = true
+						this.detail = res.data
+					}
+				})
 			},
 			downCallback() {
-				setTimeout(() => {
+				setTimeout(()=>{
 					this.mescroll.resetUpScroll();
-				}, 800)
+				},800)
 			},
 			upCallback(mescroll) {
 				let params = {
-					mallId: this.vuex_mallId,
+					shopId: this.vuex_shopId,
 					current: mescroll.num,
 					size: mescroll.size,
+					//商场会员
+					type:1
 				}
 				try {
-					this.$api.memberCenter.list(params).then(res => {
+					this.$api.member.list(params).then(res => {
 						let data = res.data.records
 						let total = res.data.total
 						mescroll.endBySize(data.length, total);
@@ -219,6 +187,7 @@
 						this.dataList = this.dataList.concat(data); //追加新数据
 					})
 				} catch (e) {
+					console.log(e);
 					this.mescroll.endErr()
 				}
 			}
@@ -259,7 +228,7 @@
 			font-size: 22rpx;
 			height: 40rpx;
 			line-height: 40rpx;
-			background-color: $base-color;
+			background-color: #EE9230;
 			color: #fff;
 			position: absolute;
 			top: 20rpx;
@@ -281,13 +250,14 @@
 				font-weight: 800;
 				font-size: 40rpx;
 			}
-		
+
 			text:last-child {
 				font-size: 26rpx;
 				color: #D0D4EE;
 			}
 		}
 	}
+	
 	.u-popup-content{
 		display: flex;
 		flex-direction: column;
@@ -298,6 +268,7 @@
 			width: 500rpx;
 		}
 	}
+	
 	.card {
 		width: 100%;
 		background-color: #FFFFFF;

+ 60 - 72
pages/publish/publish.vue

@@ -2,11 +2,11 @@
 	<view>
 		<my-bar title="发布活动" :transparent="transparent">
 			<view slot="content" class="publish" @click="cropperSelect()">
-				<block v-if="!form.pic">
+				<block v-if="!form.poster">
 					<u-icon name="photo" size="100" color="#cecece"></u-icon>
 					<text>上传活动封面</text>
 				</block>
-				<image :src="form.pic" style="height: 380rpx;" v-else mode="heightFix"></image>
+				<image :src="form.poster" style="height: 380rpx;" v-else mode="heightFix"></image>
 			</view>
 		</my-bar>
 
@@ -26,25 +26,15 @@
 				<u-form-item prop="title" label="标题" left-icon="bookmark">
 					<u-input v-model="form.title" placeholder="请输入标题" />
 				</u-form-item>
-				<u-form-item label="地区" prop="address" left-icon="map">
-					<u-input type="select" :select-open="regionShow" v-model="form.address" placeholder="请选择地区"
-						@click="regionShow = true"></u-input>
+				<u-form-item prop="supplyPrice" label-width="200" label="活动折扣" left-icon="rmb-circle">
+					<u-input v-model="form.discount" placeholder="请输入活动折扣(如:输入9,表示9折)" />
 				</u-form-item>
-				<u-form-item v-if="form.address" prop="title" label="详细地址">
-					<u-input v-model="addressDetail" placeholder="请输入详细地址" />
-				</u-form-item>
-				<u-form-item prop="supplyPrice" label-width="250" label="建议供应价" left-icon="rmb-circle">
-					<view class="flex justify-between">
-						<u-input v-model="form.supplyPrice" placeholder="请输入建议供应价" />
-						<text style="color: #737373;">(%)</text>
-					</view>
-				</u-form-item>
-				<u-form-item prop="labelIds" @click="showCheckBox" label-width="200" label="行业类目" left-icon="grid">
+				<u-form-item  @click="showCheckBox" label-width="200" label="行业类目" left-icon="grid">
 					<view @click="checkboxShow=true" class="flex justify-between ">
 						<view class="u-flex u-flex-wrap">
 							<view v-if="!checkboxList.some((i)=>{return i.checked==true})" style="color: #c0c4cc;">请选择</view>
 							<view v-for="(item, index) in checkboxList" :key="index" >
-								<view v-if="item.checked" style="margin-right: 10rpx;">{{ item.name }}</view>
+								<view v-if="item.checked" style="margin-right: 10rpx;">{{ item.dictKey }}</view>
 							</view>
 						</view>
 						<view>
@@ -61,22 +51,13 @@
 					<u-input type="select" @click="timeShow=true;timeType=2" v-model="form.endTime"
 						placeholder="请选择结束时间" />
 				</u-form-item>
-				<u-form-item prop="subsidy" label-width="200" label="活动补贴" left-icon="coupon">
-					<view class="flex justify-between">
-						<u-input v-model="form.subsidy" placeholder="请输入折扣" />
-						<text style="color: #737373;">(%)</text>
-					</view>
-				</u-form-item>
-				<u-form-item prop="hundredPointValue" label-width="200" label="积分通兑" left-icon="coupon">
-					<u-input v-model="form.hundredPointValue" placeholder="100 积分 = ? 元" />
-				</u-form-item>
 			</u-form>
 		</view>
 
 		<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="请输入活动详情" />
+					<u-input type="area" height="200" v-model="form.intro" placeholder="请输入活动详情" />
 				</u-form-item>
 			</u-form>
 		</view>
@@ -98,7 +79,7 @@
 				<u-checkbox-group>
 					<u-checkbox @change="checkboxChange" v-model="item.checked" v-for="(item, index) in checkboxList"
 						:key="index" :name="index">
-						{{ item.name }}
+						{{ item.dictKey }}
 					</u-checkbox>
 				</u-checkbox-group>
 			</view>
@@ -108,7 +89,6 @@
 			avatarStyle="width:100vw;height:100vw;">
 		</cropper>
 		<u-picker v-model="timeShow" mode="time" @confirm="timeConfirm" :params="params"></u-picker>
-		<u-picker mode="region" v-model="regionShow" @confirm="regionConfirm"></u-picker>
 	</view>
 </template>
 
@@ -122,20 +102,22 @@
 			return {
 				transparent: 0,
 				form: {
-					pic: '',
+					poster: '',
 					title: '',
-					address: '',
-					supplyPrice: '',
-					labelIds: '',
+					discount: '',
+					labelKey:'',
 					beginTime: '',
 					endTime: '',
-					detail: '',
-					subsidy: '',
-					hundredPointValue: '',
-					sponsorType:this.$global.sponsorType.mall,
-					auditStatus:this.$global.activityStatus.wait_admin_audit,
+					intro: '',
+					launchType:this.$global.sponsorType.mall,
+					launchId:this.vuex_mallId,
+					mallId:this.vuex_mallId,
+					labelParentIds:'',
+					labelJson:'',
+					labelKey:'',
+					labelValue:'',
+					processDefinitionId:''
 				},
-				addressDetail: '',
 
 				checkboxShow: false,
 				timeShow: false,
@@ -150,7 +132,6 @@
 				},
 				checkboxList: [],
 
-				regionShow: false,
 
 				rules: {
 					title: [{
@@ -158,11 +139,6 @@
 						message: '请输入标题',
 						trigger: ['blur', 'change']
 					}],
-					address: [{
-						required: true,
-						message: '请选择地区',
-						trigger: 'change',
-					}],
 					beginTime: [{
 						required: true,
 						message: '请选择开始时间',
@@ -173,21 +149,11 @@
 						message: '请选择结束时间',
 						trigger: 'change',
 					}],
-					supplyPrice: [{
+					discount: [{
 						required: true,
 						message: '请输入建议供应价',
 						trigger: ['blur', 'change']
 					}],
-					subsidy: [{
-						required: true,
-						message: '请输入活动补贴',
-						trigger: ['blur', 'change']
-					}],
-					hundredPointValue: [{
-						required: true,
-						message: '请输入积分通兑',
-						trigger: ['blur', 'change']
-					}],
 					
 					//裁剪框宽度
 					rectWidth:200,
@@ -206,12 +172,31 @@
 		onLoad() {
 			uni.$on('uAvatarCropper',(path)=>{
 				this.$api.uploadFile(path).then(res=>{
-					this.form.pic=res.data.link
+					this.form.poster=res.data.link
 				})
 			})
+			this.form.mallId=this.vuex_mallId
+			this.form.launchId=this.vuex_mallId
+			
 			this.getShopLabelByMallId()
+			this.getProcessDefinitionId()
 		},
 		methods: {
+			//获取发布活动流程id
+			getProcessDefinitionId(){
+				let params={
+					category:'flow_4',
+					mode:1
+				}
+				this.$api.flow.getProcessDefinitionId(params).then(res=>{
+					this.form.processDefinitionId=res.data.records[0].id
+					console.log(this.form.processDefinitionId)
+					if (this.$isEmpty(this.form.processDefinitionId)) {
+						this.$dialog.showModalAndBack("系统错误,获取流程主键失败")
+						return
+					}
+				})
+			},
 			protocol(){
 				uni.navigateTo({
 					url: "/pages/webView/webView?url=" + this.$global.publishActivity
@@ -250,13 +235,15 @@
 					this.form.endTime = date
 				}
 			},
-			//选择地址回调
-			regionConfirm(e) {
-				this.form.address = e.province.label + '-' + e.city.label + '-' + e.area.label;
-			},
 			//获取多选的标签
-			getShopLabelByMallId() {
-				this.$api.mall.getShopLabelByMallId(this.vuex_mallId).then(res => {
+			getShopLabelByMallId(){
+				let params = {
+					current:1,
+					size:50,
+					code:'business_label',
+					parentId:'1430415753412112385'
+				}
+				this.$api.mall.getTagSelect(params).then(res => {
 					res.data.forEach(item => {
 						item.checked = false
 					})
@@ -279,24 +266,25 @@
 				});
 			},
 			doPublish() {
-				if (!this.form.pic) {
+				if (!this.form.poster) {
 					this.$u.toast('请上传封面图')
 					return
 				}
-				let tmp = this.checkboxList.filter(item => item.checked == true).map(item => item.id)
-				this.form.labelIds = tmp.join(',')
-				if (!this.form.labelIds) {
+				let tmpList = this.checkboxList.filter(item => item.checked == true)
+				let labelParentIds= new Set(tmpList.map(item=>item.parentId))
+				this.form.labelParentIds=Array.from(new Set(tmpList.map(item=>item.parentId))).join(',')
+				this.form.labelJson=JSON.stringify(tmpList)
+				this.form.labelKey = tmpList.map(item=>item.dictKey).join(',')
+				this.form.labelValue = tmpList.map(item=>item.id).join(',')
+				this.form.discount=this.$digital.floatMul(this.form.discount,0.1)
+				if (!this.form.labelValue) {
 					this.$u.toast('请选择行业类目')
 					return
 				}
-				if (this.addressDetail) {
-					this.form.address = this.form.address + ' ' + this.addressDetail
-				}
-				this.form.sponsorId=this.vuex_mallId
 				this.$api.activity.publish(this.form).then(res=>{
 					if (res.success) {
-						this.$dialog.showModal('发布成功,请耐心等待平台审核',false).then(()=>{
-							this.$back()
+						uni.redirectTo({
+							url:'/pages/index/submit-success'
 						})
 					}
 				})

+ 5 - 9
pages/shopAudit/comps/card.vue

@@ -22,11 +22,6 @@
 					<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">
@@ -41,9 +36,10 @@
 			</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>
+				<image style="width: 96rpx" mode="widthFix" v-if="item.auditStatus.includes('WAITING')" src="../../../static/icon/await.png"></image>
+				<image style="width: 96rpx" mode="widthFix" v-if="item.auditStatus=='PASS'" src="../../../static/icon/pass.png"></image>
+				<image style="width: 96rpx" mode="widthFix" v-if="item.auditStatus=='FAIL'" src="../../../static/icon/refuse.png"></image>
+				<image style="width: 96rpx" mode="widthFix" v-if="item.auditStatus=='STOP'" src="../../../static/icon/stop.png"></image>
 			</view>
 		</view>
 	</view>
@@ -68,7 +64,7 @@
 			},
 			detail(id){
 				uni.navigateTo({
-					url:"/pages/shopAudit/detail?id="+id,
+					url:"/pages/shopAudit/detail/detail?id="+id,
 					fail: (err) => {
 						console.log(err);
 					}

+ 0 - 192
pages/shopAudit/detail.vue

@@ -1,192 +0,0 @@
-<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>
-				<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>

+ 90 - 0
pages/shopAudit/detail/comps/audit-info.vue

@@ -0,0 +1,90 @@
+<template>
+	<view class="history">
+		<u-time-line>
+			<u-time-line-item nodeTop="2" v-for="(item,index) in list" :key="index">
+				<template v-slot:node>
+					<view class="u-node bg-white">
+						<u-icon name="clock-fill" color="#e0e3ea" :size="28"></u-icon>
+					</view>
+				</template>
+				<template v-slot:content>
+					<view>
+						<view class="">{{item.createTime}}</view>
+						<view style="width: 636rpx;">
+							<view class="content">
+								<view class="nav-title">
+									<view class="">
+										<text>【{{item.assigneeName?item.assigneeName:'联兑通平台'}}】在 [{{item.createTime}}] 开始处理 [{{item.historyActivityName}}] 环节</text>
+									</view>
+									<view class="" v-if="item.historyActivityDurationTime">
+										任务历时:
+										[{{item.historyActivityDurationTime}}]
+									</view>
+									<view class="" v-if="item.comment">
+										批复意见:
+										[{{item.comment}}]
+									</view>
+									<view class="" v-if="item.endTime">
+										结束时间:
+										[{{item.endTime}}]
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</template>
+			</u-time-line-item>
+		</u-time-line>
+	</view>
+</template>
+
+<script>
+	export default {
+		props:{
+			shopId: String
+		},
+		data() {
+			return {
+				audit:{},
+				list: []
+			};
+		},
+		created() {
+			this.historyFlowList()
+		},
+		methods: {
+			async historyFlowList() {
+			 	let processInstanceId=(await this.$api.audit.detail({shopId:this.shopId})).data.processInstanceId
+				this.$api.flow.historyFlowList({processInstanceId}).then(res => {
+					this.list = res.data
+				})
+			}
+		}
+	};
+</script>
+
+<style scoped>
+	page {
+		background-color: #FFFFFF;
+	}
+
+	.history {
+		box-sizing: border-box;
+		padding: 40rpx 20rpx 20rpx 50rpx;
+	}
+
+	.nav-title {
+		font-weight: 300;
+		font-size: 28upx;
+		padding-top: 20rpx;
+		line-height: 50rpx;
+	}
+
+	.content {
+		box-shadow: 0 8rpx 10rpx rgba(234, 234, 234, 0.5), 8rpx 0rpx 10rpx rgba(234, 234, 234, .5), -8rpx 0rpx 10rpx rgba(234, 234, 234, .5);
+		background-color: #FFFFFF;
+		padding: 20rpx;
+		border-radius: 10rpx;
+		margin: 20rpx 0;
+	}
+</style>

+ 249 - 0
pages/shopAudit/detail/comps/shop-info.vue

@@ -0,0 +1,249 @@
+<template>
+	<view class="safe-area-inset-bottom">
+		<view class="card">
+			<view class="title">
+				申请信息
+			</view>
+			<view class="item">
+				<text  class="left">状态</text>
+				<text v-if="audit.auditStatus=='WAITING_PLATFORM'" class="right" style="color: #ff9900;">待平台审核</text>
+				<text v-if="audit.auditStatus=='WAITING_MALL'" class="right" style="color: #ff9900;">待审核</text>
+				<text v-if="audit.auditStatus=='PASS'" class="right" style="color: #19be6b;">已通过</text>
+				<text v-if="audit.auditStatus=='FAIL'" class="right" style="color: #E13939;">已拒绝</text>
+				<text v-if="audit.auditStatus=='STOP'" class="right" style="color: #E13939;">已停用</text>
+			</view>
+			<view class="item">
+				<text  class="left">申请时间</text>
+				<text class="right">{{audit.createTime}}</text>
+			</view>
+			<view class="item">
+				<text  class="left">商户名</text>
+				<text class="right">{{audit.shopName}}</text>
+			</view>
+			<view class="item">
+				<text  class="left">公司主体</text>
+				<text class="right">{{audit.entity}}</text>
+			</view>
+			<view class="item">
+				<text  class="left">申请人</text>
+				<text class="right">{{audit.legalPerson}}</text>
+			</view>
+			<view class="item">
+				<text  class="left">身份证号码</text>
+				<text class="right">{{audit.idCard}}</text>
+			</view>
+			<view class="item" style="justify-content: space-around;">
+				<image @click="$util.preview(audit.idCardFront)" mode="aspectFill" style="width: 48%;height: 160rpx;" :src="audit.idCardFront"></image>
+				<image @click="$util.preview(audit.idCardContrary)" mode="aspectFill" style="width: 48%;height: 160rpx;" :src="audit.idCardContrary" ></image>
+			</view>
+		</view>
+		
+		<view class="card">
+			<text class="title">商户信息</text>
+			<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.location}}</text>
+			</view>
+			<view class="item">
+				<text class="left">具体地址</text>
+				<text class="right">{{detail.address || '暂无'}}</text>
+			</view>
+			<view class="item">
+				<map @tap="goMap" style="width: 100%; height: 200px;" :latitude="detail.latitude"
+					:longitude="detail.longitude" :markers="covers">
+				</map>
+			</view>
+			<view class="item">
+				<text class="left">公司负责人</text>
+				<text class="right">{{detail.personName}}</text>
+			</view>
+			<view class="item">
+				<text class="left" style="width: 200rpx;">公司总类</text>
+				<view class="right">
+					<u-tag color="#FF9447" style="margin-left: 10rpx;" :key="index1" v-for="(item1,index1) in tags"
+						:text="item1" size="mini" type="warning" mode="plain" />
+				</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(audit.businessLicense)" style="width: 70%;height: 250rpx;"
+						:src="audit.businessLicense" mode="aspectFill"></image>
+				</view>
+			</view>
+			<view class="item" style="justify-content: flex-start;flex-direction: column;">
+				<text class="left">店铺实况</text>
+				<view class="flex margin-top-40" style="width: 100%;">
+					<image v-for="(item,index) in imgList" :key="index" :src="item" @click="$util.preview(item)" style="width: 19%;height: 130rpx;margin-right: 10rpx;" 
+						mode="aspectFill"></image>
+				</view>
+			</view>
+		</view>
+		
+		<block  v-if="audit.auditStatus=='WAITING_MALL'">
+			<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="opinionShow=true;pass=true" class="cu-btn df btn-bg-color  round margin-right-20" style="padding-left: 46rpx;padding-right: 46rpx;">
+					通过
+				</view>
+				<view @click="opinionShow=true;pass=false" 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="auditAdvice" />
+					</u-form-item>
+				</u-form>
+			</view>
+		</u-modal>
+	</view>
+</template>
+
+<script>
+	export default {
+		props:{
+			shopId: String
+		},
+		data() {
+			return {
+				detail:{},
+				audit:{},
+				tags:[],
+				imgList:[],
+				opinionShow:false,
+				pass:false,
+				auditAdvice:'',
+				
+				//流程详情
+				flowDetail:{},
+				covers: [{
+					width: '30',
+					height: '30',
+					latitude: 0,
+					longitude: 0,
+					iconPath: '/static/icon/map.png'
+				}]
+			}
+		},
+		created() {
+			this.init()
+		},
+		methods: {
+			init(){
+				this.fetchDetail()
+				this.fetchAudit()
+			},
+			fetchAudit(){
+				this.$api.audit.detail({shopId:this.shopId}).then(res=>{
+					this.audit=res.data
+					//待平台审核,获取任务id
+					if (this.audit.auditStatus=='WAITING_MALL') {
+						this.getTaskId()
+					}
+				})
+			},
+			getTaskId(){
+				let params={
+					assignee:this.$global.flow_prefix.mall+this.vuex_mallId,
+					processInstanceId:this.audit.processInstanceId
+				}
+				this.$api.flow.getTaskId(params).then(res=>{
+					this.flowDetail=res.data.records[0]
+				})
+			},
+			fetchDetail(){
+				this.$api.shop.detail({id:this.shopId}).then(res=>{
+					this.detail=res.data
+					this.covers[0].latitude = this.detail.latitude
+					this.covers[0].longitude = this.detail.longitude
+					this.tags=this.detail.labelKey.split(',')
+					this.imgList=this.detail.shopPic.split(',')
+				})
+			},
+			opinionConfirm() {
+				if (this.pass) {
+					this.doPass()
+				}else{
+					this.doFail()
+				}
+			},
+			doPass(){
+				this.flowDetail.comment=this.auditAdvice?this.auditAdvice:'同意'
+				this.flowDetail.flag='ok'
+				this.flowDetail.variables.pass=true
+				this.$api.flow.flowAuditSubmit(this.flowDetail).then(res=>{
+					if (res.success) {
+						this.$dialog.showModal('操作成功',false).then(()=>{
+							this.init()
+						})
+					}
+				})
+			},
+			doFail(){
+				this.flowDetail.comment=this.auditAdvice?this.auditAdvice:'不同意'
+				this.flowDetail.variables.pass=true
+				this.$api.flow.flowAuditSubmit(this.flowDetail).then(res=>{
+					if (res.success) {
+						this.$dialog.showModal('操作成功',false).then(()=>{
+							this.init()
+						})
+					}
+				})
+			},
+			goMap() {
+				let latitude=parseInt(this.detail.latitude)
+				let longitude=parseInt(this.detail.longitude)
+				let name=this.detail.name
+				let address=this.detail.address
+				uni.openLocation({
+					latitude, //纬度
+					longitude, //经度
+					name,
+					address,
+					fail: (err) => {
+						console.log(err);
+					}
+				});
+			}
+		}
+	}
+</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>

+ 100 - 0
pages/shopAudit/detail/detail.vue

@@ -0,0 +1,100 @@
+<template>
+	<view class="container" :style="current==1?'background-color:#fff':''">
+		<view class="tabs">
+			<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 >
+					<scroll-view scroll-y style="height: 100%;">
+						<shop-info v-if="current==0&&id!=''" :shopId="id" ></shop-info>
+					</scroll-view>
+				</swiper-item>
+				<swiper-item>
+					<scroll-view scroll-y style="height: 100%;">
+						<audit-info v-if="current==1&&id!=''" :shopId="id"></audit-info>
+					</scroll-view>
+				</swiper-item>
+			</swiper>
+		</view>
+	</view>
+</template>
+<script>
+	import auditInfo from "./comps/audit-info.vue"
+	import shopInfo from "./comps/shop-info.vue"
+	export default {
+		components:{
+			shopInfo,auditInfo
+		},
+		
+		data() {
+			return {
+				id: '',
+				tags: [],
+
+				current: 0,
+				swiperCurrent: 0,
+				tabs: [{
+						name: '商户信息',
+						value: 0
+					},
+					{
+						name: '审核流程',
+						value: 1
+					}
+				],
+			}
+		},
+		onLoad(options) {
+			this.id=options.id
+		},
+		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>
+	.text-xl {
+		font-size: 34rpx;
+	}
+	.container {
+		height: calc(100vh);
+		background-color: #F6F6F6;
+		padding: 78rpx 0rpx 0rpx;
+
+		.tabs {
+			position: fixed;
+			top: -12rpx;
+			left: 0;
+			width: 100%;
+			background-color: #FFFFFF;
+			box-sizing: border-box;
+			z-index: 3;
+		}
+	}
+</style>

+ 4 - 4
pages/shopAudit/shopAudit.vue

@@ -54,19 +54,19 @@
 				tabs: [
 					{
 						name: '待审核',
-						value: 0
+						value: 'WAITING'
 					},
 					{
 						name: '已通过',
-						value: 1
+						value: 'PASS'
 					},
 					{
 						name: '已拒绝',
-						value: 2
+						value: 'FAIL'
 					},
 					{
 						name: '已停用',
-						value: 3
+						value: 'STOP'
 					}
 				],
 			}

+ 23 - 11
pages/stores/comps/card.vue

@@ -1,12 +1,13 @@
 <template>
 	<view class="">
-		<view class="cu-list menu-avatar">
+		<view class="cu-list menu-avatar" v-if="list">
 			<view @click="goDetail(item.id)" hover-class="none"
 				style="margin: 15rpx 10rpx 15rpx 15rpx;border-radius: 20rpx 0 0 20rpx;padding: 10rpx;" class="cu-item"
 				:class="modalName=='move-box-'+ index?'move-cur':''" v-for="(item,index) in list" :key="index"
 				@touchstart="ListTouchStart" @touchmove="ListTouchMove" @touchend="ListTouchEnd"
 				:data-target="'move-box-' + index">
-				<view class="cu-avatar  xl" :style="'background-image: url('+item.cover+')'"></view>
+				<view v-if="item.cover" class="cu-avatar  xl" :style="'background-image: url('+item.cover+')'"></view>
+				<image v-else class="cu-avatar xl" src="@/static/icon/default.png"></image>
 				<view class="content">
 					<view class="flex-direction flex">	
 						<text class="text-cut-1" style="width: 96%;font-size: 32rpx;">{{item.name}}</text>
@@ -14,16 +15,10 @@
 							<text class="sub-title text-cut-1">{{item.slogan}}</text>
 						</view>
 					</view>
-					<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}}
-						</view>
+					<view class="margin-bottom-10 text-cut-1" v-if="item.labelKey">
+						<u-tag color="#FF9447" style="margin-left: 10rpx;" :key="index1" v-for="(item1,index1) in item.labelKey.split(',')" :text="item1" size="mini" type="warning  " mode="plain"/>
 					</view>
 				</view>
-				<!-- <view class="action">
-					<view class="cuIcon-right" style="color: #D2D2D2;"></view>
-				</view> -->
 				<view class="move" @click.stop="stop(item.id)">
 					<view class="bg-red">停用</view>
 				</view>
@@ -48,6 +43,7 @@
 				this.$emit('stop',id)
 			},
 			goDetail(id){
+				console.log(id);
 				uni.navigateTo({
 					url:"/pages/stores/detail?id="+id
 				})
@@ -56,7 +52,6 @@
 			ListTouchStart(e) {
 				this.listTouchStart = e.touches[0].pageX
 			},
-
 			// ListTouch计算方向
 			ListTouchMove(e) {
 				this.listTouchDirection = e.touches[0].pageX - this.listTouchStart > 0 ? 'right' : 'left'
@@ -76,6 +71,23 @@
 </script>
 
 <style lang="scss" scoped>
+	.cu-avatar {
+	    font-variant: small-caps;
+	    margin: 0;
+	    padding: 0;
+	    display: inline-flex;
+	    text-align: center;
+	    justify-content: center;
+	    align-items: center;
+	    background-color: #FFFFFF;
+	    color: #ffffff;
+	    white-space: nowrap;
+	    background-size: cover;
+	    background-position: center;
+	    vertical-align: middle;
+	}
+	
+	
 	.tag-bg {
 		background-color: #FFA66D;
 		color: #FFFFFF;

+ 18 - 9
pages/stores/detail.vue

@@ -23,7 +23,7 @@
 				</view>
 				<view class="item" >
 					<text >行业</text>
-					<text>{{detail.labelNames}}</text>
+					<text>{{detail.labelKey}}</text>
 				</view>
 			</view>
 		</view>
@@ -34,19 +34,19 @@
 		<view class="data-board">
 			<view class="content">
 				<view class="item">
-					<text>{{detail.memberCount}}</text>
+					<text>{{data.allMembers}}</text>
 					<text>会员数量</text>
 				</view>
 				<view class="item">
-					<text>{{detail.totalPointValue}}</text>
+					<text>{{data.pointsTotalValue}}</text>
 					<text>积分总价值</text>
 				</view>
 				<view class="item">
-					<text>{{detail.withdrawTotalPrice}}</text>
+					<text>{{data.totalValue}}</text>
 					<text>累计收入</text>
 				</view>
 				<view class="item">
-					<text>{{detail.tradeTimes}}</text>
+					<text>{{data.transactionNum}}</text>
 					<text>累计交易笔数</text>
 				</view>
 			</view>
@@ -58,17 +58,26 @@
 	export default {
 		data() {
 			return {
-				detail:{}
+				id:'',
+				detail:{},
+				data:{}
 			}
 		},
 		onLoad(options) {
-			this.getDtail(options.id)
+			this.id=options.id
+			this.getDtail()
+			this.getShopData()
 		},
 		methods: {
-			getDtail(id){
-				this.$api.shop.detail({id}).then(res=>{
+			getDtail(){
+				this.$api.shop.detail({id:this.id}).then(res=>{
 					this.detail=res.data
 				})
+			},
+			getShopData(){
+				this.$api.shop.indexInfo({shopId:this.id}).then(res=>{
+					this.data=res.data
+				})
 			}
 		}
 	}

+ 22 - 48
pages/stores/stores.vue

@@ -8,24 +8,20 @@
 			</view>
 		</u-navbar>
 
-
-		<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.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;'"
-						style="border-radius: 12rpx;">
-						{{item.name}}
+		<view class="bg-white ">
+			<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 tagsList" :key="index" @tap="change(index)">
+						{{item.dictKey}}
 					</view>
-				</scroll-view>
-			</view>
+				</view>
+			</scroll-view>
 		</view>
 
 		<mescroll-body ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption"
 			:up="upOption">
-			<card :list="list" @stop="stop"></card>
+			<card :list="list"  @stop="stop"></card>
 		</mescroll-body>
 
 	</view>
@@ -41,26 +37,13 @@
 		},
 		data() {
 			return {
-				//区域id
-				mallAreaId: '',
 				labelId: '',
 				//商场店铺标签
-				tagsList: [{
-					name: '全部',
-					id: ''
-				}],
+				tagsList: [{dictKey:'全部',id:''}],
 				current: 0,
-				//商场区域列表
-				areaList: [{
-					name: '全部',
-					id: ''
-				}],
 				//列表数据
 				list: [],
 				keyword:null,
-
-				areaIndex: 0,
-				
 				downOption:{
 					auto:false
 				}
@@ -80,31 +63,28 @@
 			},
 		},
 		onLoad() {
-			this.getShopLabelByMallId()
-			this.getMallAreaByMallId()
+			this.getMallLabel()
 		},
 		methods: {
 			stop(id) {
 				this.$dialog.showModal("确认停用该商户?").then(() => {
 					let params = {
 						id,
-						auditStatus: 3
+						auditStatus: this.$global.shop_auditStatus.STOP
 					}
-					this.$api.shop.update(params).then(res => {
+					this.$api.shop.submit(params).then(res => {
 						if (res.success) {
 							this.mescroll.resetUpScroll();
 						}
 					})
 				})
 			},
-			getShopLabelByMallId() {
-				this.$api.mall.getShopLabelByMallId(this.vuex_mallId).then(res => {
-					this.tagsList = this.tagsList.concat(res.data)
-				})
-			},
-			getMallAreaByMallId() {
-				this.$api.mall.getMallAreaByMallId(this.vuex_mallId).then(res => {
-					this.areaList = this.areaList.concat(res.data)
+			getMallLabel() {
+				this.$api.mall.detail({id:this.vuex_mallId}).then(res => {
+					if (!this.$isEmpty(res.data.labelJson)) {
+						let arr= JSON.parse(res.data.labelJson)
+						this.tagsList = this.tagsList.concat(arr)
+					}
 				})
 			},
 			change(index) {
@@ -112,11 +92,6 @@
 				this.labelId = this.tagsList[index].id
 				this.mescroll.resetUpScroll()
 			},
-			selectArea(index) {
-				this.areaIndex = index
-				this.mallAreaId = this.areaList[index].id
-				this.mescroll.resetUpScroll()
-			},
 			downCallback() {
 				setTimeout(() => {
 					this.mescroll.resetUpScroll();
@@ -127,13 +102,12 @@
 					return
 				}
 				let params = {
-					fullName:this.keyword,
+					name:this.keyword,
 					mallId: this.vuex_mallId,
-					auditStatus: 1,
-					labelId: this.labelId,
-					mallAreaId: this.mallAreaId,
+					auditStatus: this.$global.shop_auditStatus.PASS,
 					current:mescroll.num,
 					size:mescroll.size,
+					labelParentIds:this.labelId
 				}
 				try {
 					this.$api.mall.getShopList(params).then(res => {

BIN
static/icon/default.png


BIN
static/icon/enable.png


BIN
static/icon/map.png


BIN
static/icon/success2.png


+ 1 - 1
utils/dialog.js

@@ -9,7 +9,7 @@ dialog.showModal=(content,showCancel=true,confirmColor)=>{
 			title:'提示',
 			content,
 			showCancel,
-			confirmColor:confirmColor?confirmColor:'#2979ff',
+			confirmColor:confirmColor?confirmColor:'#FF9447',
 			success: (res)=>{
 				if (res.confirm) {
 					resolve(res)

+ 5 - 0
utils/digital.js

@@ -68,4 +68,9 @@ digital.floatAdd = (arg1, arg2) => {
 		return s_x
 	}
 
+//保留两位小数,不四舍五入
+digital.keepTwoDecimal = (num) => {
+	return Math.floor(num * 100) / 100
+}
+
 export default digital

+ 15 - 2
utils/global.js

@@ -3,8 +3,17 @@ let global = {
 	publishActivity:'https://ldt.guosen-fumao.cn/publish_activity.html',
 	//发起者类型
 	sponsorType:{
-		mall:'1',//商场
-		shop:'2'//店铺
+		mall:'MALL',//商场
+		shop:'SHOP'//店铺
+	},
+	
+	shop_auditStatus:{
+		WAITING:'WAITING',
+		WAITING_MALL:'WAITING_MALL',
+		WAITING_PLATFORM:'WAITING_PLATFORM',
+		PASS:'PASS',
+		FAIL:'FAIL',
+		STOP:'STOP'
 	},
 
 	activityStatus: {
@@ -19,6 +28,10 @@ let global = {
 		APPID: 'wx5d30bdd3d0f579af', //appid
 		SECRET: "3e3a7793022808fcb63e215bfa1e1f93"
 	},
+	
+	flow_prefix:{
+		mall:'appMall-'
+	}
 }
 
 export default global