liujd 6 лет назад
Родитель
Сommit
92467942a8

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

@@ -0,0 +1,15 @@
+import https from '@/plugins/luch-request_0.0.7/request'
+
+/** *
+ * 微信菜单修改 b
+ */
+export const updateMenu = data => {
+	return https.post('/wx-menu/update', data)
+}
+
+/** *
+ * 微信菜单详情 b
+ */
+export const getMenu = data => {
+	return https.post('/wx-menu/tree', data)
+}

+ 29 - 14
mobile-code/src/pages/admin/components/module/operate-line.vue

@@ -1,10 +1,12 @@
 <template>
-	<div class="operate-line-module" :class="[isModify ? 'witer' : 'back']" :style="{top: top + 'rpx', right: right + 'rpx'}">
-		<div class="operate-list" :style="{height: listHei + 'rpx'}" v-for="(item, index) in btnData" :key="index" @click="item.click()">
-			<i v-if="isModify" class="iconfont iconguanbi icon-del"></i>
-			<div class="btn-text">{{ item.text }}</div>
+	<div class="operate-line-module" :class="[isModify ? 'witer' : 'back']" :style="{bottom: bottom + 'rpx', left: left + 'rpx'}">
+		<div class="operate-list" :style="{height: listHei + 'rpx'}" v-for="(item, index) in btnData" :key="index" @click="clickFn(index)">
+			<div v-if="isModify" class="icon-del" @click.stop="delFn(index)">
+				<i class="iconfont iconguanbi"></i>
+			</div>
+			<div class="btn-text">{{ item.name }}</div>
 		</div>
-		<div v-if="isModify" class="operate-list" :style="{height: listHei + 'rpx'}">
+		<div v-if="isModify" class="operate-list" :style="{height: listHei + 'rpx'}" @click="addFn">
 			<i class="iconfont icontupiantianjia icon-add"></i>
 		</div>
 	</div>
@@ -19,11 +21,11 @@ export default {
 			type: Boolean,
 			default: false
 		},
-		top: {
+		bottom: {
 			type: Number,
-			default: 350
+			default: 480
 		},
-		right: {
+		left: {
 			type: Number,
 			default: 40
 		},
@@ -37,6 +39,17 @@ export default {
 			type: Number,
 			default: 100
 		}
+	},
+	methods: {
+		addFn() {
+			this.$emit('add')
+		},
+		delFn(index) {
+			this.$emit('del', index + 1)
+		},
+		clickFn(index) {
+			this.$emit('clickFn', index + 1)
+		}
 	}
 }
 </script>
@@ -64,9 +77,9 @@ export default {
 		}
 		&::after {
 			content: '';
-            position: absolute;
-            bottom: -28px;
-            left: 80px;
+			position: absolute;
+			bottom: -28px;
+			left: 80px;
 			width: 0;
 			height: 0;
 			// top: 16px;
@@ -82,10 +95,12 @@ export default {
 			}
 			.icon-del {
 				position: absolute;
-				top: 14px;
+				top: 12px;
 				right: 0;
-				font-size: 24px;
-				transform: scale(0.6);
+				.iconfont {
+					font-size: 24px;
+					transform: scale(0.6);
+				}
 			}
 			.icon-add {
 				color: #09bb07;

+ 106 - 47
mobile-code/src/pages/setting/wx-menu.vue

@@ -2,20 +2,20 @@
 	<div class="app-content">
 		<!-- 微信菜单 -->
 		<div class="wx-wrap">
-			<div class="wx-bar">
+			<!-- <div class="wx-bar">
 				<div class="bar-img">
 					<img src="../../static/images/setting/wx-bar-bg.png" alt="">
 				</div>
-				<div class="bar-text">江肖清</div>
-			</div>
+				<div class="bar-text">{{userInfo.merchantName}}</div>
+			</div> -->
 			<!-- 中间快 -->
-			<div class="wx-content"></div>
+			<div class="wx-content" @click="operateShow = false"></div>
 			<!-- 按钮 -->
 			<div class="wx-btn">
 				<div class="key-btn">
 					<img class="key-btn-img" src="../../static/images/setting/wx-menu.png" alt mode="widthFix" />
 				</div>
-				<div class="menu-btn" :class="[activeIndex == index ? 'active' : '']" v-for="(item, index) in menuData" :key="index">
+				<div class="menu-btn" :class="[activeIndex == index ? 'active' : '']" v-for="(item, index) in menuData" :key="index" @click="menuClickFn(item, index)">
 					<div class="iconfont-blo">
 						<i class="iconfont iconcaidanlan"></i>
 					</div>
@@ -24,14 +24,14 @@
 			</div>
 		</div>
 		<!-- 提示 -->
-		<div class="prompt-text">菜单最多只能添加5个,可以没有菜单。</div>
+		<div class="prompt-text">菜单最多只能添加5个,可以没有菜单。</div>
 		<!-- 按钮 -->
 		<div class="btn-wrap">
 			<div class="admin-button-com big" @click="addModule = true">添加</div>
-			<div class="admin-button-com blue big">提交</div>
+			<div class="admin-button-com blue big" @click="submitFn">提交</div>
 		</div>
 		<!-- 操作弹窗 -->
-		<operate-line-module v-if="operateShow" :btnData="btnData" :isModify="true" />
+		<operate-line-module v-if="operateShow" :left="operateLeft" :btnData="btnData" :isModify="true" @clickFn="operateFn" @add="operateAddFn" @del="operateDelFn" />
 		<!-- 添加弹窗 -->
 		<modal-module :show="addModule" @cancel="modalCancel" @click="modalClick" title="添加菜单" padding="30rpx 30rpx">
 			<template v-slot:content>
@@ -39,36 +39,36 @@
 					<div class="inp-list-line">
 						<div class="line-label">名称</div>
 						<div class="line-input">
-							<input type="text" placeholder="请输入" :adjust-position="false" class="inp-input" />
+							<input type="text" v-model="form.name" placeholder="请输入" :adjust-position="false" class="inp-input" />
 						</div>
 					</div>
 					<div class="inp-list-line">
 						<div class="line-label">分类</div>
 						<radio-group class="tui-input flex-center-between" @change="radioChange">
 							<label class="list" for="customLink">
-								<radio id="customLink" value="自定义链接" checked="checked" />
+								<radio id="customLink" value="0" checked="checked" />
 								<span class="checkbox-text">常用网址</span>
 							</label>
 							<label class="list" for="goodsLink">
-								<radio id="goodsLink" value="链接商品" />
+								<radio id="goodsLink"  value="1" />
 								<span class="checkbox-text">自定义网址</span>
 							</label>
 						</radio-group>
 					</div>
 					<!-- 常用网址 -->
-					<block v-if="false">
-						<div class="inp-list-line button-wrap">
-							<div class="admin-button-com" :class="[index == 0 ? 'blue' : 'default']" v-for="(item, index) in 5" :key="index">商城首页</div>
-						</div>
-					</block>
-					<!-- 常用网址 -->
-					<block v-else>
+					<block v-if="form.menuOption == 0">
 						<div class="inp-list-line">
 							<div class="line-input">
-								<input type="text" placeholder="必须以http开头的网址" :adjust-position="false" class="inp-input" />
+								<input v-model="form.replyUrl" type="text" placeholder="必须以http开头的网址" :adjust-position="false" class="inp-input" />
 							</div>
 						</div>
 					</block>
+					<!-- 自定义网址 -->
+					<block v-else>
+						<div class="inp-list-line button-wrap">
+							<div class="admin-button-com" :class="[index == 0 ? 'blue' : 'default']" v-for="(item, index) in 5" :key="index">商城首页</div>
+						</div>
+					</block>
 				</div>
 			</template>
 		</modal-module>
@@ -76,8 +76,10 @@
 </template>
 
 <script>
+import { mapGetters } from 'vuex'
 import ModalModule from '@/components/plugin/modal'
 import OperateLineModule from '@/pages/admin/components/module/operate-line'
+import { getMenu, updateMenu } from '@/api/menu'
 export default {
 	name: 'wx-menu-setting',
 	components: {
@@ -86,42 +88,99 @@ export default {
 	},
 	data() {
 		return {
+			form: {
+				name: '',
+				menuOption: 0,
+				replyUrl: '',
+				targetId: 0
+			},
 			addModule: false,
 			operateShow: false,
-			activeIndex: 2,
-			menuData: [
-				{
-					name: '小清清清1'
-				},
-				{
-					name: '小清清清2'
-				},
-				{
-					name: '小清清清3'
-				}
-			],
+			activeIndex: null,
+			menuData: [],
+			// 操作菜单
+			optionMenuData: null,
+			operateLeft: 130,
 			// 按钮列表
-			btnData: [
-				{
-					text: '名师风采'
-				},
-				{
-					text: '培训课堂'
-				},
-				{
-					text: '学员天地'
-				},
-				{
-					text: '首页'
-				}
-			]
+			btnData: []
 		}
 	},
+	computed: {
+		...mapGetters({ userInfo: 'getUser' })
+	},
+	onLoad() {
+		this._getDet()
+	},
 	methods: {
+		// api
+		_getDet() {
+			getMenu().then(res => {
+				this.menuData = res.data
+			})
+		},
+		submitFn() {
+			updateMenu(this.menuData).then(res => {
+				console.log(res)
+				this.$msg('修改成功!')
+			})
+		},
+		// 按钮操作
+		menuClickFn(item, index) {
+			this.operateLeft = index * 192 + 130
+			this.activeIndex = index
+			this.optionMenuData = item
+			this.btnData = item.children
+			this.operateShow = true
+		},
 		modalCancel() {
 			this.addModule = false
+			this.resetForm()
+		},
+		// 重置表单
+		resetForm() {
+			this.form = {
+				name: '',
+				menuOption: 0,
+				replyUrl: '',
+				targetId: 0
+			}
+		},
+		// 添加菜单弹窗操作 ================
+		radioChange(e) {
+			this.form.menuOption = e.detail.value
+		},
+		// 自定义网址
+		targetFn() {
+
 		},
-		radioChange() {}
+		modalClick(e) {
+			let index = e.index
+			if (index === 0) {
+				this.modalCancel()
+			} else {
+				if (this.form.menuOption == 0) {
+					this.form.replyUrl = ''
+				} else {
+					this.form.targetId = ''
+				}
+				this.btnData.push(this.form)
+				this.modalCancel()
+			}
+		},
+		// operate组件 ======================
+		operateFn(index) {
+			console.log('我点击了!', index)
+		},
+		operateDelFn(index) {
+			console.log('我删除了!', index)
+		},
+		operateAddFn() {
+			if (this.btnData.length > 5) {
+				this.$msg('子菜单不能超过五个!')
+				return false
+			}
+			this.addModule = true
+		}
 	}
 }
 </script>
@@ -178,7 +237,7 @@ export default {
 					}
 				}
 				.iconfont-blo {
-					margin-right: 10px;
+					margin-right: 6px;
 				}
 				.iconfont {
 					color: $fontColor3;