diff --git a/src/api/person/index.ts b/src/api/person/index.ts index c327a88ab..423663306 100644 --- a/src/api/person/index.ts +++ b/src/api/person/index.ts @@ -72,4 +72,12 @@ export const PersonApi = { getPersonNoFamilyid: async (params: any) => { return await request.get({ url: `/system/person/page-no-familyid`, params }) }, + + // 更新用户家庭信息 + updateFamilyInfo: async (id: number, familyrelation: number) => { + return await request.put({ + url: `/system/person/update-family-info`, + data: { id, familyrelation } + }) + } } diff --git a/src/views/person/Personmember.vue b/src/views/person/Personmember.vue index c32259874..d839dea84 100644 --- a/src/views/person/Personmember.vue +++ b/src/views/person/Personmember.vue @@ -9,10 +9,17 @@ 添加成员 + + 创建家庭 + 当前成员:{{ memberList.length }} 人 @@ -52,30 +59,37 @@ import { dateFormatter } from '@/utils/formatTime' import PersonForm from './PersonFrom.vue' import MemberDrawer from './memberdrawer.vue' import { PersonApi, PersonVO } from '@/api/person' -import { ElMessage } from 'element-plus' +import { ElMessage, ElMessageBox } from 'element-plus' defineOptions({ name: 'PersonMember' }) - +// 成员列表弹窗 const dialogVisible = ref(false) +// 添加成员抽屉 const showTransfer = ref(false) +// 加载中 const loading = ref(false) +// 成员列表 const memberList = ref([]) +// 当前成员 const currentMember = ref(null) +// 表单引用 const formRef = ref() +// 家庭成员接口 interface FamilyMember { - id: number - name: string - mobile: string - age: number - gender: string - relation: number - address: string - createTime: string - familyid: string - familyrelation: number + id: number // 编号 + name: string // 姓名 + mobile: string // 手机号码 + age: number // 年龄 + gender: string // 性别 + relation: number // 关系 + address: string // 地址 + createTime: string // 创建时间 + familyid: string // 家庭组号 + familyrelation: number // 家庭关系 } +// 打开成员列表弹窗 const open = (member: FamilyMember) => { currentMember.value = member memberList.value = [] // 重置成员列表 @@ -83,6 +97,7 @@ const open = (member: FamilyMember) => { getMemberList() } +// 获取成员列表 const getMemberList = async () => { if (!currentMember.value?.familyid) return @@ -106,7 +121,7 @@ const getMemberList = async () => { } } -// 获取家庭关系文本 +// 获取家庭关系文本 1-主号,2-兄弟,3-父亲,4-母亲,5-子女,6-其他 const getFamilyRelation = (relation: number): string => { const relationMap: Record = { 1: '主号', @@ -119,10 +134,30 @@ const getFamilyRelation = (relation: number): string => { return relationMap[relation] || '其他' } +/** 处理添加成员按钮点击 */ +const handleAddMemberClick = () => { + if (!currentMember.value) return + + // 检查是否有家庭组号 + if (!currentMember.value.familyid) { + ElMessage.warning('请先创建家庭后再添加成员') + return + } + + // 有家庭组号,打开抽屉 + showTransfer.value = true +} + /** 添加成员 */ const handleAddMembers = async (members: FamilyMember[]) => { if (!currentMember.value) return + // 检查是否有家庭组号 + if (!currentMember.value.familyid) { + ElMessage.warning('请先创建家庭后再添加成员') + return + } + // 检查添加后是否超过5人限制 if (memberList.value.length + members.length > 5) { ElMessage.warning('家庭成员不能超过5人') @@ -133,12 +168,12 @@ const handleAddMembers = async (members: FamilyMember[]) => { loading.value = true // 调用后端API更新选中成员的家庭组号 for (const member of members) { - await PersonApi.addMembers(member.id, currentMember.value.familyid,member.relation) + await PersonApi.addMembers(member.id, currentMember.value.familyid, member.relation) } // 更新本地列表 - // 更新本地列表,确保 familyrelation 字段正确设置 - const newMembers = members.map(member => ({ + // 更新本地列表,确保 familyrelation 字段正确设置 + const newMembers = members.map(member => ({ ...member, familyrelation: member.relation // 使用 relation 作为 familyrelation })) @@ -173,6 +208,54 @@ const handleRemove = async (row: FamilyMember) => { } } +const handleCreateFamily = async () => { + if (!currentMember.value) return + + // 检查是否已有家庭组号 + if (currentMember.value.familyid) { + ElMessage.warning('该成员已存在家庭组号,不能重复创建家庭') + return + } + + try { + // 添加确认提示 + await ElMessageBox.confirm( + '确定要创建家庭吗?创建后该成员将成为家庭主号。', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + } + ) + + loading.value = true + + // 调用后端接口创建家庭,familyid由后端生成 + const res = await PersonApi.updateFamilyInfo( + currentMember.value.id, + 1 + ) + + // 更新本地数据,使用后端返回的familyid + currentMember.value.familyid = res + currentMember.value.familyrelation = 1 + + // 刷新成员列表 + await getMemberList() + + ElMessage.success('创建家庭成功') + } catch (error) { + if (error === 'cancel') { + return + } + console.error('创建家庭失败:', error) + ElMessage.error('创建家庭失败') + } finally { + loading.value = false + } +} + defineExpose({ open }) @@ -182,10 +265,11 @@ defineExpose({ .mb-15px { display: flex; align-items: center; - justify-content: space-between; + gap: 10px; } .member-count { + margin-left: auto; color: #409EFF; font-size: 14px; } diff --git a/src/views/vip/iphone/components/VisitDialog.vue b/src/views/vip/iphone/components/VisitDialog.vue index ec4ffb023..2db4c428c 100644 --- a/src/views/vip/iphone/components/VisitDialog.vue +++ b/src/views/vip/iphone/components/VisitDialog.vue @@ -1,6 +1,6 @@