|
@@ -1,7 +1,7 @@
|
|
|
<template>
|
|
<template>
|
|
|
<view class="recommend-page">
|
|
<view class="recommend-page">
|
|
|
<view class="toolbar">
|
|
<view class="toolbar">
|
|
|
- <button size="mini" class="tool-btn refresh-btn" @click="refresh"><text class="icon">⟳</text><text>换一批</text></button>
|
|
|
|
|
|
|
+ <button size="mini" class="tool-btn refresh-btn" @click="changeBatch"><text class="icon">⟳</text><text>换一批</text></button>
|
|
|
<button size="mini" class="tool-btn filter-btn" @click="openFilter"><text class="icon">🔍</text><text>筛选</text></button>
|
|
<button size="mini" class="tool-btn filter-btn" @click="openFilter"><text class="icon">🔍</text><text>筛选</text></button>
|
|
|
</view>
|
|
</view>
|
|
|
|
|
|
|
@@ -21,14 +21,6 @@
|
|
|
<view class="sheet-handle"></view>
|
|
<view class="sheet-handle"></view>
|
|
|
<view class="sheet-title">精确筛选</view>
|
|
<view class="sheet-title">精确筛选</view>
|
|
|
<view class="sheet-body">
|
|
<view class="sheet-body">
|
|
|
- <view class="field">
|
|
|
|
|
- <text class="field-label">性别</text>
|
|
|
|
|
- <view class="seg">
|
|
|
|
|
- <view :class="['seg-item', query.gender===null?'active':'']" @click="setGender(null)">不限</view>
|
|
|
|
|
- <view :class="['seg-item', query.gender===1?'active':'']" @click="setGender(1)">男</view>
|
|
|
|
|
- <view :class="['seg-item', query.gender===2?'active':'']" @click="setGender(2)">女</view>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
<view class="field two">
|
|
<view class="field two">
|
|
|
<text class="field-label">年龄</text>
|
|
<text class="field-label">年龄</text>
|
|
|
<input class="ipt" type="number" v-model.number="query.ageMin" placeholder="最小" />
|
|
<input class="ipt" type="number" v-model.number="query.ageMin" placeholder="最小" />
|
|
@@ -201,7 +193,7 @@
|
|
|
<scroll-view scroll-y class="list">
|
|
<scroll-view scroll-y class="list">
|
|
|
<view v-if="loading" class="skeleton">加载中...</view>
|
|
<view v-if="loading" class="skeleton">加载中...</view>
|
|
|
<view v-else>
|
|
<view v-else>
|
|
|
- <view v-for="(u, idx) in list" :key="u.userId || idx" class="card">
|
|
|
|
|
|
|
+ <view v-for="(u, idx) in filteredList" :key="u.userId || idx" class="card">
|
|
|
<image :src="u.avatarUrl || '/static/close.png'" class="avatar" mode="aspectFill" @error="onImgErr(idx)"/>
|
|
<image :src="u.avatarUrl || '/static/close.png'" class="avatar" mode="aspectFill" @error="onImgErr(idx)"/>
|
|
|
<view class="main" @click="showUserDetailByIndex(idx)">
|
|
<view class="main" @click="showUserDetailByIndex(idx)">
|
|
|
<view class="row">
|
|
<view class="row">
|
|
@@ -218,7 +210,7 @@
|
|
|
<text v-if="u.star" class="tag">{{ u.star }}</text>
|
|
<text v-if="u.star" class="tag">{{ u.star }}</text>
|
|
|
<text v-if="u.animal" class="tag">{{ u.animal }}</text>
|
|
<text v-if="u.animal" class="tag">{{ u.animal }}</text>
|
|
|
<text v-if="u.jobTitle" class="tag">{{ u.jobTitle }}</text>
|
|
<text v-if="u.jobTitle" class="tag">{{ u.jobTitle }}</text>
|
|
|
- <text v-for="t in parseHobby(u.hobby)" :key="t" class="tag">{{ t }}</text>
|
|
|
|
|
|
|
+ <text v-for="(t, tIdx) in parseHobby(u.hobby)" :key="`hobby-${u.userId}-${tIdx}`" class="tag">{{ t }}</text>
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
|
<view class="actions">
|
|
<view class="actions">
|
|
@@ -266,10 +258,12 @@ export default {
|
|
|
list: [],
|
|
list: [],
|
|
|
loading: false,
|
|
loading: false,
|
|
|
oppoOnly: 1,
|
|
oppoOnly: 1,
|
|
|
|
|
+ currentUserId: null, // 当前登录用户ID
|
|
|
|
|
+ currentUserGender: null, // 当前登录用户性别
|
|
|
userDetail: null, // 用户详细信息
|
|
userDetail: null, // 用户详细信息
|
|
|
- query: { userId: null, gender: null, ageMin: null, ageMax: null, heightMin: null, heightMax: null, provinceId: null, cityId: null, areaId: null, educationMin: null, salaryMin: null, star: null, animal: null, hobbyTags: [], limit: 20, offset: 0 },
|
|
|
|
|
|
|
+ shownUserIds: [], // 已显示过的用户ID列表(用于换一批功能)
|
|
|
|
|
+ query: { userId: null, ageMin: null, ageMax: null, heightMin: null, heightMax: null, provinceId: null, cityId: null, areaId: null, educationMin: null, salaryMin: null, star: null, animal: null, hobbyTags: [], limit: 10, offset: 0 },
|
|
|
hobbyInput: '',
|
|
hobbyInput: '',
|
|
|
- genderOptions: [{label:'不限', value:null},{label:'男', value:1},{label:'女', value:2}],
|
|
|
|
|
educationOptions: [
|
|
educationOptions: [
|
|
|
{label:'不限', value:null},{label:'高中及以下', value:1},{label:'大专', value:2},{label:'本科', value:3},{label:'硕士', value:4},{label:'博士', value:5}
|
|
{label:'不限', value:null},{label:'高中及以下', value:1},{label:'大专', value:2},{label:'本科', value:3},{label:'硕士', value:4},{label:'博士', value:5}
|
|
|
],
|
|
],
|
|
@@ -292,18 +286,112 @@ export default {
|
|
|
computed: {
|
|
computed: {
|
|
|
unreadCount() {
|
|
unreadCount() {
|
|
|
return this.$store.getters.getTotalUnread || 0;
|
|
return this.$store.getters.getTotalUnread || 0;
|
|
|
|
|
+ },
|
|
|
|
|
+ // 过滤后的推荐列表:排除当前用户和未完善性别信息的用户
|
|
|
|
|
+ filteredList() {
|
|
|
|
|
+ return this.list.filter(user => {
|
|
|
|
|
+ // 排除当前用户本身
|
|
|
|
|
+ if (user.userId && this.currentUserId && user.userId === this.currentUserId) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 排除未完善性别信息的用户(gender为null或0)
|
|
|
|
|
+ if (!user.gender || user.gender === 0) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 如果当前用户性别已设置,只显示异性
|
|
|
|
|
+ if (this.currentUserGender && this.currentUserGender !== 0) {
|
|
|
|
|
+ if (user.gender === this.currentUserGender) {
|
|
|
|
|
+ return false; // 排除同性
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- onLoad() { this.refresh() },
|
|
|
|
|
|
|
+ async onLoad() {
|
|
|
|
|
+ await this.loadCurrentUserInfo();
|
|
|
|
|
+ this.refresh();
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ // 页面显示时重新加载用户信息和推荐列表
|
|
|
|
|
+ async onShow() {
|
|
|
|
|
+ console.log('推荐页面显示,重新加载用户信息和推荐列表');
|
|
|
|
|
+ // 重新加载当前用户信息(可能在其他页面修改了性别)
|
|
|
|
|
+ const genderChanged = await this.loadCurrentUserInfo();
|
|
|
|
|
+
|
|
|
|
|
+ // 如果性别发生变化,或者列表为空,则刷新推荐列表
|
|
|
|
|
+ if (genderChanged || this.list.length === 0) {
|
|
|
|
|
+ console.log('性别发生变化或列表为空,刷新推荐列表');
|
|
|
|
|
+ console.log('当前用户性别:', this.currentUserGender);
|
|
|
|
|
+ // 性别变化时,清空已显示列表,重新开始
|
|
|
|
|
+ if (genderChanged) {
|
|
|
|
|
+ this.shownUserIds = [];
|
|
|
|
|
+ }
|
|
|
|
|
+ this.refresh(false);
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
methods: {
|
|
methods: {
|
|
|
|
|
+ // 加载当前用户信息
|
|
|
|
|
+ async loadCurrentUserInfo() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const storedUserId = uni.getStorageSync('userId');
|
|
|
|
|
+ if (storedUserId) {
|
|
|
|
|
+ this.currentUserId = parseInt(storedUserId);
|
|
|
|
|
+
|
|
|
|
|
+ // 优先从storage中获取用户信息(包括性别)
|
|
|
|
|
+ const storedUserInfo = uni.getStorageSync('userInfo');
|
|
|
|
|
+ const oldGender = this.currentUserGender;
|
|
|
|
|
+
|
|
|
|
|
+ if (storedUserInfo && storedUserInfo.gender !== undefined && storedUserInfo.gender !== null) {
|
|
|
|
|
+ this.currentUserGender = parseInt(storedUserInfo.gender);
|
|
|
|
|
+ console.log('从storage获取当前用户性别:', this.currentUserGender);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 总是从API获取最新的用户信息,确保性别信息是最新的
|
|
|
|
|
+ try {
|
|
|
|
|
+ const userInfo = await api.user.getDetailInfo(this.currentUserId);
|
|
|
|
|
+ if (userInfo && userInfo.gender !== undefined && userInfo.gender !== null) {
|
|
|
|
|
+ const newGender = parseInt(userInfo.gender);
|
|
|
|
|
+ if (newGender !== this.currentUserGender) {
|
|
|
|
|
+ console.log('检测到性别变化:', '旧性别:', this.currentUserGender, '新性别:', newGender);
|
|
|
|
|
+ this.currentUserGender = newGender;
|
|
|
|
|
+ // 更新storage中的用户信息
|
|
|
|
|
+ if (storedUserInfo) {
|
|
|
|
|
+ storedUserInfo.gender = this.currentUserGender;
|
|
|
|
|
+ uni.setStorageSync('userInfo', storedUserInfo);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.currentUserGender = newGender;
|
|
|
|
|
+ console.log('从API获取当前用户性别:', this.currentUserGender);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ console.error('获取当前用户信息失败:', e);
|
|
|
|
|
+ // API失败时,如果storage中有性别信息,使用storage中的
|
|
|
|
|
+ if (!this.currentUserGender && storedUserInfo && storedUserInfo.gender !== undefined && storedUserInfo.gender !== null) {
|
|
|
|
|
+ this.currentUserGender = parseInt(storedUserInfo.gender);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ console.log('最终当前用户ID:', this.currentUserId, '性别:', this.currentUserGender);
|
|
|
|
|
+
|
|
|
|
|
+ // 返回性别是否发生变化
|
|
|
|
|
+ return oldGender !== this.currentUserGender;
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ console.error('加载当前用户信息失败:', e);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
// 切换选项卡
|
|
// 切换选项卡
|
|
|
switchToTab(tab) {
|
|
switchToTab(tab) {
|
|
|
this.currentTab = tab
|
|
this.currentTab = tab
|
|
|
if (tab === 'recommend') {
|
|
if (tab === 'recommend') {
|
|
|
// 保持在当前推荐页面,刷新推荐列表
|
|
// 保持在当前推荐页面,刷新推荐列表
|
|
|
console.log('切换到推荐页面')
|
|
console.log('切换到推荐页面')
|
|
|
- this.refresh()
|
|
|
|
|
|
|
+ this.refresh(false)
|
|
|
} else if (tab === 'match') {
|
|
} else if (tab === 'match') {
|
|
|
// 跳转到匹配页面
|
|
// 跳转到匹配页面
|
|
|
console.log('切换到在线匹配')
|
|
console.log('切换到在线匹配')
|
|
@@ -331,22 +419,76 @@ export default {
|
|
|
uni.redirectTo({ url: tabPages[tab] })
|
|
uni.redirectTo({ url: tabPages[tab] })
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
- async refresh() {
|
|
|
|
|
|
|
+ async refresh(isChangeBatch = false) {
|
|
|
this.loading = true
|
|
this.loading = true
|
|
|
try {
|
|
try {
|
|
|
- const storedUserId = uni.getStorageSync('userId'); const userId = storedUserId ? parseInt(storedUserId) : 1
|
|
|
|
|
|
|
+ // 确保已加载当前用户信息
|
|
|
|
|
+ if (!this.currentUserId || this.currentUserGender === null || this.currentUserGender === undefined) {
|
|
|
|
|
+ await this.loadCurrentUserInfo();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const userId = this.currentUserId || parseInt(uni.getStorageSync('userId') || '1');
|
|
|
|
|
+
|
|
|
|
|
+ console.log('刷新推荐列表 - 当前用户ID:', userId, '性别:', this.currentUserGender, '换一批:', isChangeBatch);
|
|
|
|
|
+
|
|
|
// 如果没有筛选,走默认接口;有筛选,调用 search
|
|
// 如果没有筛选,走默认接口;有筛选,调用 search
|
|
|
if (!this.hasFilter()) {
|
|
if (!this.hasFilter()) {
|
|
|
- const data = await api.recommend.getUsers({ userId, oppoOnly: this.oppoOnly, limit: 20 })
|
|
|
|
|
- const seen = new Set(); const merged = []
|
|
|
|
|
- for (const it of (data || [])) { if (!seen.has(it.userId)) { seen.add(it.userId); merged.push(it) } }
|
|
|
|
|
- this.list = merged.map(it=>({ ...it, avatarUrl: this.getSafeAvatar(it.avatarUrl) }))
|
|
|
|
|
|
|
+ // 如果是换一批,传递已显示的用户ID列表
|
|
|
|
|
+ let excludeIdsParam = '';
|
|
|
|
|
+ if (isChangeBatch && this.shownUserIds.length > 0) {
|
|
|
|
|
+ excludeIdsParam = this.shownUserIds.join(',');
|
|
|
|
|
+ console.log('换一批 - 排除已显示的用户ID:', excludeIdsParam);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 每页显示10个推荐用户
|
|
|
|
|
+ const params = { userId, oppoOnly: 1, limit: 10 };
|
|
|
|
|
+ if (excludeIdsParam) {
|
|
|
|
|
+ params.excludeIds = excludeIdsParam;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const data = await api.recommend.getUsers(params);
|
|
|
|
|
+ console.log('推荐接口返回数据数量:', data ? data.length : 0, '数据:', data);
|
|
|
|
|
+
|
|
|
|
|
+ // 如果换一批时返回的数据为空或很少,说明所有用户都显示过了,重新开始
|
|
|
|
|
+ if (isChangeBatch && (!data || data.length === 0)) {
|
|
|
|
|
+ console.log('所有用户都已显示过,重新开始');
|
|
|
|
|
+ this.shownUserIds = []; // 清空已显示列表
|
|
|
|
|
+ // 重新获取,不排除任何用户
|
|
|
|
|
+ const newData = await api.recommend.getUsers({ userId, oppoOnly: 1, limit: 10 });
|
|
|
|
|
+ if (newData && newData.length > 0) {
|
|
|
|
|
+ this.processRecommendData(newData, userId);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (data && data.length > 0) {
|
|
|
|
|
+ this.processRecommendData(data, userId);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.list = [];
|
|
|
|
|
+ if (isChangeBatch) {
|
|
|
|
|
+ uni.showToast({ title: '暂无更多推荐', icon: 'none' });
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
} else {
|
|
} else {
|
|
|
- this.query.userId = userId; this.query.limit = 20; this.query.offset = 0
|
|
|
|
|
|
|
+ this.query.userId = userId; this.query.limit = 10; this.query.offset = 0
|
|
|
|
|
+ // 不设置query.gender,让后端根据当前用户性别自动推荐异性
|
|
|
const payload = this.buildQueryPayload()
|
|
const payload = this.buildQueryPayload()
|
|
|
const data = await api.recommend.search(payload)
|
|
const data = await api.recommend.search(payload)
|
|
|
const arr = Array.isArray(data) ? data : []
|
|
const arr = Array.isArray(data) ? data : []
|
|
|
- this.list = arr.map(it=>({ ...it, avatarUrl: this.getSafeAvatar(it.avatarUrl) }))
|
|
|
|
|
|
|
+ // 再次过滤:排除当前用户和未完善性别信息的用户
|
|
|
|
|
+ this.list = arr
|
|
|
|
|
+ .filter(it => {
|
|
|
|
|
+ // 排除当前用户本身
|
|
|
|
|
+ if (!it.userId || it.userId === userId) return false;
|
|
|
|
|
+ // 排除未完善性别信息的用户
|
|
|
|
|
+ if (!it.gender || it.gender === 0) return false;
|
|
|
|
|
+ // 如果当前用户性别已设置,只保留异性
|
|
|
|
|
+ if (this.currentUserGender && this.currentUserGender !== 0) {
|
|
|
|
|
+ if (it.gender === this.currentUserGender) return false; // 排除同性
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ })
|
|
|
|
|
+ .map(it=>({ ...it, avatarUrl: this.getSafeAvatar(it.avatarUrl) }))
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
const msg = (e && (e.message || e.msg)) ? String(e.message || e.msg) : '获取推荐失败'
|
|
const msg = (e && (e.message || e.msg)) ? String(e.message || e.msg) : '获取推荐失败'
|
|
@@ -354,15 +496,55 @@ export default {
|
|
|
uni.showToast({ title: msg, icon: 'none' })
|
|
uni.showToast({ title: msg, icon: 'none' })
|
|
|
} finally { this.loading = false }
|
|
} finally { this.loading = false }
|
|
|
},
|
|
},
|
|
|
|
|
+
|
|
|
|
|
+ // 处理推荐数据:过滤并记录已显示的用户ID
|
|
|
|
|
+ processRecommendData(data, userId) {
|
|
|
|
|
+ const seen = new Set();
|
|
|
|
|
+ const merged = [];
|
|
|
|
|
+
|
|
|
|
|
+ for (const it of (data || [])) {
|
|
|
|
|
+ // 过滤:排除当前用户和未完善性别信息的用户
|
|
|
|
|
+ if (!it.userId || it.userId === userId || !it.gender || it.gender === 0) {
|
|
|
|
|
+ console.log('过滤用户:', it.userId, '原因: 当前用户或性别未完善');
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 如果当前用户性别已设置,只保留异性
|
|
|
|
|
+ if (this.currentUserGender && this.currentUserGender !== 0) {
|
|
|
|
|
+ if (it.gender === this.currentUserGender) {
|
|
|
|
|
+ console.log('过滤用户:', it.userId, '原因: 同性用户, 当前用户性别:', this.currentUserGender, '推荐用户性别:', it.gender);
|
|
|
|
|
+ continue; // 排除同性
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!seen.has(it.userId)) {
|
|
|
|
|
+ seen.add(it.userId);
|
|
|
|
|
+ merged.push(it);
|
|
|
|
|
+ // 记录已显示的用户ID
|
|
|
|
|
+ if (!this.shownUserIds.includes(it.userId)) {
|
|
|
|
|
+ this.shownUserIds.push(it.userId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ console.log('过滤后的推荐列表数量:', merged.length, '已显示用户总数:', this.shownUserIds.length);
|
|
|
|
|
+ this.list = merged.map(it=>({ ...it, avatarUrl: this.getSafeAvatar(it.avatarUrl) }));
|
|
|
|
|
+ },
|
|
|
|
|
+ // 换一批功能
|
|
|
|
|
+ changeBatch() {
|
|
|
|
|
+ console.log('点击换一批,当前已显示用户数:', this.shownUserIds.length);
|
|
|
|
|
+ this.refresh(true);
|
|
|
|
|
+ },
|
|
|
openFilter(){ this.ensureAreaData(); this.$refs.filterPopup.open('bottom') },
|
|
openFilter(){ this.ensureAreaData(); this.$refs.filterPopup.open('bottom') },
|
|
|
closeFilter(){ this.$refs.filterPopup.close() },
|
|
closeFilter(){ this.$refs.filterPopup.close() },
|
|
|
- applyFilter(){ this.$refs.filterPopup.close(); this.refresh() },
|
|
|
|
|
|
|
+ applyFilter(){
|
|
|
|
|
+ this.$refs.filterPopup.close();
|
|
|
|
|
+ // 应用筛选时,清空已显示列表,重新开始
|
|
|
|
|
+ this.shownUserIds = [];
|
|
|
|
|
+ this.refresh(false);
|
|
|
|
|
+ },
|
|
|
hasFilter(){
|
|
hasFilter(){
|
|
|
const q=this.query
|
|
const q=this.query
|
|
|
- return !!(q.gender||q.ageMin||q.ageMax||q.heightMin||q.heightMax||q.provinceId||q.cityId||q.areaId||q.educationMin||q.salaryMin||q.star||q.animal||this.hobbyInput)
|
|
|
|
|
|
|
+ return !!(q.ageMin||q.ageMax||q.heightMin||q.heightMax||q.provinceId||q.cityId||q.areaId||q.educationMin||q.salaryMin||q.star||q.animal||this.hobbyInput)
|
|
|
},
|
|
},
|
|
|
- genderText(v){ if(v===1)return '男'; if(v===2)return '女'; return '不限' },
|
|
|
|
|
- setGender(v){ this.query.gender=v },
|
|
|
|
|
onEduChange(e){
|
|
onEduChange(e){
|
|
|
const item = this.educationOptions[e.detail.value];
|
|
const item = this.educationOptions[e.detail.value];
|
|
|
this.query.educationMin = item.value;
|
|
this.query.educationMin = item.value;
|
|
@@ -400,7 +582,7 @@ export default {
|
|
|
return q
|
|
return q
|
|
|
},
|
|
},
|
|
|
resetFilter(){
|
|
resetFilter(){
|
|
|
- this.query={...this.query, gender:null, ageMin:null, ageMax:null, heightMin:null, heightMax:null, provinceId:null, cityId:null, areaId:null, educationMin:null, salaryMin:null, star:null, animal:null};
|
|
|
|
|
|
|
+ this.query={...this.query, ageMin:null, ageMax:null, heightMin:null, heightMax:null, provinceId:null, cityId:null, areaId:null, educationMin:null, salaryMin:null, star:null, animal:null};
|
|
|
this.hobbyInput=''; this.currentStarText=''; this.currentAnimalText='';
|
|
this.hobbyInput=''; this.currentStarText=''; this.currentAnimalText='';
|
|
|
this.areaDisplayText='';
|
|
this.areaDisplayText='';
|
|
|
this.multiAreaIndex=[0, 0, 0];
|
|
this.multiAreaIndex=[0, 0, 0];
|