创新实训-刷题册

<template>
    <el-col class="paper">
        <el-row :gutter="24">
            <!--  左侧   -->
            <el-col :span="4" :xs="24">
                <el-card class="type_list">
                    <div style="padding-bottom: 25px;">
                        <p class="type_name"> 数学刷题册 </p>
                        <el-divider></el-divider>
                        <el-row>
                            <el-tag v-for="(cp, index) in cpdata" :type="index === quIndex ? 'success' : ''"
                                @click="handleTag(index)" class="type_tag">
                                {{ index + 1 }}
                            </el-tag>
                        </el-row>
                    </div>
                </el-card>
            </el-col>

            <!-- 中间题目 -->

            <el-col :span="16" :xs="24">
                <el-card class="qu_list">
                    <div>
                        <template v-for="(cp, index) in cpdata">
                            <div :class="'index' + index">
                                <el-row :gutter="24">
                                    <el-col :span="20" style="text-align: left">
                                        <!-- 题目: 序号、类型、题干 -->
                                        <div>
                                            <div class="qu_num">{{ index + 1 }}</div>
                                            【 {{ cp.tag }} 】
                                            <div class="qu_content">
                                                <textBox :text="cp.text"></textBox>
                                            </div>

                                        </div>


                                        <!-- 题目解析 -->
                                        <div class="qu_analysis">
                                            <el-collapse v-model="activeName" accordion>
                                                <el-collapse-item title="扫描结果" :name="index + '1'">
                                                    <textBox :text="scan_texts[index]"></textBox>
                                                </el-collapse-item>
                                                <el-collapse-item title="AI老师" :name="index + '2'">
                                                    <textBox :text="p_answer_texts[index]"></textBox>
                                                </el-collapse-item>
                                                <el-collapse-item title="收藏" :name="index + '3'">
                                                    <el-button type="warning" icon="el-icon-star-off" circle
                                                        @click="save(index)"></el-button>
                                                </el-collapse-item>
                                            </el-collapse>

                                        </div>

                                    </el-col>

                                    <el-col :span="4">
                                        <div class="online-person">

                                            <input type="file" :ref="'fileInput' + index" style="display: none"
                                                @change="handleFileChange($event, index)">
                                            <div class="add-butt" @click="add_file(index)"><i
                                                    style="font-size: 15px;">上传答案</i>
                                            </div>
                                        </div>
                                        <div class="add-butt" @click="callModel(index)"><i style="font-size: 15px;">AI判题</i>
                                        </div>
                                    </el-col>

                                </el-row>
                                <el-row :gutter="24">



                                </el-row>
                            </div>
                        </template>
                    </div>
                    <el-divider />
                </el-card>
            </el-col>

            <!-- 右侧试卷信息 -->

            <el-col :span="4" :xs="24">
                <el-card class="paper_base">
                    <p class="paper_base_content">数学刷题册</p>
                    <!-- <p class="paper_base_content">这里还可以写一些东西</p> -->
                    <el-divider></el-divider>
                    <p class="paper_base_content">你已经收藏了</p>
                    <p class="paper_base_score">{{ this.cpdata.length }}道题</p>
                    <el-divider></el-divider>
                </el-card>

            </el-col>

        </el-row>
    </el-col>
</template>
  
<script>
import textBox from '@/components/FomulaText.vue'
import { upload_pic, ask_teacher } from "@/api/getData";
export default {
    name: 'ExamProcess',
    data() {
        return {
            quIndex: -1,
            cpdata: [{
                "text": "5*6=30",
                "tag": "乘法",
                "analysis": "5*6=30"
            }

            ],
            showSolutions: [],
            showAnswers: [],
            scan_texts: [],
            p_answer_texts: [],
            activeName: '1'
        }
    },
    components: {
        textBox
    },
    mounted() {
        let collection = JSON.parse(localStorage.getItem("collection"));
        for (let element of collection) {
            console.log(element);
            let p = {};
            p["tag"] = element["knowledge"];
            p["text"] = element["content"];
            p["analysis"] = element["analysis"];
            this.cpdata.push(p);
        }

    },
    created() {
        // 初始化 showSolutions 数组,每道题解初始状态都为隐藏
        this.showSolutions = new Array(this.cpdata.length).fill(false);
        this.scan_texts = new Array(this.cpdata.length).fill('');
        this.p_answer_texts = new Array(this.cpdata.length).fill('')
    },
    methods: {
        // 点击答题卡题号, 右侧题目滑动
        handleTag(index) {
            console.log("aaa");
            // 高亮选中的题目index标签
            this.quIndex = index;
            // 题目滑动到锚定点
            let page = document.querySelector(".index" + index);
            page.scrollIntoView();
        },
        add_file(index) {
            let refname = "fileInput" + index;
            this.$refs[refname][0].click();
        },
        scanSolution(event, index) {
            // 切换指定题目的题解显示状态
            console.log(event);
            handleFileChange(event, index);
            this.$set(this.showSolutions, index, !this.showSolutions[index]);
        },
        handleFileChange(event, index) {
            const file = event.target.files[0];
            if (!file) return;
            const fileName = file.name.toLowerCase();
            if (fileName.endsWith('.jpg') || fileName.endsWith('.png')) {
                const maxSizeMB = 3;
                const maxSizeBytes = maxSizeMB * 1024 * 1024;
                if (file.size > maxSizeBytes) {
                    this.$message(`文件大小超过 ${maxSizeMB} MB,请选择小于 ${maxSizeMB} MB 的文件`);
                    return;
                }
                this.isupload = true;
                let fileType;
                if (fileName.endsWith('.jpg')) {
                    fileType = 'jpg';
                } else if (fileName.endsWith('.png')) {
                    fileType = 'png';
                }
                let user_ID = localStorage.getItem("AIEDU_ID");
                let count = parseInt(localStorage.getItem("count"))
                upload_pic({ file, type: fileType, userID: user_ID, count: count }).then((res) => {
                    if (res.msg == "ok") {
                        // localStorage.setItem("count", count + 1)
                        this.scan_texts[index] = res.data;
                        this.$message("ok");
                        this.$set(this.showSolutions, index, !this.showSolutions[index]);
                        //this.isupload = false;
                        return;
                    } else {
                    }
                });
            } else {
                // 提示用户选择支持的文件类型
                this.$message("请选择jpg或png");
            }
        },
        callModel(index) {
            let problem_text = this.cpdata[index].text;
            let ans_text = this.scan_texts[index];
            ask_teacher({ question: problem_text, ans: ans_text }).then((res) => {
                if (res.msg == "ok") {
                    this.p_answer_texts[index] = res.data;
                    console.log(res.data);
                    this.$message("ok");
                    this.$set(this.showAnswers, index, !this.showAnswers[index]);
                    //this.isupload = false;
                    return;

                    return;
                } else {
                    console.log(res);

                }
            });

        },
        save(index) {
            if (localStorage.getItem("review_collection") != null) {
                let review_collection = JSON.parse(localStorage.getItem("review_collection"));
                let text = this.cpdata[index].text;
                let ans = this.cpdata[index].analysis;
                let tag= this.cpdata[index].tag;
                let p = { "text": text, "ans": ans,"tag":tag }
                review_collection.push(p)
                localStorage.setItem("review_collection", JSON.stringify(review_collection))
            } else {
                let review_collection = [];
                let text = this.cpdata[index].text;
                let ans = this.cpdata[index].analysis;
                let tag= this.cpdata[index].tag;
                let p = { "text": text, "ans": ans,"tag":tag }
                review_collection.push(p)
                localStorage.setItem("review_collection", JSON.stringify(review_collection))
            }
            this.$message("ok");
        }
    },
}
</script>
  
<style scoped lang="scss">
.el-collapse-item__wrap {
    overflow: auto !important;
}

.add-butt {
    width: 100px;
    height: 20px;
    border-radius: 10px;
    background-color: rgb(50, 54, 68);
    position: relative;
    text-align: center;
    padding: 7px 0px 12px 0;
    margin: 5px 5px;
    cursor: pointer;
    color: #fff;

    &:hover {
        background-color: #1d90f5;
    }
}

.paper {


    line-height: 25px;
    width: 100%;


    // 左侧题目总菜单
    .type_list {
        height: 600px;
        overflow: auto;
        text-align: left;
        line-height: 10px;

        .type_name {
            color: #1890ff;
            font-weight: bold;
        }

        .type_tag {
            margin-right: 10px;
            margin-top: 10px;
        }
    }

    // 试题内容样式
    .qu_list {

        height: 600px;
        overflow: auto;
        page-break-after: always;

        .qu_num {
            display: inline-block;
            background: url(~@/assets/btbj.jpg) no-repeat 100% 100%;
            background-size: contain;
            height: 30px;
            width: 30px;
            line-height: 25px;
            color: #040000;
            font-size: 14px;
            text-align: center;
            margin-right: 15px;
            flex-shrink: 0;
        }

        .qu_content {
            overflow: auto;
            padding-left: 10px;
        }

        // 选项组
        .qu_choose_group {
            width: 100%;

            // 单个选项
            .qu_choose {
                display: block;
                margin: 10px;

                // 去除前面的radio
                ::v-deep .el-radio__input .el-radio__inner {
                    display: none;
                }

                // 单个选项内容样式
                .qu_choose_tag {
                    display: inline-flex;
                    width: 90%;

                    // 选项标签
                    .qu_choose_tag_type {
                        font-weight: bold;
                        color: #0a84ff;
                        width: 10px;
                    }

                    // 选项内容
                    .qu_choose_tag_content {
                        padding: 0 10px 10px 10px;
                    }

                    .qu_choose_tag_img {
                        height: auto;
                        display: block;
                        margin: 10px;
                    }

                    .qu_choose_tag_el_image {
                        clear: both;
                        padding-top: 10px;
                    }
                }

                // 选项答案
                .qu_choose_answer {
                    float: right;
                }
            }
        }


        // 试题解析
        .qu_analysis {
            padding: 10px;


            .qu_analysis_content {
                padding-top: 10px;

            }
        }

        // 试题赋分
        .qu_assign_score {
            background: #f5f5f5;
            height: 100px;
            padding-top: 35px;

            .qu_assign_score_content {
                width: 80px
            }
        }
    }

    // 右侧试卷基本信息
    .paper_base {
        height: 600px;
        overflow: auto;
        text-align: center;

        .paper_base_content {
            font-weight: bold;
        }

        .paper_base_score {
            font-weight: bold;
            color: #0a76a4;
        }
    }
}
</style>
  
  
  

代码如上,本页面将已经收藏到错题本的题目渲染出来,每个题目可以上传答案,进行AI判题,并将题目收藏到错题本。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值