From b18999900dd27cf7273d08d8d3b64914f2ed0cb5 Mon Sep 17 00:00:00 2001 From: "pikachu1995@126.com" Date: Tue, 24 Mar 2026 16:24:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BC=9A=E5=91=98):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BC=9A=E5=91=98=E5=88=86=E7=BB=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加会员分组管理页面,支持增删改查 - 在会员列表页新增分组筛选和批量设置分组功能 - 扩展会员管理 API,添加分组相关接口 - 配置路由以支持分组页面访问 --- manager/src/api/member.js | 22 ++ manager/src/router/router.js | 6 + manager/src/views/member/group/index.vue | 257 +++++++++++++++++++++++ manager/src/views/member/list/index.vue | 111 +++++++++- 4 files changed, 395 insertions(+), 1 deletion(-) create mode 100644 manager/src/views/member/group/index.vue diff --git a/manager/src/api/member.js b/manager/src/api/member.js index 312629cd..93f9e728 100644 --- a/manager/src/api/member.js +++ b/manager/src/api/member.js @@ -148,3 +148,25 @@ export const increaseMemberWallet = (params) => { export const updateMemberPoint = (params) => { return putRequest(`/passport/member/updateMemberPoint`, params); }; + +export const getMemberGroupByPage = (params) => { + return getRequest("/member/memberGroup/getByPage", params); +}; +export const getMemberGroup = (id) => { + return getRequest(`/member/memberGroup/get/${id}`); +}; +export const addMemberGroup = (params) => { + return postRequest(`/member/memberGroup`, params); +}; +export const updateMemberGroup = (id, params) => { + return putRequest(`/member/memberGroup/update/${id}`, params); +}; +export const deleteMemberGroup = (id) => { + return deleteRequest(`/member/memberGroup/delete/${id}`); +}; + +export const addMemberGroupUsers = (groupId, memberIds) => { + return postRequest(`/member/memberGroup/${groupId}/users`, { + memberIds: Array.isArray(memberIds) ? memberIds.join(",") : memberIds, + }); +}; diff --git a/manager/src/router/router.js b/manager/src/router/router.js index b20d50f7..19df6bbf 100644 --- a/manager/src/router/router.js +++ b/manager/src/router/router.js @@ -147,6 +147,12 @@ export const otherRouter = { name: "member-detail", component: () => import("@/views/member/list/memberDetail.vue") }, + { + path: "member-group", + title: "会员分组", + name: "member-group", + component: () => import("@/views/member/group/index.vue") + }, { path: "goods/goods-info/goodsDetail", diff --git a/manager/src/views/member/group/index.vue b/manager/src/views/member/group/index.vue new file mode 100644 index 00000000..213b2df3 --- /dev/null +++ b/manager/src/views/member/group/index.vue @@ -0,0 +1,257 @@ + + + diff --git a/manager/src/views/member/list/index.vue b/manager/src/views/member/list/index.vue index 388fe212..91f1db79 100644 --- a/manager/src/views/member/list/index.vue +++ b/manager/src/views/member/list/index.vue @@ -18,6 +18,11 @@ + + + @@ -25,9 +30,22 @@ + -
+
确定 + +
+ + + +
+
+ + +
+
@@ -146,6 +177,19 @@ export default { multipleMap, ossManage, }, + computed: { + tableColumns() { + if (this.selectedMember) return this.columns; + return [ + { + type: "selection", + width: 60, + align: "center", + }, + ...this.columns, + ]; + }, + }, data() { return { defaultPic:require('@/assets/default.png'), @@ -169,6 +213,7 @@ export default { username: "", mobile: "", disabled: "OPEN", + groupId: "", }, picModelFlag: false, // 选择图片 form: {}, // 表单数据 @@ -200,6 +245,16 @@ export default { point: null, type: "INCREASE", }, + selectedRows: [], + memberGroupFlag: false, + memberGroupLoading: false, + memberGroupForm: { + groupId: "", + }, + memberGroupRule: { + groupId: [{ required: true, message: "请选择会员分组", trigger: "change" }], + }, + memberGroupList: [], memberPointRule: { type: [{ required: true, message: "请选择类型", trigger: "change" }], point: [ @@ -515,6 +570,52 @@ export default { }, }, methods: { + onSelectionChange(selection) { + this.selectedRows = selection || []; + }, + openSetMemberGroup() { + this.memberGroupFlag = true; + this.memberGroupLoading = false; + this.memberGroupForm = { groupId: "" }; + this.$nextTick(() => { + if (this.$refs.memberGroupForm) this.$refs.memberGroupForm.resetFields(); + }); + this.loadMemberGroupList(); + }, + loadMemberGroupList() { + API_Member.getMemberGroupByPage({ pageNumber: 1, pageSize: 1000 }).then((res) => { + if (res && res.success && res.result) { + this.memberGroupList = res.result.records || []; + } + }); + }, + clearSelection() { + if (this.$refs.table && this.$refs.table.clearSelection) { + this.$refs.table.clearSelection(); + } + }, + submitSetMemberGroup() { + if (this.selectedRows.length === 0) { + this.$Message.warning("请先选择会员"); + return; + } + this.$refs.memberGroupForm.validate((valid) => { + if (!valid) return; + const memberIds = this.selectedRows.map((item) => item.id); + this.memberGroupLoading = true; + API_Member.addMemberGroupUsers(this.memberGroupForm.groupId, memberIds).then((res) => { + this.memberGroupLoading = false; + if (res && res.success) { + this.$Message.success("设置成功"); + this.memberGroupFlag = false; + this.selectedRows = []; + this.clearSelection(); + } else if (res && res.message) { + this.$Message.error(res.message); + } + }); + }); + }, // 回调给父级 callback(val, index) { this.selectMember.forEach(item=>{item.___selected = false}) @@ -594,6 +695,11 @@ export default { //查询会员列表 getData() { + this.loading = true; + if (!this.selectedMember) { + this.selectedRows = []; + this.clearSelection(); + } API_Member.getMemberListData(this.searchForm).then((res) => { if (res.result.records) { this.loading = false; @@ -759,6 +865,9 @@ export default { }, mounted() { this.getData(); + if (!this.selectedMember) { + this.loadMemberGroupList(); + } }, };