diff --git a/.env.development b/.env.development index 8329773c..1306b8df 100644 --- a/.env.development +++ b/.env.development @@ -16,5 +16,5 @@ VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001' # h5专用地址 # 王洋洋 -VITE_APP_BASE_H5_API_Url = 'http://25.64.16.140:9604' -#VITE_APP_BASE_H5_API_Url = 'https://aitstest.jlbank.com.cn:7001' \ No newline at end of file +#VITE_APP_BASE_H5_API_Url = 'http://25.64.16.140:9604' +VITE_APP_BASE_H5_API_Url = 'https://aitstest.jlbank.com.cn:7001' \ No newline at end of file diff --git a/certificate/ios/jiaixuedev.mobileprovision b/certificate/ios/jiaixuedev.mobileprovision index 319156da..e3cc651a 100644 Binary files a/certificate/ios/jiaixuedev.mobileprovision and b/certificate/ios/jiaixuedev.mobileprovision differ diff --git a/src/App.vue b/src/App.vue index 5162413a..13e584a4 100644 --- a/src/App.vue +++ b/src/App.vue @@ -141,4 +141,7 @@ view { .no-overflow{ overflow: hidden; } +.bold{ + font-weight: bold; +} diff --git a/src/api/examination.js b/src/api/examination.js new file mode 100644 index 00000000..52225e08 --- /dev/null +++ b/src/api/examination.js @@ -0,0 +1,16 @@ +import request from '@/api/request' +import { getToken } from '@/common/common.js' +import { get_base_url } from '@/api/request' +const base_url = '/traexam' + +// 开始考试(试卷信息) +export const startTraExamPapersInfo = (data) => { + return request({ + url: base_url + '/traExamPapers/startTraExamPapersInfo', + method: 'post', + toastErrors: true, + data + }); +}; + + diff --git a/src/common/imgSvg.ts b/src/common/imgSvg.ts new file mode 100644 index 00000000..267ad39f --- /dev/null +++ b/src/common/imgSvg.ts @@ -0,0 +1,20 @@ +export const optionSuccessIcon = (color : string) : string => { + const svgXml = ` + + `.trim(); + + return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgXml)}`; +}; +export const optionErrorIcon = () : string => { + const svgXml = ` + + `.trim(); + return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgXml)}`; +}; + +export const examinationSheetIcon = () : string => { + const svgXml = ` + + `.trim(); + return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgXml)}`; +}; \ No newline at end of file diff --git a/src/components/examination/characters-subject.vue b/src/components/examination/characters-subject.vue new file mode 100644 index 00000000..ef704eaf --- /dev/null +++ b/src/components/examination/characters-subject.vue @@ -0,0 +1,135 @@ + + + + \ No newline at end of file diff --git a/src/components/examination/radio-subject-item.vue b/src/components/examination/radio-subject-item.vue new file mode 100644 index 00000000..b0fbfcd5 --- /dev/null +++ b/src/components/examination/radio-subject-item.vue @@ -0,0 +1,134 @@ + + + + + \ No newline at end of file diff --git a/src/components/examination/radio-subject.vue b/src/components/examination/radio-subject.vue new file mode 100644 index 00000000..bf882627 --- /dev/null +++ b/src/components/examination/radio-subject.vue @@ -0,0 +1,174 @@ + + + + \ No newline at end of file diff --git a/src/enum.js b/src/enum.js index 86262504..a883e2f6 100644 --- a/src/enum.js +++ b/src/enum.js @@ -3,7 +3,8 @@ export const Max_Upload_Document_Size = 102400 // 最大文档上传限制 export const TextareaInputLimitCharacter = 160 // 全局多行文本输入框限制字数 // 公共tab页的图片 export const LineBg = - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAABL0lEQVQ4T6XSv0uCURTG8e9jgpRNDS1BU1sELUFLQVM1tgQFtcR7A8m1LQqaLGhOkQKH/o5aKiiHlgiE0K1oCYLAMk9ov/RF8e313u2ew4dzzzmi2+NsA9gH3hCr6srzbAJxDkS/nbvwYNJilMkDow1FXYUHneWAlV/MqN3ZcKCzHWDb164MGa3/H/Qshdj0YbdUmORIL8HBNRsgShZjoQkznvioY/e19wCgCccSsAcM+bBnjHmyuvx5bw8mrJ93FoEkYrzFej0g5kjrpjH2BTrro8oIYhgYQ0xhTCPibfb0ggjLHKrojwvPEogDIBZgycsYKQrscqpKq3zh7BXo7YBVgRMibLWqqvnLzh6BwTZgESNHD8edoL+hOJupT9CII0oYJcQ14oy0CgHa0JTyCeBLVNeWygE5AAAAAElFTkSuQmCC"; + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAABL0lEQVQ4T6XSv0uCURTG8e9jgpRNDS1BU1sELUFLQVM1tgQFtcR7A8m1LQqaLGhOkQKH/o5aKiiHlgiE0K1oCYLAMk9ov/RF8e313u2ew4dzzzmi2+NsA9gH3hCr6srzbAJxDkS/nbvwYNJilMkDow1FXYUHneWAlV/MqN3ZcKCzHWDb164MGa3/H/Qshdj0YbdUmORIL8HBNRsgShZjoQkznvioY/e19wCgCccSsAcM+bBnjHmyuvx5bw8mrJ93FoEkYrzFej0g5kjrpjH2BTrro8oIYhgYQ0xhTCPibfb0ggjLHKrojwvPEogDIBZgycsYKQrscqpKq3zh7BXo7YBVgRMibLWqqvnLzh6BwTZgESNHD8edoL+hOJupT9CII0oYJcQ14oy0CgHa0JTyCeBLVNeWygE5AAAAAElFTkSuQmCC"; +// 性别 export const GENDER = [{ value: "m", label: "男性", @@ -12,4 +13,22 @@ export const GENDER = [{ value: "f", label: "女性", } -] // 性别 \ No newline at end of file +] +// 试题题型 +export const SUBJECT_TYPE = [{ + value: "SN", + label: "单选题", + }, + { + value: "MU", + label: "多选题", + }, + { + value: "JD", + label: "判断题", + }, + { + value: "ES", + label: "问答题", + }, +] \ No newline at end of file diff --git a/src/pages.json b/src/pages.json index ea44dae2..fdc554a0 100644 --- a/src/pages.json +++ b/src/pages.json @@ -190,6 +190,24 @@ } } }, + { + "path": "pages/examination/index", + "style": { + "navigationBarTitleText": "考试", + "app-plus": { + "titleNView": false + } + } + }, + { + "path": "pages/practice/index", + "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 673a46ae..e79e3d3f 100644 --- a/src/pages/courseDetail/index.vue +++ b/src/pages/courseDetail/index.vue @@ -73,14 +73,13 @@ 去学习 去练习 - 去考试 + 去考试 - @@ -161,7 +160,15 @@ const swiper_change = (res) => { 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 getElementPosition = () => { // return new Promise((resolve) => { // uni.createSelectorQuery() @@ -181,6 +188,7 @@ tabAct.value = 2 }) }) + onLoad((params) => { crsNum.value = params.crsNum; }); diff --git a/src/pages/examination/index-old.vue b/src/pages/examination/index-old.vue new file mode 100644 index 00000000..335e4571 --- /dev/null +++ b/src/pages/examination/index-old.vue @@ -0,0 +1,201 @@ + + + + + \ No newline at end of file diff --git a/src/pages/examination/index.vue b/src/pages/examination/index.vue new file mode 100644 index 00000000..7f12a3ad --- /dev/null +++ b/src/pages/examination/index.vue @@ -0,0 +1,304 @@ + + + + + \ No newline at end of file diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue index 31321cdf..58edb5d9 100644 --- a/src/pages/index/index.vue +++ b/src/pages/index/index.vue @@ -88,7 +88,8 @@ AI问答 - + + AI陪练 diff --git a/src/pages/messageNotification/index.vue b/src/pages/messageNotification/index.vue index bf68bb5b..7cc98cf3 100644 --- a/src/pages/messageNotification/index.vue +++ b/src/pages/messageNotification/index.vue @@ -6,7 +6,7 @@ 消息 - + diff --git a/src/pages/practice/index.vue b/src/pages/practice/index.vue new file mode 100644 index 00000000..02409e35 --- /dev/null +++ b/src/pages/practice/index.vue @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/src/pages/testingHall/components/content.vue b/src/pages/testingHall/components/content.vue index 3ef186e9..a428be7a 100644 --- a/src/pages/testingHall/components/content.vue +++ b/src/pages/testingHall/components/content.vue @@ -76,6 +76,7 @@ } const getData = (from = '') => { + console.log('getDatagetDatagetDatagetDatagetDatagetDatagetData'); if (from == 'first') { if (total.value !== -1) return; status.value = 'loading' @@ -100,8 +101,11 @@ params.examStat = 'N' } queryTraExamPapersPage(params).then(res => { + console.log('resresresresres', res); total.value = res.total data_list.push(...res.body) + }).catch(res => { + console.log('谢谢谢谢谢谢', res); }).finally(() => { if (data_list.length >= total.value) { status.value = 'nomore' diff --git a/src/pages/testingHall/details.vue b/src/pages/testingHall/details.vue index 7ab30a19..d3c75ac6 100644 --- a/src/pages/testingHall/details.vue +++ b/src/pages/testingHall/details.vue @@ -7,10 +7,10 @@ 考试详情 + 已完成 - {{detailData.papersName}}萨达萨达萨达萨达萨达阿斯顿萨达萨达萨达 + {{detailData.papersName}} - 已完成 起止时间: - - 试卷信息 + + + + 试卷信息 + - 试卷总分:{{detailData.totalGrade}}分 + 考试时长:{{detailData.totalGrade}}分钟 - - 通过分数:{{detailData.passGrade}}分 - - - 考试次数:不限制 - - - 试卷类型:随机试卷 - - - - 试卷结构 - - - - - 类型 + + + + + {{detailData.passGrade}} + + 试卷总分 + + + + + {{detailData.passGrade}} + + + + 通过分数 + + + + + 不限制 + + + 通过次数 + + + + + 随机 + + + 试卷类型 + + + + + + + + 题型 + + 数量 @@ -59,6 +87,7 @@ 判断题 + {{detailData.judgeNumber}} @@ -66,10 +95,11 @@ {{detailData.judgeGrade}} - + 单选题 + {{detailData.singleNumber}} @@ -81,6 +111,7 @@ 多选题 + {{detailData.multiNumber}} @@ -88,10 +119,11 @@ {{detailData.multiGrade}} - + 问答题 + {{detailData.essayNumber}} @@ -103,6 +135,7 @@ 总计 + 20 @@ -116,8 +149,7 @@ 发布评价 + :hairline="false" @click="goto_examination()">开始考试 @@ -131,6 +163,12 @@ import { reactive } from 'vue' + import { + startTraExamPapersInfo + } from '@/api/examination.js' + + import common from '@/common/common'; + import {setPageCache, getPageCache} from '@/common/common'; const detailData = reactive({ papersId: '', papersName: '', @@ -140,14 +178,30 @@ planPersionNumber: '', }) const customStyle = { - borderRadius: '40rpx', //圆角 - backgroundColor: 'rgb(12, 123, 245)', + backgroundColor: '#0066FF', border: '1px solid rgb(12, 123, 245)', } + const goto_examination = async () => { + common.loading() + startTraExamPapersInfo({ + examId : "1" + }).then(res => { + setPageCache('examination', res.body) + common.navigateTo('/pages/examination/index') + }).finally(() => { + common.hideLoading() + }) + // papersId.value = e.papersId + // paperData.value = setPageCache('examination_'+papersId.value) + // if (!papersId.value || !paperData.value) { + // common.navigateBack() + // return + // } + } onLoad((e) => { - console.log(e); + const testing_hall_details = getPageCache('testing_hall_details') Object.assign(detailData, { - ...e + ...testing_hall_details }) }) @@ -156,30 +210,89 @@ .fixed_button_div { position: fixed; bottom: 30rpx; - width: 80vw; + width: calc(100vw - 60rpx); + } + + .title-table { + display: flex; + align-items: center; + justify-content: space-around; + + background-color: #F4F6F9; + border-radius: 16rpx; + padding: 28rpx 28rpx 26rpx 28rpx; + margin: 32rpx 0 48rpx 0; + + .title-table-item { + // background-color: red; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + height: 96rpx; + } + + .text_1 { + font-family: PingFangTC; + font-weight: 400; + font-size: 26rpx; + color: #666666; + } + + .text_2 { + font-family: Arial, Arial; + font-weight: normal; + font-size: 34rpx; + color: #333333; + font-weight: 600; + } + + .text_3 {} } .paper_div { width: 100%; min-height: 100%; - background-color: rgb(130, 142, 244); flex: 1; .paper { // width: 100%; + background-color: red; height: 100%; - margin: 24rpx 24rpx 0 24rpx; - background-color: #fff; + margin: 24rpx 30rpx 0 30rpx; border-radius: 20rpx; padding: 16rpx; + background-color: #FFFFFF; + // /* 顶部100px区域设置渐变 */ + background-image: linear-gradient(to bottom, #EBF2FE, #FFFFFF); + // /* 只显示顶部100px的渐变 */ + background-size: 100% 100px; + background-repeat: no-repeat; + box-shadow: 0 23rpx 38rpx 0px rgba(0, 0, 0, 0.06); + border: 2rpx solid #fff; } - .title { - font-size: 30rpx; - color: rgb(0, 0, 0); - font-weight: 600; - height: 70rpx; - line-height: 70rpx; + .paper_title_div { + display: flex; + align-items: center; + + .img { + height: 32rpx; + } + + .title { + font-weight: 600; + height: 70rpx; + line-height: 70rpx; + font-family: PingFangTC; + font-weight: 600; + font-size: 30rpx; + color: #333333; + font-style: normal; + margin-left: 12rpx; + + + } } .title-note { @@ -197,18 +310,42 @@ justify-content: space-between; padding: 20rpx 0 80rpx 0; + .table_th { + flex: 1; + display: flex; + background-color: #F4F6F9; + padding: 0 20rpx; + } + + .table_tr_dark { + background-color: #FAFAFA; + } + + .table_th>.table_td { + color: #333333; + font-weight: 600; + } + .table_tr { flex: 1; display: flex; + padding: 0 20rpx; } .table_td { padding: 14rpx 0; flex: 1; - display: flex; - align-items: center; - justify-content: center; + font-family: PingFangSC; + font-size: 30rpx; + line-height: 30rpx; + text-align: center; } + + .table_tr>.table_td { + color: #666666; + font-weight: 400; + } + } } @@ -218,17 +355,55 @@ align-items: center; padding-top: var(--status-bar-height); overflow: hidden; + } + + .body-title { + background-color: #337FFF; + width: 100%; + position: relative; + text-align: center; + height: 140rpx; + line-height: 140rpx; + font-family: PingFangSC; + font-weight: 500; + font-size: 38rpx; + color: #FFFFFF; + font-style: normal; + } .detail_div { + margin-top: -20rpx; + z-index: 2; width: 100%; padding: 48rpx 40rpx 20rpx 40rpx; - - .title_div{ + background-color: #FFFFFF; + border-radius: 16rpx 16rpx 0 0; + position: relative; + overflow: hidden; + + .subscript { + position: absolute; + top: 0; + right: 0; + width: 102rpx; + height: 42rpx; + font-family: PingFangSC; + font-weight: 400; + font-size: 24rpx; + line-height: 42rpx; + display: flex; + align-items: center; + justify-content: center; + border-radius: 0 0 0 28rpx; + } + + .title_div { display: flex; justify-content: space-between; flex: 1; + .title { font-family: PingFangSC; font-weight: 600; @@ -238,21 +413,11 @@ text-align: left; font-style: normal; } - .subscript { - width: 102rpx; - height: 42rpx; - border-radius: 10rpx; - font-family: PingFangSC; - font-weight: 400; - font-size: 24rpx; - line-height: 42rpx; - display: flex; - align-items: center; - justify-content: center; - } - + + + } - + .time { font-size: 24rpx; color: #999999; @@ -283,29 +448,65 @@ color: #666666; } } + .incomplete { - + // 进行中 .subscript { color: #FFFFFF; background-color: #EF5705; } - + .color_class { color: #D70C18; } } - + .completed { - + // 已完成 .subscript { color: #FFFFFF; background-color: #33C583; } - + .color_class { color: #0066FF; } } + + .back_div { + position: absolute; + left: 26rpx; + height: 100%; + top: 0; + display: flex; + align-items: center; + + .back-icon { + position: relative; + width: 50rpx; + height: 50rpx; + cursor: pointer; + display: flex; + align-items: center; + } + + .back-icon::before, + .back-icon::after { + content: ''; + position: absolute; + transition: all 0.3s ease; + } + + .back-icon::after { + top: 25%; + left: 25%; + width: 40%; + height: 40%; + border-top: 4rpx solid #fff; + border-left: 4rpx solid #fff; + transform: rotate(-45deg); + } + } \ No newline at end of file diff --git a/src/pages/testingHall/index.vue b/src/pages/testingHall/index.vue index 5a2d7a2c..8b2453cd 100644 --- a/src/pages/testingHall/index.vue +++ b/src/pages/testingHall/index.vue @@ -47,6 +47,7 @@ import { onLoad } from '@dcloudio/uni-app' + import {setPageCache} from '@/common/common'; import common from '@/common/common'; const customStyle = { backgroundColor: "#F1F5FA", @@ -96,21 +97,16 @@ console.log('搜索', searchText.value); } const gotoDetails = (item) => { - - const detailData = { - ...item - }; - const params = new URLSearchParams(); - for (const key in detailData) { - params.append(key, detailData[key]); - } - const urlParams = params.toString(); - common.navigateTo(`/pages/testingHall/details?${urlParams}`); - + setPageCache('testing_hall_details', item) + 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') }, { diff --git a/src/pages/wrong_question_record/index.vue b/src/pages/wrong_question_record/index.vue index 017ffc7f..a6604e73 100644 --- a/src/pages/wrong_question_record/index.vue +++ b/src/pages/wrong_question_record/index.vue @@ -39,7 +39,7 @@ computed, nextTick, onMounted, - watch + watch } from 'vue'; import { LineBg @@ -51,7 +51,7 @@ } from '@/api/courseDetail.js'; import common from '@/common/common'; const statusBarHeight = uni.getSystemInfoSync().statusBarHeight; - + const courseRef = ref(null); const correctRef = ref(null); const tabAct = ref(0); @@ -60,7 +60,7 @@ }, { name: '已订正' }]); - + const tabChange = (item) => { tabAct.value = item.index; }; @@ -68,13 +68,15 @@ tabAct.value = item.detail.current; }; onMounted(() => { - watch(tabAct, (newValue, oldValue) => { - if(newValue === 0) { - courseRef.value?.getData('first') - } else if(newValue === 1) { - correctRef.value?.getData('first') - } - }, { immediate: true }) // 这里的immediate会在onMounted之后执行 + watch(tabAct, (newValue, oldValue) => { + if (newValue === 0) { + courseRef.value?.getData('first') + } else if (newValue === 1) { + correctRef.value?.getData('first') + } + }, { + immediate: true + }) // 这里的immediate会在onMounted之后执行 }) @@ -82,6 +84,7 @@ $bg-margin-left: 50rpx; .my_tabs { + // 解决这个圆角的图片,开穿透 :deep(.uv-tabs__wrapper__nav__line) { height: 26rpx !important; @@ -90,7 +93,7 @@ background-repeat: no-repeat !important; } } - + .swiper { height: calc(100vh - var(--status-bar-height) - 54rpx - 88rpx - 20rpx - 10rpx); } @@ -134,6 +137,7 @@ align-items: center; justify-content: center; background-color: #fff; + .back_div { position: absolute; left: 20rpx; diff --git a/src/pagesA.json b/src/pagesA.json index 9dd07c3e..9b2725d7 100644 --- a/src/pagesA.json +++ b/src/pagesA.json @@ -125,6 +125,25 @@ "titleNView": false } } + }, + { + "path": "pages/examination/index", + "style": { + "navigationBarTitleText": "考试", + "app-plus": { + "titleNView": false + } + } + }, + { + "path": "pages/practice/index", + "style": { + "navigationBarTitleText": "练习", + "app-plus": { + "titleNView": false + } + } } + ] } \ No newline at end of file diff --git a/src/static/images/common/primary.png b/src/static/images/common/primary.png new file mode 100644 index 00000000..ca49f010 Binary files /dev/null and b/src/static/images/common/primary.png differ diff --git a/src/static/images/examination/sheet.png b/src/static/images/examination/sheet.png new file mode 100644 index 00000000..04168bb2 Binary files /dev/null and b/src/static/images/examination/sheet.png differ diff --git a/src/static/images/message_notification/delete_icon.png b/src/static/images/messageNotification/delete_icon.png similarity index 100% rename from src/static/images/message_notification/delete_icon.png rename to src/static/images/messageNotification/delete_icon.png diff --git a/src/static/images/message_notification/type_1.png b/src/static/images/messageNotification/type_1.png similarity index 100% rename from src/static/images/message_notification/type_1.png rename to src/static/images/messageNotification/type_1.png diff --git a/src/static/images/message_notification/type_2.png b/src/static/images/messageNotification/type_2.png similarity index 100% rename from src/static/images/message_notification/type_2.png rename to src/static/images/messageNotification/type_2.png diff --git a/src/static/images/message_notification/type_3.png b/src/static/images/messageNotification/type_3.png similarity index 100% rename from src/static/images/message_notification/type_3.png rename to src/static/images/messageNotification/type_3.png diff --git a/src/static/images/message_notification/type_4.png b/src/static/images/messageNotification/type_4.png similarity index 100% rename from src/static/images/message_notification/type_4.png rename to src/static/images/messageNotification/type_4.png diff --git a/src/static/images/message_notification/type_5.png b/src/static/images/messageNotification/type_5.png similarity index 100% rename from src/static/images/message_notification/type_5.png rename to src/static/images/messageNotification/type_5.png diff --git a/src/static/images/testingHall/testing.png b/src/static/images/testingHall/testing.png new file mode 100644 index 00000000..06ef9097 Binary files /dev/null and b/src/static/images/testingHall/testing.png differ diff --git a/src/uni_modules/uv-count-down/changelog.md b/src/uni_modules/uv-count-down/changelog.md new file mode 100644 index 00000000..44392c2c --- /dev/null +++ b/src/uni_modules/uv-count-down/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-10-13) +1. unmounted兼容vue3 +## 1.0.2(2023-06-20) +1. 增加外部样式customStyle参数 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-count-down 倒计时 diff --git a/src/uni_modules/uv-count-down/components/uv-count-down/props.js b/src/uni_modules/uv-count-down/components/uv-count-down/props.js new file mode 100644 index 00000000..c5b54618 --- /dev/null +++ b/src/uni_modules/uv-count-down/components/uv-count-down/props.js @@ -0,0 +1,25 @@ +export default { + props: { + // 倒计时时长,单位ms + time: { + type: [String, Number], + default: 0 + }, + // 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 + format: { + type: String, + default: 'HH:mm:ss' + }, + // 是否自动开始倒计时 + autoStart: { + type: Boolean, + default: true + }, + // 是否展示毫秒倒计时 + millisecond: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.countDown + } +} \ No newline at end of file diff --git a/src/uni_modules/uv-count-down/components/uv-count-down/utils.js b/src/uni_modules/uv-count-down/components/uv-count-down/utils.js new file mode 100644 index 00000000..8c750050 --- /dev/null +++ b/src/uni_modules/uv-count-down/components/uv-count-down/utils.js @@ -0,0 +1,62 @@ +// 补0,如1 -> 01 +function padZero(num, targetLength = 2) { + let str = `${num}` + while (str.length < targetLength) { + str = `0${str}` + } + return str +} +const SECOND = 1000 +const MINUTE = 60 * SECOND +const HOUR = 60 * MINUTE +const DAY = 24 * HOUR +export function parseTimeData(time) { + const days = Math.floor(time / DAY) + const hours = Math.floor((time % DAY) / HOUR) + const minutes = Math.floor((time % HOUR) / MINUTE) + const seconds = Math.floor((time % MINUTE) / SECOND) + const milliseconds = Math.floor(time % SECOND) + return { + days, + hours, + minutes, + seconds, + milliseconds + } +} +export function parseFormat(format, timeData) { + let { + days, + hours, + minutes, + seconds, + milliseconds + } = timeData + // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去 + if (format.indexOf('DD') === -1) { + hours += days * 24 + } else { + // 对天补0 + format = format.replace('DD', padZero(days)) + } + // 其他同理于DD的格式化处理方式 + if (format.indexOf('HH') === -1) { + minutes += hours * 60 + } else { + format = format.replace('HH', padZero(hours)) + } + if (format.indexOf('mm') === -1) { + seconds += minutes * 60 + } else { + format = format.replace('mm', padZero(minutes)) + } + if (format.indexOf('ss') === -1) { + milliseconds += seconds * 1000 + } else { + format = format.replace('ss', padZero(seconds)) + } + return format.replace('SSS', padZero(milliseconds, 3)) +} +export function isSameSecond(time1, time2) { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000) +} diff --git a/src/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue b/src/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue new file mode 100644 index 00000000..a758d310 --- /dev/null +++ b/src/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue @@ -0,0 +1,169 @@ + + + \ No newline at end of file diff --git a/src/uni_modules/uv-count-down/package.json b/src/uni_modules/uv-count-down/package.json new file mode 100644 index 00000000..da501f12 --- /dev/null +++ b/src/uni_modules/uv-count-down/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-count-down", + "displayName": "uv-count-down 倒计时 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "该倒计时组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。", + "keywords": [ + "uv-count-down", + "uvui", + "uv-ui", + "countDown", + "倒计时" +], + "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" + ], + "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-count-down/readme.md b/src/uni_modules/uv-count-down/readme.md new file mode 100644 index 00000000..0f326a85 --- /dev/null +++ b/src/uni_modules/uv-count-down/readme.md @@ -0,0 +1,11 @@ +## CountDown 倒计时 + +> **组件名:uv-count-down** + +该组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/src/uni_modules/uv-line-progress/changelog.md b/src/uni_modules/uv-line-progress/changelog.md new file mode 100644 index 00000000..975acce8 --- /dev/null +++ b/src/uni_modules/uv-line-progress/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-20) +1. 适配height参数携带单位 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-line-progress 线形进度条 diff --git a/src/uni_modules/uv-line-progress/components/uv-line-progress/props.js b/src/uni_modules/uv-line-progress/components/uv-line-progress/props.js new file mode 100644 index 00000000..23138c7d --- /dev/null +++ b/src/uni_modules/uv-line-progress/components/uv-line-progress/props.js @@ -0,0 +1,29 @@ +export default { + props: { + // 激活部分的颜色 + activeColor: { + type: String, + default: '#19be6b' + }, + inactiveColor: { + type: String, + default: '#ececec' + }, + // 进度百分比,数值 + percentage: { + type: [String, Number], + default: 0 + }, + // 是否在进度条内部显示百分比的值 + showText: { + type: Boolean, + default: true + }, + // 进度条的高度,单位px + height: { + type: [String, Number], + default: 12 + }, + ...uni.$uv?.props?.lineProgress + } +} \ No newline at end of file diff --git a/src/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue b/src/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue new file mode 100644 index 00000000..229c2aa1 --- /dev/null +++ b/src/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/uni_modules/uv-line-progress/package.json b/src/uni_modules/uv-line-progress/package.json new file mode 100644 index 00000000..01e550e4 --- /dev/null +++ b/src/uni_modules/uv-line-progress/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-line-progress", + "displayName": "uv-line-progress 线形进度条 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-line-progress 该组件展示操作或任务的当前进度,比如上传文件,是一个线形的进度条。", + "keywords": [ + "uv-line-progress", + "uvui", + "uv-ui", + "progress", + "进度条" +], + "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" + ], + "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-line-progress/readme.md b/src/uni_modules/uv-line-progress/readme.md new file mode 100644 index 00000000..98e5d495 --- /dev/null +++ b/src/uni_modules/uv-line-progress/readme.md @@ -0,0 +1,11 @@ +## LineProgress 线形进度条 + +> **组件名:uv-line-progress** + +展示操作或任务的当前进度,比如上传文件,是一个线形的进度条。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群