|
@@ -8,24 +8,26 @@
|
|
|
</template>
|
|
|
</van-nav-bar>
|
|
|
<div>
|
|
|
- <van-checkbox-group v-model="checked">
|
|
|
+ <van-checkbox-group v-model="checked" ref="checkboxGroup">
|
|
|
<van-cell-group>
|
|
|
<van-swipe-cell
|
|
|
v-for="(item, index) in list"
|
|
|
:key="index"
|
|
|
:disabled="isChoose"
|
|
|
>
|
|
|
- <van-cell
|
|
|
- clickable
|
|
|
- :title="`${item}. 复选框复选框复选框复选框复选框复选框复选框复选框复选框复选框复选框复选框复选框`"
|
|
|
- @click="console.log(1231312312)"
|
|
|
- >
|
|
|
+ <van-cell clickable :title="`${item.id}. ${item.issue}`" @click="">
|
|
|
<template #icon v-if="isChoose">
|
|
|
- <van-checkbox :name="item" class="checkbox" />
|
|
|
+ <van-checkbox :name="item.id" class="checkbox" />
|
|
|
</template>
|
|
|
</van-cell>
|
|
|
<template #right>
|
|
|
- <van-button square style="height: 100%" type="danger" text="删除" />
|
|
|
+ <van-button
|
|
|
+ square
|
|
|
+ style="height: 100%"
|
|
|
+ type="danger"
|
|
|
+ text="删除"
|
|
|
+ @click="deleteClick(item.id)"
|
|
|
+ />
|
|
|
<van-button
|
|
|
square
|
|
|
style="height: 100%"
|
|
@@ -60,6 +62,7 @@
|
|
|
type="danger"
|
|
|
size="small"
|
|
|
:disabled="checked.length == 0"
|
|
|
+ @click="deletesClick"
|
|
|
>删除选中</van-button
|
|
|
>
|
|
|
<van-button
|
|
@@ -74,54 +77,120 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
+<script lang="ts">
|
|
|
+import { onBeforeMount } from "vue";
|
|
|
+import { getQuestionInfoByIds, CollectionAndWrong } from "@/api";
|
|
|
+
|
|
|
+/**
|
|
|
+ * 列表hook
|
|
|
+ */
|
|
|
+const useQuestionList = (type: CollectionAndWrongType.type) => {
|
|
|
+ const QuestionApi = new CollectionAndWrong(type);
|
|
|
+ const questionList = ref<Test.QuestionInfo[]>([]);
|
|
|
+ const collectionList = ref<CollectionAndWrongType.ListRes[]>([]);
|
|
|
+ const pageNum = ref(0);
|
|
|
+ const pageSize = ref(10);
|
|
|
+ /**
|
|
|
+ * 删除已储存的问题,总之很麻烦,不要试图去理解
|
|
|
+ */
|
|
|
+ const deletes = async (ids: number[]) => {
|
|
|
+ const deletesCollectionList = collectionList.value.filter((item) => {
|
|
|
+ return ids.includes(item.questionId);
|
|
|
+ });
|
|
|
+ const deletesIds = deletesCollectionList.map((item) => item.id);
|
|
|
+ const res = await QuestionApi.deletes(deletesIds);
|
|
|
+ //删除完成重新请求数据
|
|
|
+ setData();
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * 设置列表数据
|
|
|
+ */
|
|
|
+ const setData = async () => {
|
|
|
+ const collectionListRes = await QuestionApi.getList({
|
|
|
+ carType: "小车",
|
|
|
+ km: "科目一",
|
|
|
+ pageNum: pageNum.value,
|
|
|
+ pageSize: pageSize.value,
|
|
|
+ });
|
|
|
+ collectionList.value = collectionListRes;
|
|
|
+ const ids = collectionListRes.map((item) => item.questionId);
|
|
|
+ const questions = await getQuestionInfoByIds({
|
|
|
+ ids,
|
|
|
+ });
|
|
|
+ questionList.value = questions.rows;
|
|
|
+ };
|
|
|
+ onBeforeMount(() => {
|
|
|
+ setData();
|
|
|
+ });
|
|
|
+ return {
|
|
|
+ questionList,
|
|
|
+ deletes,
|
|
|
+ };
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
<script setup lang="ts">
|
|
|
-import { nextTick, ref, watch } from "vue";
|
|
|
+import { nextTick, ref, watch, computed } from "vue";
|
|
|
import { useRouter } from "vue-router";
|
|
|
const router = useRouter();
|
|
|
const onClickLeft = () => {
|
|
|
router.back();
|
|
|
};
|
|
|
|
|
|
-const list = ref([1, 2, 3, 4, 5, 6]); //题目列表
|
|
|
+const collection = useQuestionList("collection");
|
|
|
+const wrong = useQuestionList("wrong");
|
|
|
+//当前视图事务
|
|
|
+const currentView = computed(() => {
|
|
|
+ if (isType.value == 0) {
|
|
|
+ return collection;
|
|
|
+ } else {
|
|
|
+ return wrong;
|
|
|
+ }
|
|
|
+});
|
|
|
+//题目列表
|
|
|
+const list = computed(() => {
|
|
|
+ return currentView.value.questionList.value;
|
|
|
+});
|
|
|
+
|
|
|
const isChoose = ref(false); //开启批量选中
|
|
|
const isSelectAll = ref(false); //是否全选
|
|
|
const checked = ref([]); //选中内容
|
|
|
+const checkboxGroup = ref(); //多选框组件实例
|
|
|
const isType = ref(0); //0错题 1收藏
|
|
|
-//切换数据列表
|
|
|
-watch(isType, (val) => {
|
|
|
- list.value = [];
|
|
|
- nextTick(() => {
|
|
|
- list.value = [7, 8, 9, 10, 11, 12];
|
|
|
- });
|
|
|
-});
|
|
|
//选择全选
|
|
|
-watch(isSelectAll, (val) => {
|
|
|
- if (val) {
|
|
|
+watch(isSelectAll, (value) => {
|
|
|
+ if (value) {
|
|
|
selectAll();
|
|
|
} else {
|
|
|
unSelectAll();
|
|
|
}
|
|
|
});
|
|
|
-//全选状态改变
|
|
|
+// //全选状态改变
|
|
|
watch(checked, (val) => {
|
|
|
if (val.length == 0) {
|
|
|
isSelectAll.value = false;
|
|
|
}
|
|
|
- if (val.length == list.value.length) {
|
|
|
+ if (val.length === list.value.length) {
|
|
|
isSelectAll.value = true;
|
|
|
}
|
|
|
});
|
|
|
//全选
|
|
|
const selectAll = () => {
|
|
|
- checked.value = <never[]>list.value;
|
|
|
+ checkboxGroup.value.toggleAll(true);
|
|
|
};
|
|
|
//取消全选
|
|
|
const unSelectAll = () => {
|
|
|
checked.value = [];
|
|
|
};
|
|
|
//单个删除
|
|
|
+const deleteClick = (id: number) => {
|
|
|
+ currentView.value.deletes([id]);
|
|
|
+};
|
|
|
//单个收藏
|
|
|
//批量删除
|
|
|
+const deletesClick = () => {
|
|
|
+ currentView.value.deletes(checked.value);
|
|
|
+};
|
|
|
//批量收藏
|
|
|
</script>
|
|
|
|