From 1f31ce6d1779a4846d61e2685a6cef44fea58978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B0=E5=B2=A9?= Date: Fri, 15 Aug 2025 17:59:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=8F=91=E5=AD=A6=E4=B9=A0=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E9=A1=B5=EF=BC=8C=E6=8E=A5=E6=88=91=E7=9A=84=E6=94=B6?= =?UTF-8?q?=E8=97=8F=E9=A1=B5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/examination.js | 9 + src/api/favorites.js | 33 ++ src/api/wrong_question_record.js | 22 + src/pages.json | 18 + src/pages/courseDetail/index.vue | 35 +- src/pages/examination/result.vue | 383 +++++++++++------- .../favorites/components/favorites-course.vue | 124 +++--- .../favorites/components/favorites-task.vue | 20 +- src/pages/favorites/index.vue | 36 +- src/pages/index/index.vue | 4 +- .../learningTasks/components/list-item.vue | 232 +++++++++++ src/pages/learningTasks/details.vue | 8 + src/pages/learningTasks/index.vue | 208 ++++++++++ src/pages/preview/index.vue | 7 +- src/pages/testingHall/index.vue | 35 +- .../components/favorites-course.vue | 7 +- src/pages/wrong_question_record/index.vue | 5 +- src/pagesA.json | 21 +- src/uni_modules/uv-grid/changelog.md | 21 + .../uv-grid/components/uv-grid-item/props.js | 15 + .../components/uv-grid-item/uv-grid-item.vue | 226 +++++++++++ .../uv-grid/components/uv-grid/props.js | 20 + .../uv-grid/components/uv-grid/uv-grid.vue | 100 +++++ src/uni_modules/uv-grid/package.json | 88 ++++ src/uni_modules/uv-grid/readme.md | 17 + 25 files changed, 1427 insertions(+), 267 deletions(-) create mode 100644 src/api/favorites.js create mode 100644 src/api/wrong_question_record.js create mode 100644 src/pages/learningTasks/components/list-item.vue create mode 100644 src/pages/learningTasks/details.vue create mode 100644 src/pages/learningTasks/index.vue create mode 100644 src/uni_modules/uv-grid/changelog.md create mode 100644 src/uni_modules/uv-grid/components/uv-grid-item/props.js create mode 100644 src/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue create mode 100644 src/uni_modules/uv-grid/components/uv-grid/props.js create mode 100644 src/uni_modules/uv-grid/components/uv-grid/uv-grid.vue create mode 100644 src/uni_modules/uv-grid/package.json create mode 100644 src/uni_modules/uv-grid/readme.md diff --git a/src/api/examination.js b/src/api/examination.js index 8282a8f4..e788a707 100644 --- a/src/api/examination.js +++ b/src/api/examination.js @@ -33,4 +33,13 @@ export const queryPaperExamScore = (data) => { }; +// ↓↓↓↓↓↓↓↓↓课程考试↓↓↓↓↓↓↓↓ +export const startExamByCrs = (data) => { + return request({ + url: base_url + '/traCrsPapers/startExamByCrs', + method: 'post', + toastErrors: true, + data + }); +}; \ No newline at end of file diff --git a/src/api/favorites.js b/src/api/favorites.js new file mode 100644 index 00000000..3ecc9254 --- /dev/null +++ b/src/api/favorites.js @@ -0,0 +1,33 @@ +import request from '@/api/request' +const base_url = '/trastudy' + +// 课程收藏分页查询 +export const queryTraPersonalCollectionCrsPaging = (data) => { + return request({ + url: base_url + '/traPersonalCollection/queryTraPersonalCollectionCrsPaging', + method: 'post', + toastErrors: true, + data + }); +}; + +// 任务收藏分页查询 +export const queryTraPersonalCollectionTaskPaging = (data) => { + return request({ + url: base_url + '/traPersonalCollection/queryTraPersonalCollectionTaskPaging', + method: 'post', + toastErrors: true, + data + }); +}; + +// 根据收藏ID删除收藏 +export const deleteTraPersonalCollectionById = (data) => { + return request({ + url: base_url + '/traPersonalCollection/deleteTraPersonalCollectionById', + method: 'post', + toastErrors: true, + data + }); +}; + diff --git a/src/api/wrong_question_record.js b/src/api/wrong_question_record.js new file mode 100644 index 00000000..26e60fef --- /dev/null +++ b/src/api/wrong_question_record.js @@ -0,0 +1,22 @@ +import request from '@/api/request' +const base_url = '/traexam' + +// 错题本列表页 +export const queryTraMistakesCollectionPaging = (data) => { + return request({ + url: base_url + '/traMistakesCollection/queryTraMistakesCollectionPaging', + method: 'post', + toastErrors: true, + data + }); +}; + +// 错题订正 +export const mistakesCorrect = (data) => { + return request({ + url: base_url + '/traMistakesCollection/mistakesCorrect', + method: 'post', + toastErrors: true, + data + }); +}; diff --git a/src/pages.json b/src/pages.json index 6d7d0bad..b7ca8b0a 100644 --- a/src/pages.json +++ b/src/pages.json @@ -217,6 +217,24 @@ } } }, + { + "path": "pages/learningTasks/index", + "style": { + "navigationBarTitleText": "学习任务", + "app-plus": { + "titleNView": false + } + } + }, + { + "path": "pages/learningTasks/details", + "style": { + "navigationBarTitleText": "学习详情", + "app-plus": { + "titleNView": false + } + } + }, { "path": "pages/course/index", "style": { diff --git a/src/pages/courseDetail/index.vue b/src/pages/courseDetail/index.vue index e79e3d3f..76a2a5a3 100644 --- a/src/pages/courseDetail/index.vue +++ b/src/pages/courseDetail/index.vue @@ -99,7 +99,9 @@ import { getCourseDetailApi } from '@/api/courseDetail.js'; - + import { + startExamByCrs + } from '@/api/examination.js' import common from '@/common/common'; import introduceVue from './components/introduce.vue'; import knowledge from './components/knowledge.vue'; @@ -124,6 +126,7 @@ const tabSwitch = (item) => { tabAct.value = item.index; }; + // 上拉加载 const scrolltolower = (item) => { if (tabAct.value == 2) { commentRef.value?.getData(); @@ -161,25 +164,19 @@ tabAct.value = res.detail.current } // 去考试 - const goto_examination = () => { - // papersId.value = e.papersId - // paperData.value = setPageCache('examination_'+papersId.value) - // if (!papersId.value || !paperData.value) { - // common.navigateBack() - // return - // } + const goto_examination = async () => { + common.loading() + + startExamByCrs({ + // crsId : form.value.crsId + crsId : 'CRS0250181220722025070408313900000018729' + }).then(res => { + setPageCache('examination', {...res.body, examId:detailData.examId}) + common.navigateTo('/pages/examination/index') + }).finally(() => { + common.hideLoading() + }) } - // const getElementPosition = () => { - // return new Promise((resolve) => { - // uni.createSelectorQuery() - // .select('#tabsDiv') - // .boundingClientRect(rect => { - // if (rect) { - // resolve(rect) // 距离视口顶部的距离 - // } - // }).exec() - // }) - // } onMounted(async () => { uni.$on('refresh_comment_data', () => { diff --git a/src/pages/examination/result.vue b/src/pages/examination/result.vue index 8726036b..079497bf 100644 --- a/src/pages/examination/result.vue +++ b/src/pages/examination/result.vue @@ -9,125 +9,142 @@ - - - - 得分 - - -- - 40 - 50 - - - - 失败乃成功之母,继续努力 - 考的不错啊,继续加油 - 考试结果计算中... - - - - - - - - - - - - - - - - - - - - 考试:这里是考试名称 - - - - - - - - - 时长:12 分 15 秒 - - - - - - 考试排行榜 - - - - - - - - - 答题详情 - - - - - - 你的等待会有更精确的结果,要耐心哦~ - - - - - - {{index + 1}} - - - - - - - - 单选题 - - - 5分 - - - - - - - 展开 - - - - - - 属于商业银行风险管理“三道防线”的哪些风险管理部门,为什么? - - - - - - - - - + + + + + 得分 + + -- + 40 + 50 + + + 失败乃成功之母,继续努力 + 考的不错啊,继续加油 + 考试结果计算中... + + + + + + + + + + + + + + + + + + + + 考试:这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称这里是考试名称 + + + + + + + + + + 时长:12 分 15 秒 + + + + + + 考试排行榜 + + + + + + + + + + + + + + + + {{ groupIndex * 10 + index + 1 }} + + + + + + + + + + + + + + + 你的等待会有更精确的结果,要耐心哦~ + + + + + + + + + 单选题 + + + 5分 + + + + + + + + 属于商业银行风险管理“三道防线”的哪些风险管理部门,为什么? + + + + + + + + + \ No newline at end of file diff --git a/src/pages/learningTasks/details.vue b/src/pages/learningTasks/details.vue new file mode 100644 index 00000000..02409e35 --- /dev/null +++ b/src/pages/learningTasks/details.vue @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/src/pages/learningTasks/index.vue b/src/pages/learningTasks/index.vue new file mode 100644 index 00000000..5165d05e --- /dev/null +++ b/src/pages/learningTasks/index.vue @@ -0,0 +1,208 @@ + + + + + \ No newline at end of file diff --git a/src/pages/preview/index.vue b/src/pages/preview/index.vue index f9f00e34..0e8e0d65 100644 --- a/src/pages/preview/index.vue +++ b/src/pages/preview/index.vue @@ -13,7 +13,7 @@ :scrollable="false" line-color="#0066FF" :inactive-style="{ color: '#333333', fontSize: '30rpx', fontWeight:'600'}" :activeStyle="{color:'#0066FF',fontSize:'30rpx', fontWeight:'600'}" - :lineColor="`url(${lineBg}) 10% 10%`"> + :lineColor="`url(${LineBg}) 10% 10%`"> @@ -48,8 +48,9 @@ } from '@/api/courseDetail.js'; import common from '@/common/common'; const statusBarHeight = uni.getSystemInfoSync().statusBarHeight; - const lineBg = - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAABL0lEQVQ4T6XSv0uCURTG8e9jgpRNDS1BU1sELUFLQVM1tgQFtcR7A8m1LQqaLGhOkQKH/o5aKiiHlgiE0K1oCYLAMk9ov/RF8e313u2ew4dzzzmi2+NsA9gH3hCr6srzbAJxDkS/nbvwYNJilMkDow1FXYUHneWAlV/MqN3ZcKCzHWDb164MGa3/H/Qshdj0YbdUmORIL8HBNRsgShZjoQkznvioY/e19wCgCccSsAcM+bBnjHmyuvx5bw8mrJ93FoEkYrzFej0g5kjrpjH2BTrro8oIYhgYQ0xhTCPibfb0ggjLHKrojwvPEogDIBZgycsYKQrscqpKq3zh7BXo7YBVgRMibLWqqvnLzh6BwTZgESNHD8edoL+hOJupT9CII0oYJcQ14oy0CgHa0JTyCeBLVNeWygE5AAAAAElFTkSuQmCC"; + import { + LineBg + } from '@/enum.js' const courseRef = ref(null); const aiSparringRef = ref(null); const tabAct = ref(0); diff --git a/src/pages/testingHall/index.vue b/src/pages/testingHall/index.vue index 8b2453cd..730312a3 100644 --- a/src/pages/testingHall/index.vue +++ b/src/pages/testingHall/index.vue @@ -9,8 +9,7 @@ + v-model="searchText" @confirm="search"> @@ -18,18 +17,21 @@ + :lineColor="`url(${LineBg}) 10% 10%`"> - + - + - + - + @@ -47,7 +49,9 @@ import { onLoad } from '@dcloudio/uni-app' - import {setPageCache} from '@/common/common'; + import { + setPageCache + } from '@/common/common'; import common from '@/common/common'; const customStyle = { backgroundColor: "#F1F5FA", @@ -63,9 +67,9 @@ } const statusBarHeight = uni.getSystemInfoSync().statusBarHeight; - const lineBg = - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAABL0lEQVQ4T6XSv0uCURTG8e9jgpRNDS1BU1sELUFLQVM1tgQFtcR7A8m1LQqaLGhOkQKH/o5aKiiHlgiE0K1oCYLAMk9ov/RF8e313u2ew4dzzzmi2+NsA9gH3hCr6srzbAJxDkS/nbvwYNJilMkDow1FXYUHneWAlV/MqN3ZcKCzHWDb164MGa3/H/Qshdj0YbdUmORIL8HBNRsgShZjoQkznvioY/e19wCgCccSsAcM+bBnjHmyuvx5bw8mrJ93FoEkYrzFej0g5kjrpjH2BTrro8oIYhgYQ0xhTCPibfb0ggjLHKrojwvPEogDIBZgycsYKQrscqpKq3zh7BXo7YBVgRMibLWqqvnLzh6BwTZgESNHD8edoL+hOJupT9CII0oYJcQ14oy0CgHa0JTyCeBLVNeWygE5AAAAAElFTkSuQmCC"; - + import { + LineBg + } from '@/enum.js' const contentRef = ref(null); const tabAct = ref(0); const searchText = ref(''); @@ -76,7 +80,7 @@ }, { name: '未完成' }]); - + const contentRefs = ref([]) const status = ref('loadmore') // loadmore - 加载前,loading - 加载中,nomore - 没有数据 const limit = 15 @@ -101,12 +105,9 @@ common.navigateTo('/pages/testingHall/details'); } onMounted(() => { - + triggered.value = true watch(tabAct, (newValue, oldValue) => { - console.log('resresresresresxxxxxxxxxx', contentRefs.value); - console.log('resresresresresxxxxxxxxxx', newValue); - console.log('resresresresresxxxxxxxxxx', contentRefs.value[newValue]); typeof contentRefs.value[newValue]?.getData === 'function' && contentRefs.value[newValue] ?.getData('first') }, { @@ -209,7 +210,7 @@ width: 90%; margin: 20rpx auto; height: 78rpx; - + position: relative; .search_div { diff --git a/src/pages/wrong_question_record/components/favorites-course.vue b/src/pages/wrong_question_record/components/favorites-course.vue index 8b39db1d..f02e3e44 100644 --- a/src/pages/wrong_question_record/components/favorites-course.vue +++ b/src/pages/wrong_question_record/components/favorites-course.vue @@ -47,6 +47,9 @@ import { queryTraCrsBbsInfoByCrsId } from '@/api/courseDetail.js'; + import { + queryTraMistakesCollectionPaging, + } from '@/api/wrong_question_record.js'; const getData = (from = '') => { if (from == 'first') { if (total.value !== -1) { @@ -64,8 +67,8 @@ console.log(status.value, '阿斯顿撒'); setTimeout(() => { - queryTraCrsBbsInfoByCrsId({ - crsId: 'CRS0250181220722025070408313900000018729', + queryTraMistakesCollectionPaging({ + isCorrect: 'N', page: page.value, limit: limit }).then(res => { diff --git a/src/pages/wrong_question_record/index.vue b/src/pages/wrong_question_record/index.vue index a6604e73..74fe2eb7 100644 --- a/src/pages/wrong_question_record/index.vue +++ b/src/pages/wrong_question_record/index.vue @@ -43,12 +43,15 @@ } from 'vue'; import { LineBg - } from '@/enum.js'; + } from '@/enum.js' import { queryTraCrsBbsInfoByCrsId, replyTraCrsBbsInfo, qryChildTraCrsBbsInfo } from '@/api/courseDetail.js'; + + + import common from '@/common/common'; const statusBarHeight = uni.getSystemInfoSync().statusBarHeight; diff --git a/src/pagesA.json b/src/pagesA.json index bca0102f..c51e8aeb 100644 --- a/src/pagesA.json +++ b/src/pagesA.json @@ -152,7 +152,24 @@ "titleNView": false } } - } - + }, + { + "path": "pages/learningTasks/index", + "style": { + "navigationBarTitleText": "学习任务", + "app-plus": { + "titleNView": false + } + } + }, + { + "path": "pages/learningTasks/details", + "style": { + "navigationBarTitleText": "学习详情", + "app-plus": { + "titleNView": false + } + } + }, ] } \ No newline at end of file diff --git a/src/uni_modules/uv-grid/changelog.md b/src/uni_modules/uv-grid/changelog.md new file mode 100644 index 00000000..8c612618 --- /dev/null +++ b/src/uni_modules/uv-grid/changelog.md @@ -0,0 +1,21 @@ +## 1.0.9(2023-12-06) +1. 优化 +## 1.0.8(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.7(2023-10-13) +1. unmounted兼容vue3 +## 1.0.6(2023-08-14) +1. 修复初始的时候闪动的BUG +## 1.0.5(2023-06-22) +1. 优化修改 +## 1.0.4(2023-06-21) +1. 修复BUG +## 1.0.3(2023-06-01) +1. 修复点击触发两次事件的BUG +## 1.0.2(2023-05-23) +1. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-grid 宫格布局 diff --git a/src/uni_modules/uv-grid/components/uv-grid-item/props.js b/src/uni_modules/uv-grid/components/uv-grid-item/props.js new file mode 100644 index 00000000..6b86298a --- /dev/null +++ b/src/uni_modules/uv-grid/components/uv-grid-item/props.js @@ -0,0 +1,15 @@ +export default { + props: { + // 宫格的name + name: { + type: [String, Number, null], + default: null + }, + // 背景颜色 + bgColor: { + type: String, + default: 'transparent' + }, + ...uni.$uv?.props?.gridItem + } +} \ No newline at end of file diff --git a/src/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue b/src/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue new file mode 100644 index 00000000..9412852d --- /dev/null +++ b/src/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/src/uni_modules/uv-grid/components/uv-grid/props.js b/src/uni_modules/uv-grid/components/uv-grid/props.js new file mode 100644 index 00000000..d5f8474d --- /dev/null +++ b/src/uni_modules/uv-grid/components/uv-grid/props.js @@ -0,0 +1,20 @@ +export default { + props: { + // 分成几列 + col: { + type: [String, Number], + default: 3 + }, + // 是否显示边框 + border: { + type: Boolean, + default: false + }, + // 宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右 + align: { + type: String, + default: 'left' + }, + ...uni.$uv?.props?.grid + } +} \ No newline at end of file diff --git a/src/uni_modules/uv-grid/components/uv-grid/uv-grid.vue b/src/uni_modules/uv-grid/components/uv-grid/uv-grid.vue new file mode 100644 index 00000000..0314b184 --- /dev/null +++ b/src/uni_modules/uv-grid/components/uv-grid/uv-grid.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/src/uni_modules/uv-grid/package.json b/src/uni_modules/uv-grid/package.json new file mode 100644 index 00000000..0c933795 --- /dev/null +++ b/src/uni_modules/uv-grid/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-grid", + "displayName": "uv-grid 宫格布局 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.9", + "description": "uv-grid 宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。", + "keywords": [ + "uv-grid", + "uvui", + "uv-ui", + "宫格布局", + "grid" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uv-grid/readme.md b/src/uni_modules/uv-grid/readme.md new file mode 100644 index 00000000..cd13cefd --- /dev/null +++ b/src/uni_modules/uv-grid/readme.md @@ -0,0 +1,17 @@ +## Grid 宫格布局 + +> **组件名:uv-grid** + +宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。 + +# 查看文档 + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file