This commit is contained in:
2025-01-16 10:43:34 +08:00
parent 90a57bcfdb
commit 8ed3fdcde2
182 changed files with 19251 additions and 26623 deletions
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"app.js","sources":["App.vue"],"sourcesContent":["<script>\r\n\timport {\r\n\t\twxLogin,\r\n\t\tgetUserInfo\r\n\t} from './util/index'\r\n\r\n\r\n\texport default {\r\n\t\tonLaunch: function() {\r\n\t\t\tconsole.log('App Launch')\r\n\t\t\t// 自动登录\r\n\t\t},\r\n\t\tonShow: async function() {\r\n\t\t\tconsole.log('App Show')\r\n\t\t\tawait this.autoLogin()\r\n\r\n\t\t},\r\n\t\tonHide: function() {\r\n\t\t\tconsole.log('App Hide')\r\n\t\t},\r\n\r\n\r\n\r\n\t\tmethods: {\r\n\t\t\tasync autoLogin() {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst loginResult = await wxLogin()\r\n\t\t\t\t\tconsole.log('自动登录成功:', loginResult)\r\n\t\t\t\t\t// await getUserInfo()\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tconsole.error('自动登录失败:', error)\r\n\t\t\t\t\t// 登录失败的处理可以在 wxLogin 中统一处理\r\n\t\t\t\t\t// 这里可以添加特殊的错误处理逻辑\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\t@import \"uview-ui/index.scss\"\r\n\r\n\t/*每个页面公共css */\r\n</style>"],"names":["uni","wxLogin"],"mappings":";;;;;;;;;;;;;;;AAOC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,iBAAY,YAAY;AAAA,EAExB;AAAA,EACD,QAAQ,iBAAiB;AACxBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AACtB,UAAM,KAAK,UAAU;AAAA,EAErB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACtB;AAAA,EAID,SAAS;AAAA,IACR,MAAM,YAAY;AACjB,UAAI;AACH,cAAM,cAAc,MAAMC,mBAAQ;AAClCD,sBAAAA,MAAY,MAAA,OAAA,iBAAA,WAAW,WAAW;AAAA,MAEjC,SAAO,OAAO;AACfA,sBAAAA,sCAAc,WAAW,KAAK;AAAA,MAG/B;AAAA,IACD;AAAA,EACD;AACD;;;;;;;;;"}
@@ -0,0 +1 @@
{"version":3,"file":"assets.js","sources":["static/scan-icon.png","static/jl.png","static/complaint.png","static/hlep.png"],"sourcesContent":["export default \"__VITE_ASSET__b9d91c1a__\"","export default \"__VITE_ASSET__44ff4dfa__\"","export default \"__VITE_ASSET__d1c6bbb6__\"","export default \"__VITE_ASSET__f0ed8f64__\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;;;;;"}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"version":3,"file":"http.js","sources":["config/http.js"],"sourcesContent":["import {\r\n\tURL,\r\n\tappid\r\n} from './url'\r\n\r\nconst request = (option) => {\r\n\treturn new Promise((resolve, reject) => {\r\n\t\tuni.request({\r\n\t\t\turl: URL + option.url,\r\n\t\t\tmethod: option.method,\r\n\t\t\tdata: option.data,\r\n\t\t\theader: {\r\n\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\",\r\n\t\t\t\t\t...option.headers,\r\n\t\t\t\t'appid': appid,\r\n\t\t\t\t'Authorization': \"Bearer \" + uni.getStorageSync('token'),\r\n\t\t\t\t'Clientid': uni.getStorageSync('client_id')\r\n\t\t\t},\r\n\t\t\tsuccess(res) {\r\n\t\t\t\tresolve(res.data)\r\n\t\t\t}\r\n\t\t})\r\n\t})\r\n}\r\n\r\n\r\nexport default request"],"names":["uni","URL","appid"],"mappings":";;;AAKK,MAAC,UAAU,CAAC,WAAW;AAC3B,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvCA,kBAAAA,MAAI,QAAQ;AAAA,MACX,KAAKC,WAAAA,MAAM,OAAO;AAAA,MAClB,QAAQ,OAAO;AAAA,MACf,MAAM,OAAO;AAAA,MACb,QAAQ;AAAA,QACP,gBAAgB;AAAA,QACf,GAAG,OAAO;AAAA,QACX,SAASC,WAAK;AAAA,QACd,iBAAiB,YAAYF,oBAAI,eAAe,OAAO;AAAA,QACvD,YAAYA,cAAAA,MAAI,eAAe,WAAW;AAAA,MAC1C;AAAA,MACD,QAAQ,KAAK;AACZ,gBAAQ,IAAI,IAAI;AAAA,MAChB;AAAA,IACJ,CAAG;AAAA,EACH,CAAE;AACF;;"}
@@ -0,0 +1 @@
{"version":3,"file":"url.js","sources":["config/url.js"],"sourcesContent":["export const URL = \"https://notify.gxfs123.com\"\r\n\r\nexport const appid = \"wxabe9cc4db1005fcb\""],"names":[],"mappings":";AAAY,MAAC,MAAM;AAEP,MAAC,QAAQ;;;"}
@@ -0,0 +1 @@
{"version":3,"file":"user.js","sources":["config/user.js"],"sourcesContent":["import request from './http'\r\n\r\n\r\nexport const login = (data) => {\r\n return request({\r\n url: '/app/user/login',\r\n method: 'get',\r\n data\r\n })\r\n}\r\n\r\n\r\nexport const getMyIndexInfo = (data) => {\r\n return request({\r\n url: '/app/user/userInfo',\r\n method: 'get',\r\n data,\r\n })\r\n}\r\n\r\n//获取所有全部订单\r\nexport const getOrderList = (data) => {\r\n return request({\r\n url: '/app/order/list',\r\n method: 'get',\r\n data,\r\n hideLoading:true\r\n })\r\n}\r\n\r\n//查询是否有订单\r\nexport const queryHasOrder = (data) => {\r\n return request({\r\n url: `/app/order/getActiveOrder/${data}`,\r\n method: 'get',\r\n })\r\n}\r\n\r\n//设备查询\r\nexport const getDeviceInfo = (deviceNo) => {\r\n return request({\r\n url: `/app/device/${deviceNo}`,\r\n method: 'get',\r\n })\r\n}\r\n\r\n\r\n//创建订单\r\nexport const createOrder = (data) => {\r\n return request({\r\n url: '/app/order/add',\r\n method: 'post',\r\n data,\r\n })\r\n}\r\n\r\n//查询订单\r\nexport const queryById = (id) => {\r\n return request({\r\n url: `/app/order/${id}`,\r\n method: 'get',\r\n })\r\n}\r\n\r\n\r\n//取消订单\r\nexport const cancelOrder = (data) => {\r\n return request({\r\n url: '/orderInfo/cancelOrder',\r\n method: 'get',\r\n data,\r\n })\r\n}\r\n\r\n\r\n//结束订单\r\nexport const overOrderById = (data) => {\r\n return request({\r\n url: `/app/order/close/${data}`,\r\n method: 'get',\r\n })\r\n}\r\n\r\n\r\n//投诉反馈\r\nexport const addUserFeedback = (data) => {\r\n return request({\r\n url: '/app/feedback/add',\r\n method: 'post',\r\n data,\r\n })\r\n}\r\n"],"names":["request"],"mappings":";;AAGY,MAAC,QAAQ,CAAC,SAAS;AAC3B,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,iBAAiB,CAAC,SAAS;AACpC,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,eAAe,CAAC,SAAS;AAClC,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,aAAY;AAAA,EACpB,CAAK;AACL;AAGY,MAAC,gBAAgB,CAAC,SAAS;AACnC,SAAOA,oBAAQ;AAAA,IACX,KAAK,6BAA6B,IAAI;AAAA,IACtC,QAAQ;AAAA,EAChB,CAAK;AACL;AAGY,MAAC,gBAAgB,CAAC,aAAa;AACvC,SAAOA,oBAAQ;AAAA,IACX,KAAK,eAAe,QAAQ;AAAA,IAC5B,QAAQ;AAAA,EAChB,CAAK;AACL;;;;;;"}
@@ -0,0 +1 @@
{"version":3,"file":"help.js","sources":["constants/help.js"],"sourcesContent":["// 帮助中心文案配置\r\nexport const HELP_CONTENT = {\r\n // FAQ列表\r\n FAQ_LIST: [\r\n {\r\n question: '如何租借风扇?',\r\n answer: '点击首页\"扫码租借\"按钮,使用微信扫描设备上的二维码,按提示完成支付即可使用。'\r\n },\r\n {\r\n question: '收费标准是怎样的?',\r\n answer: '使用费用为2元/小时,不足1小时按1小时计算。押金99元,归还后自动退还。'\r\n },\r\n {\r\n question: '如何归还风扇?',\r\n answer: '将风扇带到任意归还点,点击首页\"扫码归还\"按钮,扫描归还点二维码即可完成归还。'\r\n },\r\n {\r\n question: '押金多久能退还?',\r\n answer: '归还设备后押金将自动发起退款,预计0-7个工作日到账。'\r\n },\r\n {\r\n question: '设备无法正常使用怎么办?',\r\n answer: '您可以通过\"我的-投诉与建议\"提交故障反馈,或直接拨打客服电话处理。'\r\n }\r\n ],\r\n\r\n // 联系方式\r\n CONTACT: {\r\n TITLE: '联系客服',\r\n PHONE: {\r\n LABEL: '客服电话',\r\n VALUE: '400-888-8888'\r\n },\r\n SERVICE_TIME: {\r\n LABEL: '服务时间',\r\n VALUE: '周一至周日 09:00-22:00'\r\n }\r\n }\r\n} "],"names":[],"mappings":";AACY,MAAC,eAAe;AAAA;AAAA,EAE1B,UAAU;AAAA,IACR;AAAA,MACE,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD;AAAA,MACE,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD;AAAA,MACE,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD;AAAA,MACE,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD;AAAA,MACE,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGD,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,IACR;AAAA,IACD,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,IACR;AAAA,EACF;AACH;;"}
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["pages/bagCheck/index.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvYmFnQ2hlY2svaW5kZXgudnVl"],"sourcesContent":["<template>\n\t<view>\n\t\t1111111\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t\n\t\t}\n\t}\n</script>\n\n<style>\n\n</style>\n","import MiniProgramPage from 'D:/fans1-3/fs/pages/bagCheck/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;AAOC,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO,CAEP;AAAA,EACA;AAAA,EACD,SAAS,CAET;AACD;;;;;ACfD,GAAG,WAAW,eAAe;"}
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["pages/bagCheck/index/index.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvYmFnQ2hlY2svaW5kZXgvaW5kZXgudnVl"],"sourcesContent":["<template>\n\t<view>\n\t\t\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t\n\t\t}\n\t}\n</script>\n\n<style>\n\n</style>\n","import MiniProgramPage from 'D:/fans1-3/fs/pages/bagCheck/index/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;AAOC,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO,CAEP;AAAA,EACA;AAAA,EACD,SAAS,CAET;AACD;;;;;ACfD,GAAG,WAAW,eAAe;"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["pages/help/index.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvaGVscC9pbmRleC52dWU"],"sourcesContent":["<template>\r\n <view class=\"help-container\">\r\n <!-- 常见问题 -->\r\n <view class=\"faq-list\">\r\n <view \r\n class=\"faq-item\"\r\n v-for=\"(item, index) in faqList\"\r\n :key=\"index\"\r\n @click=\"toggleFaq(index)\"\r\n >\r\n <view class=\"faq-header\">\r\n <text class=\"question\">{{ item.question }}</text>\r\n <view class=\"arrow\" :class=\"{ open: item.isOpen }\"></view>\r\n </view>\r\n <view class=\"answer\" v-show=\"item.isOpen\">\r\n {{ item.answer }}\r\n </view>\r\n </view>\r\n </view>\r\n\r\n <!-- 联系客服 -->\r\n <view class=\"contact-card\">\r\n <view class=\"contact-title\">{{ HELP_CONTENT.CONTACT.TITLE }}</view>\r\n <view class=\"contact-content\">\r\n <view class=\"contact-item\">\r\n <text class=\"label\">{{ HELP_CONTENT.CONTACT.PHONE.LABEL }}</text>\r\n <text class=\"value\" @click=\"makePhoneCall\">{{ HELP_CONTENT.CONTACT.PHONE.VALUE }}</text>\r\n </view>\r\n <view class=\"contact-item\">\r\n <text class=\"label\">{{ HELP_CONTENT.CONTACT.SERVICE_TIME.LABEL }}</text>\r\n <text class=\"value\">{{ HELP_CONTENT.CONTACT.SERVICE_TIME.VALUE }}</text>\r\n </view>\r\n </view>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script>\r\nimport { HELP_CONTENT } from '@/constants/help'\r\n\r\nexport default {\r\n data() {\r\n return {\r\n HELP_CONTENT,\r\n faqList: HELP_CONTENT.FAQ_LIST.map(item => ({\r\n ...item,\r\n isOpen: false\r\n }))\r\n }\r\n },\r\n methods: {\r\n toggleFaq(index) {\r\n this.faqList[index].isOpen = !this.faqList[index].isOpen\r\n },\r\n makePhoneCall() {\r\n uni.makePhoneCall({\r\n phoneNumber: HELP_CONTENT.CONTACT.PHONE.VALUE\r\n })\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.help-container {\r\n min-height: 100vh;\r\n background: #f8f8f8;\r\n padding: 30rpx;\r\n\r\n .faq-list {\r\n background: #fff;\r\n border-radius: 20rpx;\r\n padding: 20rpx;\r\n margin-bottom: 30rpx;\r\n box-shadow: 0 4rpx 16rpx rgba(0,0,0,0.04);\r\n\r\n .faq-item {\r\n border-bottom: 1rpx solid #f5f5f5;\r\n \r\n &:last-child {\r\n border-bottom: none;\r\n }\r\n\r\n .faq-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 30rpx 20rpx;\r\n\r\n .question {\r\n font-size: 30rpx;\r\n color: #333;\r\n flex: 1;\r\n padding-right: 20rpx;\r\n }\r\n\r\n .arrow {\r\n width: 16rpx;\r\n height: 16rpx;\r\n border-right: 4rpx solid #999;\r\n border-bottom: 4rpx solid #999;\r\n transform: rotate(45deg);\r\n transition: all 0.3s;\r\n\r\n &.open {\r\n transform: rotate(-135deg);\r\n }\r\n }\r\n }\r\n\r\n .answer {\r\n font-size: 28rpx;\r\n color: #666;\r\n line-height: 1.6;\r\n padding: 0 20rpx 30rpx;\r\n background: #f9f9f9;\r\n border-radius: 10rpx;\r\n margin: 0 20rpx 20rpx;\r\n }\r\n }\r\n }\r\n\r\n .contact-card {\r\n background: #fff;\r\n border-radius: 20rpx;\r\n padding: 30rpx;\r\n box-shadow: 0 4rpx 16rpx rgba(0,0,0,0.04);\r\n\r\n .contact-title {\r\n font-size: 32rpx;\r\n color: #333;\r\n font-weight: 500;\r\n margin-bottom: 20rpx;\r\n border-left: 8rpx solid #1976D2;\r\n padding-left: 20rpx;\r\n }\r\n\r\n .contact-content {\r\n .contact-item {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 20rpx 0;\r\n \r\n .label {\r\n font-size: 28rpx;\r\n color: #666;\r\n }\r\n\r\n .value {\r\n font-size: 28rpx;\r\n color: #333;\r\n font-weight: 500;\r\n\r\n &:active {\r\n opacity: 0.7;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style> ","import MiniProgramPage from 'D:/fans1-3/fs/pages/help/index.vue'\nwx.createPage(MiniProgramPage)"],"names":["HELP_CONTENT","uni"],"mappings":";;;AAwCA,MAAK,YAAU;AAAA,EACb,OAAO;AACL,WAAO;AAAA,oBACLA,eAAY;AAAA,MACZ,SAASA,eAAY,aAAC,SAAS,IAAI,WAAS;AAAA,QAC1C,GAAG;AAAA,QACH,QAAQ;AAAA,MACV,EAAE;AAAA,IACJ;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,UAAU,OAAO;AACf,WAAK,QAAQ,KAAK,EAAE,SAAS,CAAC,KAAK,QAAQ,KAAK,EAAE;AAAA,IACnD;AAAA,IACD,gBAAgB;AACdC,oBAAAA,MAAI,cAAc;AAAA,QAChB,aAAaD,eAAY,aAAC,QAAQ,MAAM;AAAA,OACzC;AAAA,IACH;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;;;;;;AC3DA,GAAG,WAAW,eAAe;"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["pages/serve/bagCheck/index.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvc2VydmUvYmFnQ2hlY2svaW5kZXgudnVl"],"sourcesContent":["<template>\r\n\t<view>\r\n\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\n\timport {\r\n\t\twxLogin,\r\n\t} from '../../../util/index'\r\n\r\n\timport {\r\n\t\tqueryHasOrder\r\n\t} from '@/config/user.js'\r\n\r\n\texport default {\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\r\n\t\t\t}\r\n\t\t},\r\n\t\tasync onLoad(option) {\r\n\r\n\t\t\tif (!uni.getStorageSync('token')) {\r\n\t\t\t\tconst res = await wxLogin();\r\n\t\t\t\tconsole.log(333, res);\r\n\t\t\t}\r\n\r\n\t\t\tconst reuslt = await queryHasOrder(111)\r\n\t\t\tif (reuslt.data.length != 0) {\r\n\t\t\t\tuni.reLaunch({\r\n\t\t\t\t\turl: `/pages/device/return?deviceNo=${option.deviceNo}`\r\n\t\t\t\t})\r\n\t\t\t} else {\r\n\t\t\t\tuni.reLaunch({\r\n\t\t\t\t\turl: `/pages/device/detail?deviceNo=${option.deviceNo}`\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t},\r\n\t\tmethods: {\r\n\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\r\n</style>","import MiniProgramPage from 'D:/fans1-3/fs/pages/serve/bagCheck/index.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni","wxLogin","queryHasOrder"],"mappings":";;;;AAeC,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO,CAEP;AAAA,EACA;AAAA,EACD,MAAM,OAAO,QAAQ;AAEpB,QAAI,CAACA,cAAG,MAAC,eAAe,OAAO,GAAG;AACjC,YAAM,MAAM,MAAMC,WAAAA;AAClBD,oBAAA,MAAA,MAAA,OAAA,wCAAY,KAAK,GAAG;AAAA,IACrB;AAEA,UAAM,SAAS,MAAME,YAAa,cAAC,GAAG;AACtC,QAAI,OAAO,KAAK,UAAU,GAAG;AAC5BF,oBAAAA,MAAI,SAAS;AAAA,QACZ,KAAK,iCAAiC,OAAO,QAAQ;AAAA,OACrD;AAAA,WACK;AACNA,oBAAAA,MAAI,SAAS;AAAA,QACZ,KAAK,iCAAiC,OAAO,QAAQ;AAAA,OACrD;AAAA,IACF;AAAA,EACA;AAAA,EACD,SAAS,CAET;AACD;;;;;ACzCD,GAAG,WAAW,eAAe;"}
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["util/index.js"],"sourcesContent":["import {\r\n\tlogin,\r\n\tgetMyIndexInfo\r\n} from \"../config/user\"\r\n\r\n// 微信登录方法\r\nexport const wxLogin = () => {\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t// 1. 获取微信登录凭证\r\n\t\tuni.login({\r\n\t\t\tprovider: 'weixin',\r\n\t\t\tsuccess: async (loginRes) => {\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (loginRes.code) {\r\n\t\t\t\t\t\t// 2. 发送 code 到后端换取 token\r\n\t\t\t\t\t\tconst result = await login({\r\n\t\t\t\t\t\t\tcode: loginRes.code,\r\n\t\t\t\t\t\t\tappid: \"wxabe9cc4db1005fcb\"\r\n\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\tif (result.code === 200) {\r\n\t\t\t\t\t\t\t// 3. 保存token和用户信息\r\n\r\n\t\t\t\t\t\t\tuni.setStorageSync('token', result.data.LoginWxVo.access_token)\r\n\t\t\t\t\t\t\tuni.setStorageSync('client_id', result.data.LoginWxVo.client_id)\r\n\r\n\t\t\t\t\t\t\tresolve(result.data)\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthrow new Error(result.message || '登录失败')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow new Error('获取微信登录凭证失败')\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (error) {\r\n\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: error.message || '登录失败',\r\n\t\t\t\t\t\ticon: 'none'\r\n\t\t\t\t\t})\r\n\t\t\t\t\treject(error)\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfail: (error) => {\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '微信登录失败',\r\n\t\t\t\t\ticon: 'none'\r\n\t\t\t\t})\r\n\t\t\t\treject(error)\r\n\t\t\t}\r\n\t\t})\r\n\t})\r\n}\r\n\r\n// 检查登录状态\r\n// export const checkLogin = () => {\r\n// const token = uni.getStorageSync('token')\r\n// return !!token\r\n// }\r\n\r\n// 获取用户信息\r\nexport const getUserInfo = () => {\r\n\r\n\r\n\r\n\treturn new Promise(async (res, rej) => {\r\n\r\n\t\tconst result = await getMyIndexInfo({\r\n\t\t\tisHide: false,\r\n\t\t})\r\n\t\tres(result)\r\n\t})\r\n}\r\n\r\n\r\n\r\nexport const getQueryString = function (url, name) {\r\n var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')\r\n var r = url.substr(1).match(reg)\r\n if (r != null) {\r\n return r[2]\r\n }\r\n return null;\r\n}"],"names":["uni","login","getMyIndexInfo"],"mappings":";;;AAMY,MAAC,UAAU,MAAM;AAC5B,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAEvCA,kBAAAA,MAAI,MAAM;AAAA,MACT,UAAU;AAAA,MACV,SAAS,OAAO,aAAa;AAE5B,YAAI;AACH,cAAI,SAAS,MAAM;AAElB,kBAAM,SAAS,MAAMC,kBAAM;AAAA,cAC1B,MAAM,SAAS;AAAA,cACf,OAAO;AAAA,YACd,CAAO;AAED,gBAAI,OAAO,SAAS,KAAK;AAGxBD,4BAAG,MAAC,eAAe,SAAS,OAAO,KAAK,UAAU,YAAY;AAC9DA,4BAAG,MAAC,eAAe,aAAa,OAAO,KAAK,UAAU,SAAS;AAE/D,sBAAQ,OAAO,IAAI;AAAA,YAC1B,OAAa;AACN,oBAAM,IAAI,MAAM,OAAO,WAAW,MAAM;AAAA,YACxC;AAAA,UACP,OAAY;AACN,kBAAM,IAAI,MAAM,YAAY;AAAA,UAC5B;AAAA,QACD,SAAQ,OAAO;AAEfA,wBAAAA,MAAI,UAAU;AAAA,YACb,OAAO,MAAM,WAAW;AAAA,YACxB,MAAM;AAAA,UACZ,CAAM;AACD,iBAAO,KAAK;AAAA,QACZ;AAAA,MACD;AAAA,MACD,MAAM,CAAC,UAAU;AAChBA,sBAAAA,MAAI,UAAU;AAAA,UACb,OAAO;AAAA,UACP,MAAM;AAAA,QACX,CAAK;AACD,eAAO,KAAK;AAAA,MACZ;AAAA,IACJ,CAAG;AAAA,EACH,CAAE;AACF;AASY,MAAC,cAAc,MAAM;AAIhC,SAAO,IAAI,QAAQ,OAAO,KAAK,QAAQ;AAEtC,UAAM,SAAS,MAAME,2BAAe;AAAA,MACnC,QAAQ;AAAA,IACX,CAAG;AACD,QAAI,MAAM;AAAA,EACZ,CAAE;AACF;AAIY,MAAC,iBAAiB,SAAU,KAAK,MAAM;AAC/C,MAAI,MAAM,IAAI,OAAO,aAAa,OAAO,uBAAuB,GAAG;AACnE,MAAI,IAAI,IAAI,OAAO,CAAC,EAAE,MAAM,GAAG;AAC/B,MAAI,KAAK,MAAM;AACX,WAAO,EAAE,CAAC;AAAA,EACb;AACD,SAAO;AACX;;;;"}
+46
View File
@@ -0,0 +1,46 @@
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const common_vendor = require("./common/vendor.js");
const util_index = require("./util/index.js");
if (!Math) {
"./pages/index/index.js";
"./pages/my/index.js";
"./pages/deposit/index.js";
"./pages/order/index.js";
"./pages/feedback/index.js";
"./pages/help/index.js";
"./pages/device/detail.js";
"./pages/serve/bagCheck/index.js";
"./pages/device/return.js";
}
const _sfc_main = {
onLaunch: function() {
common_vendor.index.__f__("log", "at App.vue:10", "App Launch");
},
onShow: async function() {
common_vendor.index.__f__("log", "at App.vue:14", "App Show");
await this.autoLogin();
},
onHide: function() {
common_vendor.index.__f__("log", "at App.vue:19", "App Hide");
},
methods: {
async autoLogin() {
try {
const loginResult = await util_index.wxLogin();
common_vendor.index.__f__("log", "at App.vue:28", "自动登录成功:", loginResult);
} catch (error) {
common_vendor.index.__f__("error", "at App.vue:31", "自动登录失败:", error);
}
}
}
};
function createApp() {
const app = common_vendor.createSSRApp(_sfc_main);
return {
app
};
}
createApp().app.mount("#app");
exports.createApp = createApp;
//# sourceMappingURL=../.sourcemap/mp-weixin/app.js.map
+39
View File
@@ -0,0 +1,39 @@
{
"pages": [
"pages/index/index",
"pages/my/index",
"pages/deposit/index",
"pages/order/index",
"pages/feedback/index",
"pages/help/index",
"pages/device/detail",
"pages/serve/bagCheck/index",
"pages/device/return"
],
"window": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "共享风扇",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"color": "#999999",
"selectedColor": "#1976D2",
"backgroundColor": "#ffffff",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "static/home.png",
"selectedIconPath": "static/home-active.png"
},
{
"pagePath": "pages/my/index",
"text": "我的",
"iconPath": "static/user.png",
"selectedIconPath": "static/user-active.png"
}
]
},
"usingComponents": {}
}
File diff suppressed because it is too large Load Diff
+10
View File
@@ -0,0 +1,10 @@
"use strict";
const _imports_0$1 = "/static/scan-icon.png";
const _imports_0 = "/static/jl.png";
const _imports_1 = "/static/complaint.png";
const _imports_2 = "/static/hlep.png";
exports._imports_0 = _imports_0$1;
exports._imports_0$1 = _imports_0;
exports._imports_1 = _imports_1;
exports._imports_2 = _imports_2;
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/assets.js.map
File diff suppressed because it is too large Load Diff
+24
View File
@@ -0,0 +1,24 @@
"use strict";
const common_vendor = require("../common/vendor.js");
const config_url = require("./url.js");
const request = (option) => {
return new Promise((resolve, reject) => {
common_vendor.index.request({
url: config_url.URL + option.url,
method: option.method,
data: option.data,
header: {
"Content-Type": "application/x-www-form-urlencoded",
...option.headers,
"appid": config_url.appid,
"Authorization": "Bearer " + common_vendor.index.getStorageSync("token"),
"Clientid": common_vendor.index.getStorageSync("client_id")
},
success(res) {
resolve(res.data);
}
});
});
};
exports.request = request;
//# sourceMappingURL=../../.sourcemap/mp-weixin/config/http.js.map
+6
View File
@@ -0,0 +1,6 @@
"use strict";
const URL = "https://notify.gxfs123.com";
const appid = "wxabe9cc4db1005fcb";
exports.URL = URL;
exports.appid = appid;
//# sourceMappingURL=../../.sourcemap/mp-weixin/config/url.js.map
+42
View File
@@ -0,0 +1,42 @@
"use strict";
const config_http = require("./http.js");
const login = (data) => {
return config_http.request({
url: "/app/user/login",
method: "get",
data
});
};
const getMyIndexInfo = (data) => {
return config_http.request({
url: "/app/user/userInfo",
method: "get",
data
});
};
const getOrderList = (data) => {
return config_http.request({
url: "/app/order/list",
method: "get",
data,
hideLoading: true
});
};
const queryHasOrder = (data) => {
return config_http.request({
url: `/app/order/getActiveOrder/${data}`,
method: "get"
});
};
const getDeviceInfo = (deviceNo) => {
return config_http.request({
url: `/app/device/${deviceNo}`,
method: "get"
});
};
exports.getDeviceInfo = getDeviceInfo;
exports.getMyIndexInfo = getMyIndexInfo;
exports.getOrderList = getOrderList;
exports.login = login;
exports.queryHasOrder = queryHasOrder;
//# sourceMappingURL=../../.sourcemap/mp-weixin/config/user.js.map
+40
View File
@@ -0,0 +1,40 @@
"use strict";
const HELP_CONTENT = {
// FAQ列表
FAQ_LIST: [
{
question: "如何租借风扇?",
answer: '点击首页"扫码租借"按钮,使用微信扫描设备上的二维码,按提示完成支付即可使用。'
},
{
question: "收费标准是怎样的?",
answer: "使用费用为2元/小时,不足1小时按1小时计算。押金99元,归还后自动退还。"
},
{
question: "如何归还风扇?",
answer: '将风扇带到任意归还点,点击首页"扫码归还"按钮,扫描归还点二维码即可完成归还。'
},
{
question: "押金多久能退还?",
answer: "归还设备后押金将自动发起退款,预计0-7个工作日到账。"
},
{
question: "设备无法正常使用怎么办?",
answer: '您可以通过"我的-投诉与建议"提交故障反馈,或直接拨打客服电话处理。'
}
],
// 联系方式
CONTACT: {
TITLE: "联系客服",
PHONE: {
LABEL: "客服电话",
VALUE: "400-888-8888"
},
SERVICE_TIME: {
LABEL: "服务时间",
VALUE: "周一至周日 09:00-22:00"
}
}
};
exports.HELP_CONTENT = HELP_CONTENT;
//# sourceMappingURL=../../.sourcemap/mp-weixin/constants/help.js.map
+48
View File
@@ -0,0 +1,48 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
data() {
return {
depositAmount: "99.00",
records: [
{ type: "支付", time: "2024-03-20 15:30", amount: "99.00" },
{ type: "退还", time: "2024-03-19 12:00", amount: "99.00" }
]
};
},
methods: {
handleWithdraw() {
common_vendor.index.showModal({
title: "确认提现",
content: "押金将原路退回,预计0-7个工作日到账",
success: (res) => {
if (res.confirm) {
common_vendor.index.showToast({
title: "提现申请已提交",
icon: "success"
});
}
}
});
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_vendor.t($data.depositAmount),
b: common_vendor.o((...args) => $options.handleWithdraw && $options.handleWithdraw(...args)),
c: common_vendor.f($data.records, (item, index, i0) => {
return {
a: common_vendor.t(item.type),
b: common_vendor.t(item.time),
c: common_vendor.t(item.type === "退还" ? "+" : "-"),
d: common_vendor.t(item.amount),
e: common_vendor.n(item.type === "退还" ? "refund" : ""),
f: index
};
})
};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-c7792057"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/deposit/index.js.map
+4
View File
@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "押金管理",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="deposit-container data-v-c7792057"><view class="deposit-card data-v-c7792057"><view class="title data-v-c7792057">押金余额</view><view class="amount data-v-c7792057">¥{{a}}</view><button class="withdraw-btn data-v-c7792057" bindtap="{{b}}">提现</button></view><view class="notice-card data-v-c7792057"><view class="notice-title data-v-c7792057"><view class="dot data-v-c7792057"></view><text class="data-v-c7792057">提现说明</text></view><view class="notice-content data-v-c7792057"><view class="notice-item data-v-c7792057">1. 提现金额将原路退回支付账户</view><view class="notice-item data-v-c7792057">2. 提现申请提交后预计0-7个工作日到账</view><view class="notice-item data-v-c7792057">3. 如超时未收到,请联系客服处理</view></view></view><view class="record-card data-v-c7792057"><view class="record-title data-v-c7792057">押金记录</view><view class="record-list data-v-c7792057"><view wx:for="{{c}}" wx:for-item="item" wx:key="f" class="record-item data-v-c7792057"><view class="record-info data-v-c7792057"><text class="record-type data-v-c7792057">{{item.a}}</text><text class="record-time data-v-c7792057">{{item.b}}</text></view><text class="{{['record-amount', 'data-v-c7792057', item.e]}}">{{item.c}}¥{{item.d}}</text></view></view></view></view>
+135
View File
@@ -0,0 +1,135 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.deposit-container.data-v-c7792057 {
min-height: 100vh;
background: #f8f8f8;
padding: 30rpx;
}
.deposit-container .deposit-card.data-v-c7792057 {
background: linear-gradient(135deg, #1976D2, #64B5F6);
border-radius: 20rpx;
padding: 40rpx;
color: #fff;
text-align: center;
box-shadow: 0 4rpx 20rpx rgba(25, 118, 210, 0.2);
}
.deposit-container .deposit-card .title.data-v-c7792057 {
font-size: 28rpx;
opacity: 0.9;
margin-bottom: 20rpx;
}
.deposit-container .deposit-card .amount.data-v-c7792057 {
font-size: 72rpx;
font-weight: bold;
margin-bottom: 40rpx;
}
.deposit-container .deposit-card .withdraw-btn.data-v-c7792057 {
background: #fff;
color: #1976D2;
width: 80%;
height: 80rpx;
line-height: 80rpx;
border-radius: 40rpx;
font-size: 32rpx;
font-weight: 500;
margin: 0 auto;
}
.deposit-container .deposit-card .withdraw-btn.data-v-c7792057:active {
transform: scale(0.98);
}
.deposit-container .notice-card.data-v-c7792057 {
margin-top: 30rpx;
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.deposit-container .notice-card .notice-title.data-v-c7792057 {
display: flex;
align-items: center;
margin-bottom: 20rpx;
}
.deposit-container .notice-card .notice-title .dot.data-v-c7792057 {
width: 12rpx;
height: 12rpx;
background: #1976D2;
border-radius: 50%;
margin-right: 10rpx;
}
.deposit-container .notice-card .notice-title text.data-v-c7792057 {
font-size: 30rpx;
font-weight: 500;
color: #333;
}
.deposit-container .notice-card .notice-content .notice-item.data-v-c7792057 {
font-size: 26rpx;
color: #666;
line-height: 1.8;
padding-left: 22rpx;
}
.deposit-container .record-card.data-v-c7792057 {
margin-top: 30rpx;
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.deposit-container .record-card .record-title.data-v-c7792057 {
font-size: 30rpx;
font-weight: 500;
color: #333;
margin-bottom: 20rpx;
border-left: 8rpx solid #1976D2;
padding-left: 20rpx;
}
.deposit-container .record-card .record-list .record-item.data-v-c7792057 {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
border-bottom: 1rpx solid #f5f5f5;
}
.deposit-container .record-card .record-list .record-item.data-v-c7792057:last-child {
border-bottom: none;
}
.deposit-container .record-card .record-list .record-item .record-info .record-type.data-v-c7792057 {
font-size: 28rpx;
color: #333;
margin-bottom: 6rpx;
display: block;
}
.deposit-container .record-card .record-list .record-item .record-info .record-time.data-v-c7792057 {
font-size: 24rpx;
color: #999;
}
.deposit-container .record-card .record-list .record-item .record-amount.data-v-c7792057 {
font-size: 32rpx;
color: #333;
font-weight: 500;
}
.deposit-container .record-card .record-list .record-item .record-amount.refund.data-v-c7792057 {
color: #4CAF50;
}
+165
View File
@@ -0,0 +1,165 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const config_user = require("../../config/user.js");
const _sfc_main = {
data() {
return {
deviceInfo: {},
deviceId: "",
deviceLocation: "一号教学楼大厅",
batteryLevel: 95,
hasActiveOrder: false,
deviceStatus: {
text: "可使用",
class: "available"
},
selectedPackage: 1,
packages: [
{
time: "1小时",
price: "2.00",
unitPrice: "2.00"
},
{
time: "4小时",
price: "6.00",
unitPrice: "1.50"
},
{
time: "12小时",
price: "15.00",
unitPrice: "1.25"
}
],
isLoggedIn: false
};
},
onLoad(options) {
this.deviceId = options.deviceNo;
common_vendor.index.__f__("log", "at pages/device/detail.vue:110", options.deviceNo);
this.getDeviceInfo();
},
methods: {
// 检查登录状态和订单
async getDeviceInfo() {
const res = await config_user.getDeviceInfo(this.deviceId);
if (res.code == 200) {
this.deviceInfo = res.data;
}
},
// 显示登录提示
showLoginTip() {
common_vendor.index.showModal({
title: "提示",
content: "请先登录后再操作",
confirmText: "去登录",
success: (res) => {
if (res.confirm) {
common_vendor.index.navigateTo({
url: "/pages/login/index"
});
}
}
});
},
selectPackage(index) {
this.selectedPackage = index;
},
// 检查订单状态
async checkOrderStatus() {
try {
const result = await this.$api.checkActiveOrder();
if (result.hasOrder) {
common_vendor.index.redirectTo({
url: `/pages/device/return?deviceId=${this.deviceId}`
});
}
} catch (error) {
common_vendor.index.showToast({
title: "订单状态查询失败",
icon: "none"
});
}
},
// 处理租借操作
handleRent() {
if (!this.isLoggedIn) {
this.showLoginTip();
return;
}
const selectedPkg = this.packages[this.selectedPackage];
common_vendor.index.showModal({
title: "确认租借",
content: `确认支付押金¥99.00及${selectedPkg.time}套餐费用¥${selectedPkg.price}`,
success: (res) => {
if (res.confirm) {
this.submitRentOrder();
}
}
});
},
// 提交租借订单
async submitRentOrder() {
try {
common_vendor.index.showLoading({
title: "处理中"
});
const selectedPkg = this.packages[this.selectedPackage];
const result = await this.$api.createOrder({
deviceId: this.deviceId,
packageId: this.selectedPackage,
duration: selectedPkg.time,
amount: selectedPkg.price
});
common_vendor.index.hideLoading();
if (result.success) {
common_vendor.index.showToast({
title: "租借成功",
icon: "success"
});
setTimeout(() => {
common_vendor.index.redirectTo({
url: `/pages/return/index?deviceId=${this.deviceId}&orderId=${result.orderId}`
});
}, 1500);
}
} catch (error) {
common_vendor.index.hideLoading();
common_vendor.index.showToast({
title: "租借失败,请重试",
icon: "none"
});
}
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: common_vendor.t($data.deviceId),
b: common_vendor.t($data.deviceStatus.text),
c: common_vendor.n($data.deviceStatus.class),
d: common_vendor.t($data.deviceLocation),
e: common_vendor.t($data.batteryLevel),
f: !$data.hasActiveOrder
}, !$data.hasActiveOrder ? {
g: common_vendor.f($data.packages, (pkg, index, i0) => {
return {
a: common_vendor.t(pkg.time),
b: common_vendor.t(pkg.price),
c: common_vendor.t(pkg.unitPrice),
d: index,
e: $data.selectedPackage === index ? 1 : "",
f: common_vendor.o(($event) => $options.selectPackage(index), index)
};
})
} : {}, {
h: !$data.hasActiveOrder
}, !$data.hasActiveOrder ? {} : {}, {
i: common_vendor.t($data.hasActiveOrder ? "归还设备" : "立即租借"),
j: common_vendor.n($data.hasActiveOrder ? "return" : "rent"),
k: common_vendor.o((...args) => _ctx.handleAction && _ctx.handleAction(...args))
});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-d65de3a7"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/device/detail.js.map
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "设备详情",
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="detail-container data-v-d65de3a7"><view class="device-card data-v-d65de3a7"><view class="device-header data-v-d65de3a7"><view class="device-title data-v-d65de3a7"><text class="name data-v-d65de3a7">共享风扇</text><text class="id data-v-d65de3a7">设备号:{{a}}</text></view><view class="{{['status', 'data-v-d65de3a7', c]}}">{{b}}</view></view><view class="device-info data-v-d65de3a7"><view class="info-item data-v-d65de3a7"><text class="label data-v-d65de3a7">设备位置</text><text class="value data-v-d65de3a7">{{d}}</text></view><view class="info-item data-v-d65de3a7"><text class="label data-v-d65de3a7">电池电量</text><text class="value data-v-d65de3a7">{{e}}%</text></view></view></view><view wx:if="{{f}}" class="package-section data-v-d65de3a7"><view class="section-title data-v-d65de3a7">选择套餐</view><view class="package-list data-v-d65de3a7"><view wx:for="{{g}}" wx:for-item="pkg" wx:key="d" class="{{['package-item', 'data-v-d65de3a7', pkg.e && 'active']}}" bindtap="{{pkg.f}}"><view class="package-content data-v-d65de3a7"><text class="time data-v-d65de3a7">{{pkg.a}}</text><text class="price data-v-d65de3a7">¥{{pkg.b}}</text></view><text class="unit-price data-v-d65de3a7">约{{pkg.c}}元/小时</text></view></view></view><view class="notice-section data-v-d65de3a7"><view class="section-title data-v-d65de3a7">使用说明</view><view class="notice-list data-v-d65de3a7"><view class="notice-item data-v-d65de3a7"><view class="dot data-v-d65de3a7"></view><text class="data-v-d65de3a7">请在使用前检查设备是否完好</text></view><view class="notice-item data-v-d65de3a7"><view class="dot data-v-d65de3a7"></view><text class="data-v-d65de3a7">超出使用时间将自动按小时计费</text></view><view class="notice-item data-v-d65de3a7"><view class="dot data-v-d65de3a7"></view><text class="data-v-d65de3a7">请在指定区域内使用设备</text></view></view></view><view class="bottom-bar data-v-d65de3a7"><view wx:if="{{h}}" class="price-info data-v-d65de3a7"><text class="deposit-text data-v-d65de3a7">押金:</text><text class="deposit-amount data-v-d65de3a7">¥99</text></view><button class="{{['action-btn', 'data-v-d65de3a7', j]}}" bindtap="{{k}}">{{i}}</button></view></view>
+219
View File
@@ -0,0 +1,219 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.detail-container.data-v-d65de3a7 {
min-height: 100vh;
background: #f8f8f8;
padding: 30rpx;
padding-bottom: 180rpx;
box-sizing: border-box;
}
.detail-container .device-card.data-v-d65de3a7 {
background: #fff;
border-radius: 24rpx;
padding: 30rpx;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.detail-container .device-card .device-header.data-v-d65de3a7 {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
}
.detail-container .device-card .device-header .device-title .name.data-v-d65de3a7 {
font-size: 36rpx;
font-weight: 600;
color: #333;
margin-right: 20rpx;
}
.detail-container .device-card .device-header .device-title .id.data-v-d65de3a7 {
font-size: 24rpx;
color: #999;
}
.detail-container .device-card .device-header .status.data-v-d65de3a7 {
padding: 8rpx 24rpx;
border-radius: 24rpx;
font-size: 24rpx;
}
.detail-container .device-card .device-header .status.available.data-v-d65de3a7 {
background: #E8F5E9;
color: #4CAF50;
}
.detail-container .device-card .device-header .status.in-use.data-v-d65de3a7 {
background: #E3F2FD;
color: #1976D2;
}
.detail-container .device-card .device-info .info-item.data-v-d65de3a7 {
display: flex;
justify-content: space-between;
margin-bottom: 16rpx;
}
.detail-container .device-card .device-info .info-item.data-v-d65de3a7:last-child {
margin-bottom: 0;
}
.detail-container .device-card .device-info .info-item .label.data-v-d65de3a7 {
font-size: 28rpx;
color: #666;
}
.detail-container .device-card .device-info .info-item .value.data-v-d65de3a7 {
font-size: 28rpx;
color: #333;
}
.detail-container .package-section.data-v-d65de3a7 {
background: #fff;
border-radius: 24rpx;
padding: 30rpx;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.detail-container .package-section .section-title.data-v-d65de3a7 {
font-size: 32rpx;
font-weight: 600;
color: #333;
margin-bottom: 24rpx;
}
.detail-container .package-section .package-list.data-v-d65de3a7 {
display: flex;
justify-content: space-between;
}
.detail-container .package-section .package-list .package-item.data-v-d65de3a7 {
flex: 1;
margin: 0 10rpx;
padding: 24rpx;
background: #F5F5F5;
border-radius: 16rpx;
text-align: center;
transition: all 0.3s;
}
.detail-container .package-section .package-list .package-item.data-v-d65de3a7:first-child {
margin-left: 0;
}
.detail-container .package-section .package-list .package-item.data-v-d65de3a7:last-child {
margin-right: 0;
}
.detail-container .package-section .package-list .package-item.active.data-v-d65de3a7 {
background: #E3F2FD;
border: 2rpx solid #1976D2;
}
.detail-container .package-section .package-list .package-item.active .package-content .time.data-v-d65de3a7,
.detail-container .package-section .package-list .package-item.active .package-content .price.data-v-d65de3a7 {
color: #1976D2;
}
.detail-container .package-section .package-list .package-item .package-content.data-v-d65de3a7 {
margin-bottom: 8rpx;
}
.detail-container .package-section .package-list .package-item .package-content .time.data-v-d65de3a7 {
font-size: 28rpx;
color: #333;
margin-bottom: 8rpx;
display: block;
}
.detail-container .package-section .package-list .package-item .package-content .price.data-v-d65de3a7 {
font-size: 36rpx;
font-weight: 600;
color: #333;
}
.detail-container .package-section .package-list .package-item .unit-price.data-v-d65de3a7 {
font-size: 24rpx;
color: #999;
}
.detail-container .notice-section.data-v-d65de3a7 {
background: #fff;
border-radius: 24rpx;
padding: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.detail-container .notice-section .section-title.data-v-d65de3a7 {
font-size: 32rpx;
font-weight: 600;
color: #333;
margin-bottom: 24rpx;
}
.detail-container .notice-section .notice-list .notice-item.data-v-d65de3a7 {
display: flex;
align-items: center;
margin-bottom: 16rpx;
}
.detail-container .notice-section .notice-list .notice-item.data-v-d65de3a7:last-child {
margin-bottom: 0;
}
.detail-container .notice-section .notice-list .notice-item .dot.data-v-d65de3a7 {
width: 12rpx;
height: 12rpx;
background: #1976D2;
border-radius: 50%;
margin-right: 16rpx;
}
.detail-container .notice-section .notice-list .notice-item text.data-v-d65de3a7 {
font-size: 28rpx;
color: #666;
line-height: 1.5;
}
.detail-container .bottom-bar.data-v-d65de3a7 {
position: fixed;
left: 0;
right: 0;
bottom: 0;
background: #fff;
padding: 20rpx 30rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
display: flex;
align-items: center;
justify-content: space-between;
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.detail-container .bottom-bar .price-info .deposit-text.data-v-d65de3a7 {
font-size: 28rpx;
color: #666;
}
.detail-container .bottom-bar .price-info .deposit-amount.data-v-d65de3a7 {
font-size: 36rpx;
font-weight: 600;
color: #FF9800;
}
.detail-container .bottom-bar .action-btn.data-v-d65de3a7 {
flex: 1;
margin-left: 30rpx;
height: 88rpx;
border-radius: 44rpx;
font-size: 32rpx;
font-weight: 600;
display: flex;
align-items: center;
justify-content: center;
border: none;
}
.detail-container .bottom-bar .action-btn.rent.data-v-d65de3a7 {
background: linear-gradient(135deg, #1976D2, #42A5F5);
color: #fff;
}
.detail-container .bottom-bar .action-btn.return.data-v-d65de3a7 {
background: linear-gradient(135deg, #FF9800, #FFB74D);
color: #fff;
}
.detail-container .bottom-bar .action-btn.data-v-d65de3a7:active {
transform: scale(0.98);
}
+123
View File
@@ -0,0 +1,123 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
data() {
return {
deviceId: "",
orderInfo: {
orderId: "",
startTime: "",
usedTime: "",
currentFee: "0.00"
},
unlocking: false,
timer: null
};
},
onLoad(options) {
this.deviceId = options.deviceId;
this.getActiveOrder();
},
onUnload() {
this.clearTimer();
},
methods: {
// 获取进行中的订单信息
async getActiveOrder() {
try {
common_vendor.index.showLoading({ title: "加载中" });
const result = await this.$api.getActiveOrder();
if (result.success) {
this.orderInfo = {
orderId: result.data.orderId,
startTime: result.data.startTime,
usedTime: result.data.usedTime,
currentFee: result.data.currentFee
};
this.startTimer();
} else {
common_vendor.index.showToast({
title: "没有进行中的订单",
icon: "none"
});
setTimeout(() => {
common_vendor.index.reLaunch({
url: "/pages/index/index"
});
}, 1500);
}
} catch (error) {
common_vendor.index.showToast({
title: "获取订单信息失败",
icon: "none"
});
} finally {
common_vendor.index.hideLoading();
}
},
// 处理开锁请求
async handleUnlock() {
if (this.unlocking)
return;
try {
this.unlocking = true;
common_vendor.index.showLoading({ title: "开锁中" });
const result = await this.$api.unlockDevice({
deviceId: this.deviceId,
orderId: this.orderInfo.orderId
});
if (result.success) {
common_vendor.index.showToast({
title: "开锁成功",
icon: "success"
});
} else {
throw new Error(result.message || "开锁失败");
}
} catch (error) {
common_vendor.index.showToast({
title: error.message || "开锁失败,请重试",
icon: "none"
});
} finally {
this.unlocking = false;
common_vendor.index.hideLoading();
}
},
// 更新使用时长
startTimer() {
this.timer = setInterval(async () => {
try {
const result = await this.$api.getOrderStatus(this.orderInfo.orderId);
if (result.success) {
this.orderInfo.usedTime = result.data.usedTime;
this.orderInfo.currentFee = result.data.currentFee;
}
} catch (error) {
common_vendor.index.__f__("error", "at pages/device/return.vue:162", "更新订单状态失败:", error);
}
}, 6e4);
},
clearTimer() {
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
}
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_vendor.t($data.orderInfo.orderId),
b: common_vendor.t($data.deviceId),
c: common_vendor.t($data.orderInfo.startTime),
d: common_vendor.t($data.orderInfo.usedTime),
e: common_vendor.t($data.orderInfo.currentFee),
f: common_vendor.t($data.unlocking ? "开锁中..." : "开锁归还"),
g: common_vendor.o((...args) => $options.handleUnlock && $options.handleUnlock(...args)),
h: $data.unlocking
};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-df932504"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/device/return.js.map
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "归还设备",
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="return-container data-v-df932504"><view class="order-card data-v-df932504"><view class="order-header data-v-df932504"><text class="title data-v-df932504">使用中</text><text class="order-no data-v-df932504">订单号:{{a}}</text></view><view class="device-info data-v-df932504"><text class="device-name data-v-df932504">共享风扇</text><text class="device-id data-v-df932504">设备号:{{b}}</text></view><view class="time-info data-v-df932504"><view class="time-item data-v-df932504"><text class="label data-v-df932504">开始时间</text><text class="value data-v-df932504">{{c}}</text></view><view class="time-item data-v-df932504"><text class="label data-v-df932504">已使用时长</text><text class="value highlight data-v-df932504">{{d}}</text></view><view class="time-item data-v-df932504"><text class="label data-v-df932504">当前费用</text><text class="value data-v-df932504">¥{{e}}</text></view></view></view><view class="notice-card data-v-df932504"><view class="notice-title data-v-df932504">归还说明</view><view class="notice-list data-v-df932504"><view class="notice-item data-v-df932504"><view class="dot data-v-df932504"></view><text class="data-v-df932504">请确保设备完好无损</text></view><view class="notice-item data-v-df932504"><view class="dot data-v-df932504"></view><text class="data-v-df932504">请在指定区域内归还设备</text></view><view class="notice-item data-v-df932504"><view class="dot data-v-df932504"></view><text class="data-v-df932504">归还后押金将自动退还</text></view></view></view><view class="bottom-bar data-v-df932504"><button class="unlock-btn data-v-df932504" bindtap="{{g}}" disabled="{{h}}">{{f}}</button></view></view>
+151
View File
@@ -0,0 +1,151 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.return-container.data-v-df932504 {
min-height: 100vh;
background: #f8f8f8;
padding: 30rpx;
padding-bottom: 180rpx;
box-sizing: border-box;
}
.return-container .order-card.data-v-df932504 {
background: #fff;
border-radius: 24rpx;
padding: 30rpx;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.return-container .order-card .order-header.data-v-df932504 {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
}
.return-container .order-card .order-header .title.data-v-df932504 {
font-size: 36rpx;
font-weight: 600;
color: #1976D2;
}
.return-container .order-card .order-header .order-no.data-v-df932504 {
font-size: 24rpx;
color: #999;
}
.return-container .order-card .device-info.data-v-df932504 {
margin-bottom: 30rpx;
}
.return-container .order-card .device-info .device-name.data-v-df932504 {
font-size: 32rpx;
font-weight: 500;
color: #333;
margin-right: 20rpx;
}
.return-container .order-card .device-info .device-id.data-v-df932504 {
font-size: 24rpx;
color: #666;
}
.return-container .order-card .time-info .time-item.data-v-df932504 {
display: flex;
justify-content: space-between;
margin-bottom: 20rpx;
}
.return-container .order-card .time-info .time-item.data-v-df932504:last-child {
margin-bottom: 0;
}
.return-container .order-card .time-info .time-item .label.data-v-df932504 {
font-size: 28rpx;
color: #666;
}
.return-container .order-card .time-info .time-item .value.data-v-df932504 {
font-size: 28rpx;
color: #333;
}
.return-container .order-card .time-info .time-item .value.highlight.data-v-df932504 {
color: #1976D2;
font-weight: 500;
}
.return-container .notice-card.data-v-df932504 {
background: #fff;
border-radius: 24rpx;
padding: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.return-container .notice-card .notice-title.data-v-df932504 {
font-size: 32rpx;
font-weight: 600;
color: #333;
margin-bottom: 24rpx;
}
.return-container .notice-card .notice-list .notice-item.data-v-df932504 {
display: flex;
align-items: center;
margin-bottom: 16rpx;
}
.return-container .notice-card .notice-list .notice-item.data-v-df932504:last-child {
margin-bottom: 0;
}
.return-container .notice-card .notice-list .notice-item .dot.data-v-df932504 {
width: 12rpx;
height: 12rpx;
background: #1976D2;
border-radius: 50%;
margin-right: 16rpx;
}
.return-container .notice-card .notice-list .notice-item text.data-v-df932504 {
font-size: 28rpx;
color: #666;
line-height: 1.5;
}
.return-container .bottom-bar.data-v-df932504 {
position: fixed;
left: 0;
right: 0;
bottom: 0;
background: #fff;
padding: 20rpx 30rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
display: flex;
justify-content: center;
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.return-container .bottom-bar .unlock-btn.data-v-df932504 {
width: 80%;
height: 88rpx;
background: linear-gradient(135deg, #1976D2, #42A5F5);
border-radius: 44rpx;
color: #fff;
font-size: 32rpx;
font-weight: 600;
display: flex;
align-items: center;
justify-content: center;
border: none;
}
.return-container .bottom-bar .unlock-btn.data-v-df932504:active {
transform: scale(0.98);
}
.return-container .bottom-bar .unlock-btn[disabled].data-v-df932504 {
background: #ccc;
transform: none;
}
+88
View File
@@ -0,0 +1,88 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
data() {
return {
types: ["设备故障", "收费问题", "使用建议", "其他"],
selectedType: -1,
description: "",
images: [],
contact: ""
};
},
methods: {
selectType(index) {
this.selectedType = index;
},
chooseImage() {
common_vendor.index.chooseImage({
count: 3 - this.images.length,
success: (res) => {
this.images = [...this.images, ...res.tempFilePaths];
}
});
},
deleteImage(index) {
this.images.splice(index, 1);
},
submitFeedback() {
if (this.selectedType === -1) {
common_vendor.index.showToast({
title: "请选择问题类型",
icon: "none"
});
return;
}
if (!this.description.trim()) {
common_vendor.index.showToast({
title: "请描述您的问题",
icon: "none"
});
return;
}
if (!this.contact) {
common_vendor.index.showToast({
title: "请留下联系方式",
icon: "none"
});
return;
}
common_vendor.index.showToast({
title: "提交成功",
icon: "success"
});
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: common_vendor.f($data.types, (type, index, i0) => {
return {
a: common_vendor.t(type),
b: index,
c: $data.selectedType === index ? 1 : "",
d: common_vendor.o(($event) => $options.selectType(index), index)
};
}),
b: $data.description,
c: common_vendor.o(($event) => $data.description = $event.detail.value),
d: common_vendor.t($data.description.length),
e: common_vendor.f($data.images, (img, index, i0) => {
return {
a: img,
b: common_vendor.o(($event) => $options.deleteImage(index), index),
c: index
};
}),
f: $data.images.length < 3
}, $data.images.length < 3 ? {
g: common_vendor.o((...args) => $options.chooseImage && $options.chooseImage(...args))
} : {}, {
h: $data.contact,
i: common_vendor.o(($event) => $data.contact = $event.detail.value),
j: common_vendor.o((...args) => $options.submitFeedback && $options.submitFeedback(...args))
});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-2aa7bac2"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/feedback/index.js.map
@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "投诉与建议",
"usingComponents": {}
}
@@ -0,0 +1 @@
<view class="feedback-container data-v-2aa7bac2"><view class="type-section data-v-2aa7bac2"><view class="section-title data-v-2aa7bac2">问题类型</view><view class="type-grid data-v-2aa7bac2"><view wx:for="{{a}}" wx:for-item="type" wx:key="b" class="{{['type-item', 'data-v-2aa7bac2', type.c && 'active']}}" bindtap="{{type.d}}">{{type.a}}</view></view></view><view class="description-section data-v-2aa7bac2"><view class="section-title data-v-2aa7bac2">问题描述</view><block wx:if="{{r0}}"><textarea class="description-input data-v-2aa7bac2" placeholder="请详细描述您遇到的问题,以便我们更好地为您解决" maxlength="500" value="{{b}}" bindinput="{{c}}"/></block><view class="word-count data-v-2aa7bac2">{{d}}/500</view></view><view class="upload-section data-v-2aa7bac2"><view class="section-title data-v-2aa7bac2">图片上传(选填)</view><view class="upload-grid data-v-2aa7bac2"><view wx:for="{{e}}" wx:for-item="img" wx:key="c" class="upload-item data-v-2aa7bac2"><image class="data-v-2aa7bac2" src="{{img.a}}" mode="aspectFill"/><view class="delete-btn data-v-2aa7bac2" bindtap="{{img.b}}">×</view></view><view wx:if="{{f}}" class="upload-btn data-v-2aa7bac2" bindtap="{{g}}"><text class="plus data-v-2aa7bac2">+</text><text class="tip data-v-2aa7bac2">上传图片</text></view></view></view><view class="contact-section data-v-2aa7bac2"><view class="section-title data-v-2aa7bac2">联系方式</view><input class="contact-input data-v-2aa7bac2" placeholder="请留下您的手机号,方便我们联系您" type="number" maxlength="11" value="{{h}}" bindinput="{{i}}"/></view><view class="submit-section data-v-2aa7bac2"><button class="submit-btn data-v-2aa7bac2" bindtap="{{j}}">提交反馈</button></view></view>
+175
View File
@@ -0,0 +1,175 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.feedback-container.data-v-2aa7bac2 {
min-height: 100vh;
background: #f8f8f8;
padding: 30rpx;
}
.feedback-container .section-title.data-v-2aa7bac2 {
font-size: 30rpx;
color: #333;
font-weight: 500;
margin-bottom: 20rpx;
}
.feedback-container .type-section.data-v-2aa7bac2 {
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
margin-bottom: 20rpx;
}
.feedback-container .type-section .type-grid.data-v-2aa7bac2 {
display: flex;
flex-wrap: wrap;
margin: 0 -10rpx;
}
.feedback-container .type-section .type-grid .type-item.data-v-2aa7bac2 {
width: calc(50% - 20rpx);
margin: 10rpx;
height: 80rpx;
display: flex;
align-items: center;
justify-content: center;
background: #f5f5f5;
border-radius: 10rpx;
font-size: 28rpx;
color: #666;
transition: all 0.3s;
}
.feedback-container .type-section .type-grid .type-item.active.data-v-2aa7bac2 {
background: #E3F2FD;
color: #1976D2;
}
.feedback-container .description-section.data-v-2aa7bac2 {
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
margin-bottom: 20rpx;
}
.feedback-container .description-section .description-input.data-v-2aa7bac2 {
width: 100%;
height: 240rpx;
background: #f8f8f8;
border-radius: 10rpx;
padding: 20rpx;
font-size: 28rpx;
color: #333;
box-sizing: border-box;
}
.feedback-container .description-section .word-count.data-v-2aa7bac2 {
text-align: right;
font-size: 24rpx;
color: #999;
margin-top: 10rpx;
}
.feedback-container .upload-section.data-v-2aa7bac2 {
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
margin-bottom: 20rpx;
}
.feedback-container .upload-section .upload-grid.data-v-2aa7bac2 {
display: flex;
flex-wrap: wrap;
}
.feedback-container .upload-section .upload-grid .upload-item.data-v-2aa7bac2 {
width: 200rpx;
height: 200rpx;
margin-right: 20rpx;
margin-bottom: 20rpx;
position: relative;
}
.feedback-container .upload-section .upload-grid .upload-item image.data-v-2aa7bac2 {
width: 100%;
height: 100%;
border-radius: 10rpx;
}
.feedback-container .upload-section .upload-grid .upload-item .delete-btn.data-v-2aa7bac2 {
position: absolute;
right: -10rpx;
top: -10rpx;
width: 40rpx;
height: 40rpx;
background: rgba(0, 0, 0, 0.5);
color: #fff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
}
.feedback-container .upload-section .upload-grid .upload-btn.data-v-2aa7bac2 {
width: 200rpx;
height: 200rpx;
background: #f5f5f5;
border-radius: 10rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: #999;
}
.feedback-container .upload-section .upload-grid .upload-btn .plus.data-v-2aa7bac2 {
font-size: 60rpx;
line-height: 1;
margin-bottom: 10rpx;
}
.feedback-container .upload-section .upload-grid .upload-btn .tip.data-v-2aa7bac2 {
font-size: 24rpx;
}
.feedback-container .contact-section.data-v-2aa7bac2 {
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
margin-bottom: 40rpx;
}
.feedback-container .contact-section .contact-input.data-v-2aa7bac2 {
width: 100%;
height: 80rpx;
background: #f8f8f8;
border-radius: 10rpx;
padding: 0 20rpx;
font-size: 28rpx;
color: #333;
box-sizing: border-box;
}
.feedback-container .submit-section.data-v-2aa7bac2 {
padding: 0 40rpx;
}
.feedback-container .submit-section .submit-btn.data-v-2aa7bac2 {
width: 100%;
height: 88rpx;
background: #1976D2;
color: #fff;
border-radius: 44rpx;
font-size: 32rpx;
font-weight: 500;
display: flex;
align-items: center;
justify-content: center;
}
.feedback-container .submit-section .submit-btn.data-v-2aa7bac2:active {
transform: scale(0.98);
}
+47
View File
@@ -0,0 +1,47 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const constants_help = require("../../constants/help.js");
const _sfc_main = {
data() {
return {
HELP_CONTENT: constants_help.HELP_CONTENT,
faqList: constants_help.HELP_CONTENT.FAQ_LIST.map((item) => ({
...item,
isOpen: false
}))
};
},
methods: {
toggleFaq(index) {
this.faqList[index].isOpen = !this.faqList[index].isOpen;
},
makePhoneCall() {
common_vendor.index.makePhoneCall({
phoneNumber: constants_help.HELP_CONTENT.CONTACT.PHONE.VALUE
});
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_vendor.f($data.faqList, (item, index, i0) => {
return {
a: common_vendor.t(item.question),
b: item.isOpen ? 1 : "",
c: common_vendor.t(item.answer),
d: item.isOpen,
e: index,
f: common_vendor.o(($event) => $options.toggleFaq(index), index)
};
}),
b: common_vendor.t($data.HELP_CONTENT.CONTACT.TITLE),
c: common_vendor.t($data.HELP_CONTENT.CONTACT.PHONE.LABEL),
d: common_vendor.t($data.HELP_CONTENT.CONTACT.PHONE.VALUE),
e: common_vendor.o((...args) => $options.makePhoneCall && $options.makePhoneCall(...args)),
f: common_vendor.t($data.HELP_CONTENT.CONTACT.SERVICE_TIME.LABEL),
g: common_vendor.t($data.HELP_CONTENT.CONTACT.SERVICE_TIME.VALUE)
};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-e6af2099"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/help/index.js.map
+4
View File
@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "帮助中心",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="help-container data-v-e6af2099"><view class="faq-list data-v-e6af2099"><view wx:for="{{a}}" wx:for-item="item" wx:key="e" class="faq-item data-v-e6af2099" bindtap="{{item.f}}"><view class="faq-header data-v-e6af2099"><text class="question data-v-e6af2099">{{item.a}}</text><view class="{{['arrow', 'data-v-e6af2099', item.b && 'open']}}"></view></view><view class="answer data-v-e6af2099" hidden="{{!item.d}}">{{item.c}}</view></view></view><view class="contact-card data-v-e6af2099"><view class="contact-title data-v-e6af2099">{{b}}</view><view class="contact-content data-v-e6af2099"><view class="contact-item data-v-e6af2099"><text class="label data-v-e6af2099">{{c}}</text><text class="value data-v-e6af2099" bindtap="{{e}}">{{d}}</text></view><view class="contact-item data-v-e6af2099"><text class="label data-v-e6af2099">{{f}}</text><text class="value data-v-e6af2099">{{g}}</text></view></view></view></view>
+107
View File
@@ -0,0 +1,107 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.help-container.data-v-e6af2099 {
min-height: 100vh;
background: #f8f8f8;
padding: 30rpx;
}
.help-container .faq-list.data-v-e6af2099 {
background: #fff;
border-radius: 20rpx;
padding: 20rpx;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.help-container .faq-list .faq-item.data-v-e6af2099 {
border-bottom: 1rpx solid #f5f5f5;
}
.help-container .faq-list .faq-item.data-v-e6af2099:last-child {
border-bottom: none;
}
.help-container .faq-list .faq-item .faq-header.data-v-e6af2099 {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx 20rpx;
}
.help-container .faq-list .faq-item .faq-header .question.data-v-e6af2099 {
font-size: 30rpx;
color: #333;
flex: 1;
padding-right: 20rpx;
}
.help-container .faq-list .faq-item .faq-header .arrow.data-v-e6af2099 {
width: 16rpx;
height: 16rpx;
border-right: 4rpx solid #999;
border-bottom: 4rpx solid #999;
transform: rotate(45deg);
transition: all 0.3s;
}
.help-container .faq-list .faq-item .faq-header .arrow.open.data-v-e6af2099 {
transform: rotate(-135deg);
}
.help-container .faq-list .faq-item .answer.data-v-e6af2099 {
font-size: 28rpx;
color: #666;
line-height: 1.6;
padding: 0 20rpx 30rpx;
background: #f9f9f9;
border-radius: 10rpx;
margin: 0 20rpx 20rpx;
}
.help-container .contact-card.data-v-e6af2099 {
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.help-container .contact-card .contact-title.data-v-e6af2099 {
font-size: 32rpx;
color: #333;
font-weight: 500;
margin-bottom: 20rpx;
border-left: 8rpx solid #1976D2;
padding-left: 20rpx;
}
.help-container .contact-card .contact-content .contact-item.data-v-e6af2099 {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
}
.help-container .contact-card .contact-content .contact-item .label.data-v-e6af2099 {
font-size: 28rpx;
color: #666;
}
.help-container .contact-card .contact-content .contact-item .value.data-v-e6af2099 {
font-size: 28rpx;
color: #333;
font-weight: 500;
}
.help-container .contact-card .contact-content .contact-item .value.data-v-e6af2099:active {
opacity: 0.7;
}
+33
View File
@@ -0,0 +1,33 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const util_index = require("../../util/index.js");
const common_assets = require("../../common/assets.js");
const _sfc_main = {
methods: {
handleScan() {
common_vendor.index.scanCode({
success: (res) => {
let deviceNo = util_index.getQueryString(res.path, "deviceNo");
common_vendor.index.navigateTo({
url: `/pages/serve/bagCheck/index?deviceNo=${deviceNo}`
});
},
fail: (err) => {
common_vendor.index.showToast({
title: "扫码失败",
icon: "none"
});
}
});
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_assets._imports_0,
b: common_vendor.o((...args) => $options.handleScan && $options.handleScan(...args))
};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-1cf27b2a"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/index/index.js.map
+4
View File
@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "共享风扇",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-1cf27b2a"><view class="banner data-v-1cf27b2a"><view class="temp-banner data-v-1cf27b2a"><text class="banner-text data-v-1cf27b2a">共享风扇</text><text class="banner-subtitle data-v-1cf27b2a">让清凉随身携带</text><view class="banner-bg data-v-1cf27b2a"></view></view></view><view class="scan-area data-v-1cf27b2a"><view class="scan-btn data-v-1cf27b2a" bindtap="{{b}}"><view class="btn-content data-v-1cf27b2a"><image class="btn-icon data-v-1cf27b2a" src="{{a}}" mode="aspectFit"/><text class="btn-text data-v-1cf27b2a">扫一扫</text></view><text class="btn-desc data-v-1cf27b2a">扫描设备二维码使用或归还</text></view></view><view class="tips-section data-v-1cf27b2a"><view class="tips-header data-v-1cf27b2a"><view class="tips-title data-v-1cf27b2a">使用小贴士</view></view><view class="tips-list data-v-1cf27b2a"><view class="tip-item data-v-1cf27b2a"><view class="tip-dot data-v-1cf27b2a"></view><text class="data-v-1cf27b2a">租借时间:每次最长可租借12小时</text></view><view class="tip-item data-v-1cf27b2a"><view class="tip-dot data-v-1cf27b2a"></view><text class="data-v-1cf27b2a">押金说明:租借需支付99元押金,归还后自动退还</text></view><view class="tip-item data-v-1cf27b2a"><view class="tip-dot data-v-1cf27b2a"></view><text class="data-v-1cf27b2a">收费标准:2元/小时,不足1小时按1小时计算</text></view><view class="tip-item data-v-1cf27b2a"><view class="tip-dot data-v-1cf27b2a"></view><text class="data-v-1cf27b2a">爱护提示:请勿将设备带离指定区域,保持设备清洁</text></view></view></view></view>
+194
View File
@@ -0,0 +1,194 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.container.data-v-1cf27b2a {
height: 87.5vh;
background: #f8f8f8;
padding-bottom: 40rpx;
}
.container .banner.data-v-1cf27b2a {
padding: 30rpx;
}
.container .banner .temp-banner.data-v-1cf27b2a {
height: 300rpx;
background: linear-gradient(135deg, #1976D2, #42A5F5);
border-radius: 30rpx;
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: #fff;
box-shadow: 0 8rpx 32rpx rgba(25, 118, 210, 0.2);
}
.container .banner .temp-banner .banner-text.data-v-1cf27b2a {
font-size: 56rpx;
font-weight: bold;
margin-bottom: 20rpx;
position: relative;
z-index: 1;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
}
.container .banner .temp-banner .banner-subtitle.data-v-1cf27b2a {
font-size: 32rpx;
opacity: 0.95;
position: relative;
z-index: 1;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
}
.container .banner .temp-banner .banner-bg.data-v-1cf27b2a {
position: absolute;
right: -60rpx;
bottom: -60rpx;
width: 300rpx;
height: 300rpx;
background: rgba(255, 255, 255, 0.1);
border-radius: 50%;
transform: rotate(-15deg);
}
.container .banner .temp-banner.data-v-1cf27b2a::after {
content: "";
position: absolute;
left: -80rpx;
top: -80rpx;
width: 240rpx;
height: 240rpx;
background: rgba(255, 255, 255, 0.08);
border-radius: 50%;
}
.container .scan-area.data-v-1cf27b2a {
padding: 20rpx 30rpx 40rpx;
display: flex;
justify-content: center;
}
.container .scan-area .scan-btn.data-v-1cf27b2a {
width: 460rpx;
height: 200rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #00C853, #69F0AE);
border-radius: 30rpx;
box-shadow: 0 8rpx 32rpx rgba(0, 200, 83, 0.2);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.container .scan-area .scan-btn.data-v-1cf27b2a:active {
transform: scale(0.98);
box-shadow: 0 4rpx 16rpx rgba(0, 200, 83, 0.15);
}
.container .scan-area .scan-btn.data-v-1cf27b2a::after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(rgba(255, 255, 255, 0.1), transparent);
}
.container .scan-area .scan-btn .btn-content.data-v-1cf27b2a {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 12rpx;
position: relative;
z-index: 1;
}
.container .scan-area .scan-btn .btn-content .btn-icon.data-v-1cf27b2a {
width: 48rpx;
height: 48rpx;
margin-right: 16rpx;
}
.container .scan-area .scan-btn .btn-content .btn-text.data-v-1cf27b2a {
font-size: 42rpx;
font-weight: 600;
color: #fff;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
}
.container .scan-area .scan-btn .btn-desc.data-v-1cf27b2a {
font-size: 26rpx;
color: rgba(255, 255, 255, 0.95);
position: relative;
z-index: 1;
}
.container .tips-section.data-v-1cf27b2a {
margin: 0 30rpx;
background: #fff;
border-radius: 24rpx;
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.05);
overflow: hidden;
}
.container .tips-section .tips-header.data-v-1cf27b2a {
padding: 30rpx;
background: linear-gradient(to right, #F5F9FF, #fff);
border-bottom: 2rpx solid #f0f0f0;
}
.container .tips-section .tips-header .tips-title.data-v-1cf27b2a {
font-size: 32rpx;
font-weight: 600;
color: #333;
position: relative;
padding-left: 24rpx;
}
.container .tips-section .tips-header .tips-title.data-v-1cf27b2a::before {
content: "";
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 8rpx;
height: 32rpx;
background: #1976D2;
border-radius: 4rpx;
}
.container .tips-section .tips-list.data-v-1cf27b2a {
padding: 20rpx 30rpx;
}
.container .tips-section .tips-list .tip-item.data-v-1cf27b2a {
display: flex;
align-items: center;
margin-bottom: 24rpx;
padding: 0 10rpx;
}
.container .tips-section .tips-list .tip-item.data-v-1cf27b2a:last-child {
margin-bottom: 0;
}
.container .tips-section .tips-list .tip-item .tip-dot.data-v-1cf27b2a {
width: 12rpx;
height: 12rpx;
background: #1976D2;
border-radius: 50%;
margin-right: 16rpx;
flex-shrink: 0;
box-shadow: 0 2rpx 6rpx rgba(25, 118, 210, 0.2);
}
.container .tips-section .tips-list .tip-item text.data-v-1cf27b2a {
font-size: 28rpx;
color: #666;
line-height: 1.6;
}
+76
View File
@@ -0,0 +1,76 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const util_index = require("../../util/index.js");
const common_assets = require("../../common/assets.js");
const _sfc_main = {
data() {
return {
userInfo: {},
deposit: "0.00",
tempAvatar: "",
tempNickname: "",
show: false
};
},
onShow() {
this.getInfo();
},
methods: {
async getInfo() {
try {
const token = common_vendor.index.getStorageSync("token");
if (!token) {
await util_index.wxLogin();
this.getInfo();
return;
}
const res = await util_index.getUserInfo();
common_vendor.index.__f__("log", "at pages/my/index.vue:105", res);
if (res.code === 200) {
const userInfo = {
nickName: res.data.nickname,
phone: res.data.phone,
avatar: res.data.iconUrl,
isAdmin: res.data.isAdmin
};
this.userInfo = userInfo;
common_vendor.index.setStorageSync("userInfo", userInfo);
this.deposit = res.data.balanceAmount || "0.00";
}
} catch (error) {
common_vendor.index.__f__("error", "at pages/my/index.vue:120", "获取用户信息失败:", error);
common_vendor.index.showToast({
title: "获取用户信息失败",
icon: "none"
});
}
},
navigateTo(url) {
common_vendor.index.navigateTo({
url
});
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: $data.userInfo.avatar || "/static/user.png",
b: $data.userInfo.nickName
}, $data.userInfo.nickName ? {
c: common_vendor.t($data.userInfo.nickName),
d: common_vendor.t($data.userInfo.phone || "")
} : {}, {
e: common_vendor.o((...args) => _ctx.showPopup && _ctx.showPopup(...args)),
f: common_vendor.t($data.deposit),
g: common_vendor.o(($event) => $options.navigateTo("/pages/deposit/index")),
h: common_assets._imports_0$1,
i: common_vendor.o(($event) => $options.navigateTo("/pages/order/index")),
j: common_assets._imports_1,
k: common_vendor.o(($event) => $options.navigateTo("/pages/feedback/index")),
l: common_assets._imports_2,
m: common_vendor.o(($event) => $options.navigateTo("/pages/help/index"))
});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-f97bc692"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/my/index.js.map
+4
View File
@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "个人中心",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="my-container data-v-f97bc692"><view class="user-info data-v-f97bc692"><view class="floating-dots data-v-f97bc692"></view><view class="user-info-content data-v-f97bc692" bindtap="{{e}}"><view class="avatar-wrap data-v-f97bc692"><image class="avatar data-v-f97bc692" src="{{a}}" mode="aspectFill"/></view><view wx:if="{{b}}" class="info-content data-v-f97bc692"><view class="text-group data-v-f97bc692"><text class="nickname data-v-f97bc692">{{c}}</text><text class="phone data-v-f97bc692">{{d}}</text></view></view><view wx:else class="info-content not-login data-v-f97bc692"><text class="login-text data-v-f97bc692">点击登录</text><text class="login-desc data-v-f97bc692">登录后享受更多服务</text></view></view><view class="wave-decoration data-v-f97bc692"></view></view><view class="balance-card data-v-f97bc692"><view class="balance-content data-v-f97bc692"><text class="label data-v-f97bc692">押金余额</text><text class="amount data-v-f97bc692">¥{{f}}</text></view><view class="withdraw-btn data-v-f97bc692" bindtap="{{g}}"> 提现 <view class="arrow data-v-f97bc692"></view></view></view><view class="function-list data-v-f97bc692"><view class="function-item data-v-f97bc692" bindtap="{{i}}"><view class="item-left data-v-f97bc692"><view class="icon-wrap order data-v-f97bc692"><image src="{{h}}" mode="aspectFit" class="icon-image data-v-f97bc692"/></view><text class="title data-v-f97bc692">租借记录</text></view><view class="arrow data-v-f97bc692"></view></view><view class="function-item data-v-f97bc692" bindtap="{{k}}"><view class="item-left data-v-f97bc692"><view class="icon-wrap feedback data-v-f97bc692"><image src="{{j}}" mode="aspectFit" class="icon-image data-v-f97bc692"/></view><text class="title data-v-f97bc692">投诉与建议</text></view><view class="arrow data-v-f97bc692"></view></view><view class="function-item data-v-f97bc692" bindtap="{{m}}"><view class="item-left data-v-f97bc692"><view class="icon-wrap help data-v-f97bc692"><image src="{{l}}" mode="aspectFit" class="icon-image data-v-f97bc692"/></view><text class="title data-v-f97bc692">帮助中心</text></view><view class="arrow data-v-f97bc692"></view></view></view></view>
+328
View File
@@ -0,0 +1,328 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.my-container.data-v-f97bc692 {
min-height: 87.5vh;
background: #f8f8f8;
padding-bottom: env(safe-area-inset-bottom);
}
.my-container .user-info.data-v-f97bc692 {
height: 360rpx;
background: linear-gradient(135deg, #1976D2, #42A5F5);
position: relative;
overflow: hidden;
}
.my-container .user-info.data-v-f97bc692::before, .my-container .user-info.data-v-f97bc692::after {
content: "";
position: absolute;
background-repeat: no-repeat;
opacity: 0.1;
}
.my-container .user-info.data-v-f97bc692::before {
width: 200rpx;
height: 200rpx;
left: -40rpx;
top: -40rpx;
background-image: radial-gradient(circle, #fff 2rpx, transparent 3rpx);
background-size: 30rpx 30rpx;
transform: rotate(30deg);
}
.my-container .user-info.data-v-f97bc692::after {
width: 300rpx;
height: 300rpx;
right: -60rpx;
bottom: -60rpx;
background: radial-gradient(circle at center, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 30%, transparent 30.5%), radial-gradient(circle at center, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 20%, transparent 20.5%);
background-size: 60rpx 60rpx;
background-position: 0 0, 30rpx 30rpx;
transform: rotate(-15deg);
}
.my-container .user-info .floating-dots.data-v-f97bc692 {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
pointer-events: none;
}
.my-container .user-info .floating-dots.data-v-f97bc692::before, .my-container .user-info .floating-dots.data-v-f97bc692::after {
content: "";
position: absolute;
width: 12rpx;
height: 12rpx;
border-radius: 50%;
background: rgba(255, 255, 255, 0.3);
animation: float-f97bc692 3s infinite ease-in-out;
}
.my-container .user-info .floating-dots.data-v-f97bc692::before {
top: 20%;
right: 10%;
animation-delay: -2s;
}
.my-container .user-info .floating-dots.data-v-f97bc692::after {
top: 50%;
right: 20%;
width: 8rpx;
height: 8rpx;
animation-delay: -1s;
}
.my-container .user-info .user-info-content.data-v-f97bc692 {
position: relative;
z-index: 2;
padding: 60rpx 40rpx;
display: flex;
align-items: center;
}
.my-container .user-info .user-info-content .avatar-wrap.data-v-f97bc692 {
width: 140rpx;
height: 140rpx;
border-radius: 70rpx;
border: 6rpx solid rgba(255, 255, 255, 0.3);
overflow: hidden;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1), 0 0 0 6rpx rgba(255, 255, 255, 0.1);
margin-right: 40rpx;
position: relative;
}
.my-container .user-info .user-info-content .avatar-wrap.data-v-f97bc692::after {
content: "";
position: absolute;
top: -10%;
left: -10%;
right: -10%;
bottom: -10%;
background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.1), transparent);
animation: shine-f97bc692 2s infinite;
}
.my-container .user-info .user-info-content .avatar-wrap .avatar.data-v-f97bc692 {
width: 100%;
height: 100%;
background: #fff;
}
.my-container .user-info .user-info-content .info-content.not-login .login-text.data-v-f97bc692 {
font-size: 40rpx;
color: #fff;
font-weight: 500;
margin-bottom: 12rpx;
display: block;
}
.my-container .user-info .user-info-content .info-content.not-login .login-desc.data-v-f97bc692 {
font-size: 28rpx;
color: rgba(255, 255, 255, 0.9);
display: block;
}
.my-container .user-info .user-info-content .info-content .text-group.data-v-f97bc692 {
display: flex;
flex-direction: column;
align-items: center;
gap: 16rpx;
}
.my-container .user-info .user-info-content .info-content .text-group .nickname.data-v-f97bc692 {
font-size: 42rpx;
color: #ffffff;
font-weight: 600;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
letter-spacing: 2rpx;
}
.my-container .user-info .user-info-content .info-content .text-group .phone.data-v-f97bc692 {
font-size: 30rpx;
color: rgba(255, 255, 255, 0.85);
font-weight: 400;
letter-spacing: 1rpx;
position: relative;
padding: 4rpx 24rpx;
background: rgba(255, 255, 255, 0.15);
border-radius: 24rpx;
-webkit-backdrop-filter: blur(4px);
backdrop-filter: blur(4px);
}
.my-container .user-info .wave-decoration.data-v-f97bc692 {
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 120rpx;
background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNDQwIDMyMCI+PHBhdGggZmlsbD0icmdiYSgyNTUsMjU1LDI1NSwwLjEpIiBkPSJNMCwyNjAuMjI3YzE3My42NjEsMCwzMjEuMTM3LDAsNDQyLjQyOCwwYzE4MS41MTcsMCwyODUuNjQ1LDAsMzk3LjU3MiwwQzk1Mi4zODksMjYwLjIyNywxMTQwLjI3MSwyNjAuMjI3LDE0NDAsMjYwLjIyN1YwSDBWMjYwLjIyN3oiLz48L3N2Zz4=") bottom/100% no-repeat;
opacity: 0.8;
}
@keyframes float-f97bc692 {
0%, 100% {
transform: translateY(0) scale(1);
}
50% {
transform: translateY(-20rpx) scale(1.1);
}
}
@keyframes shine-f97bc692 {
0% {
transform: translateX(-100%) rotate(45deg);
}
80%, 100% {
transform: translateX(100%) rotate(45deg);
}
}
.my-container .balance-card.data-v-f97bc692 {
margin: -60rpx 30rpx 30rpx;
background: #fff;
border-radius: 24rpx;
padding: 40rpx;
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
z-index: 3;
box-shadow: 0 8rpx 32rpx rgba(25, 118, 210, 0.1);
}
.my-container .balance-card .balance-content .label.data-v-f97bc692 {
font-size: 28rpx;
color: #666;
margin-bottom: 12rpx;
display: block;
}
.my-container .balance-card .balance-content .amount.data-v-f97bc692 {
font-size: 52rpx;
color: #1976D2;
font-weight: bold;
}
.my-container .balance-card .withdraw-btn.data-v-f97bc692 {
padding: 20rpx 36rpx;
background: linear-gradient(135deg, #1976D2, #42A5F5);
color: #fff;
border-radius: 36rpx;
font-size: 30rpx;
display: flex;
align-items: center;
box-shadow: 0 4rpx 12rpx rgba(25, 118, 210, 0.2);
}
.my-container .balance-card .withdraw-btn.data-v-f97bc692:active {
transform: scale(0.98);
}
.my-container .balance-card .withdraw-btn .arrow.data-v-f97bc692 {
width: 12rpx;
height: 12rpx;
border-top: 3rpx solid #fff;
border-right: 3rpx solid #fff;
transform: rotate(45deg);
margin-left: 12rpx;
}
.my-container .function-list.data-v-f97bc692 {
margin: 0 30rpx;
background: #fff;
border-radius: 24rpx;
padding: 10rpx 20rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.my-container .function-list .function-item.data-v-f97bc692 {
display: flex;
align-items: center;
justify-content: space-between;
padding: 32rpx 20rpx;
border-bottom: 1rpx solid #f5f5f5;
transition: all 0.3s;
}
.my-container .function-list .function-item.data-v-f97bc692:active {
background: #f9f9f9;
}
.my-container .function-list .function-item.data-v-f97bc692:last-child {
border-bottom: none;
}
.my-container .function-list .function-item .item-left.data-v-f97bc692 {
display: flex;
align-items: center;
}
.my-container .function-list .function-item .item-left .icon-wrap.data-v-f97bc692 {
width: 80rpx;
height: 80rpx;
margin-right: 24rpx;
display: flex;
align-items: center;
justify-content: center;
border-radius: 20rpx;
background: #F5F9FF;
}
.my-container .function-list .function-item .item-left .icon-wrap .icon-image.data-v-f97bc692 {
width: 44rpx;
height: 44rpx;
}
.my-container .function-list .function-item .item-left .title.data-v-f97bc692 {
font-size: 32rpx;
color: #333;
font-weight: 500;
}
.my-container .function-list .function-item .arrow.data-v-f97bc692 {
width: 16rpx;
height: 16rpx;
border-top: 3rpx solid #999;
border-right: 3rpx solid #999;
transform: rotate(45deg);
}
.my-container .popup-content.data-v-f97bc692 {
background-color: #fff;
border-radius: 24rpx 24rpx 0 0;
padding: 40rpx 30rpx;
}
.my-container .popup-content .popup-title.data-v-f97bc692 {
font-size: 32rpx;
font-weight: 500;
text-align: center;
margin-bottom: 40rpx;
}
.my-container .popup-content .popup-body.data-v-f97bc692 {
display: flex;
flex-direction: column;
gap: 30rpx;
}
.my-container .popup-content .avatar-btn.data-v-f97bc692 {
height: 88rpx;
line-height: 88rpx;
background: #f5f5f5;
border-radius: 44rpx;
font-size: 28rpx;
color: #333;
}
.my-container .popup-content .avatar-btn.data-v-f97bc692::after {
border: none;
}
.my-container .popup-content .avatar-btn.data-v-f97bc692:active {
opacity: 0.8;
}
.my-container .popup-content .nickname-input.data-v-f97bc692 {
height: 88rpx;
background: #f5f5f5;
border-radius: 44rpx;
padding: 0 30rpx;
font-size: 28rpx;
}
.my-container .popup-content .submit-btn.data-v-f97bc692 {
height: 88rpx;
line-height: 88rpx;
background: #1976D2;
color: #fff;
border-radius: 44rpx;
font-size: 30rpx;
margin-top: 20rpx;
}
.my-container .popup-content .submit-btn.data-v-f97bc692:active {
opacity: 0.9;
}
+68
View File
@@ -0,0 +1,68 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const config_user = require("../../config/user.js");
const _sfc_main = {
data() {
return {
currentTab: 0,
tabs: ["全部", "使用中", "已完成"],
orderList: [
{
orderNo: "ORDER202403200001",
status: "using",
statusText: "使用中",
deviceId: "FAN001",
startTime: "2024-03-20 15:30",
endTime: "",
amount: "2.00"
},
{
orderNo: "ORDER202403190001",
status: "finished",
statusText: "已完成",
deviceId: "FAN002",
startTime: "2024-03-19 13:00",
endTime: "2024-03-19 15:00",
amount: "4.00"
}
]
};
},
async onLoad() {
const res = await config_user.getOrderList();
common_vendor.index.__f__("log", "at pages/order/index.vue:84", res);
},
methods: {
switchTab(index) {
this.currentTab = index;
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: common_vendor.f($data.tabs, (tab, index, i0) => {
return {
a: common_vendor.t(tab),
b: index,
c: $data.currentTab === index ? 1 : "",
d: common_vendor.o(($event) => $options.switchTab(index), index)
};
}),
b: common_vendor.f($data.orderList, (order, index, i0) => {
return {
a: common_vendor.t(order.orderNo),
b: common_vendor.t(order.statusText),
c: common_vendor.n(order.status),
d: common_vendor.t(order.deviceId),
e: common_vendor.t(order.startTime),
f: common_vendor.t(order.endTime || "-"),
g: common_vendor.t(order.amount),
h: index
};
}),
c: $data.orderList.length === 0
}, $data.orderList.length === 0 ? {} : {});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-17a44f9d"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/order/index.js.map
+4
View File
@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "租借记录",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="order-container data-v-17a44f9d"><view class="tab-bar data-v-17a44f9d"><view wx:for="{{a}}" wx:for-item="tab" wx:key="b" class="{{['tab-item', 'data-v-17a44f9d', tab.c && 'active']}}" bindtap="{{tab.d}}">{{tab.a}}</view></view><view class="order-list data-v-17a44f9d"><view wx:for="{{b}}" wx:for-item="order" wx:key="h" class="order-item data-v-17a44f9d"><view class="order-header data-v-17a44f9d"><text class="order-no data-v-17a44f9d">订单号:{{order.a}}</text><text class="{{['order-status', 'data-v-17a44f9d', order.c]}}">{{order.b}}</text></view><view class="order-content data-v-17a44f9d"><view class="device-info data-v-17a44f9d"><text class="device-name data-v-17a44f9d">共享风扇</text><text class="device-id data-v-17a44f9d">设备号:{{order.d}}</text></view><view class="time-info data-v-17a44f9d"><view class="time-item data-v-17a44f9d"><text class="label data-v-17a44f9d">开始时间:</text><text class="value data-v-17a44f9d">{{order.e}}</text></view><view class="time-item data-v-17a44f9d"><text class="label data-v-17a44f9d">结束时间:</text><text class="value data-v-17a44f9d">{{order.f}}</text></view></view><view class="price-info data-v-17a44f9d"><text class="amount data-v-17a44f9d">¥{{order.g}}</text></view></view></view></view><view wx:if="{{c}}" class="empty-tip data-v-17a44f9d"><view class="empty-icon data-v-17a44f9d"></view><text class="data-v-17a44f9d">暂无订单记录</text></view></view>
+138
View File
@@ -0,0 +1,138 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.order-container.data-v-17a44f9d {
min-height: 100vh;
background: #f8f8f8;
}
.order-container .tab-bar.data-v-17a44f9d {
display: flex;
background: #fff;
padding: 20rpx 0;
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 100;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
}
.order-container .tab-bar .tab-item.data-v-17a44f9d {
flex: 1;
text-align: center;
font-size: 28rpx;
color: #666;
position: relative;
padding: 20rpx 0;
}
.order-container .tab-bar .tab-item.active.data-v-17a44f9d {
color: #1976D2;
font-weight: 500;
}
.order-container .tab-bar .tab-item.active.data-v-17a44f9d::after {
content: "";
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 40rpx;
height: 4rpx;
background: #1976D2;
border-radius: 2rpx;
}
.order-container .order-list.data-v-17a44f9d {
padding: 20rpx;
}
.order-container .order-list .order-item.data-v-17a44f9d {
background: #fff;
border-radius: 20rpx;
margin-bottom: 20rpx;
padding: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
}
.order-container .order-list .order-item .order-header.data-v-17a44f9d {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 20rpx;
border-bottom: 1rpx solid #f5f5f5;
}
.order-container .order-list .order-item .order-header .order-no.data-v-17a44f9d {
font-size: 26rpx;
color: #666;
}
.order-container .order-list .order-item .order-header .order-status.data-v-17a44f9d {
font-size: 26rpx;
}
.order-container .order-list .order-item .order-header .order-status.using.data-v-17a44f9d {
color: #1976D2;
}
.order-container .order-list .order-item .order-header .order-status.finished.data-v-17a44f9d {
color: #4CAF50;
}
.order-container .order-list .order-item .order-content.data-v-17a44f9d {
padding-top: 20rpx;
}
.order-container .order-list .order-item .order-content .device-info.data-v-17a44f9d {
margin-bottom: 20rpx;
}
.order-container .order-list .order-item .order-content .device-info .device-name.data-v-17a44f9d {
font-size: 32rpx;
color: #333;
font-weight: 500;
margin-right: 20rpx;
}
.order-container .order-list .order-item .order-content .device-info .device-id.data-v-17a44f9d {
font-size: 26rpx;
color: #999;
}
.order-container .order-list .order-item .order-content .time-info .time-item.data-v-17a44f9d {
font-size: 26rpx;
color: #666;
margin-bottom: 10rpx;
}
.order-container .order-list .order-item .order-content .time-info .time-item .label.data-v-17a44f9d {
color: #999;
}
.order-container .order-list .order-item .order-content .price-info.data-v-17a44f9d {
text-align: right;
margin-top: 20rpx;
}
.order-container .order-list .order-item .order-content .price-info .amount.data-v-17a44f9d {
font-size: 36rpx;
color: #FF9800;
font-weight: 500;
}
.order-container .empty-tip.data-v-17a44f9d {
padding: 100rpx 0;
text-align: center;
color: #999;
font-size: 28rpx;
}
.order-container .empty-tip .empty-icon.data-v-17a44f9d {
width: 200rpx;
height: 200rpx;
margin: 0 auto 20rpx;
background: #f0f0f0;
border-radius: 50%;
}
@@ -0,0 +1,32 @@
"use strict";
const common_vendor = require("../../../common/vendor.js");
const util_index = require("../../../util/index.js");
const config_user = require("../../../config/user.js");
const _sfc_main = {
data() {
return {};
},
async onLoad(option) {
if (!common_vendor.index.getStorageSync("token")) {
const res = await util_index.wxLogin();
common_vendor.index.__f__("log", "at pages/serve/bagCheck/index.vue:26", 333, res);
}
const reuslt = await config_user.queryHasOrder(111);
if (reuslt.data.length != 0) {
common_vendor.index.reLaunch({
url: `/pages/device/return?deviceNo=${option.deviceNo}`
});
} else {
common_vendor.index.reLaunch({
url: `/pages/device/detail?deviceNo=${option.deviceNo}`
});
}
},
methods: {}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages/serve/bagCheck/index.js.map
@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "共享风扇",
"usingComponents": {}
}
@@ -0,0 +1 @@
<view></view>
+30
View File
@@ -0,0 +1,30 @@
{
"description": "项目配置文件。",
"packOptions": {
"ignore": [],
"include": []
},
"setting": {
"urlCheck": false,
"es6": true,
"postcss": false,
"minified": false,
"newFeature": true,
"bigPackageSizeSupport": true,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"condition": false
},
"compileType": "miniprogram",
"libVersion": "3.7.4",
"appid": "wxabe9cc4db1005fcb",
"projectname": "fs",
"condition": {},
"editorSetting": {
"tabIndent": "insertSpaces",
"tabSize": 2
}
}
@@ -0,0 +1,7 @@
{
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"projectname": "fs",
"setting": {
"compileHotReLoad": true
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

+62
View File
@@ -0,0 +1,62 @@
"use strict";
const common_vendor = require("../common/vendor.js");
const config_user = require("../config/user.js");
const wxLogin = () => {
return new Promise((resolve, reject) => {
common_vendor.index.login({
provider: "weixin",
success: async (loginRes) => {
try {
if (loginRes.code) {
const result = await config_user.login({
code: loginRes.code,
appid: "wxabe9cc4db1005fcb"
});
if (result.code === 200) {
common_vendor.index.setStorageSync("token", result.data.LoginWxVo.access_token);
common_vendor.index.setStorageSync("client_id", result.data.LoginWxVo.client_id);
resolve(result.data);
} else {
throw new Error(result.message || "登录失败");
}
} else {
throw new Error("获取微信登录凭证失败");
}
} catch (error) {
common_vendor.index.showToast({
title: error.message || "登录失败",
icon: "none"
});
reject(error);
}
},
fail: (error) => {
common_vendor.index.showToast({
title: "微信登录失败",
icon: "none"
});
reject(error);
}
});
});
};
const getUserInfo = () => {
return new Promise(async (res, rej) => {
const result = await config_user.getMyIndexInfo({
isHide: false
});
res(result);
});
};
const getQueryString = function(url, name) {
var reg = new RegExp("(^|&|/?)" + name + "=([^&|/?]*)(&|/?|$)", "i");
var r = url.substr(1).match(reg);
if (r != null) {
return r[2];
}
return null;
};
exports.getQueryString = getQueryString;
exports.getUserInfo = getUserInfo;
exports.wxLogin = wxLogin;
//# sourceMappingURL=../../.sourcemap/mp-weixin/util/index.js.map