diff --git a/src/api/ab98/user.ts b/src/api/ab98/user.ts
index 2996825..8ef252f 100644
--- a/src/api/ab98/user.ts
+++ b/src/api/ab98/user.ts
@@ -39,6 +39,8 @@ export interface Ab98UserDTO {
wxNickName?: string;
/** 微信用户openid */
wxUserOpenid?: string;
+ /** 微信用户头像 */
+ wxAvatar?: string;
}
export interface Ab98UserDetailDTO {
/** 主键ID */
@@ -87,7 +89,8 @@ export interface Ab98UserQuery extends BasePageQuery {
tel?: string;
/** 身份证号码 */
idnum?: string;
- tagName?: string;
+ /** 标签ID,多个标签ID用逗号分隔 */
+ tagIds?: string;
/** 绑定汇邦云 false未绑定 true已绑定 null 全部 */
hasAb98UserId?: boolean;
}
diff --git a/src/views/membership/tag/index.vue b/src/views/membership/tag/index.vue
index 139aa2b..9579b51 100644
--- a/src/views/membership/tag/index.vue
+++ b/src/views/membership/tag/index.vue
@@ -244,6 +244,23 @@ const drawerRules = reactive({
]
});
+const getIconByName = (name: string) => {
+ switch (name) {
+ case 'Search':
+ return useRenderIcon(Search);
+ case 'Refresh':
+ return useRenderIcon(Refresh);
+ case 'Plus':
+ return useRenderIcon(Plus);
+ case 'Edit':
+ return useRenderIcon(Edit);
+ case 'Delete':
+ return useRenderIcon(Delete);
+ default:
+ return '';
+ }
+}
+
onMounted(() => {
getList();
});
@@ -265,19 +282,19 @@ onMounted(() => {
-
+
搜索
-
+
重置
- openDrawer()">
+ openDrawer()">
新增标签
@@ -311,10 +328,10 @@ onMounted(() => {
-
+
编辑
-
+
删除
diff --git a/src/views/user/ab98/detail.vue b/src/views/user/ab98/detail.vue
index 8835ae0..d1e2622 100644
--- a/src/views/user/ab98/detail.vue
+++ b/src/views/user/ab98/detail.vue
@@ -164,7 +164,15 @@ async function fetchAvailableTags() {
pageNum: 1,
pageSize: 100
});
- availableTags.value = data.rows;
+ // 过滤掉用户已经拥有的标签(如果用户标签已加载)
+ if (tags.value.length > 0) {
+ const userTagIds = tags.value.map(tag => tag.tagId);
+ console.log('userTagIds:', userTagIds);
+ console.log('availableTags before filter:', data.rows);
+ availableTags.value = data.rows.filter(tag => !userTagIds.includes(tag.id));
+ } else {
+ availableTags.value = data.rows;
+ }
} catch (error) {
console.error('Failed to fetch available tags:', error);
}
@@ -190,6 +198,8 @@ async function handleAddTag() {
showAddTagDialog.value = false;
addTagForm.value.tagId = null;
await fetchUserTags();
+ // 重新获取可用标签列表,过滤掉用户新添加的标签
+ await fetchAvailableTags();
ElMessage.success('标签添加成功');
} catch (error) {
ElMessage.error('标签添加失败');
@@ -256,16 +266,24 @@ async function handleShowAddTagDialog() {
{{ (userInfo as Ab98UserDetailDTO).sex }}
{{ userInfo.tel }}
- {{ (userInfo as Ab98UserDetailDTO).idnum }}
+ {{ (userInfo as Ab98UserDetailDTO).idnum }}
{{ (userInfo as Ab98UserDetailDTO).address }}
{{ (userInfo as WxUserDTO).openid }}
{{ (userInfo as WxUserDTO).nickName }}
{{ userInfo.tel }}
- {{ formatFenToYuan((userInfo as WxUserDTO).wxBalance)
- }}
+
+
+
+
+ {{ tag.tagName }}
+
+
+
添加标签
+
+
@@ -291,20 +309,9 @@ async function handleShowAddTagDialog() {
{{ formatFenToYuan((userInfo as Ab98UserDetailDTO).balance)
- }}
+ }}
{{ formatFenToYuan((userInfo as Ab98UserDetailDTO).useBalance)
- }}
-
-
-
-
- {{ tag.tagName }}
-
-
-
添加标签
-
-
+ }}
@@ -312,10 +319,8 @@ async function handleShowAddTagDialog() {
{{ (userInfo as WxUserDTO).wxUserId }}
{{ openid }}
{{ userInfo.createTime }}
- {{ formatFenToYuan((userInfo as WxUserDTO).wxBalance)
- }}
{{ (userInfo as WxUserDTO).remark || '无'
- }}
+ }}
@@ -403,7 +408,7 @@ async function handleShowAddTagDialog() {
{{ row.createTime ? new Date(row.createTime).toLocaleString() : '-'
- }}
+ }}
\ No newline at end of file
diff --git a/src/views/user/ab98/index.vue b/src/views/user/ab98/index.vue
index cf02b47..eeb85cb 100644
--- a/src/views/user/ab98/index.vue
+++ b/src/views/user/ab98/index.vue
@@ -12,7 +12,7 @@ import Refresh from "@iconify-icons/ep/refresh";
import Plus from "@iconify-icons/ep/plus";
import { useRouter } from "vue-router";
import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
-import { getAb98UserTagNamesApi } from "@/api/ab98/tag";
+import { getMembershipTagListApi, type MembershipTagQuery } from "@/api/membership/membershipTag";
import { formatFenToYuan } from "@/utils/currency";
defineOptions({
@@ -22,13 +22,13 @@ defineOptions({
const router = useRouter();
const formRef = ref();
const wxStore = useWxStore();
-const tagOptions = ref([]);
-const searchFormParams = reactive({
+const tagOptions = ref<{ label: string; value: number }[]>([]);
+const searchFormParams = reactive({
corpid: wxStore.corpid || "",
name: undefined,
tel: undefined,
idnum: undefined,
- tagName: undefined,
+ tagIds: undefined,
hasAb98UserId: undefined,
search: undefined
});
@@ -62,8 +62,16 @@ async function onSearch() {
async function getList() {
CommonUtils.fillPaginationParams(searchFormParams, pagination);
+ // 处理标签ID数组转换为逗号分隔的字符串
+ const params = { ...searchFormParams };
+ if (params.tagIds && Array.isArray(params.tagIds) && params.tagIds.length > 0) {
+ params.tagIds = params.tagIds.join(',');
+ } else {
+ Reflect.deleteProperty(params, 'tagIds');
+ }
+
pageLoading.value = true;
- const { data } = await getAb98UserListApiWithWx(searchFormParams).finally(
+ const { data } = await getAb98UserListApiWithWx(params).finally(
() => {
pageLoading.value = false;
}
@@ -98,6 +106,7 @@ const resetForm = formEl => {
if (!formEl) return;
formEl.resetFields();
searchFormParams.hasAb98UserId = undefined;
+ searchFormParams.tagIds = undefined;
onSearch();
};
@@ -172,10 +181,26 @@ const addMemberRules = reactive({
onMounted(() => {
getList();
- getAb98UserTagNamesApi().then(res => {
- tagOptions.value = res.data;
+ getMembershipTagListApi({ corpid: wxStore.corpid || "" }).then(res => {
+ tagOptions.value = res.data.rows.map(tag => ({
+ label: tag.name || '',
+ value: tag.id || 0
+ }));
});
-})
+});
+
+const getIconByName = (name: string) => {
+ switch (name) {
+ case 'Search':
+ return useRenderIcon(Search);
+ case 'Refresh':
+ return useRenderIcon(Refresh);
+ case 'Plus':
+ return useRenderIcon(Plus);
+ default:
+ return '';
+ }
+}
@@ -187,11 +212,12 @@ onMounted(() => {
-
+
@@ -200,20 +226,20 @@ onMounted(() => {
-
+
搜索
-
+
重置
-
- 添加会员
+
+ 关联会员
@@ -224,8 +250,8 @@ onMounted(() => {
:xs="24" :sm="12" :md="8" :lg="6">
-
-
+
+
-
-
+
+