lalala 6 лет назад
Родитель
Сommit
f08e043d88

+ 4 - 4
admin-update/src/components/module/operate-line.vue

@@ -1,8 +1,8 @@
 <template>
 <template>
 	<el-popover
 	<el-popover
 		v-model="show"
 		v-model="show"
-		class="operate-module"
-		popper-class="liu-popover"
+		class="operate-module-line"
+		popper-class="liu-popover-line"
 		placement="top"
 		placement="top"
 		width="104"
 		width="104"
 		trigger="manual"
 		trigger="manual"
@@ -60,7 +60,7 @@ export default {
 </script>
 </script>
 
 
 <style lang="scss">
 <style lang="scss">
-.liu-popover {
+.liu-popover-line {
 	min-width: 100px !important;
 	min-width: 100px !important;
 	padding: 0 !important;
 	padding: 0 !important;
 
 
@@ -107,7 +107,7 @@ export default {
 		}
 		}
 	}
 	}
 }
 }
-.operate-module {
+.operate-module-line {
 	.operate-btn {
 	.operate-btn {
 		color: #666;
 		color: #666;
 		font-size: 16px;
 		font-size: 16px;

+ 2 - 2
admin-update/src/components/module/operate.vue

@@ -71,14 +71,14 @@ export default {
 		.operate-list {
 		.operate-list {
 			width: 30%;
 			width: 30%;
 			height: 50px;
 			height: 50px;
-			line-height: 50px;
+			line-height: 24px;
 			flex-shrink: 0;
 			flex-shrink: 0;
 			// padding: 0 24px;
 			// padding: 0 24px;
 			text-align: center;
 			text-align: center;
 			color: #fff;
 			color: #fff;
 			cursor: pointer;
 			cursor: pointer;
 			.iconfont {
 			.iconfont {
-				font-size: 36px;
+				font-size: 16px;
 			}
 			}
 			.btn-text {
 			.btn-text {
 				transform: scale(0.8);
 				transform: scale(0.8);

+ 33 - 11
admin-update/src/mock/userInfo.js

@@ -342,17 +342,17 @@ let menu = {
 			keepAlive: 1
 			keepAlive: 1
 		},
 		},
 		// 促销
 		// 促销
-		{
-			id: '7',
-			parentId: null,
-			name: '促销',
-			type: 0,
-			icon: 'iconkehuguanli',
-			orderNum: 2,
-			router: '/goods/list',
-			viewPath: 'views/goods/goods-list.vue',
-			keepAlive: 1
-		},
+		// {
+		// 	id: '7',
+		// 	parentId: null,
+		// 	name: '促销',
+		// 	type: 0,
+		// 	icon: 'iconkehuguanli',
+		// 	orderNum: 2,
+		// 	router: '/goods/list',
+		// 	viewPath: 'views/goods/goods-list.vue',
+		// 	keepAlive: 1
+		// },
 		// 广告管理
 		// 广告管理
 		{
 		{
 			id: '8',
 			id: '8',
@@ -433,6 +433,28 @@ let menu = {
 			viewPath: 'views/setting/wx-menu.vue',
 			viewPath: 'views/setting/wx-menu.vue',
 			keepAlive: 1
 			keepAlive: 1
 		},
 		},
+		{
+			id: '102',
+			parentId: '10',
+			name: '新人领券设置',
+			type: 1,
+			icon: 'iconkehuguanli',
+			orderNum: 2,
+			router: '/setting/level',
+			viewPath: 'views/setting/level.vue',
+			keepAlive: 1
+		},
+		{
+			id: '103',
+			parentId: '10',
+			name: '会员等级设置',
+			type: 1,
+			icon: 'iconkehuguanli',
+			orderNum: 2,
+			router: '/setting/level',
+			viewPath: 'views/setting/level.vue',
+			keepAlive: 1
+		},
 		{
 		{
 			id: '11',
 			id: '11',
 			parentId: null,
 			parentId: null,

+ 0 - 2
admin-update/src/pages/login/index.js

@@ -20,8 +20,6 @@ export default {
 
 
 	mounted() {
 	mounted() {
 		this.loading = false;
 		this.loading = false;
-
-		console.log(this.$service);
 	},
 	},
 
 
 	methods: {
 	methods: {

+ 11 - 5
admin-update/src/service/level/index.js

@@ -5,20 +5,26 @@ export class LevelService extends BaseService {
 	/**
 	/**
 	 * 会员等级 b
 	 * 会员等级 b
 	 */
 	 */
-	level() {
+	list(data) {
 		return this.request({
 		return this.request({
 			url: '/member-level',
 			url: '/member-level',
-			method: 'POST'
+			method: 'POST',
+			params: {
+				...data
+			}
 		});
 		});
 	}
 	}
 
 
 	/**
 	/**
-	 * 会员等级 b
+	 * 会员等级更新 b
 	 */
 	 */
-	updateLevel() {
+	updateLevel(data) {
 		return this.request({
 		return this.request({
 			url: '/member-level-update',
 			url: '/member-level-update',
-			method: 'POST'
+			method: 'POST',
+			data: {
+				...data
+			}
 		});
 		});
 	}
 	}
 }
 }

+ 1 - 1
admin-update/src/store/modules/config.js

@@ -9,7 +9,7 @@ export default {
 	actions: {
 	actions: {
 		// 等级
 		// 等级
 		getLevel({ commit }) {
 		getLevel({ commit }) {
-			return this.$service.level.level().then(res => {
+			return this.$service.level.list().then(res => {
 				commit('SET_LEVEL', res);
 				commit('SET_LEVEL', res);
 				return res;
 				return res;
 			});
 			});

+ 22 - 0
admin-update/src/utils/common.js

@@ -0,0 +1,22 @@
+// 冒泡排序
+export function bubbleSort(array) {
+	if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {
+		var len = array.length,
+			temp;
+		for (var i = 0; i < len - 1; i++) {
+			for (var j = len - 1; j >= i; j--) {
+				if (array[j - 1] && array[j].level < array[j - 1].level) {
+					temp = array[j];
+					array[j] = array[j - 1];
+					array[j - 1] = temp;
+				}
+			}
+		}
+		return array;
+	} else {
+		return 'array is not an Array!';
+	}
+}
+export default {
+	bubbleSort
+};

+ 11 - 0
admin-update/src/views/goods/category.vue

@@ -0,0 +1,11 @@
+<template>
+	<div class="app-content"></div>
+</template>
+
+<script>
+export default {
+	name: 'goods-category'
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 1 - 1
admin-update/src/views/goods/freight-set.vue

@@ -11,7 +11,7 @@
 				<div class="flex-center">
 				<div class="flex-center">
 					<el-input v-model="ruleForm.name" style="width: 150px"></el-input>
 					<el-input v-model="ruleForm.name" style="width: 150px"></el-input>
 					<div class="prompt-text">
 					<div class="prompt-text">
-						<i class="el-icon-warning" style="margin-right: 4px"></i>
+						<!-- <i class="el-icon-warning" style="margin-right: 4px"></i> -->
 						<span>公里内免运费,超过 5 公里每增加1公里,运费增加</span>
 						<span>公里内免运费,超过 5 公里每增加1公里,运费增加</span>
 					</div>
 					</div>
 					<el-input v-model="ruleForm.name" style="width: 150px"></el-input>
 					<el-input v-model="ruleForm.name" style="width: 150px"></el-input>

+ 12 - 7
admin-update/src/views/goods/goods-add.vue

@@ -59,7 +59,7 @@
 							v-model="autoPricePopover"
 							v-model="autoPricePopover"
 						>
 						>
 							<p>特定节日商品会自动进行涨价 无需手动调价</p>
 							<p>特定节日商品会自动进行涨价 无需手动调价</p>
-							<div style="text-align: right; margin: 0">
+							<div style="text-align: right; margin-top: 10px">
 								<el-button
 								<el-button
 									size="mini"
 									size="mini"
 									type="primary"
 									type="primary"
@@ -93,7 +93,7 @@
 							v-model="chargePopover"
 							v-model="chargePopover"
 						>
 						>
 							<p>5公里内免运费,超过5公里每增加1公里运费增加2元</p>
 							<p>5公里内免运费,超过5公里每增加1公里运费增加2元</p>
-							<div style="text-align: right; margin: 0">
+							<div style="text-align: right; margin-top: 10px">
 								<el-button size="mini" type="primary" @click="chargePopover = false"
 								<el-button size="mini" type="primary" @click="chargePopover = false"
 									>修改</el-button
 									>修改</el-button
 								>
 								>
@@ -116,11 +116,16 @@
 			</el-form>
 			</el-form>
 		</div>
 		</div>
 		<!-- 从图库选择 -->
 		<!-- 从图库选择 -->
-		<el-dialog title="从图库选择" :visible.sync="imgStoreModal" width="60%">
+		<el-dialog title="从图库选择" :visible.sync="imgStoreModal" width="600px">
 			<div class="store-modal-content">
 			<div class="store-modal-content">
-				<div class="select-wrap flex-center-between">
-					<div>全部图片</div>
-					<el-select v-model="imgStoreVal" size="small" placeholder="请选择">
+				<div class="select-wrap flex-center-start">
+					<div style="width: 80px">全部图片</div>
+					<el-select
+						v-model="imgStoreVal"
+						size="small"
+						placeholder="请选择"
+						style="width: 200px"
+					>
 						<el-option
 						<el-option
 							v-for="item in imgStoreOpt"
 							v-for="item in imgStoreOpt"
 							:key="item.value"
 							:key="item.value"
@@ -232,7 +237,7 @@ export default {
 			// 距离收费
 			// 距离收费
 			chargePopover: false,
 			chargePopover: false,
 			// 从图库中选择
 			// 从图库中选择
-			imgStoreModal: true,
+			imgStoreModal: false,
 			imgStoreVal: '',
 			imgStoreVal: '',
 			imgStoreOpt: [],
 			imgStoreOpt: [],
 			imgStoreArr: [],
 			imgStoreArr: [],

+ 7 - 3
admin-update/src/views/goods/goods-list.vue

@@ -22,7 +22,7 @@
 				<cl-avatar
 				<cl-avatar
 					shape="square"
 					shape="square"
 					:size="40"
 					:size="40"
-					:src="scope.row.imgList | default_avatar"
+					:src="scope.row.smallImgList[0] | default_avatar"
 					:style="{ margin: 'auto' }"
 					:style="{ margin: 'auto' }"
 				></cl-avatar>
 				></cl-avatar>
 			</template>
 			</template>
@@ -119,6 +119,9 @@ export default {
 						.then(res => {
 						.then(res => {
 							item.status = item.status == 0 ? 1 : 0;
 							item.status = item.status == 0 ? 1 : 0;
 							this.$message.success('操作成功!');
 							this.$message.success('操作成功!');
+						})
+						.catch(e => {
+							this.$message.error(e);
 						});
 						});
 				})
 				})
 				.catch(() => {
 				.catch(() => {
@@ -147,10 +150,11 @@ export default {
 						{
 						{
 							prop: 'goodsName',
 							prop: 'goodsName',
 							label: '标题',
 							label: '标题',
-							align: 'center'
+							align: 'center',
+							'min-width': 180
 						},
 						},
 						{
 						{
-							prop: 'mobile',
+							prop: 'inTurn',
 							label: '顺序',
 							label: '顺序',
 							align: 'center'
 							align: 'center'
 						},
 						},

+ 1 - 1
admin-update/src/views/goods/img-store.vue

@@ -117,7 +117,7 @@ export default {
 				},
 				},
 				{
 				{
 					text: '置顶',
 					text: '置顶',
-					icon: 'iconxiajia',
+					icon: 'iconzhiding',
 					click: () => {
 					click: () => {
 						this.$service.imgStore.top({ id: this.operateData.id }).then(res => {
 						this.$service.imgStore.top({ id: this.operateData.id }).then(res => {
 							this.resetList();
 							this.resetList();

+ 83 - 0
admin-update/src/views/member/components/card-name.vue

@@ -0,0 +1,83 @@
+<template>
+	<div class="card-name-module">
+		<div class="member-avatar">
+			<cl-avatar
+				:size="60"
+				:src="data.avatarUrl | default_avatar"
+				:style="{ margin: 'auto' }"
+			></cl-avatar>
+		</div>
+		<div class="source-wrap">
+			<span class="member-name">{{ data.userName }}</span>
+			<i v-if="data.source == 0" class="iconfont iconweixinlaiyuan"></i>
+			<i v-if="data.source == 1" class="iconfont iconzhifubao"></i>
+			<i
+				class="iconfont iconweixingongzhonghao"
+				:class="[data.subscribe ? 'app-color-4' : '']"
+			></i>
+			<i v-if="data.mobile" class="iconfont iconshoujihao1"></i>
+		</div>
+		<div class="label-wrap">
+			<div class="label-list app-color-0">
+				<span>最近到店:</span>
+				<span>{{ data.visitTimeFormat }}</span>
+			</div>
+			<div class="label-list">
+				<span>累计消费:</span>
+				<span>¥{{ data.totalExpend || 0 }}</span>
+			</div>
+			<div class="label-list">
+				<span>帐户余额:</span>
+				<span>¥{{ data.balance || 0 }}</span>
+			</div>
+			<div class="label-list">
+				<span>累计积分:</span>
+				<span>{{ data.integral || 0 }}</span>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+export default {
+	name: 'card-name',
+	props: {
+		data: {
+			type: Object,
+			default: () => {}
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.card-name-module {
+	.source-wrap {
+		@include disFlex(center, center);
+		margin: 10px 0 16px;
+		.member-name {
+			font-size: 16px;
+			text-align: center;
+		}
+		.iconfont {
+			margin-left: 10px;
+		}
+		.iconweixinlaiyuan {
+			color: #35b801;
+		}
+		.iconzhifubao {
+			color: #00aaed;
+		}
+		.iconshoujihao1 {
+			color: #fc2e47;
+		}
+	}
+
+	.label-wrap {
+		color: $fontColor2;
+		.label-list {
+			margin: 6px 0;
+		}
+	}
+}
+</style>

+ 95 - 53
admin-update/src/views/member/list.vue

@@ -36,11 +36,11 @@
 
 
 			<!-- 充值 -->
 			<!-- 充值 -->
 			<template #slot-recharge="{scope}">
 			<template #slot-recharge="{scope}">
-				<el-button type="text" @click="rechargeDialog = true">充值</el-button>
+				<el-button type="text" @click="rechargeShowFn(scope.row)">充值</el-button>
 			</template>
 			</template>
 			<!-- 升级 -->
 			<!-- 升级 -->
 			<template #slot-upgrade="{scope}">
 			<template #slot-upgrade="{scope}">
-				<el-button type="text" @click="upgradeDialog = true">升级</el-button>
+				<el-button type="text" @click="upgradeShowFn(scope.row)">升级</el-button>
 			</template>
 			</template>
 			<!-- 发货 -->
 			<!-- 发货 -->
 			<template #slot-ship="{scope}">
 			<template #slot-ship="{scope}">
@@ -52,32 +52,37 @@
 			title="充值"
 			title="充值"
 			:visible.sync="rechargeDialog"
 			:visible.sync="rechargeDialog"
 			:close-on-click-modal="false"
 			:close-on-click-modal="false"
-			width="400px"
+			width="600px"
 		>
 		>
 			<div class="recharge-modal-content">
 			<div class="recharge-modal-content">
-				<el-form
-					:model="rechargeForm"
-					:rules="rechargeRules"
-					ref="rechargeForm"
-					label-width="80px"
-					class="demo-form"
-				>
-					<el-form-item label="充值金额">
-						<el-input
-							v-model="rechargeForm.rechargeAmount"
-							placeholder="充值金额"
-							size="small"
-						></el-input>
-					</el-form-item>
-					<el-form-item label="确认密码">
-						<el-input
-							v-model="rechargeForm.confirmPassword"
-							type="password"
-							placeholder="确认密码"
-							size="small"
-						></el-input>
-					</el-form-item>
-				</el-form>
+				<div class="card-name">
+					<cardName :data="modalData" />
+				</div>
+				<div>
+					<el-form
+						:model="rechargeForm"
+						:rules="rechargeRules"
+						ref="rechargeForm"
+						label-width="80px"
+						class="demo-form"
+					>
+						<el-form-item label="充值金额">
+							<el-input
+								v-model="rechargeForm.rechargeAmount"
+								placeholder="充值金额"
+								size="small"
+							></el-input>
+						</el-form-item>
+						<el-form-item label="确认密码">
+							<el-input
+								v-model="rechargeForm.confirmPassword"
+								type="password"
+								placeholder="确认密码"
+								size="small"
+							></el-input>
+						</el-form-item>
+					</el-form>
+				</div>
 			</div>
 			</div>
 			<div slot="footer" class="dialog-footer">
 			<div slot="footer" class="dialog-footer">
 				<el-button size="small" @click="resetForm">取 消</el-button>
 				<el-button size="small" @click="resetForm">取 消</el-button>
@@ -89,36 +94,45 @@
 			title="升级"
 			title="升级"
 			:visible.sync="upgradeDialog"
 			:visible.sync="upgradeDialog"
 			:close-on-click-modal="false"
 			:close-on-click-modal="false"
-			width="400px"
+			width="600px"
 		>
 		>
 			<div class="recharge-modal-content">
 			<div class="recharge-modal-content">
-				<el-form
-					:model="upgradeForm"
-					:rules="upgradeRules"
-					ref="upgradeForm"
-					label-width="100px"
-					class="demo-form"
-				>
-					<el-form-item label="请选择等级">
-						<el-select v-model="upgradeForm.member" size="small" placeholder="请选择">
-							<el-option
-								v-for="(item, index) in levelData.list"
-								:key="index"
-								:label="`${item.level}`"
-								:value="item.level"
+				<div class="card-name">
+					<cardName :data="modalData" />
+				</div>
+				<div>
+					<el-form
+						:model="upgradeForm"
+						:rules="upgradeRules"
+						ref="upgradeForm"
+						label-width="100px"
+						class="demo-form"
+					>
+						<el-form-item label="请选择等级">
+							<el-select
+								v-model="upgradeForm.member"
+								size="small"
+								placeholder="请选择"
 							>
 							>
-							</el-option>
-						</el-select>
-					</el-form-item>
-					<el-form-item label="确认密码">
-						<el-input
-							v-model="upgradeForm.confirmPassword"
-							placeholder="确认密码"
-							type="password"
-							size="small"
-						></el-input>
-					</el-form-item>
-				</el-form>
+								<el-option
+									v-for="(item, index) in levelData.list"
+									:key="index"
+									:label="`${item.level}`"
+									:value="item.level"
+								>
+								</el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="确认密码">
+							<el-input
+								v-model="upgradeForm.confirmPassword"
+								placeholder="确认密码"
+								type="password"
+								size="small"
+							></el-input>
+						</el-form-item>
+					</el-form>
+				</div>
 			</div>
 			</div>
 			<div slot="footer" class="dialog-footer">
 			<div slot="footer" class="dialog-footer">
 				<el-button size="small" @click="resetForm">取 消</el-button>
 				<el-button size="small" @click="resetForm">取 消</el-button>
@@ -130,7 +144,11 @@
 
 
 <script>
 <script>
 import { mapGetters } from 'vuex';
 import { mapGetters } from 'vuex';
+import cardName from './components/card-name';
 export default {
 export default {
+	components: {
+		cardName
+	},
 	data() {
 	data() {
 		return {
 		return {
 			// cl-crud
 			// cl-crud
@@ -153,6 +171,8 @@ export default {
 					val: 0
 					val: 0
 				}
 				}
 			],
 			],
+			// modal
+			modalData: {},
 			// recharge
 			// recharge
 			rechargeDialog: false,
 			rechargeDialog: false,
 			rechargeForm: {
 			rechargeForm: {
@@ -185,16 +205,27 @@ export default {
 		rechargeAmount() {
 		rechargeAmount() {
 			this.$service.member.recharge(this.rechargeForm).then(res => {
 			this.$service.member.recharge(this.rechargeForm).then(res => {
 				console.log(res);
 				console.log(res);
+				this.$message.success('充值成功!');
 				this.resetForm();
 				this.resetForm();
 			});
 			});
 		},
 		},
 		// 升级
 		// 升级
 		upgradeAmount() {
 		upgradeAmount() {
 			this.$service.member.upgrade(this.upgradeForm).then(res => {
 			this.$service.member.upgrade(this.upgradeForm).then(res => {
+				this.$message.success('升级成功!');
 				console.log(res);
 				console.log(res);
 				this.resetForm();
 				this.resetForm();
 			});
 			});
 		},
 		},
+		// modal
+		rechargeShowFn(item) {
+			this.modalData = item;
+			this.rechargeDialog = true;
+		},
+		upgradeShowFn(item) {
+			this.modalData = item;
+			this.upgradeDialog = true;
+		},
 		resetForm() {
 		resetForm() {
 			try {
 			try {
 				this.$refs['rechargeForm'].resetFields();
 				this.$refs['rechargeForm'].resetFields();
@@ -419,3 +450,14 @@ export default {
 	}
 	}
 };
 };
 </script>
 </script>
+
+<style lang="scss" scoped>
+.recharge-modal-content {
+	@include disFlex(center, space-around);
+	.card-name {
+		width: 200px;
+		height: 100%;
+		border-right: 1px solid $borderColor;
+	}
+}
+</style>

+ 11 - 0
admin-update/src/views/setting/coupon.vue

@@ -0,0 +1,11 @@
+<template>
+	<div class="app-content">新人领券设置</div>
+</template>
+
+<script>
+export default {
+	name: 'coupon-setting'
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 176 - 0
admin-update/src/views/setting/level.vue

@@ -0,0 +1,176 @@
+<template>
+	<div class="app-content">
+		<!-- list -->
+		<div class="list-wrap">
+			<div class="list-tit">
+				<div>客户级别</div>
+				<div :class="[isModify ? 'list-tit-inp' : '']">成长值</div>
+				<div :class="[isModify ? 'list-tit-inp' : '']">折扣</div>
+				<div v-if="isModify">操作</div>
+			</div>
+			<!-- <block v-if="!$util.isEmpty(list)"> -->
+			<div class="list" v-for="(item, index) in list" :key="index">
+				<div class="list-vip">
+					<span>{{ index + 1 }}</span>
+					<!-- <app-vip-module class="level-img" :text="`VIP${index + 1}`" /> -->
+				</div>
+				<div class="list-growth">
+					<input v-if="isModify" type="text" class="setting-inp" v-model="item.growth" />
+					<span v-else class="setting-span">{{ item.growth }}</span>
+				</div>
+				<div class="list-discount">
+					<input
+						v-if="isModify"
+						type="text"
+						class="setting-inp"
+						v-model="item.discount"
+					/>
+					<span v-else class="setting-span">{{ item.discount }}</span>
+				</div>
+				<div class="list-option" v-if="isModify" @click="delFn(index)">
+					<i class="iconfont iconshanchu1"></i>
+				</div>
+			</div>
+			<!-- </block>
+			<block v-else>
+				<app-wrapper-empty title="暂无数据" :is-empty="$util.isEmpty(list)" />
+			</block> -->
+		</div>
+		<!-- 提示 -->
+		<div v-if="isModify" class="prompt-text">
+			提示:点此上方的数字即可直接进行修改。提交后不能再修改, 请 谨慎操作。
+		</div>
+		<!-- 按钮 -->
+		<div v-if="isModify" class="btn-wrap">
+			<el-button @click="addFn">添加</el-button>
+			<el-button class="primary-btn" type="primary" @click="showPromptFn">提交</el-button>
+		</div>
+	</div>
+</template>
+
+<script>
+import { bubbleSort } from '@/utils/common';
+export default {
+	name: 'level-setting',
+	data() {
+		return {
+			isModify: false,
+			list: [],
+			addList: {
+				level: 0,
+				growth: 0,
+				discount: 0
+			}
+		};
+	},
+	created() {
+		this.init();
+	},
+	methods: {
+		init() {
+			this._list();
+		},
+		_list() {
+			this.$service.level.list().then(res => {
+				if (this.$util.isEmpty(res)) return false;
+				this.isModify = res.gradeSwitch != 0;
+				this.list = bubbleSort(res.list);
+			});
+		},
+		delFn(index) {
+			this.list.splice(index, 1);
+			this.$message.success('删除成功!');
+		},
+		addFn() {
+			let addList = JSON.parse(JSON.stringify(this.addList));
+			addList.level = this.list.length + 1;
+			this.list.push(addList);
+		},
+		confirmFn() {
+			for (let i in this.list) {
+				this.list[i].level = parseInt(i) + 1;
+			}
+			let arr = [];
+			for (let i in this.list) {
+				let { level, growth, discount } = this.list[i];
+				arr.push([level, growth, discount]);
+			}
+			this.$service.level.updateLevel({ list: arr }).then(res => {
+				this.isModify = false;
+				this.$message.success('设置成功!');
+				this.showPrompt = false;
+			});
+		},
+		showPromptFn() {
+			this.$confirm('提交后不能再修改,请谨慎操作。 是否继续?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.confirmFn();
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.list-wrap {
+	width: 600px;
+	background-color: #fff;
+	margin: 10px;
+	border: 1px solid $borderColor;
+	border-bottom: 0;
+	.list-tit {
+		@include disFlex(center, space-between);
+		color: $fontColor3;
+		background-color: $backColor;
+		padding: 14px;
+		.list-tit-inp {
+			width: 116px;
+			text-align: center;
+		}
+	}
+	.list {
+		@include disFlex(center, space-between);
+		height: 50px;
+		padding: 0 16px;
+		border-bottom: 1px solid $borderColor;
+		.list-vip {
+			width: 64px;
+			text-align: center;
+		}
+		.level-img {
+			/deep/.vip-text {
+				left: 22px;
+			}
+		}
+		.setting-inp {
+			width: 116px;
+			height: 36px;
+			border: 1px solid $borderColor;
+			border-radius: 2px;
+			text-align: center;
+		}
+		.setting-span {
+			font-size: 16px;
+		}
+		.list-option {
+			.iconfont {
+				color: $fontColor3;
+				font-size: 18px;
+			}
+		}
+	}
+}
+.prompt-text {
+	padding: 16px 16px 30px 16px;
+	color: $fontColor3;
+}
+.btn-wrap {
+	margin-left: 160px;
+	.primary-btn {
+		margin-left: 100px;
+	}
+}
+</style>

+ 10 - 5
admin-update/src/views/setting/wx-menu.vue

@@ -22,9 +22,9 @@
 				</div>
 				</div>
 				<div
 				<div
 					class="menu-btn"
 					class="menu-btn"
-					:class="[activeIndex == index ? 'active' : '']"
 					v-for="(item, index) in menuData"
 					v-for="(item, index) in menuData"
 					:key="index"
 					:key="index"
+					:class="[activeIndex == index ? 'active' : '']"
 					@click="menuClickFn(item, index)"
 					@click="menuClickFn(item, index)"
 				>
 				>
 					<!-- <div class="iconfont-blo">
 					<!-- <div class="iconfont-blo">
@@ -160,7 +160,7 @@ export default {
 		},
 		},
 		submitFn() {
 		submitFn() {
 			this.$service.setting.updateMenu(this.menuData).then(res => {
 			this.$service.setting.updateMenu(this.menuData).then(res => {
-				this.$msg(res.msg);
+				this.$message.success(res.msg);
 				this.resetForm();
 				this.resetForm();
 			});
 			});
 		},
 		},
@@ -173,6 +173,7 @@ export default {
 		},
 		},
 		// operate
 		// operate
 		closeOperate() {
 		closeOperate() {
+			this.activeIndex = null;
 			this.operateShow = this.operateShow.map(e => (e = false));
 			this.operateShow = this.operateShow.map(e => (e = false));
 		},
 		},
 		operateClickFn(item) {
 		operateClickFn(item) {
@@ -258,9 +259,13 @@ export default {
 			@include disFlex(center, center);
 			@include disFlex(center, center);
 			border-left: 2px solid $borderColor;
 			border-left: 2px solid $borderColor;
 			&.active {
 			&.active {
-				color: #09bb07;
-				.iconfont {
-					color: #09bb07;
+				/deep/.operate-module-line {
+					.operate-btn {
+						color: $mainColor;
+						.iconfont {
+							color: #09bb07;
+						}
+					}
 				}
 				}
 			}
 			}
 			.iconfont-blo {
 			.iconfont-blo {

+ 2 - 20
mobile-code/src/admin/setting/level.vue

@@ -48,6 +48,7 @@ import appVipModule from '@/components/module/app-vip'
 import AppWrapperEmpty from '@/components/app-wrapper-empty'
 import AppWrapperEmpty from '@/components/app-wrapper-empty'
 import ModalModule from '@/components/plugin/modal'
 import ModalModule from '@/components/plugin/modal'
 // api
 // api
+import { bubbleSort } from '@/utils/common'
 import { getList, updateLevel } from '@/api/level'
 import { getList, updateLevel } from '@/api/level'
 export default {
 export default {
 	name: 'level-setting',
 	name: 'level-setting',
@@ -80,7 +81,7 @@ export default {
 				let data = res.data
 				let data = res.data
 				if (!data) return false
 				if (!data) return false
 				this.isModify = res.data.gradeSwitch != 0
 				this.isModify = res.data.gradeSwitch != 0
-				data = this.bubbleSort(data.list)
+				data = bubbleSort(data.list)
 				this.list = data
 				this.list = data
 			})
 			})
 		},
 		},
@@ -118,25 +119,6 @@ export default {
 			} else {
 			} else {
 				this.confirmFn()
 				this.confirmFn()
 			}
 			}
-		},
-		// 冒泡排序
-		bubbleSort(array) {
-			if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {
-				var len = array.length,
-					temp
-				for (var i = 0; i < len - 1; i++) {
-					for (var j = len - 1; j >= i; j--) {
-						if (array[j - 1] && array[j].level < array[j - 1].level) {
-							temp = array[j]
-							array[j] = array[j - 1]
-							array[j - 1] = temp
-						}
-					}
-				}
-				return array
-			} else {
-				return 'array is not an Array!'
-			}
 		}
 		}
 	}
 	}
 }
 }

+ 22 - 1
mobile-code/src/utils/common.js

@@ -447,6 +447,26 @@ export function copyText(str) {
 	})
 	})
 	// #endif
 	// #endif
 }
 }
+
+// 冒泡排序
+export function bubbleSort(array) {
+	if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {
+		var len = array.length,
+			temp
+		for (var i = 0; i < len - 1; i++) {
+			for (var j = len - 1; j >= i; j--) {
+				if (array[j - 1] && array[j].level < array[j - 1].level) {
+					temp = array[j]
+					array[j] = array[j - 1]
+					array[j - 1] = temp
+				}
+			}
+		}
+		return array
+	} else {
+		return 'array is not an Array!'
+	}
+}
 export default {
 export default {
 	copyText,
 	copyText,
 	deepCopy,
 	deepCopy,
@@ -467,5 +487,6 @@ export default {
 	getRoleTypeId,
 	getRoleTypeId,
 	verifiPhone,
 	verifiPhone,
 	calcDistance,
 	calcDistance,
-	upLoadImg
+	upLoadImg,
+	bubbleSort
 }
 }