This commit is contained in:
2025-04-29 15:53:56 +08:00
parent e3c2051c29
commit 12f54fb7e9
8 changed files with 368 additions and 217 deletions
+65 -51
View File
@@ -16,7 +16,7 @@
v-for="project in itemOptions"
:key="project.id"
class="project-card"
:class="{'project-card--registered': registrationStatus[project.id]?.length}"
:class="{'project-card--registered': registrationStatus.get(project.id)?.length}"
@click="selectProject(project.id)"
>
<view class="project-card__content">
@@ -24,14 +24,14 @@
<view class="project-card__desc">{{ project.description }}</view>
</view>
<view class="project-card__status">
<t-tag v-if="registrationStatus[project.id]?.length" theme="success" variant="light-outline">
已报名 {{ registrationStatus[project.id]?.length }}人
<t-tag v-if="registrationStatus.get(project.id)?.length" theme="success" variant="light-outline">
已报名 {{ registrationStatus.get(project.id)?.length }}人
</t-tag>
<view v-else class="project-card__action">
<t-icon name="chevron-right" color="#999"/>
</view>
</view>
<view v-if="registrationStatus[project.id]?.length" class="project-card__checkmark">
<view v-if="registrationStatus.get(project.id)?.length" class="project-card__checkmark">
<t-icon name="check" color="#52c41a"/>
</view>
</view>
@@ -53,24 +53,19 @@
<t-checkbox-group v-model="selectedMemberIds">
<view
v-for="member in teamMembers"
:key="member.id"
:key="member.userId"
>
<t-checkbox
:value="member.id"
:label="member.userName"
:value="member.userId"
:label="member.userName+'-'+member.sex"
:content="member.unitName"
:disabled="registrationStatus[selectedItemId]?.includes(member.id)"
icon-size="20px"
/>
<view class="member-status" v-if="registrationStatus[selectedItemId]?.includes(member.id)">
已报名
</view>
</view>
</t-checkbox-group>
</view>
<view class="picker-footer">
<t-button block theme="primary" @click="submitRegistration" :disabled="!selectedMemberIds.length">
<t-button block theme="primary" @click="submitRegistration" >
确认报名 ({{ selectedMemberIds.length }}人)
</t-button>
</view>
@@ -116,14 +111,15 @@ const teamMembers = ref([]);
onLoad((option) => {
if (option.id) {
selectActId.value = option.id;
selectActId.value = Number(option.id);
}
});
onMounted(async () => {
await listActs()
await listItems();
listTeamUser()
// fetchRegistrationStatus();
await listTeamUser();
await getApplyUsers();
fetchRegistrationStatus();
});
// 选中的团队成员
@@ -132,8 +128,7 @@ const selectedMemberIds = ref([]);
// 成员选择弹窗显示状态
const showMemberPicker = ref(false);
// 当前项目的报名状态
const registrationStatus = ref({});
// 获取活动列表
async function listActs() {
@@ -146,9 +141,9 @@ async function listActs() {
label: item.title
}
})
if(selectActId.value === null && data.length){
selectActId.value = data[0].id
}
// if(selectActId.value === null && data.length){
// selectActId.value = data[0].id
// }
} else {
Toast.error(msg)
}
@@ -171,61 +166,80 @@ async function listItems() {
}
// 获取团队成员
async function listTeamUser(){
async function listTeamUser() {
try {
const {code, data, msg} = await request.get('/client/item/list-team-user/'+selectActId.value)
const {code, data, msg} = await request.get('/client/item/list-team-user/' + selectActId.value)
if (code === 0) {
teamMembers.value = data;
}else{
} else {
Toast.error(msg)
}
}catch (e){
} catch (e) {
Toast.error(msg)
console.error(e)
}
}
// 当前项目的报名状态
const registrationStatus = ref(new Map());
// 获取报名状态 - 使用静态数据
const fetchRegistrationStatus = async () => {
const fetchRegistrationStatus = () => {
const resultMap = selectedMemberList.value.reduce((acc, item) => {
const key = item.itemId;
if (!acc.has(key)) {
acc.set(key, []);
}
acc.get(key).push(item);
return acc;
}, new Map());
registrationStatus.value = resultMap;
};
// 选择项目
const selectProject = (projectId) => {
selectedItemId.value = projectId;
selectedMemberIds.value = [];
selectedMemberIds.value = selectedMemberList.value.filter(v => v.itemId === projectId).map(v => v.userId)
showMemberPicker.value = true;
};
const selectedMemberList = ref([])
// 每个项目报名的user
const getApplyUsers = async () => {
try {
const {code, data, msg} = await useRequest().post('/client/item/list-apply-user/' + selectActId.value)
if (code === 0) {
selectedMemberList.value = data
} else {
Toast.error(msg)
}
} catch (e) {
Toast.error(e.message)
}
}
// 提交报名 - 使用静态数据模拟
const submitRegistration = async () => {
if (!selectedMemberIds.value.length) {
Toast.warning('请选择团队成员');
return;
}
try {
console.log(selectedMemberIds.value)
console.log(selectedItemId.value)
console.log(selectActId.value)
const teamUser = teamMembers.value.filter(v=>selectedMemberIds.value.includes(v.id))
// const {code, msg} = await request.post('/client/item/sign-up', {
// activityId: selectActId.value,
// itemId: selectedItemId.value,
// userList: selectedMemberIds.value
// })
// if (code === 0) {
// Toast.success('报名成功')
// showMemberPicker.value = false;
// selectedMemberIds.value = []
// }else{
// Toast.error(msg)
// }
}catch (e){
let data = {}
data.activityId = selectActId.value
data.itemId = selectedItemId.value
data.userList = selectedMemberIds.value
const {code, msg} = await useRequest().post('/client/item/sign-up', {...data})
if (code === 0) {
Toast.success('报名成功')
showMemberPicker.value = false;
selectedMemberIds.value = []
await getApplyUsers();
fetchRegistrationStatus();
} else {
Toast.error(msg)
}
} catch (e) {
Toast.error(e.message)
console.error(e)
}
};