From 0c7c2d89b258656e7f611fdbbf8904cc52883963 Mon Sep 17 00:00:00 2001 From: Flow <958079825@qq.com> Date: Fri, 13 Jun 2025 17:04:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=9A=E5=91=98=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/person/index.ts | 2 + src/views/vip/index.vue | 158 ++++++++++++++++++++++------------------ 2 files changed, 88 insertions(+), 72 deletions(-) diff --git a/src/api/person/index.ts b/src/api/person/index.ts index f87537ee..c327a88a 100644 --- a/src/api/person/index.ts +++ b/src/api/person/index.ts @@ -12,6 +12,8 @@ export interface PersonVO { familyid: string // 家庭组号 familyrelation: number // 家庭关系:1-主号,2-兄弟,3-父亲,4-母亲,5-子女,6-其他 isvip: number // 是否会员:0-否,1-是 + vipstarttime: string // VIP开通时间 + vipendtime: string // VIP到期时间 idcard: string // 身份证号 createtime: string // 创建时间 updatetime: string // 更新时间 diff --git a/src/views/vip/index.vue b/src/views/vip/index.vue index a72aaac3..9bb4497f 100644 --- a/src/views/vip/index.vue +++ b/src/views/vip/index.vue @@ -41,21 +41,27 @@ - - - + + + + - + + + + @@ -63,7 +69,7 @@ @@ -122,19 +128,18 @@ import { ref, reactive, onMounted } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import RechargeDialog from './components/RechargeDialog.vue' -import PasswordVerifyDialog from './components/PasswordVerifyDialog.vue' +import { PersonApi } from '@/api/person' +import { getUserProfile } from '@/api/system/user/profile' // 会员列表数据 const memberList = ref([]) const loading = ref(false) const total = ref(0) - +const userProfile = ref() // 查询参数 const queryParams = reactive({ pageNo: 1, pageSize: 10, - name: undefined, - vipStatus: undefined }) const queryFormRef = ref() @@ -146,52 +151,61 @@ const passwordVerifyVisible = ref(false) // 当前选中的会员 const currentMember = ref(null) -// 模拟测试数据 -const mockMembers = [ - { - id: 1, - name: '张三', - phone: '13800138000', - vipStatus: true, - vipExpireDate: '2024-12-31' - }, - { - id: 2, - name: '李四', - phone: '13800138001', - vipStatus: false, - vipExpireDate: '' - }, - { - id: 3, - name: '王五', - phone: '13800138002', - vipStatus: true, - vipExpireDate: '2024-06-30' - } -] +// 计算剩余天数 +const calculateRemainingDays = (endTime, startTime) => { + if (!endTime || !startTime) return '-' + const end = new Date(endTime) + const start = new Date(startTime) + const now = new Date() + + // 计算总天数 + const totalDays = Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)) + // 计算剩余天数 + const remainingDays = Math.ceil((end.getTime() - now.getTime()) / (1000 * 60 * 60 * 24)) + + return remainingDays > 0 ? `${remainingDays}天` : '已过期' +} + +// 格式化日期 +const formatDate = (date) => { + if (!date) return '-' + return new Date(date).toLocaleDateString('zh-CN', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit' + }) +} // 获取会员列表 -const getList = () => { +const getList = async () => { loading.value = true - setTimeout(() => { - // 模拟搜索过滤 - let filteredList = [...mockMembers] - if (queryParams.name) { - filteredList = filteredList.filter(m => m.name.includes(queryParams.name)) + try { + //首先获取用户信息 + userProfile.value = await getUserProfile() + const res = await PersonApi.getPersonPage({ + pageNo: queryParams.pageNo, + pageSize: queryParams.pageSize, + orgid: userProfile.value.dept.id + }) + // 检查返回的数据结构 + if (res) { + memberList.value = res.list + total.value = res.total + console.log(memberList.value) + } else { + memberList.value = [] + total.value = 0 } - if (queryParams.vipStatus !== undefined) { - filteredList = filteredList.filter(m => m.vipStatus === queryParams.vipStatus) - } - - // 模拟分页 - const start = (queryParams.pageNo - 1) * queryParams.pageSize - const end = start + queryParams.pageSize - memberList.value = filteredList.slice(start, end) - total.value = filteredList.length - + } catch (error) { + console.error('获取会员列表失败:', error) + ElMessage.error('获取会员列表失败') + memberList.value = [] + total.value = 0 + } finally { loading.value = false - }, 500) + } } // 搜索按钮操作