From eb5b0cd3e99caa28f1be06340fb8d888388a8959 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期三, 03 九月 2025 16:14:26 +0800 Subject: [PATCH] 用户消费金额与总订单数,按标签过滤会员,订单列表会员名称与导出 --- manager/src/api/order.js | 3 + manager/src/views/member/list/index.vue | 25 ++++++++++-- manager/src/views/order/order/orderList.vue | 16 ++++++- manager/src/views/video/VideoList.vue | 13 +++--- manager/src/views/member/list/memberDetail.vue | 33 +++++++++++++++- manager/src/api/member.js | 15 +++++++ 6 files changed, 88 insertions(+), 17 deletions(-) diff --git a/manager/src/api/member.js b/manager/src/api/member.js index 6f101df..040bb2b 100644 --- a/manager/src/api/member.js +++ b/manager/src/api/member.js @@ -37,7 +37,20 @@ // 鑾峰彇浼氬憳鍒楄〃 export const getMemberListData = (params) => { - return getRequest("/passport/member", params); + const processedParams = new URLSearchParams(); + + Object.entries(params).forEach(([key, value]) => { + if (key === 'tagIds' && Array.isArray(value)) { + // 濡傛灉鏄痶agIds鏁扮粍锛屼负姣忎釜鍏冪礌娣诲姞[]鍚庣紑 + value.forEach(tagId => { + processedParams.append('tagIds[]', tagId); + }); + } else { + processedParams.append(key, value); + } + }); + + return getRequest(`/passport/member?${processedParams.toString()}`); }; // 鑾峰彇浼氬憳璇︽儏 diff --git a/manager/src/api/order.js b/manager/src/api/order.js index 340dbc9..6d523ed 100644 --- a/manager/src/api/order.js +++ b/manager/src/api/order.js @@ -6,6 +6,9 @@ deleteRequest } from '@/libs/axios'; +export const countByIdOrder = (id) =>{ + return getRequest(`/order/order/countOrder/${id}`,) +} // 浜ょ敱鍟嗗鐢宠瘔 export const storeComplain = (params) => { diff --git a/manager/src/views/member/list/index.vue b/manager/src/views/member/list/index.vue index e930b40..fae9bd4 100644 --- a/manager/src/views/member/list/index.vue +++ b/manager/src/views/member/list/index.vue @@ -14,6 +14,12 @@ <Form-item label="鑱旂郴鏂瑰紡" prop="mobile"> <Input type="text" v-model="searchForm.mobile" placeholder="璇疯緭鍏ヤ細鍛樿仈绯绘柟寮�" clearable style="width: 200px" /> </Form-item> + <Form-item label="鐢ㄦ埛鏍囩" prop="tags"> + <Select v-model="searchForm.tagIds" multiple filterable :loading="selectLoading" style="width:200px;"> + <Option v-for="item in options" :key="item.id" :label="item.tagName" :value="item.id"></Option> + </Select> + </Form-item> + <Button @click="handleSearch" class="search-btn" type="primary" icon="ios-search">鎼滅储</Button> </Form> </Row> @@ -73,6 +79,9 @@ <Option v-for="item in options" :key="item.id" :label="item.tagName" :value="item.id"></Option> </Select> </FormItem> + <FormItem label="鐢ㄦ埛鑷畾涔夋爣绛�" prop="customerTags"> + <span class="inf0o" v-for="(item,index) in memberTags" :key="index">{{item.tagName}}<span v-if="index < memberTags.length - 1">, </span></span> + </FormItem> <FormItem label="鎬у埆" prop="sex"> <RadioGroup type="button" button-style="solid" v-model="form.sex"> <Radio :label="1"> @@ -91,10 +100,7 @@ </FormItem> <FormItem label="鎵�鍦ㄥ湴" prop="mail"> {{ form.region || '鏆傛棤鍦板潃' }} - - <Button style="margin-left: 10px;" @click="$refs.map.open()">閫夋嫨</Button> - </FormItem> </Form> </Modal> @@ -111,6 +117,7 @@ import ossManage from "@/views/sys/oss-manage/ossManage"; import * as RegExp from "@/libs/RegExp.js"; import { getTags } from "@/api/tag.js"; +import { detailById } from "@/api/memberCustomerTag.js" export default { name: "member", @@ -120,6 +127,7 @@ }, data() { return { + memberTags:[], defaultPic: require('@/assets/default.png'), descTitle: "", // modal鏍囬 descFlag: false, //缂栬緫鏌ョ湅妗� @@ -143,6 +151,7 @@ username: "", mobile: "", disabled: "OPEN", + tagIds:[], }, picModelFlag: false, // 閫夋嫨鍥剧墖 form: {}, // 琛ㄥ崟鏁版嵁 @@ -330,6 +339,13 @@ }, }, methods: { + getMemberTags(id){ + detailById(id).then(res =>{ + if (res.code === 200){ + this.memberTags = res.data; + } + }); + }, // 鍥炶皟缁欑埗绾� callback(val, index) { this.selectMember.forEach(item => { item.___selected = false }) @@ -387,9 +403,10 @@ }, //鏌ョ湅璇︽儏淇敼 editPerm(val) { + this.form = {}; this.descTitle = `鏌ョ湅鐢ㄦ埛 ${val.username}`; this.descFlag = true; - + this.getMemberTags(val.id); this.getMemberInfo(val.id); }, addMember() { diff --git a/manager/src/views/member/list/memberDetail.vue b/manager/src/views/member/list/memberDetail.vue index c00065b..4380387 100644 --- a/manager/src/views/member/list/memberDetail.vue +++ b/manager/src/views/member/list/memberDetail.vue @@ -20,7 +20,7 @@ </div> </div> <div class="bottom-info"> - <p>涓婃鐧诲綍 {{memberInfo.lastLoginDate}} + <p>涓婃鐧诲綍 {{memberInfo.lastLoginDate}} </p> <p> <i-switch size="large" v-model="memberInfo.disabled" :true-value="true" :false-value="false" @on-change="memberStatusChange"> @@ -56,15 +56,34 @@ class="info">鏆傛湭瀹屽杽</span> <span v-else class="info">{{memberInfo.region}}</span> </p> + + </div> + <div class="ant-col-md-6"> <p class="item"> <span class="label">娉ㄥ唽鏃堕棿锛�</span> <span class="info">{{memberInfo.createTime}}</span> </p> <p class="item"> <span class="label">鐢ㄦ埛鑷畾涔夋爣绛撅細</span> - <span class="inf0o" v-for="(item,index) in memberTags" :key="index">{{item.tagName}}<span v-if="index < memberTags.length - 1">, </span></span> + <span v-for="(item,index) in memberTags" :key="index">{{item.tagName}}<span v-if="index < memberTags.length - 1">, </span></span> + </p> + <p class="item"> + <span class="label">鎬诲畬鎴愯鍗曟暟锛�</span> + <span class="info">{{orderNumCount}}</span> + </p> + <p class="item"> + <span class="label">鎬绘秷璐归噾棰濓細</span> + <span class="info">{{orderPriceCount}}</span> + </p> + <p class="item"> + <span class="label">绯荤粺鏍囩锛�</span> + <span v-for="(item,index) in memberInfo.tags" :key="index">{{item.tagName}}<span v-if="index < memberInfo.tags.length - 1">, </span></span> </p> </div> + <div> + + </div> + </div> </Card> @@ -369,6 +388,7 @@ import multipleMap from "@/components/map/multiple-map"; import * as RegExp from '@/libs/RegExp.js'; import * as API_Order from "@/api/order.js"; + import {countByIdOrder} from "../../../api/order"; export default { name: "memberDetail", @@ -382,6 +402,8 @@ id: "",//浼氬憳id loading: true, // 琛ㄥ崟鍔犺浇鐘舵�� memberInfo: {},//浼氬憳淇℃伅 + orderPriceCount:0, + orderNumCount:0, memberWalletInfo: {},//浼氬憳棰勫瓨娆句俊鎭� addressModalTitle: "",//浼氬憳鍦板潃鎿嶄綔鏍囬 addressModalVisible: false, //浼氬憳鍦板潃鎿嶄綔寮瑰嚭妗� @@ -847,6 +869,7 @@ methods: { init() { + this.getCountOrderPrice(); //鏌ヨ浼氬憳淇℃伅 this.getMemberInfo(); //鏌ヨ浼氬憳鐨勫巻鍙茬Н鍒嗘暟鎹� @@ -860,6 +883,12 @@ } }); }, + getCountOrderPrice(){ + API_Order.countByIdOrder(this.id).then(res =>{ + this.$set(this, "orderPriceCount", res.result.orderPriceCount); + this.$set(this, "orderNumCount", res.result.orderNumCount); + }) + }, //浼氬憳淇℃伅tab鏀瑰彉浜嬩欢 memberInfoChange(v) { if (v == "point") { diff --git a/manager/src/views/order/order/orderList.vue b/manager/src/views/order/order/orderList.vue index 9c855c5..1161466 100644 --- a/manager/src/views/order/order/orderList.vue +++ b/manager/src/views/order/order/orderList.vue @@ -18,11 +18,20 @@ style="width: 160px" /> </Form-item> - <Form-item label="浼氬憳鍚嶇О" prop="buyerName"> +<!-- <Form-item label="浼氬憳鍚嶇О" prop="buyerName">--> +<!-- <Input--> +<!-- type="text"--> +<!-- v-model="searchForm.buyerName"--> +<!-- placeholder="璇疯緭鍏ヤ細鍛樺悕绉�"--> +<!-- clearable--> +<!-- style="width: 160px"--> +<!-- />--> +<!-- </Form-item>--> + <Form-item label="浼氬憳鏄电О" prop="nickName"> <Input type="text" - v-model="searchForm.buyerName" - placeholder="璇疯緭鍏ヤ細鍛樺悕绉�" + v-model="searchForm.nickName" + placeholder="璇疯緭鍏ヤ細鍛樻樀绉�" clearable style="width: 160px" /> @@ -258,6 +267,7 @@ orderType: "", orderSn: "", buyerName: "", + nickName:"", orderStatus: "", }, selectDate: null, diff --git a/manager/src/views/video/VideoList.vue b/manager/src/views/video/VideoList.vue index e3aa4b1..7529244 100644 --- a/manager/src/views/video/VideoList.vue +++ b/manager/src/views/video/VideoList.vue @@ -259,13 +259,13 @@ :title="playVideoTitle" width="800" :mask-closable="false" - @close="playVideoClose" + @on-cancel="playVideoClose" > <div class="video-warp"> <video :src="playVideoUrl" autoplay controls style="width: 768px;height: 432px"/> </div> <div slot="footer"> - <Button type="text" @click="playVideoClose">鍏抽棴</Button> + <Button type="text" @click="playVideoClose">鍏抽棴1</Button> </div> </Modal> @@ -1067,11 +1067,10 @@ this.upLoadVideoShow = false; }, submitVideoUpload() { - console.log(this.uploadVideoForm.coverUrl) - if (this.uploadVideoForm.coverUrl === null || this.uploadVideoForm.coverUrl === undefined) { - this.$Message.error('鏍囬涓嶈兘涓虹┖'); - return; - } + // if (this.uploadVideoForm.coverUrl === null || this.uploadVideoForm.coverUrl === undefined) { + // this.$Message.error('灏侀潰涓嶈兘涓虹┖'); + // return; + // } this.uploadVideoForm.goodsList = this.uploadVideoForm.goodsList.filter(item => { return item.goodsNum > 0; }) -- Gitblit v1.8.0