import { onLoad, onReady, } from "@dcloudio/uni-app" import { reactive, ref, computed, toRefs, onMounted, watch, nextTick } from "vue"; import { catchError, toast } from "@/utils/common.js" import * as httpUnit from "@/api/unitTest.js" import cacheManager, { useUnitTestTishi } from "@/utils/cacheManager.js" function useJifen() { const data = reactive({ rightAnswer: 0, // 答对 wrongAnswer: 0, // 答错 jifen: 0, // 积分 }) function updateJifen({ rightAnswer, wrongAnswer, jifen }) { data.rightAnswer = rightAnswer; data.wrongAnswer = wrongAnswer; data.jifen = jifen; } return { ...toRefs(data), updateJifen } } export function useExam() { // 缓存 const { showTishi, handleCloseTishi, handleShowTishi } = useTishiLeftRight() const { rightAnswer, wrongAnswer, jifen, updateJifen } = useJifen(); const data = reactive({ count: 0, // 已答题数 total: 0, // 总题数 current: 0, // 当前试题序列 list: [], // 试题列表 jieId: null, // 节Id zhangId: null, nianji: null, xueke: null, haveFlag: false, // 是否有下一章 }) onLoad((options) => { const jieNumber = options.jieNumber if (!(cacheManager.get('zhangInfo') && options.jieNumber)) { toast('数据错误,缓存丢失/ number丢失') return false } const cacheZhangInfo = cacheManager.get('zhangInfo'); let currentObject = cacheZhangInfo.jieList.find(item => item.number == options.jieNumber); const { cardId, zhangId, nianji } = cacheManager.get('auth'); data.jieId = currentObject.jieId; // 需要路由参数 节Id data.zhangId = zhangId; // 需要路由参数 章Id data.nianji = nianji; // 需要年纪Id 来执行返回页面 data.xueke = cardId; // 需要年纪Id 来执行返回页面 data.haveFlag = cacheZhangInfo.haveFlag // 初始化页面数据 initPage(); }) watch(() => data.list, (val) => { const list = data.list.filter(item => { if (item.type == 3) { // 填空题 所有试题答完 return !item.reply.some(citem => citem.trim() == ''); } else { return item.reply !== null } }); data.count = list.length; }, { deep: true }) // 初始化页面数据 async function initPage() { const [err, cdata] = await catchError(httpUnit.getExamData({ jieId: data.jieId })); if (err) { toast("单元测试数据获取异常"); return; } refreshExam(cdata); } function formatListToUse(list) { list.forEach((item, index) => { item.mta_show = false; item.reply = null; if (item.type == 3) { item.result = JSON.parse(item.result); item.placeholders = item.result.map((item, cindex) => `[bank${cindex}]`) item.reply = item.result.map(() => ''); } }) } // 数据赋值 function refreshExam(list) { const cList = list; formatListToUse(cList) data.list = cList; data.total = cList.length; handleShowTishi(); } // 交卷 async function handleSubmit(dom) { const result = []; data.list.forEach(item => { result.push({ reply: item.reply ? JSON.stringify(item.reply) : '', stId: item.stId }) }) const [error, cdata] = await catchError(httpUnit.getExamSubmit({ jieId: data.jieId, shitiList: result })); if (error) { toast("单元测试数据提交异常"); return; } dom.showPopup({ right: cdata.dui, wrong: cdata.cuo, jifen: cdata.jifen }); } return { ...toRefs(data), rightAnswer, wrongAnswer, jifen, showTishi, handleSubmit, initPage, handleCloseTishi, handleShowTishi } } // 提示信息显示隐藏 function useTishiLeftRight() { const { updateTishi, getTishi } = useUnitTestTishi(); const showTishi = ref(false); // 大鹅关闭追加缓存 --- 单独针对当前手机的缓存提示 function handleCloseTishi() { updateTishi(); showTishi.value = false; } // 大鹅显示追加缓存 --- 单独针对当前手机的缓存提示 function handleShowTishi() { const isNotShow = Boolean(getTishi()); showTishi.value = !isNotShow; } return { showTishi, handleCloseTishi, handleShowTishi } } export function useTiankongItem(popupRef) { const index = ref(null); const tiankongValue = ref(null); const question = ref(null); function refreshFn(data) { index.value = +data.index; tiankongValue.value = data.value; question.value = data.question; } function onBlur(dd) { tiankongValue.value = dd.result; uni.$emit('tiankongItemBlur', { index: dd.index, value: dd.result, question: question.value }) nextTick(() => { tiankongValue.value = ""; }) } uni.$on('tiankongItemShow', (data) => { refreshFn(data); popupRef.value.showPopup(); }) return { index, tiankongValue, onBlur } }