liujd 6 år sedan
förälder
incheckning
6d47d870d1

+ 23 - 2
mobile-code/src/api/member/index.js

@@ -60,7 +60,7 @@ export const add = data => {
 /** *
 /** *
  * 给客户充值 b
  * 给客户充值 b
  */
  */
-export const recharge = data => {
+export const rechargeB = data => {
 	return https.post('/user/recharge', data)
 	return https.post('/user/recharge', data)
 }
 }
 
 
@@ -71,9 +71,30 @@ export const upgrade = data => {
 	return https.post('/user/upgrade', data)
 	return https.post('/user/upgrade', data)
 }
 }
 
 
+/** *
+ * 添加备注 b
+ */
+export const remarkAdd = data => {
+	return https.post('/merchant-remark/add', data)
+}
+
 /** *
 /** *
  * 删除备注 b
  * 删除备注 b
  */
  */
 export const remarkDel = data => {
 export const remarkDel = data => {
-	return https.post('/merchant-remark/delete', data)
+	return https.get('/merchant-remark/delete', data)
+}
+
+/** *
+ * 客户充值 m
+ */
+export const recharge = data => {
+	return https.get('/recharge/launch', data)
+}
+
+/** *
+ * 重置密码 b
+ */
+export const resetPassword = data => {
+	return https.post('/user/reset-pay-password', data)
 }
 }

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

@@ -0,0 +1,15 @@
+import https from '@/plugins/luch-request_0.0.7/request'
+
+/** *
+ * 我的代理资产 b
+ */
+export const assetDet = data => {
+	return https.get('/agent-asset/detail', data)
+}
+
+/** *
+ * 我的代理列表 b
+ */
+export const applyList = data => {
+	return https.get('/apply/list', data)
+}

+ 23 - 0
mobile-code/src/filters/constant.js

@@ -29,6 +29,29 @@ const _CONST_MAP = {
 			label: '过期,失效',
 			label: '过期,失效',
 			value: 2
 			value: 2
 		}
 		}
+	],
+	// 优惠券
+	PROXY_STATUS: [
+		{
+			label: '审核中',
+			value: 0
+		},
+		{
+			label: '试用中',
+			value: 1
+		},
+		{
+			label: '审核未通过',
+			value: 2
+		},
+		{
+			label: '已付费',
+			value: 3
+		},
+		{
+			label: '已到期',
+			value: 4
+		}
 	]
 	]
 }
 }
 
 

+ 12 - 0
mobile-code/src/pages.json

@@ -228,6 +228,18 @@
 					}
 					}
 				}
 				}
 			]
 			]
+		},
+		{
+			"root": "pages/chat",
+			"pages": [
+				{
+					"path": "index",
+					"style": {
+						"navigationBarTitleText": "客服",
+						"enablePullDownRefresh": true
+					}
+				}
+			]
 		}
 		}
 	],
 	],
 	"globalStyle": {
 	"globalStyle": {

+ 7 - 3
mobile-code/src/pages/admin/member.vue

@@ -62,15 +62,15 @@ export default {
 			tabs: [
 			tabs: [
 				{
 				{
 					name: '全部',
 					name: '全部',
-					value: 212
+					value: 0
 				},
 				},
 				{
 				{
 					name: '粉丝',
 					name: '粉丝',
-					value: 213
+					value: 0
 				},
 				},
 				{
 				{
 					name: '会员',
 					name: '会员',
-					value: 214
+					value: 0
 				}
 				}
 			]
 			]
 		}
 		}
@@ -93,6 +93,10 @@ export default {
 				...this.form
 				...this.form
 			}).then(res => {
 			}).then(res => {
 				this.completes(res)
 				this.completes(res)
+				if (this.$util.isEmpty(res.data)) return false
+				this.tabs[0].value = res.data.asset.totalUser
+				this.tabs[1].value = res.data.asset.totalFans
+				this.tabs[2].value = res.data.asset.totalMember
 			})
 			})
 		},
 		},
 		change(e) {
 		change(e) {

+ 98 - 19
mobile-code/src/pages/interest/admin/my-invite.vue

@@ -19,7 +19,7 @@
 					<div class="data-list" v-for="(item, index) in userData" :key="index">
 					<div class="data-list" v-for="(item, index) in userData" :key="index">
 						<div class="app-size-30 app-bold">{{ item.value }}</div>
 						<div class="app-size-30 app-bold">{{ item.value }}</div>
 						<div class="app-color-3">{{ item.name }}</div>
 						<div class="app-color-3">{{ item.name }}</div>
-						<div class="app-color-1" v-if="item.btn">{{ item.btn }}</div>
+						<div class="app-color-1" v-if="item.btn" @click="withdrawFn">{{ item.btn }}</div>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -28,23 +28,28 @@
 		</div>
 		</div>
 		<!-- list -->
 		<!-- list -->
 		<div class="rank-list">
 		<div class="rank-list">
-			<div class="list" v-for="(item, index) in 4" :key="index">
-				<app-avatar-module :width="80" />
-				<div class="list-det">
-					<div class="list-det-right">
-						<div class="list-name">冯宝宝</div>
+			<block v-if="!$util.isEmpty(list.data)">
+				<div class="list" v-for="(item, index) in list.data" :key="index">
+					<app-avatar-module :src="item.userAvatar" :width="80" />
+					<div class="list-det">
+						<div class="list-det-right">
+							<div class="list-name">{{ item.name }}</div>
+							<div class="list-detail">
+								<span>{{ item.userName }}</span>
+								<span>{{ item.mobile }}</span>
+								<span class="app-price">¥{{ item.fee }}</span>
+							</div>
+						</div>
 						<div>
 						<div>
-							<span>菲菲</span>
-							<span>15606970212</span>
-							<span class="app-price">¥1998</span>
+							<i v-if="item.status == 3" class="iconfont icondagou"></i>
+							<span v-else class="app-price">{{ item.status | constantfilter('PROXY_STATUS') }}</span>
 						</div>
 						</div>
 					</div>
 					</div>
-					<div>
-						<span v-if="index == 2" class="app-price">待付款</span>
-						<i v-else class="iconfont icondagou"></i>
-					</div>
 				</div>
 				</div>
-			</div>
+			</block>
+			<block v-else>
+				<app-wrapper-empty title="暂无数据" :is-empty="$util.isEmpty(list.data)" />
+			</block>
 		</div>
 		</div>
 	</div>
 	</div>
 </template>
 </template>
@@ -52,14 +57,21 @@
 <script>
 <script>
 import AppTabs from '@/components/plugin/tabs'
 import AppTabs from '@/components/plugin/tabs'
 import AppAvatarModule from '@/components/module/app-avatar'
 import AppAvatarModule from '@/components/module/app-avatar'
+import AppWrapperEmpty from '@/components/app-wrapper-empty'
+import { list } from '@/mixins'
+// api
+import { assetDet, applyList } from '@/api/proxy'
 export default {
 export default {
 	name: 'my-invite-list',
 	name: 'my-invite-list',
 	components: {
 	components: {
 		AppTabs,
 		AppTabs,
-		AppAvatarModule
+		AppAvatarModule,
+		AppWrapperEmpty
 	},
 	},
+	mixins: [list],
 	data() {
 	data() {
 		return {
 		return {
+			data: {},
 			tabIndex: 0,
 			tabIndex: 0,
 			tabs: [
 			tabs: [
 				{
 				{
@@ -82,23 +94,85 @@ export default {
 			userData: [
 			userData: [
 				{
 				{
 					name: '账号余额(¥)',
 					name: '账号余额(¥)',
-					value: 3089,
+					value: 0,
 					btn: '提现'
 					btn: '提现'
 				},
 				},
 				{
 				{
 					name: '邀请花店',
 					name: '邀请花店',
-					value: 328.6
+					value: 0
 				},
 				},
 				{
 				{
 					name: '付费花店',
 					name: '付费花店',
-					value: 1387
+					value: 0
 				},
 				},
 				{
 				{
 					name: '累计收益(¥)',
 					name: '累计收益(¥)',
-					value: 991024.27
+					value: 0
 				}
 				}
 			]
 			]
 		}
 		}
+	},
+	onLoad() {
+		this.init()
+	},
+	methods: {
+		init() {
+			this._assetDet()
+			this._applyList()
+		},
+		_assetDet() {
+			assetDet().then(res => {
+				if (this.$util.isEmpty(res.data)) return false
+				this.data = res.data
+				this.userData[0].value = res.data.balance
+				this.userData[1].value = res.data.inviteNum
+				this.userData[2].value = res.data.payNum
+				this.userData[3].value = res.data.income
+			})
+		},
+		_applyList() {
+			let status = this.getStatus(this.tabIndex)
+			return applyList({ status: status }).then(res => {
+				this.completes(res)
+			})
+		},
+		// operate
+		change(e) {
+			if (this.tabIndex == e.index) {
+				return false
+			} else {
+				this.tabIndex = e.index
+				this.resetList()
+				this._applyList()
+			}
+		},
+		withdrawFn() {
+			this.$msg('功能开发中...')
+		},
+		getStatus(e) {
+			let val = ''
+			switch (e) {
+				case 0:
+					val = -1
+					break
+				case 1:
+					val = 0
+					break
+				case 2:
+					val = 1
+					break
+				case 3:
+					val = 3
+					break
+				case 4:
+					val = 4
+					break
+				default:
+					val = -1
+					break
+			}
+			return val
+		}
 	}
 	}
 }
 }
 </script>
 </script>
@@ -167,6 +241,11 @@ export default {
 						font-size: 30px;
 						font-size: 30px;
 						margin-bottom: 6px;
 						margin-bottom: 6px;
 					}
 					}
+					.list-detail {
+						& > span {
+							margin-right: 20px;
+						}
+					}
 				}
 				}
 				.icondagou {
 				.icondagou {
 					color: $mainColor;
 					color: $mainColor;

+ 168 - 28
mobile-code/src/pages/member/detail.vue

@@ -41,8 +41,8 @@
 			<div class="app-blod">备注</div>
 			<div class="app-blod">备注</div>
 			<div class="list-wrap">
 			<div class="list-wrap">
 				<div class="list-line" v-for="(item, index) in data.remarkList" :key="index">
 				<div class="list-line" v-for="(item, index) in data.remarkList" :key="index">
-					<div>{{ item.name }}</div>
-					<div>
+					<div>{{ item.remark }}</div>
+					<div @click="delRemarkFn(item)">
 						<i class="iconfont icondelete"></i>
 						<i class="iconfont icondelete"></i>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -65,55 +65,82 @@
 			<div class="more-text" v-if="!orderMoreStatus" @click="orderMoreFn">更多 ></div>
 			<div class="more-text" v-if="!orderMoreStatus" @click="orderMoreFn">更多 ></div>
 		</div>
 		</div>
 		<!-- 充值弹窗 -->
 		<!-- 充值弹窗 -->
-		<modal-module :show="rechargeModal" @cancel="modalCancel" @click="modalClick" title="充值" padding="30rpx 30rpx">
+		<modal-module :show="rechargeModal" @cancel="modalCancel" @click="rechargeModalClick" :maskClosable="false" title="充值" padding="30rpx 30rpx">
 			<template v-slot:content>
 			<template v-slot:content>
 				<div class="app-modal-input-wrap">
 				<div class="app-modal-input-wrap">
 					<div class="inp-list-line">
 					<div class="inp-list-line">
 						<div class="line-label">充值金额</div>
 						<div class="line-label">充值金额</div>
 						<div class="line-input">
 						<div class="line-input">
-							<input type="text" :adjust-position="false" class="inp-input" />
+							<input type="text" v-model="rechargeForm.rechargeAmount" :adjust-position="false" class="inp-input" />
 							<div class="inp-prompt">元</div>
 							<div class="inp-prompt">元</div>
 						</div>
 						</div>
 					</div>
 					</div>
 					<div class="inp-list-line">
 					<div class="inp-list-line">
 						<div class="line-label">确认密码</div>
 						<div class="line-label">确认密码</div>
 						<div class="line-input">
 						<div class="line-input">
-							<input type="text" :adjust-position="false" class="inp-input" />
+							<input type="text" v-model="rechargeForm.confirmPassword" :adjust-position="false" class="inp-input" />
+						</div>
+					</div>
+				</div>
+			</template>
+		</modal-module>
+		<!-- 修改密码弹窗 -->
+		<modal-module :show="passwordModal" @cancel="modalCancel" @click="passwordModalClick" :maskClosable="false" title="重置密码" padding="30rpx 30rpx">
+			<template v-slot:content>
+				<div class="app-modal-input-wrap">
+					<div class="inp-list-line">
+						<div class="line-label">重置密码</div>
+						<div class="line-input">
+							<input type="text" v-model="passwordForm.password" :adjust-position="false" class="inp-input" />
 						</div>
 						</div>
 					</div>
 					</div>
 				</div>
 				</div>
 			</template>
 			</template>
 		</modal-module>
 		</modal-module>
 		<!-- 升级 -->
 		<!-- 升级 -->
-		<modal-module :show="upgradeModal" @cancel="modalCancel" @click="modalClick" title="升级" padding="30rpx 30rpx">
+		<modal-module :show="upgradeModal" @cancel="modalCancel" @click="upgradeModalClick" :maskClosable="false" title="升级" padding="30rpx 30rpx">
 			<template v-slot:content>
 			<template v-slot:content>
 				<div class="app-modal-input-wrap">
 				<div class="app-modal-input-wrap">
 					<div class="inp-list-line">
 					<div class="inp-list-line">
 						<div class="line-label">请选择等级</div>
 						<div class="line-label">请选择等级</div>
 						<div class="line-input">
 						<div class="line-input">
-							<div class="inp-select">1级</div>
+							<picker mode="selector" :value="upgradeForm.memberLevel" :range="levelData.list" range-key="level" @change="changeLevelFn" class="inp-select">
+								<div v-if="upgradeForm.memberLevel">{{ levelSelData.level }}</div>
+								<div class="tui-placeholder" v-else>请选择</div>
+							</picker>
 						</div>
 						</div>
 					</div>
 					</div>
 					<div class="inp-list-line">
 					<div class="inp-list-line">
 						<div class="line-label">确认密码</div>
 						<div class="line-label">确认密码</div>
 						<div class="line-input">
 						<div class="line-input">
-							<input type="text" class="inp-input" />
+							<input type="text" v-model="upgradeForm.confirmPassword" class="inp-input" />
 						</div>
 						</div>
 					</div>
 					</div>
 				</div>
 				</div>
 			</template>
 			</template>
 		</modal-module>
 		</modal-module>
+		<!-- 添加备注 -->
+		<modal-module :show="remarkModal" @cancel="modalCancel" @click="remarkModalClick" :maskClosable="false" title="添加备注" padding="30rpx 30rpx">
+			<template v-slot:content>
+				<div class="app-modal-input-wrap">
+					<div class="inp-list-line">
+						<textarea v-model="remarkForm.remark" placeholder-style="phcolor" placeholder="请填写备注内容,如客户喜好,消费情况等" />
+					</div>
+				</div>
+			</template>
+		</modal-module>
 		<!-- 删除备注弹窗 -->
 		<!-- 删除备注弹窗 -->
-		<modal-module :show="delRemarkModal" @cancel="modalCancel" @click="delRemarkModalClick" content="是否要删除该备注?" color="#333" :size="32" padding="30rpx 30rpx"></modal-module>
+		<modal-module :show="promptRemarkModal" @cancel="modalCancel" @click="promptModalClick" :content="promptModalText" color="#333" :size="32" padding="30rpx 30rpx"></modal-module>
 	</div>
 	</div>
 </template>
 </template>
 
 
 <script>
 <script>
+import { mapGetters } from 'vuex'
 import AppVipModule from '@/components/module/app-vip'
 import AppVipModule from '@/components/module/app-vip'
 import AppAvatarModule from '@/components/module/app-avatar'
 import AppAvatarModule from '@/components/module/app-avatar'
 import ModalModule from '@/components/plugin/modal'
 import ModalModule from '@/components/plugin/modal'
 // api
 // api
-import { getUserDet, remarkDel } from '@/api/member'
+import { getUserDet, remarkAdd, remarkDel, upgrade, rechargeB, resetPassword } from '@/api/member'
 // img
 // img
 import tabIcon1 from '@/static/images/member/tab-icon-1.png'
 import tabIcon1 from '@/static/images/member/tab-icon-1.png'
 import tabIcon2 from '@/static/images/member/tab-icon-2.png'
 import tabIcon2 from '@/static/images/member/tab-icon-2.png'
@@ -164,17 +191,23 @@ export default {
 				{
 				{
 					name: '优惠券',
 					name: '优惠券',
 					img: tabIcon1,
 					img: tabIcon1,
-					url: '/pages/coupon/list'
+					funtion: () => {
+						this.$msg('功能开发中...')
+					}
 				},
 				},
 				{
 				{
 					name: '邀请有礼',
 					name: '邀请有礼',
 					img: tabIcon2,
 					img: tabIcon2,
-					url: '/pages/coupon/list'
+					funtion: () => {
+						this.$msg('功能开发中...')
+					}
 				},
 				},
 				{
 				{
 					name: '消费登记',
 					name: '消费登记',
 					img: tabIcon3,
 					img: tabIcon3,
-					url: '/pages/coupon/list'
+					funtion: () => {
+						this.$msg('功能开发中...')
+					}
 				},
 				},
 				{
 				{
 					name: '备注',
 					name: '备注',
@@ -207,16 +240,39 @@ export default {
 				{
 				{
 					name: '发消息',
 					name: '发消息',
 					img: tabIcon8,
 					img: tabIcon8,
-					url: '/pages/coupon/list'
+					url: '/pages/chat/index'
 				}
 				}
 			],
 			],
+			// 重置密码
+			passwordForm: {
+				password: ''
+			},
+			// 充值
+			rechargeForm: {
+				rechargeAmount: 0,
+				confirmPassword: ''
+			},
+			// 升级
+			levelSelData: {},
+			upgradeForm: {
+				memberLevel: '',
+				confirmPassword: ''
+			},
 			// 备注
 			// 备注
+			remarkForm: {
+				remark: ''
+			},
 			remarkOperateData: {},
 			remarkOperateData: {},
-			delRemarkModal: false,
 			// 订单
 			// 订单
-			orderMoreStatus: false
+			orderMoreStatus: false,
+			// 确认操作提示
+			promptRemarkModal: false,
+			promptModalText: '是否要删除该备注?'
 		}
 		}
 	},
 	},
+	computed: {
+		...mapGetters({ levelData: 'getLevel' })
+	},
 	onLoad() {
 	onLoad() {
 		this.init()
 		this.init()
 	},
 	},
@@ -235,31 +291,114 @@ export default {
 				this.fundsData[3].value = res.data.userAsset.balance
 				this.fundsData[3].value = res.data.userAsset.balance
 			})
 			})
 		},
 		},
+		_rechargeB() {
+			rechargeB({
+				userId: this.data.id,
+				...this.rechargeForm
+			}).then(res => {
+				this.$msg('充值成功!')
+				this.modalCancel()
+			})
+		},
+		_upgrade() {
+			upgrade({
+				userId: this.data.id,
+				...this.upgradeForm
+			}).then(res => {
+				this.$msg('升级成功!')
+				this.modalCancel()
+			})
+		},
+		_resetPassword() {
+			resetPassword({
+				userId: this.data.id,
+				...this.passwordForm
+			}).then(res => {
+				this.$msg('重置成功!')
+				this.modalCancel()
+			})
+		},
+		_remarkAdd() {
+			remarkAdd({
+				userId: this.data.id,
+				...this.remarkForm
+			}).then(res => {
+				this.$msg('添加成功!')
+				this.modalCancel()
+				this._getUserDet()
+			})
+		},
 		_delRemark() {
 		_delRemark() {
-			remarkDel({ id: remarkOperateData.id }).then(res => {
+			remarkDel({ id: this.remarkOperateData.id }).then(res => {
 				this.$msg('删除成功!')
 				this.$msg('删除成功!')
+				this.modalCancel()
+				this._getUserDet()
 			})
 			})
 		},
 		},
-		// operate
+		// operate ===========================
 		orderMoreFn() {
 		orderMoreFn() {
 			this.orderMoreStatus = false
 			this.orderMoreStatus = false
 		},
 		},
 		delRemarkFn(item) {
 		delRemarkFn(item) {
 			this.remarkOperateData = item
 			this.remarkOperateData = item
+			this.promptModalText = '是否要删除该备注?'
+			this.promptRemarkModal = true
 		},
 		},
-		promptModalClick(e) {
-			let index = e.index
-			if (index === 0) {
+		// 弹窗按钮
+		changeLevelFn(e) {
+			this.levelSelData = this.levelData.list[e.detail.value]
+			this.upgradeForm.memberLevel = this.levelSelData.level
+		},
+		passwordModalClick(e) {
+			if (e.index === 0) {
 				this.modalCancel()
 				this.modalCancel()
 			} else {
 			} else {
-				this._delRemark()
+				this.modalCancel()
+				this.promptModalText = '确认重置密码?'
+				this.promptRemarkModal = true
 			}
 			}
 		},
 		},
-		// 弹窗按钮
-		modalClick(e) {
-			console.log(e)
+		upgradeModalClick(e) {
+			if (e.index === 0) {
+				this.modalCancel()
+			} else {
+				this.modalCancel()
+				this.promptModalText = '确认升级?'
+				this.promptRemarkModal = true
+			}
+		},
+		rechargeModalClick(e) {
 			if (e.index === 0) {
 			if (e.index === 0) {
 				this.modalCancel()
 				this.modalCancel()
+			} else {
+				this.modalCancel()
+				this.promptModalText = '确认充值?'
+				this.promptRemarkModal = true
+			}
+		},
+		remarkModalClick(e) {
+			if (e.index === 0) {
+				this.modalCancel()
+			} else {
+				this._remarkAdd()
+			}
+		},
+		promptModalClick(e) {
+			if (e.index === 0) {
+				this.modalCancel()
+			} else {
+				if (this.promptModalText == '是否要删除该备注?') {
+					this._delRemark()
+				}
+				if (this.promptModalText == '确认升级?') {
+					this._upgrade()
+				}
+				if (this.promptModalText == '确认充值?') {
+					this._rechargeB()
+				}
+				if (this.promptModalText == '确认重置密码?') {
+					this._resetPassword()
+				}
 			}
 			}
 		},
 		},
 		modalCancel() {
 		modalCancel() {
@@ -267,6 +406,7 @@ export default {
 			this.passwordModal = false
 			this.passwordModal = false
 			this.upgradeModal = false
 			this.upgradeModal = false
 			this.remarkModal = false
 			this.remarkModal = false
+			this.promptRemarkModal = false
 		}
 		}
 	}
 	}
 }
 }
@@ -315,13 +455,13 @@ export default {
 						margin-left: 10px;
 						margin-left: 10px;
 					}
 					}
 					.iconweixinlaiyuan {
 					.iconweixinlaiyuan {
-						color: #35B801;
+						color: #35b801;
 					}
 					}
 					.iconzhifubao {
 					.iconzhifubao {
-						color: #00AAED;
+						color: #00aaed;
 					}
 					}
 					.iconshoujihao1 {
 					.iconshoujihao1 {
-						color: #FC2E47;
+						color: #fc2e47;
 					}
 					}
 				}
 				}
 			}
 			}

+ 3 - 0
mobile-code/src/static/css/common.scss

@@ -262,6 +262,9 @@ body {
                 flex-shrink: 0;
                 flex-shrink: 0;
                 margin-left: 20px;
                 margin-left: 20px;
             }
             }
+            .tui-placeholder {
+                color: #ccc;
+            }
         }
         }
     }
     }
 }
 }