哦吼吼 пре 6 година
родитељ
комит
8b0e11bf85

+ 24 - 16
admin-update/src/cool/components/upload/index.vue

@@ -2,6 +2,11 @@
 	<div class="cl-upload">
 		<el-input type="hidden" v-model="value"></el-input>
 
+		<!-- :on-success="
+				(res, file) => {
+					onSuccess(res, file, item);
+				}
+			" -->
 		<el-upload
 			v-for="(item, index) in list"
 			:key="index"
@@ -15,24 +20,21 @@
 			:auto-upload="false"
 			:action="action"
 			:show-file-list="false"
-			:on-success="
-				(res, file) => {
-					onSuccess(res, file, item);
-				}
-			"
 			:on-error="onError"
 			:before-upload="
 				e => {
-					beforeUpload(e, item);
+					beforeUpload(e, item, index);
 				}
 			"
 		>
-			<div class="upload-wrap" v-loading="item.loading">
-				<img :src="item.url" alt="" v-if="item.url" />
-				<i class="el-icon-plus avatar-uploader-icon" v-else></i>
-
-				<i class="el-icon-close" v-if="item.url" @click.stop="removeFile(index)"></i>
-			</div>
+			<slot name="content">
+				<div class="upload-wrap" v-loading="item.loading">
+					<img :src="item.url" alt="" v-if="item.url" />
+					<i class="el-icon-plus avatar-uploader-icon" v-else></i>
+
+					<i class="el-icon-close" v-if="item.url" @click.stop="removeFile(index)"></i>
+				</div>
+			</slot>
 		</el-upload>
 	</div>
 </template>
@@ -56,7 +58,8 @@ export default {
 
 		return {
 			action: upload.url,
-			list: []
+			list: [],
+			index: 0
 		};
 	},
 
@@ -127,7 +130,8 @@ export default {
 			}
 		},
 
-		beforeUpload(file, item) {
+		beforeUpload(file, item, index) {
+			this.index = index;
 			if (this.props && this.props['before-upload']) {
 				this.props['before-upload'](file);
 			}
@@ -135,20 +139,23 @@ export default {
 			item.loading = true;
 		},
 
-		onSuccess(res, file, item) {
+		onSuccess(res, file) {
+			let item = this.list[this.index];
 			const { url, smallUrl, shortUrl } = res;
 			const { multiple } = this.props;
 
-			// item.loading = false;
+			item.loading = false;
 
 			if (multiple) {
 				if (item.url) {
 					item.url = smallUrl;
 				} else {
+					// item.url = smallUrl;
 					this.list.push({
 						url: smallUrl
 					});
 				}
+				console.log('sadfas', this.list);
 			} else {
 				this.list = [
 					{
@@ -159,6 +166,7 @@ export default {
 
 			this.callback();
 
+			console.log('this.props', this.props);
 			if (this.props && this.props['on-success']) {
 				this.props['on-success'](res, file);
 			}

+ 8 - 0
admin-update/src/service/goods/index.js

@@ -27,6 +27,14 @@ export class GoodsService extends BaseService {
 			data: data
 		});
 	}
+
+	// 商品-发送链接 b
+	sendPhone(data) {
+		return this.request({
+			url: '/send-short-url',
+			params: data
+		});
+	}
 }
 
 export default new GoodsService();

+ 10 - 0
admin-update/src/service/member/index.js

@@ -23,6 +23,16 @@ export class MemberService extends BaseService {
 			data: data
 		});
 	}
+
+	/**
+	 * 商家端客户详情,包括资产、订单和备注 b
+	 */
+	allDetail(data) {
+		return this.request({
+			url: '/user-detail',
+			params: data
+		});
+	}
 }
 
 export default new MemberService();

+ 2 - 0
admin-update/src/service/request.js

@@ -5,6 +5,7 @@ import store from '@/store/index';
 import router from '@/router/index';
 import { href } from '@/cool/utils/index';
 import qs from 'qs';
+import { Message } from 'element-ui';
 
 axios.defaults.timeout = 600000;
 axios.defaults.withCredentials = true;
@@ -94,6 +95,7 @@ axios.interceptors.response.use(
 			case 1:
 				return data;
 			default:
+				Message.error(msg);
 				return Promise.reject(msg);
 		}
 	},

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

@@ -21,8 +21,8 @@ export default {
 		// 分类
 		getCategory({ commit }) {
 			return this.$service.category.list().then(res => {
-				commit('SET_CATEGORY', res.list);
-				return res.list;
+				commit('SET_CATEGORY', res);
+				return res;
 			});
 		},
 		delCategory({ commit }) {

+ 2 - 1
admin-update/src/views/goods/auto-price.vue

@@ -72,13 +72,14 @@ export default {
 		};
 	},
 	computed: {
-		...mapGetters({ festData: 'getFestival' })
+		...mapGetters({ festData: 'festival' })
 	},
 	mounted() {
 		this.init();
 	},
 	methods: {
 		init() {
+			this.$store.dispatch('getFestival');
 			this._getData();
 		},
 		_getData() {

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

@@ -12,7 +12,7 @@
 				</div>
 			</el-form-item>
 			<el-form-item>
-				<el-button @click="resetForm('form')">重置</el-button>
+				<!-- <el-button @click="resetForm('form')">重置</el-button> -->
 				<el-button type="primary" @click="submitForm('form')">保存</el-button>
 			</el-form-item>
 		</el-form>
@@ -55,6 +55,7 @@ export default {
 		},
 		_updateFn() {
 			this.$service.single.setFreight(this.form).then(res => {
+				this.$store.dispatch('shopInfo');
 				this.$message.success('更新成功!');
 			});
 		},

+ 145 - 62
admin-update/src/views/goods/goods-add.vue

@@ -2,37 +2,45 @@
 	<div class="app-content">
 		<div class="form-wrap">
 			<el-form ref="form" :model="ruleForm" :rules="rules" label-width="120px">
-				<el-form-item label="名称" prop="name">
-					<el-input v-model="ruleForm.name"></el-input>
+				<el-form-item label="名称" prop="goodsName">
+					<el-input v-model="ruleForm.goodsName"></el-input>
 				</el-form-item>
-				<el-form-item label="已售" prop="name">
-					<el-input v-model="ruleForm.name"></el-input>
+				<el-form-item label="已售" prop="sold">
+					<el-input v-model="ruleForm.sold"></el-input>
 				</el-form-item>
-				<el-form-item label="库存" prop="name">
-					<el-input v-model="ruleForm.name"></el-input>
+				<el-form-item label="库存" prop="stock">
+					<el-input v-model="ruleForm.stock"></el-input>
 				</el-form-item>
 				<el-form-item label="分类">
-					<el-checkbox-group v-model="ruleForm.type">
-						<el-checkbox label="M" name="type"></el-checkbox>
-						<el-checkbox label="X" name="type"></el-checkbox>
-						<el-checkbox label="XL" name="type"></el-checkbox>
-						<el-checkbox label="2XL" name="type"></el-checkbox>
-						<el-checkbox label="3XL" name="type"></el-checkbox>
-						<el-checkbox label="4XL" name="type"></el-checkbox>
+					<el-checkbox-group v-model="ruleForm.categoryIdList">
+						<el-checkbox
+							border
+							v-for="(item, index) in categoryData"
+							:label="item.id"
+							:key="index"
+							size="small"
+							@change="selChangeDialogFn($event, item)"
+							>{{ item.categoryName }}</el-checkbox
+						>
 					</el-checkbox-group>
 				</el-form-item>
 				<el-form-item label="款式">
-					<el-checkbox-group v-model="ruleForm.type">
-						<el-checkbox label="多款式" name="type"></el-checkbox>
+					<el-checkbox-group v-model="ruleForm.goodsStyle" @change="changeStyleFn">
+						<el-checkbox label="1" name="goodsStyle" true-label="1" false-label="0">
+							<span>多款式</span>
+						</el-checkbox>
 					</el-checkbox-group>
 				</el-form-item>
+				<el-form-item label="价格" prop="price">
+					<el-input v-model="ruleForm.price"></el-input>
+				</el-form-item>
 				<el-form-item label="图片">
 					<div class="list-wrap">
-						<cl-upload v-model="ruleForm.goodsImg"></cl-upload>
-						<div>
+						<cl-upload v-model="ruleForm.shopImg"></cl-upload>
+						<!-- <div>
 							<el-button type="primary" size="small">商品主图</el-button>
 							<el-button type="warning" size="small">删除</el-button>
-						</div>
+						</div> -->
 					</div>
 					<div>
 						<el-button type="primary" size="small" @click="imgStoreModal = true"
@@ -43,13 +51,13 @@
 						<img width="100%" :src="dialogImageUrl" alt />
 					</el-dialog>
 				</el-form-item>
-				<el-form-item label="活动形式">
-					<cl-editor-quill v-model="ruleForm.desc" @load="editor"></cl-editor-quill>
+				<el-form-item label="商品简介">
+					<cl-editor-quill v-model="ruleForm.content" @load="editor"></cl-editor-quill>
 					<!-- <el-input type="textarea" v-model="ruleForm.desc"></el-input> -->
 				</el-form-item>
 				<el-form-item label="节假日自动涨价">
-					<el-checkbox-group v-model="ruleForm.type">
-						<el-checkbox label="需要" name="type">
+					<el-checkbox-group v-model="ruleForm.autoRise">
+						<el-checkbox label="1" name="autoRise" true-label="1" false-label="0">
 							<span>需要</span>
 						</el-checkbox>
 						<el-popover
@@ -77,13 +85,15 @@
 					</el-checkbox-group>
 				</el-form-item>
 				<el-form-item label="配送方式">
-					<el-checkbox-group v-model="ruleForm.type">
-						<el-checkbox label="到店自提" name="type"></el-checkbox>
+					<el-checkbox-group v-model="ruleForm.needSend">
+						<el-checkbox label="1" name="type" true-label="1" false-label="0">
+							<span>到店自提</span>
+						</el-checkbox>
 					</el-checkbox-group>
 				</el-form-item>
-				<el-form-item label="配送方式">
-					<el-radio-group v-model="ruleForm.resource">
-						<el-radio label="按距离收费">
+				<el-form-item label="运费">
+					<el-radio-group v-model="ruleForm.freightType">
+						<el-radio label="0">
 							<span>按距离收费</span>
 						</el-radio>
 						<el-popover
@@ -106,7 +116,9 @@
 							></el-button>
 							<!-- <el-button slot="reference">删除</el-button> -->
 						</el-popover>
-						<el-radio label="免运费"></el-radio>
+						<el-radio label="1">
+							<span>免运费</span>
+						</el-radio>
 					</el-radio-group>
 				</el-form-item>
 				<el-form-item>
@@ -119,7 +131,24 @@
 		<el-dialog title="从图库选择" :visible.sync="imgStoreModal" width="600px">
 			<div class="store-modal-content">
 				<div class="select-wrap flex-center-start">
-					<div style="width: 80px">全部图片</div>
+					<div style="width: 80px">选择分类</div>
+					<el-select
+						v-model="imgStoreVal"
+						placeholder="选择分类"
+						size="mini"
+						:clearable="true"
+						style="width: 200px"
+						@change="selChangeFn"
+					>
+						<el-option
+							v-for="(item, index) in categoryData"
+							:key="index"
+							:label="item.id"
+							:value="item.id"
+							>{{ item.categoryName }}</el-option
+						>
+					</el-select>
+					<!-- <div style="width: 80px">选择分类</div>
 					<el-select
 						v-model="imgStoreVal"
 						size="small"
@@ -133,28 +162,25 @@
 							:value="item.value"
 						>
 						</el-option>
-					</el-select>
+					</el-select> -->
 				</div>
 				<div class="img-store-wrap">
 					<el-checkbox-group v-model="imgStoreArr" class="list-store">
 						<div
 							class="list-checkbox"
-							v-for="(item, index) in 10"
+							v-for="(item, index) in imgStoreData"
 							:label="index"
 							:key="index"
 						>
 							<el-checkbox>
 								<div class="list-img">
-									<img
-										src="https://pic.qqtn.com/up/2019-11/2019110209212070747.jpg"
-										alt="图库图片"
-									/>
+									<img :src="item.imgUrl" alt="图库图片" />
 								</div>
 							</el-checkbox>
 						</div>
 					</el-checkbox-group>
 				</div>
-				<el-pagination
+				<!-- <el-pagination
 					@size-change="handleSizeChange"
 					@current-change="handleCurrentChange"
 					:current-page.sync="currentPage"
@@ -162,7 +188,7 @@
 					layout="total, prev, pager, next"
 					:total="1000"
 				>
-				</el-pagination>
+				</el-pagination> -->
 			</div>
 			<div slot="footer" class="dialog-footer">
 				<el-button size="small" @click="imgStoreModal = false">取 消</el-button>
@@ -174,22 +200,23 @@
 		<!-- 选择款式 -->
 		<el-dialog title="选择款式" :visible.sync="styleStoreModal" width="800px">
 			<div class="style-modal-content">
-				<el-form :inline="true" :model="styleForm" class="demo-form-inline">
-					<div class="flex-center-between" v-for="(item, index) in 4" :key="index">
+				<el-form :inline="true" :model="styleStoreData" class="demo-form-inline">
+					<div
+						class="flex-center-between"
+						v-for="(item, index) in styleStoreData"
+						:key="index"
+					>
 						<el-form-item label="款式名称">
-							<el-input
-								v-model="styleForm.styleName"
-								placeholder="款式名称"
-							></el-input>
+							<el-input v-model="item.styleName" placeholder="款式名称"></el-input>
 						</el-form-item>
 						<el-form-item label="价格">
-							<el-input v-model="styleForm.price" placeholder="价格"></el-input>
+							<el-input v-model="item.price" placeholder="价格"></el-input>
 						</el-form-item>
 						<el-form-item label="图片" class="flex-center">
-							<cl-upload v-model="styleForm.goodsImg"></cl-upload>
+							<cl-upload v-model="item.shopImg"></cl-upload>
 						</el-form-item>
 						<el-form-item>
-							<el-button type="primary" size="small" @click="styleSubmit"
+							<el-button type="primary" size="small" @click="styleDelFn(index)"
 								>删除</el-button
 							>
 						</el-form-item>
@@ -208,26 +235,25 @@
 </template>
 
 <script>
+import { mapGetters } from 'vuex';
 export default {
 	name: 'goods-add',
 	data() {
 		return {
 			ruleForm: {
-				name: '',
-				region: '',
-				date1: '',
-				date2: '',
-				delivery: false,
-				type: [],
-				resource: '',
-				desc: '',
-				goodsImg: ''
+				goodsName: '',
+				sold: '',
+				stock: '',
+				categoryIdList: [],
+				goodsStyle: '0',
+				price: '',
+				autoRise: '1',
+				needSend: '0',
+				shopImg: '',
+				freightType: '0'
 			},
 			rules: {
-				name: [
-					{ required: true, message: '请输入活动名称', trigger: 'blur' },
-					{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
-				]
+				name: [{ required: true, message: '请输入名称', trigger: 'blur' }]
 			},
 			// 图片
 			dialogImageUrl: '',
@@ -237,6 +263,7 @@ export default {
 			// 距离收费
 			chargePopover: false,
 			// 从图库中选择
+			imgStoreData: [],
 			imgStoreModal: false,
 			imgStoreVal: '',
 			imgStoreOpt: [],
@@ -244,6 +271,7 @@ export default {
 			currentPage: 1,
 			// 款式选择
 			styleStoreModal: false,
+			styleStoreData: [],
 			styleForm: {
 				styleName: '',
 				price: '',
@@ -251,11 +279,57 @@ export default {
 			}
 		};
 	},
+	computed: {
+		...mapGetters({ categoryData: 'category' })
+	},
+	created() {
+		this.init();
+	},
 	methods: {
+		init() {
+			this.$store.dispatch('getCategory');
+			this._getImgStore();
+		},
+		_getImgStore() {
+			return this.$service.imgStore
+				.list({
+					page: 1,
+					categoryId: this.imgStoreVal
+				})
+				.then(res => {
+					this.imgStoreData = res.list;
+				});
+		},
+		// api
+		addFn() {
+			let form = JSON.parse(JSON.stringify(this.ruleForm));
+			form.shopImg = [form.shopImg];
+			this.$service.goods
+				.add({
+					...form,
+					goodsStyleList: this.styleStoreData
+				})
+				.then(res => {
+					this.resetForm();
+					this.$message.success('添加成功!');
+					this.$router.push('/goods/list');
+				});
+		},
+		// operate
+		changeStyleFn(val) {
+			console.log(val);
+			if (val) {
+				// this.styleFormAddFn()
+				this.styleStoreModal = true;
+			}
+		},
+		selChangeDialogFn(status, item) {
+			console.log(status, item);
+		},
 		submitForm(formName) {
 			this.$refs[formName].validate(valid => {
 				if (valid) {
-					alert('submit!');
+					this.addFn();
 				} else {
 					console.log('error submit!!');
 					return false;
@@ -283,9 +357,18 @@ export default {
 		handleCurrentChange(val) {
 			console.log(`当前页: ${val}`);
 		},
+		// 图库选择
+		selChangeFn(e) {
+			this.imgStoreVal = e;
+		},
 		// 款式选择弹窗
-		styleSubmit() {},
-		styleFormAddFn() {}
+		styleDelFn(index) {
+			this.styleStoreData.splice(index, 1);
+		},
+		styleFormAddFn() {
+			let form = JSON.parse(JSON.stringify(this.styleForm));
+			this.styleStoreData.push(form);
+		}
 	}
 };
 </script>

+ 12 - 4
admin-update/src/views/goods/goods-list.vue

@@ -30,7 +30,7 @@
 			<template #table-column-goodsName="{scope}">
 				<span>{{ scope.row.goodsName }}</span>
 				<!-- <span>二维码</span> -->
-				<span class="short-link" @click="openLinkFn(scope.row.shortUrl)">链接</span>
+				<span class="short-link" @click="openLinkFn(scope.row)">链接</span>
 			</template>
 
 			<!-- 添加商品 -->
@@ -60,7 +60,7 @@
 			</div>
 			<div slot="footer" class="dialog-footer">
 				<el-button @click="dialogFormVisible = false">取 消</el-button>
-				<el-button type="primary" @click="dialogFormVisible = false">发到手机</el-button>
+				<el-button type="primary" @click="sendPhoneFn">发到手机</el-button>
 			</div>
 		</el-dialog>
 	</div>
@@ -73,6 +73,7 @@ export default {
 			app: null,
 			dialogFormVisible: false,
 			sortLink: '',
+			operateData: {},
 			tabIndex: '-1',
 			tabsData: [
 				{
@@ -96,10 +97,17 @@ export default {
 			this.app.refresh({ type: this.tabIndex });
 		},
 		// 打开链接
-		openLinkFn(link) {
-			this.sortLink = link || '';
+		openLinkFn(item) {
+			this.operateData = item;
+			this.sortLink = item.shortUrl || '';
 			this.dialogFormVisible = true;
 		},
+		sendPhoneFn() {
+			this.$service.goods.sendPhone({ id: this.operateData.id }).then(res => {
+				this.$message.success('发送成功!');
+				this.dialogFormVisible = false;
+			});
+		},
 		// 添加商品
 		addFn() {
 			this.$router.push('/goods/add');

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

@@ -25,9 +25,19 @@
 					>查询</el-button
 				>
 			</div>
-			<div class="operate-right">
-				<el-button size="mini" @click="$router.push('/goods/category')">查看分类</el-button>
-				<el-button type="primary" @click="addImgFn" size="mini">新增</el-button>
+			<div class="operate-right flex-center">
+				<el-button
+					class="view-category"
+					size="mini"
+					@click="$router.push('/goods/category')"
+					>查看分类</el-button
+				>
+				<!-- upload-img -->
+				<cl-upload v-model="addForm.picIdList" :props="{ 'on-success': addImgFn }">
+					<template slot="content">
+						<el-button type="primary" size="mini">新增</el-button>
+					</template>
+				</cl-upload>
 			</div>
 		</div>
 		<!-- list -->
@@ -153,7 +163,7 @@ export default {
 			// 图片上传成功
 			addImageModal: false,
 			addForm: {
-				picIdList: [],
+				picIdList: '',
 				price: 0,
 				name: '',
 				categoryIdList: []
@@ -163,12 +173,18 @@ export default {
 	},
 	computed: {
 		...mapGetters({ categoryData: 'category' }),
-		...mapGetters({ festData: 'getFestival' })
+		...mapGetters({ festData: 'festival' })
 	},
 	created() {
+		this.$store.dispatch('getCategory');
+		this.$store.dispatch('getFestival');
 		this._list();
 	},
-	mounted() {},
+	mounted() {
+		setTimeout(() => {
+			console.log(this.categoryData);
+		}, 2000);
+	},
 	methods: {
 		_list() {
 			return this.$service.imgStore
@@ -196,7 +212,9 @@ export default {
 		},
 		// type == 1 新增,type == 2 修改
 		addOrModifyFn(type) {
-			this.$service.imgStore.remark(this.addForm).then(res => {
+			let form = JSON.parse(JSON.stringify(this.addForm));
+			form.picIdList = [form.picIdList];
+			this.$service.imgStore.remark(form).then(res => {
 				this.$message.success('操作成功!');
 				this.resetForm();
 				this.resetList();
@@ -217,6 +235,9 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+.view-category {
+	margin-right: 10px;
+}
 .list-wrap {
 	margin-top: 20px;
 	@include disFlex(center, flex-start);

+ 198 - 0
admin-update/src/views/member/components/detail-draw.vue

@@ -0,0 +1,198 @@
+<template>
+	<el-drawer
+		title="我是标题"
+		:visible.sync="showStatus"
+		size="70%"
+		:before-close="closeFn"
+		:with-header="false"
+	>
+		<div class="head-wrap">
+			<div class="head-left">
+				<cl-avatar
+					:size="60"
+					:src="info.avatarUrl | default_avatar"
+					:style="{ margin: 'auto' }"
+				></cl-avatar>
+				<div>{{ info.userName }}</div>
+				<div v-if="info.userAsset">{{ info.userAsset.growth }}</div>
+			</div>
+			<div class="head-right">
+				<div>
+					<div class="info-label">用户ID</div>
+					<div class="info-val">{{ info.id || '暂无' }}</div>
+				</div>
+				<div>
+					<div class="info-label">手机号</div>
+					<div class="info-val">{{ info.mobile || '暂无' }}</div>
+				</div>
+				<div>
+					<div class="info-label">昵称</div>
+					<div class="info-val">{{ info.userName || '暂无' }}</div>
+				</div>
+				<div>
+					<div class="info-label">关注公众号</div>
+					<div class="info-val">{{ info.subscribe || '暂无' }}</div>
+				</div>
+				<div>
+					<div class="info-label">性别</div>
+					<div class="info-val">{{ info.sex || '暂无' }}</div>
+				</div>
+				<div>
+					<div class="info-label">最近访问</div>
+					<div class="info-val">{{ info.visitTimeFormat || '暂无' }}</div>
+				</div>
+				<div>
+					<div class="info-label">生日</div>
+					<div class="info-val">{{ info.birthday || '暂无' }}</div>
+				</div>
+				<div>
+					<div class="info-label">创建时间</div>
+					<div class="info-val">{{ info.createTime || '暂无' }}</div>
+				</div>
+				<div>
+					<div class="info-label">住址</div>
+					<div class="info-val">{{ info.address || '暂无' }}</div>
+				</div>
+				<div>
+					<div class="info-label">用户来源</div>
+					<div class="info-val">{{ info.source || '暂无' }}</div>
+				</div>
+			</div>
+		</div>
+		<!-- assets -->
+		<div class="card-wrap">
+			<div class="card-tit">资产信息</div>
+			<el-table :data="assetsData">
+				<el-table-column property="totalExpend" label="消费金额"></el-table-column>
+				<el-table-column property="totalBuyNum" label="消费次数"></el-table-column>
+				<el-table-column property="balance" label="余额"></el-table-column>
+				<el-table-column property="growth" label="成长值"></el-table-column>
+				<el-table-column property="getCouponNum" label="领优惠券数"></el-table-column>
+				<el-table-column property="totalRecharge" label="累计充值"></el-table-column>
+				<el-table-column property="inviteNum" label="邀请新人数"></el-table-column>
+				<el-table-column property="discount" label="享折扣"></el-table-column>
+			</el-table>
+		</div>
+		<!-- order -->
+		<div class="card-wrap">
+			<div class="card-tit">订单记录</div>
+			<el-table :data="orderData">
+				<el-table-column property="id" label="ID"></el-table-column>
+				<el-table-column property="createTime" label="提交时间"></el-table-column>
+				<el-table-column property="orderName" label="订单名称"></el-table-column>
+				<el-table-column property="actPrice" label="订单金额"></el-table-column>
+				<el-table-column property="payWay" label="支付方式"></el-table-column>
+				<el-table-column property="sendNum" label="编号"></el-table-column>
+				<el-table-column property="status" label="订单状态">
+					<template slot-scope="scope">
+						<span>{{ scope.row.status | constantfilter('ORDER_STATUS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column property="discount" label="操作">
+					<template slot-scope="scope">
+						<el-button type="text" size="small" @click="$router.push('/order/list')"
+							>查看订单</el-button
+						>
+					</template>
+				</el-table-column>
+			</el-table>
+		</div>
+	</el-drawer>
+</template>
+
+<script>
+export default {
+	name: 'detail-draw',
+	props: {
+		show: {
+			type: Boolean,
+			default: false
+		},
+		info: {
+			type: Object,
+			default: () => {}
+		}
+	},
+	data() {
+		return {
+			showStatus: false,
+			data: {},
+			assetsData: [],
+			orderData: []
+		};
+	},
+	watch: {
+		show(val) {
+			this.showStatus = val;
+			if (val) {
+				this.init();
+			}
+		}
+	},
+	methods: {
+		init() {
+			this.$service.member.allDetail({ userId: this.info.id }).then(res => {
+				this.data = res;
+				this.assetsData = [res.userAsset];
+				this.orderData = res.orderList;
+			});
+		},
+		closeFn(done) {
+			this.$emit('update:show', false);
+			done();
+		}
+		// assets
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.head-wrap {
+	@include disFlex(center, flex-start);
+	border-bottom: 1px solid $borderColor;
+	padding: 0 10px;
+	.head-left {
+		width: 30%;
+		text-align: center;
+		& > div {
+			margin-top: 20px;
+		}
+	}
+	.head-right {
+		width: calc(100% - 30%);
+		@include disFlex(center, space-between);
+		flex-wrap: wrap;
+		border-left: 1px solid $borderColor;
+		font-size: 14px;
+		& > div {
+			width: 49%;
+			padding: 10px 0;
+			@include disFlex(center, space-between);
+			// border-top: 1px solid $borderColor;
+			&:nth-child(even) {
+				// border-left: 1px solid $borderColor;
+			}
+			.info-label {
+				width: 100px;
+				text-align: right;
+				color: $fontColor3;
+			}
+			.info-val {
+				width: calc(100% - 120px);
+				margin-left: 20px;
+				text-align: left;
+			}
+		}
+	}
+}
+.card-wrap {
+	// padding: 0 20px;
+	margin: 20px;
+	// border: 1px solid $borderColor;
+	// border-bottom: 0;
+	.card-tit {
+		font-size: 16px;
+		margin-bottom: 4px;
+	}
+}
+</style>

+ 39 - 14
admin-update/src/views/member/list.vue

@@ -34,6 +34,10 @@
 				<span>{{ scope.row.userAsset.growth }}</span>
 			</template>
 
+			<!-- 详情 -->
+			<template #slot-detail="{scope}">
+				<el-button type="text" @click="detailShowFn(scope.row)">详情</el-button>
+			</template>
 			<!-- 充值 -->
 			<template #slot-recharge="{scope}">
 				<el-button type="text" @click="rechargeShowFn(scope.row)">充值</el-button>
@@ -139,15 +143,19 @@
 				<el-button type="primary" size="small" @click="upgradeAmount">充值</el-button>
 			</div>
 		</el-dialog>
+		<!-- 详情 -->
+		<detail-draw :show.sync="drapShow" :info="modalData" />
 	</div>
 </template>
 
 <script>
 import { mapGetters } from 'vuex';
 import cardName from './components/card-name';
+import detailDraw from './components/detail-draw';
 export default {
 	components: {
-		cardName
+		cardName,
+		detailDraw
 	},
 	data() {
 		return {
@@ -186,7 +194,9 @@ export default {
 				member: '',
 				confirmPassword: ''
 			},
-			upgradeRules: {}
+			upgradeRules: {},
+			// draw
+			drapShow: false
 		};
 	},
 	computed: {
@@ -203,21 +213,36 @@ export default {
 		},
 		// 充值
 		rechargeAmount() {
-			this.$service.member.recharge(this.rechargeForm).then(res => {
-				console.log(res);
-				this.$message.success('充值成功!');
-				this.resetForm();
-			});
+			this.$service.member
+				.recharge({
+					userId: this.modalData.id,
+					...this.rechargeForm
+				})
+				.then(res => {
+					console.log(res);
+					this.$message.success('充值成功!');
+					this.resetForm();
+				});
 		},
 		// 升级
 		upgradeAmount() {
-			this.$service.member.upgrade(this.upgradeForm).then(res => {
-				this.$message.success('升级成功!');
-				console.log(res);
-				this.resetForm();
-			});
+			this.$service.member
+				.upgrade({
+					userId: this.modalData.id,
+					...this.upgradeForm
+				})
+				.then(res => {
+					this.$message.success('升级成功!');
+					console.log(res);
+					this.resetForm();
+				});
 		},
 		// modal
+		// 详情
+		detailShowFn(item) {
+			this.modalData = item;
+			this.drapShow = true;
+		},
 		rechargeShowFn(item) {
 			this.modalData = item;
 			this.rechargeDialog = true;
@@ -298,13 +323,13 @@ export default {
 						visible: true, // 是否显示
 						// 同 element-ui Table-column Attributes
 						props: {
-							width: 150,
+							width: 180,
 							align: 'center',
 							fixed: 'right',
 							label: '操作'
 						},
 						// 布局,请移步 `layout`
-						layout: ['slot-recharge', 'slot-upgrade', 'slot-ship']
+						layout: ['slot-detail', 'slot-recharge', 'slot-upgrade', 'slot-ship']
 					}
 				})
 				.set('upsert', {