Skip to content

Commit 542e214

Browse files
committed
update(wecmo): tag sync
1 parent 5d89eaa commit 542e214

File tree

20 files changed

+269
-64
lines changed

20 files changed

+269
-64
lines changed

src/api/scrm/wecom/base.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export const UriWeCom = '/scrm/wechat/wecom';
22
export const UriWeComUser = '/scrm/wechat/wecom/organization/users';
33
export const UriWeComDepartment = '/scrm/wechat/wecom/organization/departments';
4+
export const UriWeComTag = '/scrm/wechat/wecom/tags';
45
export const UriWeComApp = '/scrm/wechat/wecom/app';

src/api/scrm/wecom/department/index.ts

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -46,27 +46,6 @@ export interface WeComDepartment {
4646
children: WeComDepartment[];
4747
}
4848

49-
export interface GetDepartmentTreeRequest {
50-
depId?: number;
51-
}
52-
53-
export interface GetDepartmentTreeReply {
54-
pageIndex: number;
55-
pageSize: number;
56-
total: number;
57-
list?: DepartmentNode[];
58-
}
59-
60-
export interface GetDepartmentTreeReplyList {
61-
list: DepartmentNode[];
62-
}
63-
64-
export function getDepartmentTree() {
65-
return axios.post<GetDepartmentTreeReply>(
66-
`/api/v1/admin/scrm/wechat/wecom/organization/department/page`,
67-
);
68-
}
69-
7049
export type CreateWeComDepartmentRequest = WeComDepartment;
7150

7251
export interface CreateWeComDepartmentReply {

src/api/scrm/wecom/tag/index.ts renamed to src/api/scrm/wecom/tag/corp-tag.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export function getTagList(request: GetTagRequest) {
3737
);
3838
}
3939

40-
export function getGroupTagList(request: GetTagRequest) {
40+
export function getTagGroupList(request: GetTagRequest) {
4141
return axios.post<GetTagReply>(
4242
`/api/v1/admin/scrm/wechat/wecom/tags/group/page`,
4343
request,

src/api/scrm/wecom/tag/tag.ts

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
/*
2+
* @Description: 企微标签
3+
* @Author: Matrix-X
4+
* @Date: 2025-04-24 15:00:00
5+
* @LastEditors: Matrix-X
6+
* @LastEditTime: 2025-04-24 15:00:00
7+
*/
8+
import axios from 'axios';
9+
import { PrefixUriAdmin } from '@/api';
10+
import { UriWeComTag } from '@/api/scrm/wecom/base';
11+
import { GetCustomersReply } from '@/api/scrm/wecom/customer';
12+
13+
export type WeComTagType = number;
14+
export const WeComTagTypeTag: WeComTagType = 1;
15+
export const WeComTagTypeCorpTag: WeComTagType = 2;
16+
export const WeComTagTypeStrategy: WeComTagType = 3;
17+
18+
export interface WeComCorpTagGroup {
19+
agentId: number;
20+
groupId: string;
21+
name: string;
22+
sort: number;
23+
isDelete: string;
24+
}
25+
26+
export interface WeComTag {
27+
type: number;
28+
isSelf: number;
29+
tagId: string;
30+
groupId: string;
31+
groupName: string;
32+
name: string;
33+
sort: number;
34+
CorpTagGroup: WeComCorpTagGroup;
35+
}
36+
37+
export function pullSyncWeComTagsAndUsers(request: any) {
38+
return axios.post<GetCustomersReply>(
39+
`${PrefixUriAdmin + UriWeComTag}/sync`,
40+
request,
41+
);
42+
}
43+
44+
export interface GetWeComTagPageListRequest {
45+
tagIds?: string[];
46+
groupIds?: string[];
47+
groupName?: string;
48+
name?: string;
49+
sync?: number | string;
50+
tagType?: number;
51+
pageIndex?: number;
52+
pageSize?: number;
53+
}
54+
55+
export interface GetWeComTagPageListReply {
56+
list: WeComTag[];
57+
}
58+
59+
export function getWeComTagPageList(request: GetWeComTagPageListRequest) {
60+
return axios.post<GetWeComTagPageListReply>(
61+
`${PrefixUriAdmin + UriWeComTag}/page`,
62+
request,
63+
);
64+
}
65+
66+
export interface GetTagGroupRequest {
67+
groupId: string;
68+
}
69+
export interface GetTagGroupReply {
70+
list: WeComTag[];
71+
}
72+
73+
export function getTagGroupList(request: GetTagGroupRequest) {
74+
return axios.post<GetTagGroupReply>(
75+
`${PrefixUriAdmin + UriWeComTag}/groups`,
76+
request,
77+
);
78+
}
79+
80+
/**
81+
* @description 新增标签
82+
*/
83+
84+
export interface AddTagRequest {
85+
groupId: string;
86+
groupName: string;
87+
sort: number;
88+
agentId?: number;
89+
tag: WeComTag[];
90+
}
91+
export interface CreateTagReply {
92+
status: number | string;
93+
}
94+
export function addTag(request: AddTagRequest) {
95+
return axios.post<CreateTagReply>(
96+
`/api/v1/admin/scrm/wechat/wecom/tags/crop/create`,
97+
request,
98+
);
99+
}
100+
/**
101+
* @description 编辑标签
102+
*/
103+
export interface ActionTagGroup {
104+
tagId?: string;
105+
tagName?: string;
106+
}
107+
export interface EditTagRequest {
108+
groupId: string;
109+
tags: ActionTagGroup[];
110+
}
111+
112+
export function editTag(request: EditTagRequest) {
113+
return axios.post<CreateTagReply>(
114+
`/api/v1/admin/scrm/wechat/wecom/tags/group/action`,
115+
request,
116+
);
117+
}
118+
119+
interface DeleteTagRequest {
120+
tagIds?: string[];
121+
groupIds?: string[];
122+
}
123+
export function deleteTag(request: DeleteTagRequest) {
124+
return axios.delete<any>(`/api/v1/admin/scrm/wechat/wecom/tags/crop/delete`, {
125+
data: request,
126+
});
127+
}
128+
129+
export function wechatTagSync() {
130+
return axios.put<any>(`/api/v1/admin/scrm/wechat/wecom/tags/sync`);
131+
}
132+
133+
export function corpOption() {
134+
return axios.get<any>(`/api/v1/admin/scrm/wechat/wecom/tags/corp/option`);
135+
}
136+
137+
export function groupOption() {
138+
return axios.get<any>(`/api/v1/admin/scrm/wechat/wecom/tags/group/option`);
139+
}
140+
141+
export interface CustomerTagList {
142+
userId: string;
143+
externalUserId: string;
144+
addTag?: string[];
145+
removeTag?: string[];
146+
}
147+
export function customerTag(request: CustomerTagList) {
148+
return axios.post<any>(
149+
`/api/v1/admin/scrm/wechat/wecom/tags/customer/action`,
150+
request,
151+
);
152+
}

src/api/scrm/wecom/user/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,13 @@ export interface listUsersPageRequest {
4949
email?: string;
5050
alias?: number[];
5151
status?: string[];
52-
WeComUserId?: string | number | null;
52+
weComUserId?: string | number | null;
5353
roleCodes?: string[];
5454
isEnable?: any;
5555
pageIndex?: number;
5656
pageSize?: number;
5757
likeName?: string;
58+
weComTagId?: number;
5859
departmentId?: number;
5960
departmentIds?: number[];
6061
}

src/router/routes/modules/scrm-wecom.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ const SCRMWecom: AppRouteRecordRaw = {
299299
},
300300
{
301301
path: '/scrm/wecom/customer-user-group/tag',
302-
name: 'WeComGroupTag',
302+
name: 'WeComTagGroup',
303303
component: () =>
304304
import('@/views/scrm/wecom/customer-group/tag/index.vue'),
305305
meta: {

src/store/modules/scrm/wecom/user.ts

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,19 @@ import {
44
WeComDepartment,
55
} from '@/api/scrm/wecom/department';
66
import { Message } from '@arco-design/web-vue';
7-
import { listUsersPage } from '@/api/scrm/wecom/user';
8-
9-
type TagTree = any;
10-
type UserList = any;
7+
import { listUsersPage, WeComUser } from '@/api/scrm/wecom/user';
8+
import {
9+
getWeComTagPageList,
10+
WeComTag,
11+
WeComTagTypeTag,
12+
} from '@/api/scrm/wecom/tag/tag';
1113

1214
export type ViewType = 'department' | 'tag';
1315

1416
interface UserState {
1517
departmentTree: WeComDepartment[];
16-
tagTree: TagTree | null;
17-
userList: UserList | null;
18+
tagList: WeComTag[];
19+
userList: WeComUser[];
1820
selectedDepartmentId: number;
1921
selectedDepartmentIds: number[];
2022
selectedTag: number | null;
@@ -25,22 +27,23 @@ interface UserState {
2527
const useWeComUserStore = defineStore('weComUser', {
2628
state: (): UserState => ({
2729
departmentTree: [],
28-
tagTree: null,
29-
userList: null,
30+
tagList: [],
31+
userList: [],
3032
selectedDepartmentId: 1,
3133
selectedDepartmentIds: [],
3234
selectedTag: null,
33-
selectedViewType: 'department',
35+
// selectedViewType: 'department',
36+
selectedViewType: 'tag',
3437
showCreateDepartmentModal: false,
3538
}),
3639
actions: {
3740
setDepartmentTree(tree: WeComDepartment) {
3841
this.departmentTree = [tree];
3942
},
40-
setTagTree(tree: TagTree) {
41-
this.tagTree = tree;
43+
setTagList(list: WeComTag[]) {
44+
this.tagList = list;
4245
},
43-
setUserList(list: UserList) {
46+
setUserList(list: WeComUser[]) {
4447
this.userList = list;
4548
},
4649
setSelectedDepartment(departmentId: number) {
@@ -82,18 +85,30 @@ const useWeComUserStore = defineStore('weComUser', {
8285
Message.error('获取部门信息失败');
8386
}
8487
},
88+
async loadTagList() {
89+
const res = await getWeComTagPageList({
90+
tagType: WeComTagTypeTag,
91+
pageIndex: 1,
92+
pageSize: 100,
93+
});
94+
if (res.data) {
95+
this.tagList = res.data.list;
96+
} else {
97+
Message.error('获取企微标签列表失败');
98+
}
99+
},
85100
async loadUsersByDepartmentId(departmentId: number) {
86101
const res = await listUsersPage({ departmentId });
87102
if (res.data) {
88-
this.userList = [res.data.list];
103+
this.userList = res.data.list;
89104
} else {
90105
Message.error('获取部门用户列表失败');
91106
}
92107
},
93108
async loadUsersByDepartmentIds(departmentIds: number[]) {
94109
const res = await listUsersPage({ departmentIds });
95110
if (res.data) {
96-
this.userList = [res.data.list];
111+
this.userList = res.data.list;
97112
} else {
98113
Message.error('获取部门用户列表失败');
99114
}

src/views/login/index.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
.container {
2929
display: flex;
3030
height: 100vh;
31+
//border: 1px solid red;
3132
3233
.banner {
3334
width: 550px;

src/views/scrm/wecom/customer-domain/customer/components/add-tag.vue

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<a-form-item>
1111
<div class="tag-list" style="width: 100%">
1212
<div
13-
v-for="(params, index) in groupTagList.list"
13+
v-for="(params, index) in TagGroupList.list"
1414
:key="index"
1515
style="width: 100%; margin: 8px 0"
1616
>
@@ -53,7 +53,7 @@
5353
import {
5454
customerTag,
5555
CustomerTagList,
56-
getGroupTagList,
56+
getTagGroupList,
5757
} from '@/api/scrm/wecom/tag';
5858
5959
const prop = defineProps({
@@ -85,7 +85,7 @@
8585
removeTag: [],
8686
} as CustomerTagList);
8787
88-
const groupTagList = reactive<any>({
88+
const TagGroupList = reactive<any>({
8989
list: [],
9090
});
9191
@@ -105,13 +105,13 @@
105105
const handlereset = () => {
106106
formRef.value.resetFields();
107107
};
108-
async function fetchGroupTagList() {
109-
const res = await getGroupTagList({
108+
async function fetchTagGroupList() {
109+
const res = await getTagGroupList({
110110
pageIndex: 1,
111111
pageSize: 30,
112112
});
113113
try {
114-
groupTagList.list = res.data.list.map((data) => {
114+
TagGroupList.list = res.data.list.map((data) => {
115115
if (data.tags && data.tags.length > 0) {
116116
data.tags.forEach((params: TagItem) => {
117117
if (tagIds.value.includes(params.tagId)) {
@@ -124,7 +124,7 @@
124124
return data;
125125
});
126126
} catch (err) {
127-
groupTagList.list = [];
127+
TagGroupList.list = [];
128128
}
129129
}
130130
@@ -139,7 +139,7 @@
139139
checked: boolean;
140140
tags: [];
141141
}
142-
groupTagList.list.forEach((data: TagParams) => {
142+
TagGroupList.list.forEach((data: TagParams) => {
143143
if (data.tags && data.tags.length > 0) {
144144
data.tags.forEach((params: TagItem) => {
145145
if (params.checked) {
@@ -174,7 +174,7 @@
174174
}
175175
};
176176
onMounted(async () => {
177-
await fetchGroupTagList();
177+
await fetchTagGroupList();
178178
});
179179
watch(
180180
() => prop.editData,
@@ -184,7 +184,7 @@
184184
formModel.value.userId = editData.userId;
185185
formModel.value.externalUserId = editData.externalUserId;
186186
tagIds.value = editData.tags;
187-
fetchGroupTagList();
187+
fetchTagGroupList();
188188
}
189189
},
190190
{ deep: true },

0 commit comments

Comments
 (0)