components-app/src/views/sort-college.vue

104 lines
2.8 KiB
Vue

<template>
<div class="h-screen flex flex-col">
<HeaderTip :score="score" :batch-name="batchName" :subject-group="subjectGroup" :wishList="wishList" />
<div class="flex-1 h-0 overflow-y-auto">
<virtual-list v-model="wishList" data-key="sort" lock-axis="x" handle=".handle" chosen-class="choose-item">
<template v-slot:item="{ record, index }">
<CollegeItem :college="record" :college-index="index" :score="score" />
</template>
</virtual-list>
</div>
<div class="h-[16rpx] bg-[#f8f8f8]"></div>
<div class="flex items-center pb-safe px-[32rpx] pt-[32rpx] pb-[52rpx]">
<button class="border-none flex-auto bg-[#1580FF] rounded-[8rpx] text-[#fff]! text-[32rpx] font-normal py-[20rpx]" @click="handleSave">
保存
</button>
</div>
</div>
</template>
<script setup lang="ts">
import HeaderTip from "@/components/sort-college/HeaderTip.vue";
import { useUserStore } from "@/store/user";
import VirtualList from "vue-virtual-draglist";
import CollegeItem from "@/components/sort-college/CollegeItem.vue";
import api from "@/api/customAxios";
const userStore = useUserStore();
const vId = ref(0);
const score = ref(0);
const batchName = ref("");
const subjectGroup = ref("");
const locationCode = ref("");
const wishList = ref([]);
const handleSave = () => {
uni.postMessage({
data: {
action: "message",
message: JSON.stringify(wishList.value),
},
});
uni.reLaunch({ url: '/pages-sub/ucenter/wishList/wishList' })
};
const removeCollege = (index:number) => {
wishList.value.splice(index,1)
}
const removeMajor = (index:number,mIndex:number) => {
(wishList.value[index] as {vItems:any[]}).vItems.splice(mIndex,1)
}
provide("sort",{
removeCollege,
removeMajor
})
const getWishList = () => {
api.get(
`https://api.v3.ycymedu.com/api/volunTb/get/${locationCode.value}`,
{ id: vId.value },
(resp: any) => {
if (resp.code == 200) {
wishList.value = resp.result.tbDetails;
}
},
(error: any) => {
console.log(error);
},
);
};
onBeforeMount(() => {
let _mapParams: { [key: string]: any } = {};
let params = decodeURIComponent(location.search).slice(1, location.search.length).split("&");
params.forEach((param) => {
let _param = param.split("=");
_mapParams[_param[0]] = _param[1];
});
vId.value = _mapParams.id;
userStore.setToken(_mapParams.token);
score.value = +_mapParams.score;
batchName.value = _mapParams.batchName;
subjectGroup.value = _mapParams.subjectGroup;
locationCode.value = _mapParams.location;
getWishList();
});
</script>
<style scoped>
.choose-item :deep(.handle) {
color:#1580FF;
}
</style>