|
@@ -0,0 +1,311 @@
|
|
|
+<template>
|
|
|
+ <view>
|
|
|
+ <view class="head" catchtouchmove="true" @touchmove.stop.prevent="() => { }">
|
|
|
+ <My_search :value="content.where.condition" @onSearch="onSearch">
|
|
|
+ <view class="filtrate" v-if="filtrateList.length" hover-class="navigator-hover" @click="openFiltrate">
|
|
|
+ 筛选
|
|
|
+ <text class="iconfont icon-shaixuan" />
|
|
|
+ </view>
|
|
|
+ </My_search>
|
|
|
+ <view class="crumbs">
|
|
|
+ <view class="crumb" v-for="item in crumbs" :key="item.classname">{{ item.classname }}</view>
|
|
|
+ </view>
|
|
|
+ <u-tabs :list="status" :activeStyle="{ fontWeight: 'bold', color: '#C30D23' }" lineColor="#C30D23"
|
|
|
+ keyName="name" @change="statusChange" />
|
|
|
+ </view>
|
|
|
+ <view style="height: 1px;" />
|
|
|
+ <filtrate ref="Filtrate" :filtrateList="filtrateList" @onFiltration="onFiltration" @onInterrupt="onInterrupt" />
|
|
|
+
|
|
|
+ <My_listbox ref="List" @getlist="getList">
|
|
|
+ <view class="list-box">
|
|
|
+ <navigator class="item" v-for="item in list" :key="item.sat_courseware_testheadid"
|
|
|
+ :url="'/packageA/exam/detail?id=' + item.sat_courseware_testheadid">
|
|
|
+ <view class="title u-line-2">{{ item.title || '--' }}</view>
|
|
|
+ <view class="hr" />
|
|
|
+ <view class="bottom">
|
|
|
+ <view>
|
|
|
+ 分数:<text class="score">{{ item.score }}</text>
|
|
|
+ </view>
|
|
|
+ <view>
|
|
|
+ 答题数:{{ item.answerinfo }}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="status" v-if="item.status == '未开始'" style="background:#E3041F;color: #FFFFFF;">
|
|
|
+ 未开始
|
|
|
+ </view>
|
|
|
+ <view class="status" v-else-if="item.status == '进行中'" style="background: #FFF0F2;color: #E3041F;">
|
|
|
+ 进行中
|
|
|
+ </view>
|
|
|
+ <view class="status" v-else-if="item.status == '已完成'" style="background: #EEEEEE;color: #999999;">
|
|
|
+ 已完成
|
|
|
+ </view>
|
|
|
+
|
|
|
+ </navigator>
|
|
|
+ </view>
|
|
|
+ </My_listbox>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ crumbs: [],
|
|
|
+ list: [],
|
|
|
+ "content": {
|
|
|
+ "where": {
|
|
|
+ "condition": "",
|
|
|
+ "status": "",
|
|
|
+ "sat_courseware_classids": [[]]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ filtrateList: [],
|
|
|
+ status: [{
|
|
|
+ name: "全部"
|
|
|
+ }, {
|
|
|
+ name: "未开始"
|
|
|
+ }, {
|
|
|
+ name: "进行中"
|
|
|
+ }, {
|
|
|
+ name: "已完成"
|
|
|
+ }]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onLoad(options) {
|
|
|
+ this.crumbs = [{
|
|
|
+ classname: "考试",
|
|
|
+ parentid: ""
|
|
|
+ }, {
|
|
|
+ classname: "全部",
|
|
|
+ parentid: ''
|
|
|
+ }]
|
|
|
+ this.getType()
|
|
|
+ this.getList(true)
|
|
|
+ uni.setNavigationBarTitle({
|
|
|
+ title: '考试',
|
|
|
+ })
|
|
|
+ },
|
|
|
+ onShow() {
|
|
|
+ this.updateList()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ getType() {
|
|
|
+ this.$Http.basic({
|
|
|
+ "id": "20221102143302",
|
|
|
+ content: {
|
|
|
+ pageSize: 9999,
|
|
|
+ parentid: "",
|
|
|
+ "where": {
|
|
|
+ "isenable": 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }).then(res => {
|
|
|
+ console.log("获取分类列表", res)
|
|
|
+ if (this.cutoff(res.msg)) return;
|
|
|
+ this.filtrateList = [{
|
|
|
+ title: "一级分类",
|
|
|
+ key: '一级分类',//提交时返回的Key
|
|
|
+ showKey: "classname",//显示的key
|
|
|
+ selected: "sat_courseware_classid",//选择时选择的字段
|
|
|
+ value: "",//提交时选中的value
|
|
|
+ defaultVal: "",//返回的默认值
|
|
|
+ isAll: true,
|
|
|
+ interrupt: true,
|
|
|
+ rang: [{ classname: "全部", sat_courseware_classid: "", children: [] }].concat(res.data),//选择的范围
|
|
|
+ }]
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getList(init = false) {
|
|
|
+ if (this.paging(this.content, init)) return;
|
|
|
+ let ids = this.crumbs.map(v => v.parentid).filter(v => v);
|
|
|
+ this.content.where.sat_courseware_classids = ids.length ? [[ids[ids.length - 1]]] : []
|
|
|
+ this.$Http.basic({
|
|
|
+ "id": 20240326133302,
|
|
|
+ content: this.content
|
|
|
+ }).then(res => {
|
|
|
+ this.$refs.List.RefreshToComplete()
|
|
|
+ console.log("获取试卷列表", res)
|
|
|
+ if (this.cutoff(res.msg)) return;
|
|
|
+ this.list = res.pageNumber == 1 ? res.data : this.list.concat(res.data);
|
|
|
+ this.content = this.$refs.List.paging(this.content, res)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ updateList() {
|
|
|
+ if (this.content.pageNumber && this.content.pageNumber >= 2) {
|
|
|
+ let content = this.paging(this.content, true, true)
|
|
|
+ this.$Http.basic({
|
|
|
+ "id": "20240326133302",
|
|
|
+ content
|
|
|
+ }).then(res => {
|
|
|
+ console.log("更新试卷列表", res)
|
|
|
+ if (this.cutoff(res.msg)) return;
|
|
|
+ this.list = res.data;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ openFiltrate() {
|
|
|
+ this.$refs.Filtrate.changeShow();
|
|
|
+ },
|
|
|
+ onSearch(condition) {
|
|
|
+ this.content.where.condition = condition;
|
|
|
+ this.getList(true)
|
|
|
+ },
|
|
|
+ onInterrupt({ item, index, option }) {
|
|
|
+ let filtrateList = this.$refs.Filtrate.list;
|
|
|
+ const i = filtrateList.findIndex(v => v.title == '二级分类');
|
|
|
+ if (option.children.length) {
|
|
|
+ const obj = {
|
|
|
+ title: "二级分类",
|
|
|
+ key: '二级分类',
|
|
|
+ showKey: "classname",
|
|
|
+ selected: "sat_courseware_classid",
|
|
|
+ value: "",
|
|
|
+ defaultVal: "",
|
|
|
+ isAll: true,
|
|
|
+ rang: [{ classname: "全部", sat_courseware_classid: "" }].concat(option.children),
|
|
|
+ };
|
|
|
+ i == -1 ? filtrateList.push(obj) : filtrateList[i] = obj;
|
|
|
+ } else {
|
|
|
+ i == -1 ? '' : filtrateList.pop();
|
|
|
+ }
|
|
|
+ this.$refs.Filtrate.list = filtrateList || JSON.parse(JSON.stringify());
|
|
|
+ },
|
|
|
+ onFiltration(e) {
|
|
|
+ let crumbs = [{
|
|
|
+ classname: "考试",
|
|
|
+ parentid: ""
|
|
|
+ }]
|
|
|
+ crumbs.push({
|
|
|
+ classname: e.一级分类.classname,
|
|
|
+ parentid: e.一级分类.sat_courseware_classid
|
|
|
+ })
|
|
|
+ if (e.二级分类) crumbs.push({
|
|
|
+ classname: e.二级分类.classname,
|
|
|
+ parentid: e.二级分类.sat_courseware_classid
|
|
|
+ })
|
|
|
+
|
|
|
+ this.crumbs = crumbs;
|
|
|
+ this.getList(true)
|
|
|
+ },
|
|
|
+ statusChange({ name }) {
|
|
|
+ this.content.where.status = name == '全部' ? '' : name;
|
|
|
+ this.getList(true)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+.head {
|
|
|
+ padding: 10px;
|
|
|
+ width: 100%;
|
|
|
+ background: #fff;
|
|
|
+ box-sizing: border-box;
|
|
|
+
|
|
|
+ .filtrate {
|
|
|
+ line-height: 30px;
|
|
|
+ padding: 0 10px;
|
|
|
+ font-family: PingFang SC, PingFang SC;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #333333;
|
|
|
+ border-radius: 3px;
|
|
|
+ margin-left: 10px;
|
|
|
+
|
|
|
+ .iconfont {
|
|
|
+ margin-left: 3px;
|
|
|
+ color: #BBBBBB;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.crumbs {
|
|
|
+ display: flex;
|
|
|
+ line-height: 17px;
|
|
|
+ font-family: PingFang SC, PingFang SC;
|
|
|
+ font-size: 12px;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ width: 100%;
|
|
|
+ margin-top: 10px;
|
|
|
+
|
|
|
+ .crumb {
|
|
|
+ flex-shrink: 0;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .crumb::after {
|
|
|
+ content: ">";
|
|
|
+ padding: 0 2px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .crumb:last-child {
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+
|
|
|
+ .crumb:last-child::after {
|
|
|
+ content: "";
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.list-box {
|
|
|
+ width: 100vw;
|
|
|
+ padding: 10px;
|
|
|
+ padding-top: 0;
|
|
|
+ box-sizing: border-box;
|
|
|
+
|
|
|
+ .item {
|
|
|
+ position: relative;
|
|
|
+ background: #FFFFFF;
|
|
|
+ border-radius: 8px;
|
|
|
+ margin-top: 10px;
|
|
|
+ padding: 10px;
|
|
|
+ padding-top: 15px;
|
|
|
+
|
|
|
+ .title {
|
|
|
+ width: 280px;
|
|
|
+ line-height: 20px;
|
|
|
+ height: 40px;
|
|
|
+ font-family: Source Han Sans SC, Source Han Sans SC;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #333333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .hr {
|
|
|
+ width: 100%;
|
|
|
+ height: 1px;
|
|
|
+ background: #DDDDDD;
|
|
|
+ margin-top: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .status {
|
|
|
+ position: absolute;
|
|
|
+ top: 10px;
|
|
|
+ right: 0;
|
|
|
+ width: 44px;
|
|
|
+ height: 24px;
|
|
|
+ line-height: 24px;
|
|
|
+ border-radius: 12px 0px 0px 12px;
|
|
|
+ text-align: center;
|
|
|
+ font-family: Source Han Sans SC, Source Han Sans SC;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #FFFFFF;
|
|
|
+ }
|
|
|
+
|
|
|
+ .bottom {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ line-height: 20px;
|
|
|
+ font-family: Source Han Sans SC, Source Han Sans SC;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #666666;
|
|
|
+ margin-top: 10px;
|
|
|
+
|
|
|
+ .score {
|
|
|
+ color: #E3041F;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|