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
+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