liujd 6 лет назад
Родитель
Сommit
2ea2ba85de

+ 6 - 2
mobile-code/src/api/common/index.js

@@ -1,9 +1,10 @@
 import https from '@/plugins/luch-request_0.0.7/request'
 
-export const uploadPic = data => https.post('/upload/save-img', data)
-
 export const getOptions = param => https.get('/apihkds/api/option/getOptions', param)
 
+// 图片上传
+export const uploadPic = data => https.post('/upload/save-img', data)
+
 // 商户信息
 export const getUserApi = param => https.get('/merchant/detail', param)
 
@@ -18,3 +19,6 @@ export const getFestList = param => https.get('/fest/list', param)
 
 // 商家的门店 m
 export const getShop = param => https.get('/shop/detail', param)
+
+// 商家的门店 m
+export const sendSms = param => https.get('/inform-user/send-sms', param)

+ 15 - 0
mobile-code/src/api/invite/index.js

@@ -1,11 +1,26 @@
 import https from '@/plugins/luch-request_0.0.7/request'
 
+/** *
+ * 列表 b
+ */
+export const getProfile = data => {
+	return https.get('/invite/profile', data)
+}
+
 /** *
  * 列表 b
  */
 export const getList = data => {
 	return https.get('/invite/list', data)
 }
+// ============================================================
+
+/** *
+ * 列表 b
+ */
+export const getListB = data => {
+	return https.get('/invite/list', data)
+}
 
 /** *
  * 详情 b

+ 7 - 0
mobile-code/src/api/login/index.js

@@ -13,3 +13,10 @@ export const updatePassword = data => {
 export const updateConfirmPassword = data => {
 	return https.post('/admin/confirm-password', data)
 }
+
+/** *
+ * 注册会员 m 开发中
+ */
+export const register = data => {
+	return https.post('/user/apply-member', data)
+}

+ 7 - 0
mobile-code/src/api/member/index.js

@@ -27,6 +27,13 @@ export const myProfile = data => {
 export const modifyPassword = data => {
 	return https.post('/user/password', data)
 }
+
+/** *
+ * 会员等级与折扣 m
+ */
+export const userGrade = data => {
+	return https.post('/merchant/user-grade', data)
+}
 // =====================  B 端 ========================
 
 /** *

+ 1 - 1
mobile-code/src/components/module/app-share-mask.vue

@@ -1,6 +1,6 @@
 <template>
 	<div class="app-share-mask">
-		<div class="share-mask" :class="[show ? 'share-mask-show' : '']">
+		<div class="share-mask" v-if="show" :class="[show ? 'share-mask-show' : '']">
 			<div class="share-content">
 				<div class="share-img">
 					<img src="../../static/images/interest/shou.png" alt mode="widthFix" />

+ 0 - 1
mobile-code/src/pages/goodsManage/add.vue

@@ -176,7 +176,6 @@ export default {
 		},
 		// 表单验证
 		formSubmit(e) {
-			console.log(e)
 			// 表单规则
 			let rules = [
 				{

+ 2 - 2
mobile-code/src/pages/interest/admin/invite.vue

@@ -107,7 +107,7 @@ import ModalModule from '@/components/plugin/modal'
 import AppWrapperEmpty from '@/components/app-wrapper-empty'
 import { list } from '@/mixins'
 // api
-import { getList, getDet, give } from '@/api/invite'
+import { getListB, getDet, give } from '@/api/invite'
 export default {
 	name: 'admin-invite',
 	components: {
@@ -154,7 +154,7 @@ export default {
 		_list() {
 			let params = JSON.parse(JSON.stringify(this.form))
 			params.status = params.status - 1
-			return getList(params).then(res => {
+			return getListB(params).then(res => {
 				this.completes(res)
 			})
 		},

+ 72 - 24
mobile-code/src/pages/interest/invite.vue

@@ -6,14 +6,15 @@
 			</div>
 			<div class="invite-top-price-wrap">
 				<div class="flex-end-center">
-					<span class="money-text">100</span>
+					<span class="money-text">{{ data.asset.amount }}</span>
 					<span class="app-price">元</span>
 				</div>
-                <div class="app-color-2">
-                    <span>受邀朋友可以得</span>
-                    <span class="app-price">80元优惠券</span>
-                </div>
+				<div class="app-color-2">
+					<span>受邀朋友可以得</span>
+					<span class="app-price">{{ data.asset.prize }}</span>
+				</div>
 			</div>
+			<div class="share-btn" @click="showShare = true"></div>
 		</div>
 		<div class="list-content">
 			<div class="invite-tabs">
@@ -23,7 +24,7 @@
 					</div>
 					<div class="tab-list-right">
 						<div class>已邀请(人)</div>
-						<div class="tabs-num">29</div>
+						<div class="tabs-num">{{ data.stat.inviteNum }}</div>
 					</div>
 				</div>
 				<div class="tabs-list">
@@ -32,7 +33,7 @@
 					</div>
 					<div class="tabs-list-right">
 						<div class>已下单(人)</div>
-						<div class="tabs-num">6</div>
+						<div class="tabs-num">{{ data.stat.orderNum }}</div>
 					</div>
 				</div>
 			</div>
@@ -40,28 +41,39 @@
 			<div class="invite-list-blo">
 				<div class="invite-list-tit flex-center-between">
 					<div class="app-size-30">邀请记录</div>
-					<div class="flex-center-end app-color-3">
+					<div class="flex-center-end app-color-3" @click="showAlert = true">
 						<span>规则说明</span>
 						<i class="iconfont iconchangjianwentixiangguanwenti2"></i>
 					</div>
 				</div>
 				<div class="invite-list-wrap">
-					<div class="invite-list flex-center-between" v-for="(item, index) in 6" :key="index">
+					<div class="invite-list flex-center-between" v-for="(item, index) in list" :key="index">
 						<div class="list-left flex-center-start">
 							<div class="list-img">
 								<img src="../../static/images/user/attr-default.png" alt mode="widthFix" />
 							</div>
 							<div class>
-								<div class="app-size-30">冯宝宝</div>
-								<div class="app-color-3">
-									<span>2019-10-10 10:00 下单</span>
-									<span class="app-price">¥198</span>
+								<div class="app-size-30">{{ item.userName }}</div>
+								<div class="app-color-3 invite-list-status">
+									<block v-if="item.status == 0">
+										<span>{{ item.addTime | formatTime }}</span>
+										<span>领券</span>
+									</block>
+									<block v-else-if="item.status == 1">
+										<span>{{ item.orderTime | formatTime }}</span>
+										<span>下单</span>
+										<span class="app-price">¥{{ item.amount }}</span>
+									</block>
+									<block v-else-if="item.status == 2">
+										<span>{{ item.giveTime | formatTime }}</span>
+										<span>兑奖</span>
+									</block>
 								</div>
 							</div>
 						</div>
-						<div class="app-size-26">已兑奖</div>
+						<div class="app-size-26">{{ item.status | constantfilter('INVITE_STATUS') }}</div>
 					</div>
-					<div class="load-more flex-center-center app-color-3">加载更多...</div>
+					<!-- <div class="load-more flex-center-center app-color-3">加载更多...</div> -->
 				</div>
 			</div>
 		</div>
@@ -84,6 +96,8 @@
 <script>
 import AlertModule from '@/components/plugin/alert'
 import AppShareMask from '@/components/module/app-share-mask'
+// api
+import { getList, getProfile } from '@/api/invite'
 export default {
 	name: 'invite',
 	components: {
@@ -92,11 +106,34 @@ export default {
 	},
 	data() {
 		return {
+			data: {
+				stat: {},
+				asset: {}
+			},
+			list: [],
 			showAlert: false,
 			showShare: false
 		}
 	},
+	onLoad() {
+		this.init()
+	},
 	methods: {
+		init() {
+			this._getProfile()
+			this._getList()
+		},
+		_getProfile() {
+			getProfile().then(res => {
+				this.data = res.data
+			})
+		},
+		_getList() {
+			return getList().then(res => {
+				if (this.$util.isEmpty(res.data.list)) return false
+				this.list = res.data.list
+			})
+		},
 		hideAlert() {
 			this.showAlert = false
 		},
@@ -130,15 +167,21 @@ export default {
 			position: absolute;
 			top: 120px;
 			left: 0;
-            right: 0;
-            text-align: center;
-            .flex-end-center {
-                margin-bottom: 30px;
-            }
-            .money-text {
-                color: $mainColor;
-                font-size: 110px;
-            }
+			right: 0;
+			text-align: center;
+			.flex-end-center {
+				margin-bottom: 30px;
+			}
+			.money-text {
+				color: $mainColor;
+				font-size: 110px;
+			}
+		}
+		.share-btn {
+			position: absolute;
+			top: 400px;
+			width: 100%;
+			height: 180px;
 		}
 	}
 	.list-content {
@@ -188,6 +231,11 @@ export default {
 				width: 80px;
 				margin-right: 20px;
 			}
+			.invite-list-status {
+				span {
+					margin-right: 10px;
+				}
+			}
 			// 加载更多
 			.load-more {
 				padding: 24px 0 6px;

+ 25 - 5
mobile-code/src/pages/interest/level.vue

@@ -23,18 +23,18 @@
 					<div>折扣</div>
 				</div>
 				<div class="level-list-blo">
-					<div class="level-list" v-for="(item, index) in 5" :key="index">
+					<div class="level-list" v-for="(item, index) in list" :key="index">
 						<div>
-							<appVipModule class="level-img" :text="`VIP${index + 1}`" />
+							<appVipModule class="level-img" :text="`VIP${item.level}`" />
 						</div>
-						<div>2000</div>
-						<div>9</div>
+						<div>{{ item.growth }}</div>
+						<div>{{ item.discount }}</div>
 					</div>
 				</div>
 			</div>
             <!-- 按钮 -->
             <div class="btn-wrap">
-                <div class="button-com red big">申请成为会员</div>
+                <div class="button-com red big" @click="$util.pageTo('/pages/user/register')">申请成为会员</div>
             </div>
 		</div>
         <!-- 商标 -->
@@ -45,11 +45,31 @@
 <script>
 import AppVipModule from '@/components/module/app-vip'
 import AppTrademarkModule from '@/components/module/app-trademark'
+// api
+import { userGrade } from '@/api/member'
 export default {
 	name: 'interest-rank',
 	components: {
 		AppVipModule,
 		AppTrademarkModule
+	},
+	data() {
+		return {
+			list: []
+		}
+	},
+	onLoad() {
+		this.init()
+	},
+	methods: {
+		init() {
+			this._getDet()
+		},
+		_getDet() {
+			userGrade().then(res => {
+				this.list = res.data
+			})
+		}
 	}
 }
 </script>

+ 142 - 51
mobile-code/src/pages/user/register.vue

@@ -1,32 +1,44 @@
 <template>
 	<div class="app-content">
-		<div class="module-com input-line-wrap">
-			<tui-list-cell class="line-cell" :hover="false">
-				<div class="tui-title">手机号</div>
-				<input placeholder-class="phcolor" class="tui-input" name="name" placeholder="请输入手机号" maxlength="50" type="number" />
-			</tui-list-cell>
-			<tui-list-cell class="line-cell code-wrap" :hover="false">
-				<div class="tui-title">验证码</div>
-				<input placeholder-class="phcolor" class="tui-input" name="phone" placeholder="请输入验证码" maxlength="50" type="number" />
-				<div class="tui-code">获取验证码</div>
-			</tui-list-cell>
-			<tui-list-cell class="line-cell" :hover="false">
-				<div class="tui-title">姓名</div>
-				<input placeholder-class="phcolor" class="tui-input" name="phone" placeholder="选填" maxlength="50" type="number" />
-			</tui-list-cell>
-			<tui-list-cell class="line-cell" :hover="false">
-				<div class="tui-title">生日</div>
-				<input placeholder-class="phcolor" class="tui-input" name="phone" placeholder="选填" maxlength="50" type="number" />
-			</tui-list-cell>
-            <div class="btn-wrap">
-			    <button class="button-com red big">确认</button>
-            </div>
-		</div>
+		<form @submit="formSubmit">
+			<div class="module-com input-line-wrap">
+				<tui-list-cell class="line-cell" :hover="false">
+					<div class="tui-title">手机号</div>
+					<input v-model="form.mobile" placeholder-class="phcolor" class="tui-input" name="mobile" placeholder="请输入手机号" type="phone" />
+				</tui-list-cell>
+				<tui-list-cell class="line-cell code-wrap" :hover="false">
+					<div class="tui-title">验证码</div>
+					<input v-model="form.code" placeholder-class="phcolor" class="tui-input" name="code" placeholder="请输入验证码" type="number" />
+					<div class="tui-code" v-if="isSend">{{ countDown + 's' }}</div>
+					<div class="tui-code" v-else @click="getCode">获取验证码</div>
+				</tui-list-cell>
+				<tui-list-cell class="line-cell" :hover="false">
+					<div class="tui-title">姓名</div>
+					<input v-model="form.realName" placeholder-class="phcolor" class="tui-input" name="realName" placeholder="选填" type="text" />
+				</tui-list-cell>
+				<tui-list-cell class="line-cell" :hover="false">
+					<div class="tui-title">生日</div>
+					<picker mode="date" :value="form.birthday" @change="selTimeFn" class="tui-input">
+						<input v-model="form.birthday" hidden placeholder-class="phcolor" class="tui-input" name="birthday" />
+						<div v-if="form.birthday">{{ form.birthday }}</div>
+						<div class="tui-placeholder" v-else>请选择生日</div>
+					</picker>
+					<!-- <input placeholder-class="phcolor" class="tui-input" name="phone" placeholder="选填" maxlength="50" type="number" /> -->
+				</tui-list-cell>
+				<div class="btn-wrap">
+					<button class="button-com red big" formType="submit">确认</button>
+				</div>
+			</div>
+		</form>
 	</div>
 </template>
 
 <script>
 import TuiListCell from '@/components/plugin/list-cell'
+const form = require('@/utils/formValidation.js')
+// api
+import { register } from '@/api/login'
+import { sendSms } from '@/api/common'
 export default {
 	name: 'register',
 	components: {
@@ -34,20 +46,99 @@ export default {
 	},
 	data() {
 		return {
-			aaa: {
-				cat_id: '',
-				limit: 5,
-				name: '',
-				order: 'newest',
-				owner_user_id: '7',
-				page: 1
-			}
+			form: {
+				mobile: '',
+				code: '',
+				realName: '',
+				birthday: ''
+			},
+			isSend: 0,
+			countDown: 59,
+			timer: null
 		}
 	},
-	onLoad(option) {
-		console.log(this.$util.parse(this.aaa))
-	},
-	methods: {}
+	onLoad(option) {},
+	methods: {
+		getCode() {
+			if (!this.form.mobile || !this.$util.checkMobile(this.form.mobile)) {
+				this.$msg('请输入正确的手机号!')
+				return false
+			}
+			this.isSend = 1
+			sendSms({
+				type: 1,
+				mobile: this.form.mobile
+			})
+				.then(res => {
+					this.beginCountDown()
+					this.$msg('发送成功!')
+				})
+				.catch(() => {
+					this.isSend = 0
+					this.$msg('发送失败!')
+				})
+		},
+		selTimeFn(e) {
+			this.form.birthday = e.detail.value
+		},
+		confirmFn() {
+			register(this.form).then(res => {
+				this.$msg('注册成功!')
+				setTimeout(() => {
+					this.$util.pageTo('/pages/home/user')
+				})
+			})
+		},
+		// 倒计时
+		beginCountDown() {
+			this.countDown = 59
+			this.timer = setInterval(() => {
+				if (this.countDown === 0) {
+					clearInterval(this.timer)
+					this.isSend = 0
+					return
+				}
+				this.countDown -= 1
+			}, 1000)
+		},
+		// 表单验证
+		formSubmit(e) {
+			// 表单规则
+			let rules = [
+				{
+					name: 'mobile',
+					rule: ['required'],
+					msg: ['请输入手机号']
+				},
+				{
+					name: 'code',
+					rule: ['required'],
+					msg: ['请输入验证码']
+				},
+				{
+					name: 'realName',
+					rule: ['required'],
+					msg: ['请输入名字']
+				},
+				{
+					name: 'birthday',
+					rule: ['required'],
+					msg: ['请选择生日']
+				}
+			]
+			// 进行表单检查
+			let formData = e.detail.value
+			let checkRes = form.validation(formData, rules)
+			// 验证通过!
+			if (!checkRes) {
+				setTimeout(() => {
+					this.confirmFn()
+				})
+			} else {
+				this.$msg(checkRes)
+			}
+		}
+	}
 }
 </script>
 
@@ -68,25 +159,25 @@ export default {
 		.phcolor {
 			color: #ccc;
 		}
-    }
-    .btn-wrap {
-        width: 90%;
-        margin: 60px auto;
-        .button-com {
-            width: 100%;
-            margin: 0 auto;
-        }
-    }
-    .code-wrap {
+	}
+	.btn-wrap {
+		width: 90%;
+		margin: 60px auto;
+		.button-com {
+			width: 100%;
+			margin: 0 auto;
+		}
+	}
+	.code-wrap {
 		.tui-input {
 			width: calc(100% - 410px);
 			font-size: 28px;
 		}
-        .tui-code {
-            width: 200px;
-            text-align: center;
-            border-left: 1px solid $borderColor;
-            color: $mainColor;
-        }
-    }
+		.tui-code {
+			width: 200px;
+			text-align: center;
+			border-left: 1px solid $borderColor;
+			color: $mainColor;
+		}
+	}
 </style>

+ 9 - 9
mobile-code/src/utils/util.js

@@ -43,6 +43,13 @@ const isFunction = (obj) => {
 	return (typeof obj == 'object') && obj.constructor == Function
 }
 
+const checkMobile = (num) => {
+	return mobileReg.test(num)
+}
+const checkName = (str) => {
+	return /^[\u4E00-\u9FA5A-Za-z\s]+(·[\u4E00-\u9FA5A-Za-z]+)*$/.test(str)
+}
+
 /** *
  * 检查登录
  * @parmas query 拼接得参数对象
@@ -85,13 +92,6 @@ export const parse = (query, isFrist = false) => {
 	return isFrist ? str : str.replace(/^&/, '?')
 }
 
-const $checkMobile = (num) => {
-	return mobileReg.test(num)
-}
-const $checkName = (str) => {
-	return /^[\u4E00-\u9FA5A-Za-z\s]+(·[\u4E00-\u9FA5A-Za-z]+)*$/.test(str)
-}
-
 /** *
  * 全局时间转换
  * @parmas num 时间戳默认为11位时间戳
@@ -192,8 +192,8 @@ export const isLogin = () => {
 export default {
 	isEmpty,
 	parse,
-	$checkMobile,
-	$checkName,
+	checkMobile,
+	checkName,
 	$formatDate,
 	pageTo,
 	isLogin,