hookehuyr

feat(recall): 添加用户召回功能相关接口和查询页面

新增召回旧用户相关API接口,包括登录、搜索历史活动、海报配置等
修改ID查询页面,增加姓名和手机号输入字段及验证
/*
* @Date: 2025-12-19 10:43:09
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-12-24 16:01:49
* @FilePath: /mlaj/src/api/recall_users.js
* @Description: 引入外部接口, 召回旧用户相关接口
*/
import { fn, fetch } from './fn';
const Api = {
USER_LOGIN: '/srv/?a=user_login',
USER_SEARCH_OLD_ACTIVITY: '/srv/?a=desk_calendar&t=search_old_activity',
USER_GET_POSTER: '/srv/?a=desk_calendar&t=get_poster',
USER_EDIT_POSTER: '/srv/?a=desk_calendar&t=edit_poster',
}
/**
* @description: 用户登录
* @param: mobile 手机号
* @param: password 用户密码
* @return: data: { user_info 用户信息 }
*/
export const loginAPI = (params) => fn(fetch.post(Api.USER_LOGIN, params));
/**
* @description: 搜索历史活动
* @param: name 姓名
* @param: mobile 手机号
* @param: idcard 身份证号
* @return: data: { payment_qty 报名学员的次数, volunteers_qty 报名义工的次数, record_date 注册时间, last_activity_date 最后登录时间,
* campaign_info 活动列表 [{ stu_uid 学员ID, campaign_id 活动ID, campaign_name 活动名称, beg_day 活动开始时间, end_day 活动结束时间,
* address 活动地址, campaign_type 活动类型, campaign_year 活动年份, customer_base 活动要求, fee_level 收费类型, fee_stu 学员费用,
* fee_desc 收费描述, create_time 创建时间 }]
* }
*/
export const searchOldActivityAPI = (params) => fn(fetch.get(Api.USER_SEARCH_OLD_ACTIVITY, params));
/**
* @description: 查询海报配置
* @param: stu_uid 学员ID
* @param: campaign_id 活动ID
* @return: data: { background_image 海报背景图URL, qrcode 二维码 }
*/
export const getPosterAPI = (params) => fn(fetch.get(Api.USER_GET_POSTER, params));
/**
* @description: 编辑海报配置
* @param: campaign_id 活动ID
* @param: background_image 海报背景图URL
*/
export const editPosterAPI = (params) => fn(fetch.post(Api.USER_EDIT_POSTER, params));
......@@ -3,19 +3,23 @@
<!-- Starry Background -->
<StarryBackground :bg-image="bgImg" />
<!-- <div class="mt-5 flex flex-col items-center z-10 w-full px-8 text-center">
<h1 class="text-white text-3xl font-bold tracking-wider mb-3 drop-shadow-lg">查询信息</h1>
<p class="text-white/80 text-sm tracking-wide font-medium">请确认和补全您的个人信息</p>
</div> -->
<!-- Main Content Card -->
<div class="w-full px-6 mt-10 z-10">
<div class="w-full px-6 mt-5 z-10">
<FrostedGlass class="p-6 !rounded-2xl !border-white/20 !shadow-none" :bg-opacity="10" blur-level="md">
<!-- Illustration -->
<div class="flex justify-center mb-2">
<!-- Placeholder for the illustration -->
<!-- <div class="flex justify-center mb-2">
<img :src="emptyStateImg" class="w-32 h-32 object-contain" alt="No Data" />
</div>
</div> -->
<!-- Description Text -->
<p class="text-[#FFDD01] text-center text-sm mb-6 leading-relaxed tracking-wide">
时光机没有找到您的历史活动信息,<br />
试试输入活动报名时登记的身份证号吧~
试试输入活动报名时登记的身份信息吧~
</p>
<!-- Dashed Separator -->
......@@ -23,14 +27,43 @@
<!-- ID Card Input Section -->
<div class="space-y-4">
<label class="block text-white font-bold text-lg tracking-wide">身份证号</label>
<van-field
v-model="idCard"
placeholder="请输入您的身份证号"
class="custom-input rounded-lg !bg-white/10 !text-white !border-[1px] !border-solid !border-[rgba(255,255,255,0.57)] !p-3"
:border="false"
clearable
/>
<!-- Name Input -->
<div>
<label class="block text-white font-bold text-lg tracking-wide mb-2">姓名</label>
<van-field
v-model="name"
placeholder="请输入您的姓名"
class="custom-input rounded-lg !bg-white/10 !text-white !border-[1px] !border-solid !border-[rgba(255,255,255,0.57)] !p-3"
:border="false"
clearable
/>
</div>
<!-- Phone Input -->
<div>
<label class="block text-white font-bold text-lg tracking-wide mb-2">手机号</label>
<van-field
v-model="phone"
type="tel"
maxlength="11"
placeholder="请输入您的手机号"
class="custom-input rounded-lg !bg-white/10 !text-white !border-[1px] !border-solid !border-[rgba(255,255,255,0.57)] !p-3"
:border="false"
clearable
/>
</div>
<!-- ID Card Input -->
<div>
<label class="block text-white font-bold text-lg tracking-wide mb-2">身份证号</label>
<van-field
v-model="idCard"
placeholder="请输入您的身份证号"
class="custom-input rounded-lg !bg-white/10 !text-white !border-[1px] !border-solid !border-[rgba(255,255,255,0.57)] !p-3"
:border="false"
clearable
/>
</div>
<!-- Notes -->
<div class="space-y-4" style="margin-top: 2rem;">
......@@ -79,6 +112,8 @@ const route = useRoute()
const router = useRouter()
useTitle('身份证号查询')
const name = ref('')
const phone = ref('')
const idCard = ref('44030619900101001X')
// ID Card Validation
......@@ -89,6 +124,21 @@ const validateIdCard = (id) => {
}
const handleConfirm = () => {
if (!name.value) {
showToast('请输入姓名')
return
}
if (!phone.value) {
showToast('请输入手机号')
return
}
if (!/^1[3-9]\d{9}$/.test(phone.value)) {
showToast('请输入正确的手机号')
return
}
if (!idCard.value) {
showToast('请输入身份证号')
return
......