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