From fc9212733dc4a567e308b67be2f9cb7d16c11847 Mon Sep 17 00:00:00 2001 From: chenkainan Date: Tue, 27 Aug 2024 17:36:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages.json | 26 + pages/index/index.vue | 33 +- pages/user/user.vue | 569 ++++++++++++++++++- static/js/mmmm-image-tools/index.js | 196 +++++++ static/js/mmmm-image-tools/package.json | 11 + static/js/request.js | 4 +- subPackages/eventCalendar/eventCalendar.vue | 593 ++++++++++++++++++++ subPackages/service/service.vue | 186 ++++++ subPackages/user/profile.vue | 350 ++++++++++++ subPackages/user/travelerList.vue | 77 +++ 10 files changed, 2035 insertions(+), 10 deletions(-) create mode 100644 static/js/mmmm-image-tools/index.js create mode 100644 static/js/mmmm-image-tools/package.json create mode 100644 subPackages/eventCalendar/eventCalendar.vue create mode 100644 subPackages/service/service.vue create mode 100644 subPackages/user/profile.vue create mode 100644 subPackages/user/travelerList.vue diff --git a/pages.json b/pages.json index d873ada..9e1f013 100644 --- a/pages.json +++ b/pages.json @@ -22,6 +22,7 @@ { "path": "pages/user/user", "style": { + "navigationStyle": "custom", "navigationBarTitleText": "我的" } } @@ -61,6 +62,31 @@ "navigationBarTitleText": "", "navigationStyle": "custom" } + }, + { + "path": "eventCalendar/eventCalendar", + "style": { + "navigationBarTitleText": "活动日历", + "navigationStyle": "custom" + } + }, + { + "path": "service/service", + "style": { + "navigationBarTitleText": "投诉举报" + } + }, + { + "path": "user/profile", + "style": { + "navigationBarTitleText": "个人信息" + } + }, + { + "path": "user/travelerList", + "style": { + "navigationBarTitleText": "常用信息" + } } ] }], diff --git a/pages/index/index.vue b/pages/index/index.vue index 90c3ec2..cb44463 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -20,7 +20,7 @@ - 通知通知通知通知通知通知通知通知通知知通知知通知知通知 + {{notice}} @@ -58,7 +58,7 @@ - 今日共有27个活动 >>> + 今日共有{{eventCalendarNum}}个活动 >>> 活动日历 @@ -80,7 +80,7 @@ - 热门 + {{item.goods.image_tag}} @@ -103,7 +103,7 @@ - 人气推荐 + {{item.goods.image_tag}} {{item.goods.low_money / 100}} {{item.goods.title}} @@ -122,7 +122,7 @@ - 近期上新 + {{item.image_tag}} {{item.title}} @@ -196,7 +196,7 @@ { img: 'https://static.ticket.sz-trip.com/yandu/images/index/jdmp.png', text: '活动日历', - path: '' + path: '/subPackages/eventCalendar/eventCalendar' } ], scenic: {}, @@ -206,7 +206,9 @@ lineList: [], foodList: [], strategyList: [], - showMore: true + showMore: true, + notice: '', + eventCalendarNum: 0 } }, onReady() { @@ -223,8 +225,22 @@ this.getLineList() this.getFoodList() this.getArticleByType() + this.getLatest() + this.getEventCalendarNum() }, methods: { + // 获取活动日历数量 + getEventCalendarNum() { + this.Post({},'/api/activity/getActivityCalendarCount').then(res => { + this.eventCalendarNum = res.data.count + }) + }, + // 公告 + getLatest() { + this.Post({},'/api/anncmnt/getLatest').then(res => { + this.notice = res.data.title + }) + }, // 顶部banner getTopBanner() { this.Post({ @@ -569,6 +585,7 @@ font-size: 27rpx; color: #FFFFFF; overflow-x: auto; + white-space: nowrap; } .hot::-webkit-scrollbar { display: none; @@ -647,6 +664,7 @@ background: #71B580; border-radius: 0rpx 20rpx 0rpx 20rpx; overflow-x: auto; + white-space: nowrap; } .recommend::-webkit-scrollbar { display: none; @@ -709,6 +727,7 @@ font-size: 27rpx; color: #FFFFFF; overflow-x: auto; + white-space: nowrap; } .title-tag::-webkit-scrollbar { display: none; diff --git a/pages/user/user.vue b/pages/user/user.vue index 02409e3..274b63f 100644 --- a/pages/user/user.vue +++ b/pages/user/user.vue @@ -1,8 +1,575 @@ - \ No newline at end of file diff --git a/static/js/mmmm-image-tools/index.js b/static/js/mmmm-image-tools/index.js new file mode 100644 index 0000000..acf40bc --- /dev/null +++ b/static/js/mmmm-image-tools/index.js @@ -0,0 +1,196 @@ +function getLocalFilePath(path) { + if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) { + return path + } + if (path.indexOf('file://') === 0) { + return path + } + if (path.indexOf('/storage/emulated/0/') === 0) { + return path + } + if (path.indexOf('/') === 0) { + var localFilePath = plus.io.convertAbsoluteFileSystem(path) + if (localFilePath !== path) { + return localFilePath + } else { + path = path.substr(1) + } + } + return '_www/' + path +} + +function dataUrlToBase64(str) { + var array = str.split(',') + return array[array.length - 1] +} + +var index = 0 +function getNewFileId() { + return Date.now() + String(index++) +} + +function biggerThan(v1, v2) { + var v1Array = v1.split('.') + var v2Array = v2.split('.') + var update = false + for (var index = 0; index < v2Array.length; index++) { + var diff = v1Array[index] - v2Array[index] + if (diff !== 0) { + update = diff > 0 + break + } + } + return update +} + +export function pathToBase64(path) { + return new Promise(function(resolve, reject) { + if (typeof window === 'object' && 'document' in window) { + if (typeof FileReader === 'function') { + var xhr = new XMLHttpRequest() + xhr.open('GET', path, true) + xhr.responseType = 'blob' + xhr.onload = function() { + if (this.status === 200) { + let fileReader = new FileReader() + fileReader.onload = function(e) { + resolve(e.target.result) + } + fileReader.onerror = reject + fileReader.readAsDataURL(this.response) + } + } + xhr.onerror = reject + xhr.send() + return + } + var canvas = document.createElement('canvas') + var c2x = canvas.getContext('2d') + var img = new Image + img.onload = function() { + canvas.width = img.width + canvas.height = img.height + c2x.drawImage(img, 0, 0) + resolve(canvas.toDataURL()) + canvas.height = canvas.width = 0 + } + img.onerror = reject + img.src = path + return + } + if (typeof plus === 'object') { + plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) { + entry.file(function(file) { + var fileReader = new plus.io.FileReader() + fileReader.onload = function(data) { + resolve(data.target.result) + } + fileReader.onerror = function(error) { + reject(error) + } + fileReader.readAsDataURL(file) + }, function(error) { + reject(error) + }) + }, function(error) { + reject(error) + }) + return + } + if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) { + wx.getFileSystemManager().readFile({ + filePath: path, + encoding: 'base64', + success: function(res) { + resolve('data:image/png;base64,' + res.data) + }, + fail: function(error) { + reject(error) + } + }) + return + } + reject(new Error('not support')) + }) +} + +export function base64ToPath(base64) { + return new Promise(function(resolve, reject) { + if (typeof window === 'object' && 'document' in window) { + base64 = base64.split(',') + var type = base64[0].match(/:(.*?);/)[1] + var str = atob(base64[1]) + var n = str.length + var array = new Uint8Array(n) + while (n--) { + array[n] = str.charCodeAt(n) + } + return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type }))) + } + var extName = base64.split(',')[0].match(/data\:\S+\/(\S+);/) + if (extName) { + extName = extName[1] + } else { + reject(new Error('base64 error')) + } + var fileName = getNewFileId() + '.' + extName + if (typeof plus === 'object') { + var basePath = '_doc' + var dirPath = 'uniapp_temp' + var filePath = basePath + '/' + dirPath + '/' + fileName + if (!biggerThan(plus.os.name === 'Android' ? '1.9.9.80627' : '1.9.9.80472', plus.runtime.innerVersion)) { + plus.io.resolveLocalFileSystemURL(basePath, function(entry) { + entry.getDirectory(dirPath, { + create: true, + exclusive: false, + }, function(entry) { + entry.getFile(fileName, { + create: true, + exclusive: false, + }, function(entry) { + entry.createWriter(function(writer) { + writer.onwrite = function() { + resolve(filePath) + } + writer.onerror = reject + writer.seek(0) + writer.writeAsBinary(dataUrlToBase64(base64)) + }, reject) + }, reject) + }, reject) + }, reject) + return + } + var bitmap = new plus.nativeObj.Bitmap(fileName) + bitmap.loadBase64Data(base64, function() { + bitmap.save(filePath, {}, function() { + bitmap.clear() + resolve(filePath) + }, function(error) { + bitmap.clear() + reject(error) + }) + }, function(error) { + bitmap.clear() + reject(error) + }) + return + } + if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) { + var filePath = wx.env.USER_DATA_PATH + '/' + fileName + wx.getFileSystemManager().writeFile({ + filePath: filePath, + data: dataUrlToBase64(base64), + encoding: 'base64', + success: function() { + resolve(filePath) + }, + fail: function(error) { + reject(error) + } + }) + return + } + reject(new Error('not support')) + }) +} \ No newline at end of file diff --git a/static/js/mmmm-image-tools/package.json b/static/js/mmmm-image-tools/package.json new file mode 100644 index 0000000..e8b9c0a --- /dev/null +++ b/static/js/mmmm-image-tools/package.json @@ -0,0 +1,11 @@ +{ + "id": "mmmm-image-tools", + "name": "image-tools", + "version": "1.4.0", + "description": "图像转换工具,可用于图像和base64的转换", + "keywords": [ + "base64", + "保存", + "图像" + ] +} \ No newline at end of file diff --git a/static/js/request.js b/static/js/request.js index 9af8eeb..e71d867 100644 --- a/static/js/request.js +++ b/static/js/request.js @@ -1,7 +1,7 @@ import Vue from 'vue' import store from '@/store' -let NEWAPIURL = 'https://tongli.sz-trip.com/' +let NEWAPIURL = 'https://tongli.sz-trip.com' Vue.prototype.Post = (params, apiurl) => { if (uni.getStorageSync('userInfo') && JSON.parse(uni.getStorageSync('userInfo')).token) params.token = JSON.parse(uni.getStorageSync('userInfo')).token @@ -16,7 +16,7 @@ Vue.prototype.Post = (params, apiurl) => { data: params || {}, header: params.header || { 'content-type': 'application/json', - 'token': params.token || '41ba9f3e-1add-4d5c-ae47-330e0864ad56' + 'token': params.token || '2dd9b712-f118-41f6-b3a8-602e4fbb0ce3' }, success: res => { uni.hideLoading() diff --git a/subPackages/eventCalendar/eventCalendar.vue b/subPackages/eventCalendar/eventCalendar.vue new file mode 100644 index 0000000..7de40f2 --- /dev/null +++ b/subPackages/eventCalendar/eventCalendar.vue @@ -0,0 +1,593 @@ + + + + + \ No newline at end of file diff --git a/subPackages/service/service.vue b/subPackages/service/service.vue new file mode 100644 index 0000000..b5a1498 --- /dev/null +++ b/subPackages/service/service.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/subPackages/user/profile.vue b/subPackages/user/profile.vue new file mode 100644 index 0000000..17de9b1 --- /dev/null +++ b/subPackages/user/profile.vue @@ -0,0 +1,350 @@ + + + + + diff --git a/subPackages/user/travelerList.vue b/subPackages/user/travelerList.vue new file mode 100644 index 0000000..8f5c7eb --- /dev/null +++ b/subPackages/user/travelerList.vue @@ -0,0 +1,77 @@ + + + + +