From 59c49bfdf24e7a99e7d5e309b8f137b509599670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=84=86=E7=9A=AE=E9=B8=AD?= <1003092440@qq.com> Date: Mon, 30 Oct 2023 20:29:18 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../questionBank/components/Question.vue | 108 +++++--- src/uni_modules/g-preview-img/changelog.md | 11 + .../g-preview-img/g-preview-img.vue | 235 +++++++++++++++++ src/uni_modules/g-preview-img/package.json | 84 ++++++ src/uni_modules/g-preview-img/readme.md | 64 +++++ src/uni_modules/q-previewImage/changelog.md | 24 ++ .../q-previewImage/q-previewImage.vue | 121 +++++++++ src/uni_modules/q-previewImage/package.json | 81 ++++++ src/uni_modules/q-previewImage/readme.md | 244 ++++++++++++++++++ 9 files changed, 931 insertions(+), 41 deletions(-) create mode 100644 src/uni_modules/g-preview-img/changelog.md create mode 100644 src/uni_modules/g-preview-img/components/g-preview-img/g-preview-img.vue create mode 100644 src/uni_modules/g-preview-img/package.json create mode 100644 src/uni_modules/g-preview-img/readme.md create mode 100644 src/uni_modules/q-previewImage/changelog.md create mode 100644 src/uni_modules/q-previewImage/components/q-previewImage/q-previewImage.vue create mode 100644 src/uni_modules/q-previewImage/package.json create mode 100644 src/uni_modules/q-previewImage/readme.md diff --git a/src/pages/questionBank/components/Question.vue b/src/pages/questionBank/components/Question.vue index 08331a4..4777f26 100644 --- a/src/pages/questionBank/components/Question.vue +++ b/src/pages/questionBank/components/Question.vue @@ -7,9 +7,8 @@ :class="tCurrent==item.value?'checked':'unchecked'" @tap="sectionChange(item.value)">{{item.label}} - + @@ -17,8 +16,10 @@ {{getQuestType(quesItem.type)}} {{quesItem.question}} - - + + + + @@ -232,8 +242,8 @@ - + {{index+1}} - + @@ -317,10 +327,11 @@ }, data() { return { - subject:'1', - showSkillInfo:'hidden', - currentType:storage.get('carType') || '1001', - onoff:'0', + imgs: [], + subject: '1', + showSkillInfo: 'hidden', + currentType: storage.get('carType') || '1001', + onoff: '0', navTitle: '', originArray: '', showBestAnswer: false, @@ -333,7 +344,7 @@ tCurrent: 0, index: 0, qIndex: 0, - storageRightList:storage.get(`rightList_subject${this.subject}`) || [], + storageRightList: storage.get(`rightList_subject${this.subject}`) || [], storageWrongList: storage.get(`wrongList_subject${this.subject}`) || [], rightList: [], wrongList: [], @@ -348,9 +359,9 @@ } }, created() { - const carType=storage.get('carType') || '1001' - querySysConfig(carType, 'NeedSkillInfo').then(resp=>{ - if(resp.code === '0000'){ + const carType = storage.get('carType') || '1001' + querySysConfig(carType, 'NeedSkillInfo').then(resp => { + if (resp.code === '0000') { this.showSkillInfo = resp.data.configValue } }) @@ -377,12 +388,27 @@ }, timeCount() { - const time = 45 * 60 * 1000 + const time = 45 * 60 * 1000 return time } }, methods: { ...mapActions(useQuestionStore, ['getCurrentIndex']), + open() { + + }, + preview(url) { + this.imgs = [url] //设置图片数组 + // #ifdef MP-WEIXIN + this.$nextTick(() => { + this.imgs = [url] + setTimeout(()=>{ + this.$refs.previewRef.open(url); + },500) + }) + // #endif + + }, getOriginArr(val) { const arr = JSON.parse(val) let arr1 = [] @@ -536,11 +562,11 @@ toSubmit() { const restTime = this.time.hours * 60 * 60 + this.time.minutes * 60 + this.time.seconds const score = (this.rightList.length / this.questionList.length * 100).toFixed(0) - if(this.rightList.length+this.wrongList.length==0){ + if (this.rightList.length + this.wrongList.length == 0) { uni.navigateBack({ - delta:1 + delta: 1 }) - }else{ + } else { submitTest({ "carTypeId": storage.get('carType') || '1001', "score": score, @@ -769,12 +795,12 @@ if (title) { this.navTitle = title } - if(subject){ + if (subject) { this.subject = subject console.log(this.subject); - this.storageRightList=storage.get(`rightList_subject${subject}`) || [] - this.storageWrongList=storage.get(`wrongList_subject${subject}`) || [] - this.collectList=storage.get(`collectList_subject${subject}`) || [] + this.storageRightList = storage.get(`rightList_subject${subject}`) || [] + this.storageWrongList = storage.get(`wrongList_subject${subject}`) || [] + this.collectList = storage.get(`collectList_subject${subject}`) || [] } if (val && val.length) { this.questionList = JSON.parse(val) @@ -783,12 +809,12 @@ } console.log(this.questionList); if (this.navTitle === '顺序答题') { - if(subject){ + if (subject) { this.pickerTopic(this[`currentIndex_subject${subject}`]) - }else{ + } else { this.pickerTopic(this[`currentIndex_subject${this.subject}`]) } - + } else { this.pickerTopic(this.topicIndex) } diff --git a/src/uni_modules/g-preview-img/changelog.md b/src/uni_modules/g-preview-img/changelog.md new file mode 100644 index 0000000..a688afc --- /dev/null +++ b/src/uni_modules/g-preview-img/changelog.md @@ -0,0 +1,11 @@ +## 1.0.4(2022-12-07) +修改:判断在APP端不监听document的滚动 +## 1.0.3(2022-12-05) +新增:支持视频预览,视频图片混用 +新增:支持预览单张,handlePreviewImg方法直接传入图片或视频地址即可单张预览 +## 1.0.2(2022-12-05) + +## 1.0.1(2022-12-05) +文档错误修改 +## 1.0.0(2022-11-29) +初始化插件 diff --git a/src/uni_modules/g-preview-img/components/g-preview-img/g-preview-img.vue b/src/uni_modules/g-preview-img/components/g-preview-img/g-preview-img.vue new file mode 100644 index 0000000..f235e7f --- /dev/null +++ b/src/uni_modules/g-preview-img/components/g-preview-img/g-preview-img.vue @@ -0,0 +1,235 @@ + + + diff --git a/src/uni_modules/g-preview-img/package.json b/src/uni_modules/g-preview-img/package.json new file mode 100644 index 0000000..a37a659 --- /dev/null +++ b/src/uni_modules/g-preview-img/package.json @@ -0,0 +1,84 @@ +{ + "id": "g-preview-img", + "displayName": "g-preview-img一款兼容vue2,vue3的图片预览插件,视频预览,支持单张多张,左右滑动,放大缩小", + "version": "1.0.4", + "description": "g-preview-img一款兼容vue2,vue3的图片预览插件,视频预览,支持单张多张,左右滑动,放大缩小", + "keywords": [ + "vue2", + "vue3", + "图片预览", + "视频预览" +], + "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": [], + "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" + }, + "小程序": { + "微信": "u", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/g-preview-img/readme.md b/src/uni_modules/g-preview-img/readme.md new file mode 100644 index 0000000..202bf5e --- /dev/null +++ b/src/uni_modules/g-preview-img/readme.md @@ -0,0 +1,64 @@ +![image](https://deaon-saasvideo.oss-cn-shanghai.aliyuncs.com/11111.gif) +### 一款兼容vue2,vue3的图片预览插件,视频预览,支持图片视频混用,支持单张多张,左右滑动,放大缩小 + +### 基础使用方法 + +```javascript + + + +``` + +| 属性名/事件 | 类型 | 默认值 | 说明 | +| ----------------- | ------------ | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| modeClass | Array/String | \['fade', 'zoom-out'] | uni-transition组件过渡效果,可选值见 | +| indicatorDotsType | Boolean | false | 多张图片的指示器,ture为圆点,false数字,当图片列表只有一张图片时,默认不展示指示器 | +| imgList | Array | | 图片列表 | +| disabledScale | Boolean | false | 是否禁止双指放大缩小 | +| @preview | 打开关闭事件 | | 接受一个参数,ture为开启,false为关闭 | +| @changeImg | 图片切换的事件 | | 参数为当前的图片索引 | + +#### 插槽,自定义翻页按钮 + +```js + + + + + + +``` + +#### 支持uniapp原生swiper的属性 + + 插件内部swiper标签上绑定了$attrs,所以在使用时可以传入一些swiper的属性 + 注意:不要传disable-touch这个属性,会有意想不到的错误 + +**插件bug会及时修复!!** diff --git a/src/uni_modules/q-previewImage/changelog.md b/src/uni_modules/q-previewImage/changelog.md new file mode 100644 index 0000000..cd4026c --- /dev/null +++ b/src/uni_modules/q-previewImage/changelog.md @@ -0,0 +1,24 @@ +## 1.1.1(2023-08-01) +优化文档 +## 1.1.0(2023-08-01) +优化文档 +## 1.0.9(2023-07-10) +优化文档 +## 1.0.8(2023-06-25) +优化文档 +## 1.0.7(2023-06-25) +优化文档 +## 1.0.6(2023-05-26) +优化文档 +## 1.0.5(2023-05-22) +优化文档 +## 1.0.4(2023-04-30) +新增图片放大功能,解决原生组件和tabbar导航栏等无法覆盖的问题 +## 1.0.3(2023-04-28) +优化文档 +## 1.0.2(2023-04-28) +优化文档 +## 1.0.1(2023-04-28) +新增长按事件 +## 1.0.0(2023-04-28) +插件上线 diff --git a/src/uni_modules/q-previewImage/components/q-previewImage/q-previewImage.vue b/src/uni_modules/q-previewImage/components/q-previewImage/q-previewImage.vue new file mode 100644 index 0000000..5386aa1 --- /dev/null +++ b/src/uni_modules/q-previewImage/components/q-previewImage/q-previewImage.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/src/uni_modules/q-previewImage/package.json b/src/uni_modules/q-previewImage/package.json new file mode 100644 index 0000000..3550c3f --- /dev/null +++ b/src/uni_modules/q-previewImage/package.json @@ -0,0 +1,81 @@ +{ + "id": "q-previewImage", + "displayName": "图片预览、多图左右滑动、图片放大、支持覆盖原生组件、原生导航栏、tabbar", + "version": "1.1.1", + "description": "最简洁的模拟图片预览,支持长按事件,多图左右滑动,大图上下滑动查看,支持图片放大,支持覆盖原生组件/原生导航栏/tabbar 支持vue2/vue3/app/小程序/h5", + "keywords": [ + "图片预览" +], + "repository": "", + "engines": { + "HBuilderX": "^3.4.14" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "u", + "微信浏览器(Android)": "u", + "QQ浏览器(Android)": "u" + }, + "H5-pc": { + "Chrome": "u", + "IE": "u", + "Edge": "u", + "Firefox": "u", + "Safari": "u" + }, + "小程序": { + "微信": "y", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/q-previewImage/readme.md b/src/uni_modules/q-previewImage/readme.md new file mode 100644 index 0000000..76c9508 --- /dev/null +++ b/src/uni_modules/q-previewImage/readme.md @@ -0,0 +1,244 @@ +# 最简洁的模拟图片预览,支持长按事件,多图左右滑动,大图上下滑动查看,支持图片放大,支持覆盖原生组件/原生导航栏/tabbar 支持vue2/vue3/app/小程序/h5 + + - 为了解决项目中因一些特殊原因无法使用uni.previewImage,例如App.onShow或者页面的oShow中写了方法。 + - 如果用uni.previewImage,每次预览图片都会进到onShow的方法里 + - 可以基本实现官方的预览图片功能,但是体验不如uni.previewImage() + - 如没有特殊原因,还是推荐官方的uni.previewImage() + +## 安装指引 + +##1. 在插件市场打开本插件页面,在右侧点击`使用 HBuilderX 导入插件`,选择要导入的项目点击确定 + +##2. 使用方法 vue2写法 + +``` + + + + + +``` + +##3. vue3 setup写法 + +``` + + + + + +``` + +##4. 项目示例 (一般返回的数据图片是以逗号或特殊字符分割的字符串,点击时就需要传两个参数,一个是图片数组,一个是当前图片的index) +## 注意q-previewImage不要写在循环体中,imgs其实就是用来存放当前图片的数组,每次点击每次赋值就行 + +``` + + + + +``` + + +## 如果插件对您有一点帮助,请给个五星好评,感谢支持 + + +## 如有问题,请加qq 965969604 \ No newline at end of file From 7b1db47383ba799455d2792203e6e26a2a4fc4bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=84=86=E7=9A=AE=E9=B8=AD?= <1003092440@qq.com> Date: Tue, 7 Nov 2023 20:50:15 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/me/index.vue | 13 ++++++++++++- src/static/image/mine/callme.png | Bin 0 -> 6013 bytes 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 src/static/image/mine/callme.png diff --git a/src/pages/me/index.vue b/src/pages/me/index.vue index e3bf2b8..c4f0b23 100644 --- a/src/pages/me/index.vue +++ b/src/pages/me/index.vue @@ -81,11 +81,16 @@ - + + + + @@ -146,6 +151,12 @@ export default { this.carName = storage.get('carName') || '小车C1/C2/C3' }, methods: { + // 拨打电话 + callPhoneNumber() { + uni.makePhoneCall({ + phoneNumber: '15105693067' + }); + }, toChangeCarType() { uni.navigateTo({ url: "/pages/me/changeCarType" diff --git a/src/static/image/mine/callme.png b/src/static/image/mine/callme.png new file mode 100644 index 0000000000000000000000000000000000000000..fce91198ae33af9b93d3c5d773ed1447dfe5d9cc GIT binary patch literal 6013 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