Compare commits
4 Commits
342e97d5d6
...
graduation
| Author | SHA1 | Date | |
|---|---|---|---|
| f122640068 | |||
| 4807d0547b | |||
| 3dc4d64215 | |||
| a3ffe71ccb |
6
app.json
@ -66,6 +66,12 @@
|
||||
"iconPath": "/static/kc1.png",
|
||||
"selectedIconPath": "/static/kc2.png"
|
||||
},
|
||||
{
|
||||
"pagePath": "pages/projectModule/projectList/projectList",
|
||||
"text": "接单",
|
||||
"iconPath": "/static/kc1.png",
|
||||
"selectedIconPath": "/static/kc2.png"
|
||||
},
|
||||
{
|
||||
"pagePath": "pages/personCenter/mine/mine",
|
||||
"text": "我的",
|
||||
|
||||
@ -91,7 +91,11 @@ Page({
|
||||
|
||||
onUnload() {},
|
||||
|
||||
onPullDownRefresh() {},
|
||||
onPullDownRefresh() {
|
||||
this.getCourseDetail()
|
||||
// 停止下拉刷新动画
|
||||
wx.stopPullDownRefresh();
|
||||
},
|
||||
|
||||
onReachBottom() {},
|
||||
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
@ -74,7 +74,7 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12rpx;
|
||||
margin-bottom: 12rpx;
|
||||
margin-bottom: 22rpx;
|
||||
}
|
||||
.head-icon { width: 34rpx; height: 34rpx; }
|
||||
.head-text { font-size: 28rpx; color: #111; font-weight: 600; }
|
||||
|
||||
|
Before Width: | Height: | Size: 753 B After Width: | Height: | Size: 4.2 KiB |
BIN
pages/course/courseDetail/image/cal1.png
Normal file
|
After Width: | Height: | Size: 753 B |
@ -5,103 +5,134 @@ const { notLogin } = require('../../../utils/util')
|
||||
Page({
|
||||
data: {
|
||||
orderList: [], // 后端返回的订单列表
|
||||
hasModalShown: false, // 弹框只显示一次
|
||||
hasModalShown: false, // 本次停留页面只弹一次
|
||||
isMaskVisible: false
|
||||
},
|
||||
|
||||
onLoad(options) {
|
||||
// —— 内部状态(不放 data,避免多余 setData)
|
||||
_timer: null,
|
||||
_isActive: false, // 页面是否处于“可见/激活”状态
|
||||
_justEnteredAt: 0, // 进入页面时刻(可按需使用)
|
||||
|
||||
onLoad() {
|
||||
this._isActive = true;
|
||||
this._justEnteredAt = Date.now();
|
||||
this.fetchOrders();
|
||||
},
|
||||
onShow() {
|
||||
this._isActive = true;
|
||||
this.fetchOrders(); // 如不想重复拉取可注释
|
||||
},
|
||||
onHide() {
|
||||
clearInterval(this._timer);
|
||||
this._isActive = false;
|
||||
this._clearTimer();
|
||||
},
|
||||
onUnload() {
|
||||
clearInterval(this._timer);
|
||||
},
|
||||
onShow() {
|
||||
this.fetchOrders()
|
||||
this._isActive = false;
|
||||
this._clearTimer();
|
||||
},
|
||||
|
||||
// 拉取后端接口
|
||||
onPullDownRefresh() {
|
||||
this.fetchOrders(); // stopPullDownRefresh 在 complete 里
|
||||
},
|
||||
|
||||
// ========= 工具函数 =========
|
||||
_clearTimer() {
|
||||
if (this._timer) {
|
||||
clearInterval(this._timer);
|
||||
this._timer = null;
|
||||
}
|
||||
},
|
||||
_pad2(n) {
|
||||
return String(n).padStart(2, '0');
|
||||
},
|
||||
_fmtCountDownStr(totalSec) {
|
||||
const sec = Math.max(0, totalSec | 0);
|
||||
const m = Math.floor(sec / 60);
|
||||
const s = sec % 60;
|
||||
return `${this._pad2(m)}分${this._pad2(s)}秒`;
|
||||
},
|
||||
|
||||
// ========= 拉单 =========
|
||||
fetchOrders() {
|
||||
wx.request({
|
||||
url: baseUrl + '/courseOrder/query/list', // 替换为真实接口
|
||||
url: baseUrl + '/courseOrder/query/list',
|
||||
method: 'POST',
|
||||
header: {
|
||||
Authorization: wx.getStorageSync('token')
|
||||
},
|
||||
header: { Authorization: wx.getStorageSync('token') },
|
||||
success: res => {
|
||||
console.log('课程订单列表---->',res.data.data);
|
||||
if (res.data.code === 1) {
|
||||
const now = Date.now();
|
||||
let list = res.data.data.map(item => {
|
||||
// 计算从 createTime 到 now 剩余秒数
|
||||
const createMs = new Date(item.createTime.replace(/-/g,'/')).getTime();
|
||||
let diff = Math.floor((createMs + 15*60*1000 - now) / 1000);
|
||||
const list = (res.data.data || []).map(it => {
|
||||
// 解析时间(iOS 兼容 + NaN 兜底)
|
||||
const ts = new Date(String(it.createTime).replace(/-/g, '/')).getTime();
|
||||
const createMs = Number.isFinite(ts) ? ts : now;
|
||||
|
||||
// 只有“待支付”才需要倒计时、过期置“交易取消”
|
||||
if (item.orderStatus === '待支付') {
|
||||
if (diff <= 0) {
|
||||
item.orderStatus = '交易取消';
|
||||
diff = 0;
|
||||
// 首次检测到过期就弹框
|
||||
if (!this.data.hasModalShown) {
|
||||
wx.showModal({
|
||||
title: '提示',
|
||||
content: '订单超时未支付,已取消',
|
||||
showCancel: false
|
||||
});
|
||||
this.setData({ hasModalShown: true });
|
||||
// 统一按 15 分钟有效期(若后端返回 expireTime,建议直接用)
|
||||
const ttlMs = 15 * 60 * 1000;
|
||||
let diff = Math.floor((createMs + ttlMs - now) / 1000);
|
||||
diff = Math.max(0, diff);
|
||||
|
||||
if (it.orderStatus === '待支付') {
|
||||
it.countDown = diff;
|
||||
it.countDownStr = this._fmtCountDownStr(diff);
|
||||
it._expiredNotified = false; // 每单的本地防重复标记
|
||||
|
||||
// 初始化阶段:如果已经超时(diff=0),静默转关闭,不弹窗
|
||||
if (diff === 0) {
|
||||
it.orderStatus = '交易关闭';
|
||||
it.countDownStr = '';
|
||||
}
|
||||
}
|
||||
item.countDown = diff;
|
||||
const m = Math.floor(diff / 60);
|
||||
const s = diff % 60;
|
||||
item.countDownStr = `${m}分${s < 10 ? '0'+s : s}秒`;
|
||||
} else {
|
||||
item.countDown = 0;
|
||||
item.countDownStr = '';
|
||||
it.countDown = 0;
|
||||
it.countDownStr = '';
|
||||
}
|
||||
return item;
|
||||
});
|
||||
|
||||
this.setData({ orderList: list }, () => {
|
||||
// 初始处理完后启动全局定时器
|
||||
this.startTimer();
|
||||
return it;
|
||||
});
|
||||
|
||||
// 渲染 + 启动定时器
|
||||
this.setData({ orderList: list }, () => this._startTimer());
|
||||
} else {
|
||||
notLogin(res.data.message)
|
||||
notLogin(res.data.message);
|
||||
}
|
||||
},
|
||||
fail: () => {
|
||||
wx.showToast({ title: '网络错误', icon: 'none' });
|
||||
},
|
||||
complete: () => {
|
||||
wx.stopPullDownRefresh();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 每秒更新所有待支付订单的倒计时
|
||||
startTimer() {
|
||||
// ← 新增:如果已有定时器,先清掉它
|
||||
if (this._timer) {
|
||||
clearInterval(this._timer);
|
||||
}
|
||||
// ========= 定时器刷新 =========
|
||||
_startTimer() {
|
||||
this._clearTimer();
|
||||
// 如果已经没有“待支付”的订单,就不启动定时器
|
||||
const hasPending = this.data.orderList.some(o => o.orderStatus === '待支付' && o.countDown > 0);
|
||||
if (!hasPending) return;
|
||||
|
||||
this._timer = setInterval(() => {
|
||||
// 不在激活页时不做任何 UI 相关动作(同时兜底不弹窗)
|
||||
if (!this._isActive) return;
|
||||
|
||||
let needRerender = false;
|
||||
const updated = this.data.orderList.map(item => {
|
||||
if (item.orderStatus === '待支付' && item.countDown > 0) {
|
||||
const cd = item.countDown - 1;
|
||||
item.countDown = cd;
|
||||
const m = Math.floor(cd / 60);
|
||||
const s = cd % 60;
|
||||
item.countDownStr = `${m}分${s < 10 ? '0'+s : s}秒`;
|
||||
const next = item.countDown - 1;
|
||||
item.countDown = next;
|
||||
item.countDownStr = this._fmtCountDownStr(next);
|
||||
needRerender = true;
|
||||
|
||||
if (cd <= 0) {
|
||||
item.orderStatus = '交易取消';
|
||||
if (next <= 0) {
|
||||
item.orderStatus = '交易关闭';
|
||||
item.countDownStr = '';
|
||||
if (!this.data.hasModalShown) {
|
||||
|
||||
// —— 仅在“当前页面可见”时弹一次,并且每单只弹一次;本页全局也只弹一次
|
||||
if (this._isActive && !item._expiredNotified && !this.data.hasModalShown) {
|
||||
item._expiredNotified = true;
|
||||
wx.showModal({
|
||||
title: '提示',
|
||||
content: '订单超时未支付,已取消',
|
||||
content: '订单超时未支付,已关闭',
|
||||
showCancel: false
|
||||
});
|
||||
this.setData({ hasModalShown: true });
|
||||
@ -110,17 +141,28 @@ Page({
|
||||
}
|
||||
return item;
|
||||
});
|
||||
this.setData({ orderList: updated });
|
||||
|
||||
if (needRerender) {
|
||||
this.setData({ orderList: updated }, () => {
|
||||
// 如果已经没有可继续倒计时的订单,关掉定时器
|
||||
const stillPending = this.data.orderList.some(o => o.orderStatus === '待支付' && o.countDown > 0);
|
||||
if (!stillPending) this._clearTimer();
|
||||
});
|
||||
} else {
|
||||
// 没有需要更新的也关掉
|
||||
this._clearTimer();
|
||||
}
|
||||
}, 1000);
|
||||
},
|
||||
|
||||
// ========= 支付相关 =========
|
||||
showIsPayModal(e) {
|
||||
const orderId = e.currentTarget.dataset.orderId;
|
||||
wx.showModal({
|
||||
title: '下单成功',
|
||||
content: '您确定要支付吗?',
|
||||
title: '确认支付',
|
||||
content: '是否立即支付该订单?',
|
||||
cancelText: '取消',
|
||||
confirmText: '确定',
|
||||
confirmText: '去支付',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.payOrder(orderId);
|
||||
@ -130,30 +172,25 @@ Page({
|
||||
},
|
||||
fail: () => {
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '网络错误,下单失败',
|
||||
icon: 'none'
|
||||
});
|
||||
wx.showToast({ title: '网络错误', icon: 'none' });
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
payOrder(orderId) {
|
||||
// 同样先显示遮罩
|
||||
this.setData({ isMaskVisible: true });
|
||||
wx.showLoading({ title: '支付中...' });
|
||||
wx.request({
|
||||
url: baseUrl + '/courseOrder/payment',
|
||||
method: 'POST',
|
||||
header: { Authorization: wx.getStorageSync('token') },
|
||||
data: { id: orderId},
|
||||
data: { id: orderId }, // 与后端约定:支付接口传 id;若传 orderId 则改键名
|
||||
success: res => {
|
||||
wx.hideLoading();
|
||||
if (res.data.code === 1) {
|
||||
// 支付成功,跳转详情页
|
||||
wx.redirectTo({
|
||||
url: `/pages/course/orderDetail/orderDetail?id=${orderId}`,
|
||||
success: res => {
|
||||
// 先把遮罩关掉
|
||||
complete: () => {
|
||||
this.setData({ isMaskVisible: false });
|
||||
}
|
||||
});
|
||||
@ -170,33 +207,36 @@ Page({
|
||||
});
|
||||
},
|
||||
|
||||
// 跳转订单详情
|
||||
// ========= 跳转 & 取消 =========
|
||||
gotoOrderDetail(e) {
|
||||
const orderId = e.currentTarget.dataset.id;
|
||||
wx.navigateTo({
|
||||
url: `/pages/course/orderDetail/orderDetail?id=${orderId}`,
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
// 取消订单
|
||||
cancelOrder(e) {
|
||||
// console.log(e);
|
||||
const id = e.currentTarget.dataset.id;
|
||||
wx.showModal({
|
||||
title: '取消订单',
|
||||
content: '是否要取消订单?',
|
||||
content: '是否要取消该订单?',
|
||||
success: res => {
|
||||
if (res.confirm) {
|
||||
wx.request({
|
||||
url: baseUrl + "/courseOrder/cancel",
|
||||
method: 'POST',
|
||||
data: { courseId: id },
|
||||
header: { Authorization: wx.getStorageSync('token') },
|
||||
success: () => this.fetchOrders()
|
||||
data: { id }, // 如果后端需要 { orderId: id },改这里的键名即可
|
||||
success: r => {
|
||||
if (r.data && r.data.code !== 1) {
|
||||
wx.showToast({ title: r.data.message || '取消失败', icon: 'none' });
|
||||
}
|
||||
this.fetchOrders();
|
||||
},
|
||||
fail: () => wx.showToast({ title: '网络错误', icon: 'none' })
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
@ -14,7 +14,7 @@
|
||||
<view wx:for="{{ orderList }}"
|
||||
wx:for-item="item"
|
||||
wx:for-index="index"
|
||||
wx:key="item.id"
|
||||
wx:key="id"
|
||||
class="card order-item"
|
||||
bind:tap="gotoOrderDetail"
|
||||
data-id="{{ item.id }}">
|
||||
|
||||
@ -130,7 +130,10 @@ Page({
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
|
||||
this.getBannerList()
|
||||
this.getCourseList()
|
||||
// 停止下拉刷新动画
|
||||
wx.stopPullDownRefresh();
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
@ -51,7 +51,7 @@
|
||||
/* 列表(滚动) */
|
||||
.list {
|
||||
flex: 1;
|
||||
padding: 0 20rpx 20rpx;
|
||||
padding: 0 30rpx;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
overflow: auto;
|
||||
}
|
||||
@ -61,11 +61,13 @@
|
||||
/* 宫格布局 */
|
||||
.grid {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: 20rpx;
|
||||
padding-bottom: 30rpx;
|
||||
}
|
||||
.grid-item {
|
||||
width: calc(50% - 10rpx);
|
||||
width: 335rpx;
|
||||
background: #fff;
|
||||
border-radius: 16rpx;
|
||||
overflow: hidden;
|
||||
@ -87,6 +89,7 @@
|
||||
font-size: 26rpx;
|
||||
color: #111;
|
||||
line-height: 36rpx;
|
||||
min-height: 72rpx;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
|
||||
@ -2,27 +2,165 @@ import { baseUrl, globalImgUrl } from "../../../request";
|
||||
|
||||
Page({
|
||||
data: {
|
||||
countdown: '',
|
||||
countdown: "",
|
||||
orderId: 0,
|
||||
orderObj: {}, // 订单详情对象
|
||||
_secondsRemaining: 0, // 内部倒计时秒数
|
||||
_hasShownTimeout: false, // 是否已弹过“超时未支付”弹窗
|
||||
_hasShownTimeout: false, // 是否已弹过“超时未支付”弹窗(本次页面停留期内)
|
||||
globalImgUrl,
|
||||
isMaskVisible: false
|
||||
isMaskVisible: false,
|
||||
_isActive: false // 页面是否处于可见状态
|
||||
},
|
||||
|
||||
// —— 非 data 状态,避免无谓 setData
|
||||
_timer: null,
|
||||
|
||||
onLoad(options) {
|
||||
console.log('options---->',options);
|
||||
this.setData({ orderId: options.id });
|
||||
this.setData({ orderId: options.id || 0 });
|
||||
this.getOrderDetail();
|
||||
},
|
||||
showIsPayModal() {
|
||||
const {orderId} = this.data
|
||||
|
||||
onShow() {
|
||||
this.setData({ _isActive: true });
|
||||
},
|
||||
|
||||
onHide() {
|
||||
this.setData({ _isActive: false });
|
||||
this._clearTimer();
|
||||
},
|
||||
|
||||
onUnload() {
|
||||
this.setData({ _isActive: false });
|
||||
this._clearTimer();
|
||||
},
|
||||
|
||||
onPullDownRefresh() {
|
||||
this.getOrderDetail(); // stopPullDownRefresh 放到 complete 里,更稳
|
||||
},
|
||||
|
||||
// ====== 工具函数 ======
|
||||
_clearTimer() {
|
||||
if (this._timer) {
|
||||
clearInterval(this._timer);
|
||||
this._timer = null;
|
||||
}
|
||||
},
|
||||
_pad2(n) {
|
||||
return String(n).padStart(2, "0");
|
||||
},
|
||||
_format(sec) {
|
||||
const m = Math.floor(sec / 60);
|
||||
const s = sec % 60;
|
||||
return `${this._pad2(m)}分${this._pad2(s)}秒`;
|
||||
},
|
||||
|
||||
// ====== 拉取订单详情并初始化倒计时 ======
|
||||
getOrderDetail() {
|
||||
wx.request({
|
||||
url: baseUrl + "/courseOrder/query/detail",
|
||||
method: "POST",
|
||||
data: { id: this.data.orderId },
|
||||
header: { Authorization: wx.getStorageSync("token") },
|
||||
success: (res) => {
|
||||
if (res.data.code !== 1) {
|
||||
wx.showToast({ title: res.data.message || "获取失败", icon: "none" });
|
||||
return;
|
||||
}
|
||||
|
||||
const order = res.data.data || {};
|
||||
this.setData({ orderObj: order });
|
||||
|
||||
// 只有“待支付”才需要倒计时;其它状态关掉计时器并清空文案
|
||||
if (order.orderStatus === "待支付") {
|
||||
this._initFromCreateTime(order.createTime);
|
||||
} else {
|
||||
this._clearTimer();
|
||||
this.setData({ countdown: "" });
|
||||
}
|
||||
},
|
||||
fail: () => wx.showToast({ title: "网络错误", icon: "none" }),
|
||||
complete: () => wx.stopPullDownRefresh(),
|
||||
});
|
||||
},
|
||||
|
||||
// 计算剩余秒数并启动定时器
|
||||
_initFromCreateTime(createTime) {
|
||||
const ts = new Date(String(createTime).replace(/-/g, "/")).getTime();
|
||||
const createMs = Number.isFinite(ts) ? ts : Date.now();
|
||||
const ttlMs = 15 * 60 * 1000; // 15分钟有效
|
||||
const now = Date.now();
|
||||
let diff = Math.floor((createMs + ttlMs - now) / 1000);
|
||||
diff = Math.max(0, diff);
|
||||
|
||||
// 初始化阶段:如果已过期,静默转“交易关闭”(不弹窗,避免干扰)
|
||||
if (diff === 0) {
|
||||
const o = { ...this.data.orderObj, orderStatus: "交易关闭" };
|
||||
this._clearTimer();
|
||||
this.setData({ orderObj: o, countdown: "" });
|
||||
return;
|
||||
}
|
||||
|
||||
// 未过期:初始化倒计时并启动
|
||||
this._clearTimer();
|
||||
this.setData({
|
||||
_secondsRemaining: diff,
|
||||
countdown: this._format(diff),
|
||||
_hasShownTimeout: false, // 重置本页弹窗标记
|
||||
});
|
||||
this._startTimer();
|
||||
},
|
||||
|
||||
// 每秒递减
|
||||
_startTimer() {
|
||||
this._clearTimer();
|
||||
this._timer = setInterval(() => {
|
||||
const sec = this.data._secondsRemaining - 1;
|
||||
|
||||
if (sec <= 0) {
|
||||
this._clearTimer();
|
||||
this._handleTimeout(); // 到点且在当前页,才弹窗
|
||||
return;
|
||||
}
|
||||
|
||||
this.setData({
|
||||
_secondsRemaining: sec,
|
||||
countdown: this._format(sec),
|
||||
});
|
||||
}, 1000);
|
||||
},
|
||||
|
||||
// 超时处理:仅在当前页可见时弹一次,并把状态改为“交易关闭”
|
||||
_handleTimeout() {
|
||||
const { _isActive, _hasShownTimeout } = this.data;
|
||||
|
||||
// 更新状态并隐藏倒计时
|
||||
const o = { ...this.data.orderObj, orderStatus: "交易关闭" };
|
||||
this.setData({ orderObj: o, countdown: "" });
|
||||
|
||||
// 只在当前页面 & 未弹过 时弹一次
|
||||
if (_isActive && !_hasShownTimeout) {
|
||||
wx.showModal({
|
||||
title: '下单成功',
|
||||
content: '您确定要支付吗?',
|
||||
cancelText: '取消',
|
||||
confirmText: '确定',
|
||||
title: "提示",
|
||||
content: "订单超时未支付,已关闭",
|
||||
showCancel: false,
|
||||
complete: () => {
|
||||
// 标记已弹
|
||||
this.setData({ _hasShownTimeout: true });
|
||||
},
|
||||
});
|
||||
} else {
|
||||
this.setData({ _hasShownTimeout: true });
|
||||
}
|
||||
},
|
||||
|
||||
// ====== 支付相关 ======
|
||||
showIsPayModal() {
|
||||
const { orderId } = this.data;
|
||||
wx.showModal({
|
||||
title: "确认支付",
|
||||
content: "是否立即支付该订单?",
|
||||
cancelText: "取消",
|
||||
confirmText: "去支付",
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.payOrder(orderId);
|
||||
@ -32,163 +170,70 @@ Page({
|
||||
},
|
||||
fail: () => {
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '网络错误,下单失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
wx.showToast({ title: "网络错误", icon: "none" });
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
payOrder(orderId) {
|
||||
// 同样先显示遮罩
|
||||
this.setData({ isMaskVisible: true });
|
||||
wx.showLoading({ title: '支付中...'});
|
||||
wx.showLoading({ title: "支付中..." });
|
||||
|
||||
wx.request({
|
||||
url: baseUrl + '/courseOrder/payment',
|
||||
method: 'POST',
|
||||
header: { Authorization: wx.getStorageSync('token') },
|
||||
data: { id: orderId},
|
||||
success: res => {
|
||||
url: baseUrl + "/courseOrder/payment",
|
||||
method: "POST",
|
||||
header: { Authorization: wx.getStorageSync("token") },
|
||||
data: { id: orderId }, // 若后端用 orderId,则把键名改为 orderId
|
||||
success: (res) => {
|
||||
wx.hideLoading();
|
||||
if (res.data.code === 1) {
|
||||
// 支付成功,跳转详情页
|
||||
wx.redirectTo({
|
||||
url: `/pages/course/orderDetail/orderDetail?id=${orderId}`,
|
||||
success: res => {
|
||||
// 先把遮罩关掉
|
||||
this.setData({ isMaskVisible: false });
|
||||
}
|
||||
complete: () => this.setData({ isMaskVisible: false }),
|
||||
});
|
||||
} else {
|
||||
this.setData({ isMaskVisible: false });
|
||||
wx.showToast({ title: res.data.message || '支付失败', icon: 'none' });
|
||||
wx.showToast({ title: res.data.message || "支付失败", icon: "none" });
|
||||
}
|
||||
},
|
||||
fail: () => {
|
||||
wx.hideLoading();
|
||||
this.setData({ isMaskVisible: false });
|
||||
wx.showToast({ title: '网络错误,支付失败', icon: 'none' });
|
||||
}
|
||||
});
|
||||
wx.showToast({ title: "网络错误,支付失败", icon: "none" });
|
||||
},
|
||||
onUnload() {
|
||||
clearInterval(this._timer);
|
||||
},
|
||||
|
||||
// 拉取订单详情并初始化倒计时
|
||||
getOrderDetail() {
|
||||
wx.request({
|
||||
url: baseUrl + '/courseOrder/query/detail',
|
||||
method: 'POST',
|
||||
data: { id: this.data.orderId },
|
||||
header: { Authorization: wx.getStorageSync('token') },
|
||||
success: res => {
|
||||
console.log('订单详情--->',res.data.data);
|
||||
if (res.data.code !== 1) return wx.showToast({ title: res.data.message, icon: 'none' });
|
||||
|
||||
const order = res.data.data;
|
||||
this.setData({ orderObj: order });
|
||||
|
||||
// 仅“待支付”需要倒计时
|
||||
if (order.orderStatus === '待支付') {
|
||||
this._initFromCreateTime(order.createTime);
|
||||
}
|
||||
},
|
||||
fail: () => wx.showToast({ title: '网络错误', icon: 'none' })
|
||||
});
|
||||
},
|
||||
|
||||
// 计算剩余秒数并启动定时器
|
||||
_initFromCreateTime(createTime) {
|
||||
// 将 "2025-07-13 12:38:17" → 时间戳
|
||||
const createMs = new Date(createTime.replace(/-/g, '/')).getTime();
|
||||
const now = Date.now();
|
||||
let diff = Math.floor((createMs + 15 * 60 * 1000 - now) / 1000);
|
||||
|
||||
if (diff <= 0) {
|
||||
// 已超时
|
||||
this._handleTimeout();
|
||||
} else {
|
||||
// 未超时,初始化秒数并启动倒计时
|
||||
this.setData({
|
||||
_secondsRemaining: diff,
|
||||
countdown: this._format(diff)
|
||||
});
|
||||
this._startTimer();
|
||||
}
|
||||
},
|
||||
|
||||
// 每秒递减
|
||||
_startTimer() {
|
||||
this._timer = setInterval(() => {
|
||||
let sec = this.data._secondsRemaining - 1;
|
||||
if (sec <= 0) {
|
||||
clearInterval(this._timer);
|
||||
this._handleTimeout();
|
||||
} else {
|
||||
this.setData({
|
||||
_secondsRemaining: sec,
|
||||
countdown: this._format(sec)
|
||||
});
|
||||
}
|
||||
}, 1000);
|
||||
},
|
||||
|
||||
// 超时处理:弹窗 + 改状态
|
||||
_handleTimeout() {
|
||||
if (!this.data._hasShownTimeout) {
|
||||
wx.showModal({
|
||||
title: '提示',
|
||||
content: '订单超时未支付,已取消',
|
||||
showCancel: false
|
||||
});
|
||||
this.setData({ _hasShownTimeout: true });
|
||||
}
|
||||
// 更新状态并隐藏倒计时
|
||||
const o = this.data.orderObj;
|
||||
o.orderStatus = '交易取消';
|
||||
this.setData({
|
||||
orderObj: o,
|
||||
countdown: '00分00秒'
|
||||
});
|
||||
},
|
||||
|
||||
// 秒数 → "MM分SS秒"
|
||||
_format(sec) {
|
||||
const m = Math.floor(sec / 60);
|
||||
const s = sec % 60;
|
||||
const mm = m < 10 ? '0' + m : m;
|
||||
const ss = s < 10 ? '0' + s : s;
|
||||
return `${mm}分${ss}秒`;
|
||||
},
|
||||
|
||||
// 取消订单
|
||||
// ====== 取消、退款(示例) ======
|
||||
cancelOrder() {
|
||||
wx.showModal({
|
||||
title: '取消订单',
|
||||
content: '是否要取消订单?',
|
||||
success: res => {
|
||||
title: "取消订单",
|
||||
content: "是否要取消订单?",
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
wx.request({
|
||||
url: baseUrl + "/courseOrder/cancel",
|
||||
method: 'POST',
|
||||
data: { courseId: this.data.orderId },
|
||||
header: { Authorization: wx.getStorageSync('token') },
|
||||
success: () => this.getOrderDetail()
|
||||
method: "POST",
|
||||
header: { Authorization: wx.getStorageSync("token") },
|
||||
data: { id: this.data.orderId }, // 后端如果需要 { orderId },改键名
|
||||
success: (r) => {
|
||||
if (!r.data || r.data.code !== 1) {
|
||||
wx.showToast({ title: (r.data && r.data.message) || "取消失败", icon: "none" });
|
||||
}
|
||||
this.getOrderDetail();
|
||||
},
|
||||
fail: () => wx.showToast({ title: "网络错误", icon: "none" }),
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
// 去支付(示例跳转)
|
||||
goPay() {
|
||||
// wx.navigateTo({ url: `/pages/pay/pay?orderId=${this.data.orderId}` });
|
||||
wx.showToast({ title: '支付功能稍后开放', icon: 'none' });
|
||||
wx.showToast({ title: "支付功能稍后开放", icon: "none" });
|
||||
},
|
||||
|
||||
// 退款(示例弹窗)
|
||||
refundOrder() {
|
||||
wx.showToast({ title: '退款功能稍后开放', icon: 'none' });
|
||||
}
|
||||
wx.showToast({ title: "退款功能稍后开放", icon: "none" });
|
||||
},
|
||||
});
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
@ -130,3 +130,9 @@
|
||||
/* ===== 如你项目里已有的工具类,可保留或删除 ===== */
|
||||
.ml-3 { margin-left: 6rpx; }
|
||||
.mt-17 { margin-top: 12rpx; }
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 0;
|
||||
height: 0;
|
||||
background: transparent;
|
||||
}
|
||||
@ -57,6 +57,11 @@ Page({
|
||||
else if (trueCount === 1) this.setData({widthRate: '100%'})
|
||||
},
|
||||
|
||||
onPullDownRefresh() {
|
||||
this.fetchPerformance()
|
||||
wx.stopPullDownRefresh();
|
||||
},
|
||||
|
||||
fetchPerformance() {
|
||||
wx.request({
|
||||
url: baseUrl + '/perform/mini/query/dashboard',
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
@ -6,14 +6,17 @@ Page({
|
||||
// 用于存储输入框数据
|
||||
nickName: '',
|
||||
phoneNumber: '',
|
||||
selectedSortField: '员工数量', // 默认选择"待选择"
|
||||
selectedSortOrder: '升序', // 默认选择升序
|
||||
selectedSortField: '员工数量', // 默认选择"员工数量"
|
||||
selectedSortOrder: '降序', // 默认选择升序
|
||||
sortFieldsByManager: ['员工数量', '推广人数', '下单数量', '总订单金额', '净成交金额'],
|
||||
sortFieldsBySupervisor: ['推广人数', '下单数量', '总订单金额', '净成交金额'],
|
||||
sortField: 'empCount',
|
||||
sortOrder: 'descend',
|
||||
sortOrders: ['升序', '降序'],
|
||||
items: [], // 用于存储查询结果
|
||||
role: '', // 假设初始为主管角色,可以根据实际情况动态设置
|
||||
k: 1
|
||||
k: 1,
|
||||
showRole: ''
|
||||
},
|
||||
|
||||
// 主管名称输入
|
||||
@ -32,7 +35,6 @@ Page({
|
||||
|
||||
// 选择排序字段
|
||||
onSortFieldChange(e) {
|
||||
const { role } = this.data;
|
||||
const sortFieldsMap = {
|
||||
'员工数量': 'empCount',
|
||||
'推广人数': 'promoCount',
|
||||
@ -40,8 +42,8 @@ Page({
|
||||
'总订单金额': 'totalAmount',
|
||||
'净成交金额': 'netAmount'
|
||||
};
|
||||
|
||||
const selectedField = this.data.sortFieldsByManager[e.detail.value] || this.data.sortFieldsBySupervisor[e.detail.value];
|
||||
const { showRole, sortFieldsByManager, sortFieldsBySupervisor } = this.data
|
||||
let selectedField = showRole === '主管' ? sortFieldsByManager[e.detail.value] : sortFieldsBySupervisor[e.detail.value];
|
||||
this.setData({
|
||||
selectedSortField: selectedField,
|
||||
sortField: sortFieldsMap[selectedField], // 默认是 id
|
||||
@ -61,7 +63,7 @@ Page({
|
||||
|
||||
// 搜索按钮点击
|
||||
onSearch() {
|
||||
const { role } = this.data;
|
||||
const { showRole, role } = this.data;
|
||||
// // —— 新增:校验主管名称 ——
|
||||
// const nameRegex = /^[\u4e00-\u9fa5]+$/;
|
||||
// if (!this.data.nickName) {
|
||||
@ -98,12 +100,17 @@ Page({
|
||||
mask: true // 显示遮罩层
|
||||
});
|
||||
|
||||
if (showRole === '员工') {
|
||||
this.setData({ sortField: 'promoCount' })
|
||||
}
|
||||
|
||||
const requestData = {
|
||||
nickName: this.data.nickName,
|
||||
phoneNumber: this.data.phoneNumber,
|
||||
sortField: this.data.sortField || '',
|
||||
sortOrder: this.data.sortOrder || 'ascend'
|
||||
};
|
||||
console.log('requestData====>', requestData)
|
||||
|
||||
if(role === 'manager') {
|
||||
wx.request({
|
||||
@ -129,7 +136,6 @@ Page({
|
||||
fail: () => {
|
||||
// 请求失败后,隐藏loading
|
||||
wx.hideLoading();
|
||||
console.log('111');
|
||||
wx.showToast({
|
||||
title: '请求失败',
|
||||
icon: 'none'
|
||||
@ -193,5 +199,11 @@ Page({
|
||||
}
|
||||
this.setData({ showRole });
|
||||
this.onSearch()
|
||||
}
|
||||
},
|
||||
|
||||
onPullDownRefresh() {
|
||||
this.onSearch()
|
||||
wx.stopPullDownRefresh();
|
||||
},
|
||||
|
||||
});
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
@ -77,17 +77,18 @@
|
||||
background: #ffffff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
}
|
||||
.picker-inner {
|
||||
padding: 0 20rpx;
|
||||
width: 100%;
|
||||
width: 270rpx;
|
||||
height: 84rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.picker-text { font-size: 28rpx; color: #1f1f1f;}
|
||||
.arrow { width: 28rpx; height: 28rpx; }
|
||||
.arrow { width: 28rpx; height: 28rpx; position: absolute; right: 20rpx;}
|
||||
|
||||
/* 搜索按钮 */
|
||||
.btn {
|
||||
|
||||
@ -106,6 +106,11 @@ Page({
|
||||
this.onSearchSupId();
|
||||
},
|
||||
|
||||
onPullDownRefresh() {
|
||||
this.onSearchSupId()
|
||||
wx.stopPullDownRefresh();
|
||||
},
|
||||
|
||||
// 跳转用户订单
|
||||
gotoUser(e) {
|
||||
const { id } = e.currentTarget.dataset;
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
@ -126,7 +126,7 @@
|
||||
}
|
||||
.row-key { font-size: 26rpx; color: #666666; }
|
||||
.row-val { display: flex; align-items: center; gap: 16rpx; }
|
||||
.mono { font-size: 28rpx; color: #1f1f1f; font-family: monospace; letter-spacing: 1rpx; }
|
||||
.mono { font-size: 28rpx; color: #1f1f1f; }
|
||||
.copy {
|
||||
font-size: 24rpx;
|
||||
color: #ff8a00;
|
||||
|
||||
@ -83,6 +83,11 @@ Page({
|
||||
this.onSearch()
|
||||
},
|
||||
|
||||
onPullDownRefresh() {
|
||||
this.onSearch()
|
||||
wx.stopPullDownRefresh();
|
||||
},
|
||||
|
||||
changeStaff(e) {
|
||||
|
||||
const { id } = e.currentTarget.dataset;
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
@ -163,8 +163,6 @@
|
||||
.mono {
|
||||
font-size: 28rpx;
|
||||
color: #1f1f1f;
|
||||
font-family: monospace;
|
||||
letter-spacing: 1rpx;
|
||||
}
|
||||
|
||||
.copy {
|
||||
|
||||
@ -17,6 +17,11 @@ Page({
|
||||
this.searchOrderByStaffId()
|
||||
},
|
||||
|
||||
onPullDownRefresh() {
|
||||
this.searchOrderByStaffId()
|
||||
wx.stopPullDownRefresh();
|
||||
},
|
||||
|
||||
// 输入框内容变化
|
||||
onOrderNumberInput(e) {
|
||||
this.setData({
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
@ -87,7 +87,7 @@
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.label { font-size: 26rpx; color: #666666; }
|
||||
.mono { font-size: 28rpx; color: #1f1f1f; font-family: monospace; letter-spacing: 1rpx; }
|
||||
.mono { font-size: 28rpx; color: #1f1f1f; }
|
||||
|
||||
.badge {
|
||||
height: 40rpx;
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
</view>
|
||||
<view class="self-start group mt-17">
|
||||
<text class="font_2 text_4">注意:最高抽成比例</text>
|
||||
<text class="font_2 text_5">5%</text>
|
||||
<text class="font_2 text_5">10%</text>
|
||||
</view>
|
||||
<view class="flex-col justify-start items-center self-center text-wrapper mt-17" bindtap="submit">
|
||||
<text class="font_2 text_6">确认设置</text>
|
||||
|
||||
@ -12,12 +12,40 @@ Page({
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
onLoad() {
|
||||
const role = wx.getStorageSync('role')
|
||||
if (role === 'manager') {
|
||||
this.getManagerInfo();
|
||||
} else {
|
||||
this.fetchSupervisorInfo();
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 请求后端接口,获取上级联系人信息
|
||||
*/
|
||||
|
||||
getManagerInfo() {
|
||||
const token = wx.getStorageSync('token')
|
||||
wx.request({
|
||||
url: baseUrl + '/userInfo/get/jwt',
|
||||
method: 'GET',
|
||||
header: {
|
||||
Authorization: token
|
||||
},
|
||||
success: res => {
|
||||
console.log('用户信息---->',res.data);
|
||||
if (res.data.code === 1) {
|
||||
let result = res.data.data
|
||||
this.setData({
|
||||
nickName: result.nickName,
|
||||
phoneNumber: result.phoneNumber
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
fetchSupervisorInfo() {
|
||||
const token = wx.getStorageSync('token');
|
||||
wx.request({
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
</view>
|
||||
<image
|
||||
class="self-start image"
|
||||
src="./images/logo.png"
|
||||
src="/static/logo.jpg"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
margin-left: 39.38rpx;
|
||||
}
|
||||
.page {
|
||||
padding: 43.13rpx 0 1346.25rpx;
|
||||
padding: 43.13rpx 0 0;
|
||||
background-image: linear-gradient(180deg, #ff8d1a -7.3%, #ffffff00 33.5%);
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
|
||||
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 5.4 KiB |
BIN
pages/personCenter/mine/images/order1.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
@ -22,7 +22,11 @@ Page({
|
||||
title: '查看绩效',
|
||||
id: 0,
|
||||
globalImgUrl,
|
||||
showNicknamePopup: false
|
||||
showNicknamePopup: false,
|
||||
totalIncome: 0,
|
||||
withdrawaledAmount: 0,
|
||||
withdrawalingBalance: 0,
|
||||
currentBalance: 0
|
||||
},
|
||||
// 跳转课程订单页面
|
||||
courseOrder() {
|
||||
@ -165,11 +169,15 @@ Page({
|
||||
Authorization: token
|
||||
},
|
||||
success: res => {
|
||||
console.log('用户主要信息=====>', res.data)
|
||||
if (res.data.code === 1) {
|
||||
let result = res.data.data
|
||||
console.log('====fdfs>', res)
|
||||
this.setData({
|
||||
qrcode: globalImgUrl + result.inviteQrCode
|
||||
qrcode: globalImgUrl + result.inviteQrCode,
|
||||
totalIncome: result.totalIncome,
|
||||
withdrawaledAmount: result.withdrawnAmount,
|
||||
withdrawalingBalance: result.withdrawalAmount,
|
||||
currentBalance: result.currentBalance
|
||||
})
|
||||
} else {
|
||||
notLogin(res.data.message)
|
||||
|
||||
@ -1,328 +1,146 @@
|
||||
<!-- <view class="flex-col page">
|
||||
<view class="flex-col relative section">
|
||||
<view class="flex-row justify-between items-center group">
|
||||
<view class="flex-col">
|
||||
<text class="self-start font text">{{ nickName }}</text>
|
||||
<view class="flex-row items-center self-stretch group_2 mt-9" bind:tap="gotoCall">
|
||||
<image
|
||||
class="image_3"
|
||||
src="./images/dianhua.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font_2 text_2 ml-7">{{ phoneNumber }}</text>
|
||||
</view>
|
||||
<view class="flex-row items-center self-stretch section_2 mt-9" bindtap="copyInvitationCode">
|
||||
<text class="font_3 text_3">邀请码:{{ invitationCode }}</text>
|
||||
<image
|
||||
class="shrink-0 image_4"
|
||||
src="./images/fuzhi.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex-col items-center">
|
||||
<image
|
||||
class="image_2"
|
||||
src="./images/erweima.png"
|
||||
mode="aspectFill"
|
||||
bindtap="showPromoPopup"
|
||||
/>
|
||||
<text class="font_3 text_4 mt-6">二维码邀请</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex-col group_3">
|
||||
<view class="flex-row justify-between items-center group_4">
|
||||
<view class="group_5">
|
||||
<text class="font_2 text_6">当前金额:</text>
|
||||
<text class="text_5">¥{{ currentBalance }}</text>
|
||||
</view>
|
||||
<view class="flex-row items-center section_3" bind:tap="lijitixian">
|
||||
<image
|
||||
class="image_5 image_6"
|
||||
src="./images/jiantou.png"
|
||||
/>
|
||||
<text class="font_3 text_7">立即提现</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex-row items-start equal-division section_4">
|
||||
<view class="flex-col items-center equal-division-item_8">
|
||||
<text class="font_2 text_8">提现中</text>
|
||||
<text class="font_4 mt-15">¥{{ withdrawalingBalance }}</text>
|
||||
</view>
|
||||
<view class="flex-col items-center group_6 equal-division-item">
|
||||
<text class="font_2 text_9">已提现</text>
|
||||
<text class="font_4 mt-15">¥{{ withdrawaledAmount }}</text>
|
||||
</view>
|
||||
<view class="flex-col items-center group_7 equal-division-item_8">
|
||||
<text class="font_2 text_10">累计收入</text>
|
||||
<text class="font_4 mt-15">¥{{ totalIncome }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<image
|
||||
class="image pos"
|
||||
src="./images/logo.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
</view>
|
||||
<view class="flex-row items-start equal-division_2 section_5">
|
||||
<view class="flex-col items-center equal-division-item_1 equal-division-item_2" bind:tap="mingxi">
|
||||
<image
|
||||
class="image_7"
|
||||
src="./images/zhijinxiangqing.png"
|
||||
/>
|
||||
<text class="font text_11 mt-6">资金明细</text>
|
||||
</view>
|
||||
<view class="flex-col items-center group_6 group_1" bind:tap="tixianzhanghu">
|
||||
<image
|
||||
class="image_7"
|
||||
src="./images/tixianzhanghu.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font text_12 mt-6">提现账户</text>
|
||||
</view>
|
||||
<view class="flex-col items-center group_9 group_10" bind:tap="zhijin">
|
||||
<image
|
||||
class="image_7"
|
||||
src="./images/tixianjilu.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font text_13 mt-6">提现记录</text>
|
||||
</view>
|
||||
</view> -->
|
||||
<!-- 接单相关 -->
|
||||
<!-- <view class="flex-col list"> -->
|
||||
<!-- <view
|
||||
class="flex-row equal-division equal-division_3 mt-15"
|
||||
wx:for="{{items}}"
|
||||
wx:for-item="item"
|
||||
wx:for-index="index"
|
||||
wx:key="index"
|
||||
>
|
||||
<view class="flex-col items-center equal-division-item_3" bind:tap="xiangmu">
|
||||
<image
|
||||
class="image_8"
|
||||
src="./images/wodxiangmu.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font text_14 mt-10">我的项目</text>
|
||||
</view>
|
||||
<view class="flex-col items-center group_15 equal-division-item_6" bind:tap="myteam">
|
||||
<image
|
||||
class="image_8"
|
||||
src="./images/tuanduiguanli.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font text_15 mt-10">团队管理</text>
|
||||
</view>
|
||||
<view class="flex-col items-center group_11 equal-division-item_3" bind:tap="szcy">
|
||||
<image
|
||||
class="image_8"
|
||||
src="./images/choucheng.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font text_16 mt-11">设置抽佣</text>
|
||||
</view>
|
||||
<view class="flex-col items-center group_12 equal-division-item_7" bind:tap="lxsj">
|
||||
<image
|
||||
class="image_8"
|
||||
src="./images/shangji.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font mt-11">联系上级</text>
|
||||
</view>
|
||||
</view> -->
|
||||
<!-- 课程相关 -->
|
||||
<!-- <view
|
||||
class="flex-row equal-division equal-division_3 mt-15"
|
||||
wx:for="{{items}}"
|
||||
wx:for-item="item"
|
||||
wx:for-index="index"
|
||||
wx:key="index"
|
||||
>
|
||||
<view class="flex-col items-center equal-division-item_3" bind:tap="courseOrder">
|
||||
<image
|
||||
class="image_8"
|
||||
src="./images/wodxiangmu.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font text_14 mt-10">课程订单</text>
|
||||
</view>
|
||||
<view class="flex-col items-center group_15 equal-division-item_6" bind:tap="gotoSettlementRecord">
|
||||
<image
|
||||
class="image_8"
|
||||
src="./images/tuanduiguanli.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font text_15 mt-10">结算记录</text>
|
||||
</view>
|
||||
<view class="flex-col items-center group_11 equal-division-item_3" bind:tap="szcy">
|
||||
<image
|
||||
class="image_8"
|
||||
src="./images/choucheng.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font text_16 mt-11">我的课程</text>
|
||||
</view>
|
||||
<view class="flex-col items-center group_12 equal-division-item_7" bind:tap="">
|
||||
<image
|
||||
class="image_8"
|
||||
src="./images/shangji.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font mt-11">联系上级</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex-col list_2">
|
||||
<view class="flex-row justify-between items-center self-stretch group_13" bind:tap="zhshezhi">
|
||||
<view class="flex-row items-center">
|
||||
<image
|
||||
class="shrink-0 image_9"
|
||||
src="./images/zhanghaoshezhi.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font text_17 ml-5">账号设置</text>
|
||||
</view>
|
||||
<image
|
||||
class="image_5"
|
||||
src="./images/xiajiantou.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
</view>
|
||||
<view class="self-end list-divider"></view>
|
||||
<view class="flex-row justify-between items-center self-stretch group_14">
|
||||
<view class="flex-row items-center">
|
||||
<image
|
||||
class="shrink-0 image_9"
|
||||
src="./images/lianxikefu.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<text class="font text_18 ml-5">联系客服</text>
|
||||
</view>
|
||||
<image
|
||||
class="image_5"
|
||||
src="./images/xiajiantou.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
<wxs src="../../../utils/addmul.wxs" module="filters" />
|
||||
|
||||
<view class="flex-col page">
|
||||
<!-- 顶部:头像 / 昵称 / 电话 / 邀请码 / 二维码 -->
|
||||
<view class="flex-row justify-between section">
|
||||
<view class="flex-row items-center self-center">
|
||||
<button open-type="chooseAvatar" bind:chooseavatar="updateAvatar">
|
||||
<image
|
||||
class="image"
|
||||
src="{{globalImgUrl + userAvatar}}"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<button class="avatar-btn" open-type="chooseAvatar" bind:chooseavatar="updateAvatar">
|
||||
<image class="image" src="{{globalImgUrl + userAvatar}}" mode="aspectFill" />
|
||||
</button>
|
||||
<view class="flex-col ml-6">
|
||||
<view class="flex-row items-center justify-between" style="width: 250rpx;">
|
||||
<text class="self-start font text nickname-wrap">{{ nickName }}</text>
|
||||
<text class="self-start font text_2 ml-16" bindtap="openNicknamePopup">修改</text>
|
||||
</view>
|
||||
|
||||
<view class="flex-row items-center self-stretch group_2 mt-9" bindtap="gotoCall">
|
||||
<image
|
||||
class="image_3"
|
||||
src="./images/dianhua.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<image class="image_3" src="./images/dianhua.png" mode="aspectFill" />
|
||||
<text class="font_2 text_2 ml-7">{{ phoneNumber }}</text>
|
||||
</view>
|
||||
<view class="flex-row items-center self-stretch section_2 mt-9" bind:tap="copyInvitationCode">
|
||||
<text class="font_2 text_3">邀请码:{{ invitationCode }}</text>
|
||||
<image
|
||||
class="shrink-0 image_4"
|
||||
src="./images/fuzhi.png"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
|
||||
<view class="flex-row items-center invite-pill section_2 mt-9" bind:tap="copyInvitationCode">
|
||||
<text class="font_2 text_3 invite-text">邀请码:{{ invitationCode }}</text>
|
||||
<image class="shrink-0 image_4" src="./images/fuzhi.png" mode="aspectFill" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="flex-col items-start self-start group">
|
||||
<image
|
||||
class="image_2"
|
||||
src="./images/erweima.png"
|
||||
mode="aspectFill"
|
||||
bind:tap="showPromoPopup"
|
||||
/>
|
||||
<image class="image_2" src="./images/erweima.png" mode="aspectFill" bind:tap="showPromoPopup" />
|
||||
<text class="font_2 text_4 mt-6">二维码邀请</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex-col mt-22" >
|
||||
<view class="flex-row items-start equal-division section_3" wx:if="{{ userRole != 'user' }}">
|
||||
|
||||
<!-- ===== 查看绩效 / 排名(已上移到金额卡片前) ===== -->
|
||||
<view class="flex-row items-start equal-division section_3 mt-22" wx:if="{{ userRole != 'user' }}">
|
||||
<view class="flex-col items-center equal-division-item_1 group_3" bindtap="checkPerformance">
|
||||
<image
|
||||
class="image_5"
|
||||
src="./images/jixiao.png"
|
||||
/>
|
||||
<image class="image_5" src="./images/jixiao.png" />
|
||||
<text class="font text_5 mt-6">{{title}}</text>
|
||||
</view>
|
||||
<view class="flex-col items-center equal-division-item_2 equal-division-item" bindtap="gotoSupervisorRank" data-userRole="{{ 'manager' }}">
|
||||
<image
|
||||
class="image_5"
|
||||
src="./images/zgpm.png"
|
||||
/>
|
||||
<image class="image_5" src="./images/zgpm.png" />
|
||||
<text class="font text_6 mt-6">主管排名</text>
|
||||
</view>
|
||||
<view class="flex-col items-center equal-division-item_3 group_5" bindtap="gotoStaffRank" data-userRole="{{ 'supervisor' }}">
|
||||
<image
|
||||
class="image_5"
|
||||
src="./images/ygpm.png"
|
||||
/>
|
||||
<image class="image_5" src="./images/ygpm.png" />
|
||||
<text class="font mt-6">员工排名</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- ===== 当前金额卡片(已美化) ===== -->
|
||||
<view class="wallet-card mt-22">
|
||||
<view class="wallet-head">
|
||||
<view class="wallet-head-left">
|
||||
<text class="wallet-head-label">当前金额:</text>
|
||||
<text class="wallet-head-amount">¥{{ filters.toFix2(currentBalance) }}</text>
|
||||
</view>
|
||||
<view class="wallet-head-right" bind:tap="lijitixian">
|
||||
<text class="wallet-withdraw-text">立即提现</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="wallet-stats">
|
||||
<view class="wallet-stat">
|
||||
<text class="wallet-stat-label">提现中</text>
|
||||
<text class="wallet-stat-value">¥{{ filters.toFix2(withdrawalingBalance) }}</text>
|
||||
</view>
|
||||
<view class="wallet-stat">
|
||||
<text class="wallet-stat-label">已提现</text>
|
||||
<text class="wallet-stat-value">¥{{ filters.toFix2(withdrawaledAmount) }}</text>
|
||||
</view>
|
||||
<view class="wallet-stat">
|
||||
<text class="wallet-stat-label">累计收入</text>
|
||||
<text class="wallet-stat-value">¥{{ filters.toFix2(totalIncome) }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- ===== 三入口快捷区 ===== -->
|
||||
<view class="shortcut-row">
|
||||
<view class="shortcut-item" bind:tap="mingxi">
|
||||
<image class="shortcut-icon" src="./images/zhijinxiangqing.png" />
|
||||
<text class="shortcut-text">资金明细</text>
|
||||
</view>
|
||||
<view class="shortcut-item" bind:tap="tixianzhanghu">
|
||||
<image class="shortcut-icon" src="./images/tixianzhanghu.png" />
|
||||
<text class="shortcut-text">提现账户</text>
|
||||
</view>
|
||||
<view class="shortcut-item" bind:tap="zhijin">
|
||||
<image class="shortcut-icon" src="./images/tixianjilu.png" />
|
||||
<text class="shortcut-text">提现记录</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- ===== 接单四宫格 ===== -->
|
||||
<view class="grid-row">
|
||||
<view class="grid-item" bind:tap="xiangmu">
|
||||
<image class="grid-icon" src="./images/wodxiangmu.png" />
|
||||
<text class="grid-text">我的项目</text>
|
||||
</view>
|
||||
<view class="grid-item" bind:tap="myteam">
|
||||
<image class="grid-icon" src="./images/tuanduiguanli.png" />
|
||||
<text class="grid-text">团队管理</text>
|
||||
</view>
|
||||
<view class="grid-item" bind:tap="szcy">
|
||||
<image class="grid-icon" src="./images/choucheng.png" />
|
||||
<text class="grid-text">设置抽佣</text>
|
||||
</view>
|
||||
<view class="grid-item" bind:tap="lxsj">
|
||||
<image class="grid-icon" src="./images/shangji.png" />
|
||||
<text class="grid-text">联系上级</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- ===== 你的原有列表区(订单 / 仪表盘 / 账号设置) ===== -->
|
||||
<view class="flex-col list">
|
||||
<view class="flex-row justify-between items-center section_4" wx:if="{{isShowOrder}}" bindtap="courseOrder">
|
||||
<view class="flex-row items-center">
|
||||
<image
|
||||
class="shrink-0 image_6"
|
||||
src="./images/order.png"
|
||||
/>
|
||||
<image class="shrink-0 image_6" src="./images/order.png" />
|
||||
<text class="font ml-8">我的订单</text>
|
||||
</view>
|
||||
<image
|
||||
class="image_7"
|
||||
src="./images/xiajiantou.png"
|
||||
/>
|
||||
<image class="image_7" src="./images/xiajiantou.png" />
|
||||
</view>
|
||||
|
||||
<view class="flex-row justify-between items-center section_4 mt-11" bindtap="gotoDashboard" wx:if="{{ userRole !== 'user' }}">
|
||||
<view class="flex-row items-center">
|
||||
<image
|
||||
class="shrink-0 image_6"
|
||||
src="./images/dash.png"
|
||||
/>
|
||||
<image class="shrink-0 image_6" src="./images/dash.png" />
|
||||
<text class="font text_7 ml-8">仪表盘</text>
|
||||
</view>
|
||||
<image
|
||||
class="image_7"
|
||||
src="./images/xiajiantou.png"
|
||||
/>
|
||||
<image class="image_7" src="./images/xiajiantou.png" />
|
||||
</view>
|
||||
|
||||
<view class="flex-row justify-between items-center section_4 mt-11" bindtap="zhshezhi">
|
||||
<view class="flex-row items-center">
|
||||
<image
|
||||
class="shrink-0 image_6"
|
||||
src="./images/setting.png"
|
||||
/>
|
||||
<image class="shrink-0 image_6" src="./images/setting.png" />
|
||||
<text class="font text_8 ml-8">账号设置</text>
|
||||
</view>
|
||||
<image
|
||||
class="image_7"
|
||||
src="./images/xiajiantou.png"
|
||||
/>
|
||||
</view>
|
||||
<image class="image_7" src="./images/xiajiantou.png" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 调用弹窗组件 -->
|
||||
<!-- 弹窗组件 -->
|
||||
<InvitationCodePop show="{{showPopup}}" bind:close="closePopup" qrcode="{{qrcode}}"/>
|
||||
|
||||
<EditNicknamePopup
|
||||
show="{{showNicknamePopup}}"
|
||||
nickname="{{nickName}}"
|
||||
|
||||
@ -1,168 +1,164 @@
|
||||
.ml-7 {
|
||||
margin-left: 13.13rpx;
|
||||
}
|
||||
.mt-9 {
|
||||
margin-top: 16.88rpx;
|
||||
}
|
||||
.mt-11 {
|
||||
margin-top: 20.63rpx;
|
||||
}
|
||||
.ml-5 {
|
||||
margin-left: 9.38rpx;
|
||||
}
|
||||
/* ===== 工具类 ===== */
|
||||
.ml-7 { margin-left: 13.13rpx; }
|
||||
.mt-9 { margin-top: 16.88rpx; }
|
||||
.mt-11 { margin-top: 20.63rpx; }
|
||||
.mt-22{ margin-top:22rpx; }
|
||||
.ml-5 { margin-left: 9.38rpx; }
|
||||
.ml-6{ margin-left:12rpx; }
|
||||
.ml-8{ margin-left:16rpx; }
|
||||
.ml-16{ margin-left:32rpx; }
|
||||
.mt-10{ margin-top:10rpx; }
|
||||
.mt-15{ margin-top:15rpx; }
|
||||
|
||||
/* 页面容器 */
|
||||
page { height: 100vh; }
|
||||
.page {
|
||||
padding: 65.63rpx 28.13rpx 0;
|
||||
background-image: linear-gradient(180deg, #ff8d1a -7.3%, #ffffff00 92.1%);
|
||||
padding: 35.63rpx 28.13rpx 0;
|
||||
background-image: linear-gradient(180deg, #ff8d1a -7.3%, #ffffff00 120.1%);
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
height: 100%;
|
||||
padding-top: calc(35.63rpx + constant(safe-area-inset-top));
|
||||
padding-top: calc(35.63rpx + env(safe-area-inset-top));
|
||||
}
|
||||
.section {
|
||||
padding: 15rpx 13.13rpx;
|
||||
background-color: #ffffff;
|
||||
border-radius: 8.33rpx;
|
||||
|
||||
/* 顶部卡片 */
|
||||
.section { padding: 15rpx 13.13rpx; background-color: #ffffff; border-radius: 8.33rpx; }
|
||||
|
||||
/* 头像与昵称 */
|
||||
.image { margin: 20rpx; width: 141.25rpx; height: 141.25rpx; border-radius: 50%; }
|
||||
.avatar-btn{
|
||||
min-width:0!important; width:auto!important; background:transparent!important;
|
||||
border:none!important; padding:0!important; margin:0!important;
|
||||
}
|
||||
.image {
|
||||
margin: 20rpx;
|
||||
width: 141.25rpx;
|
||||
height: 141.25rpx;
|
||||
border-radius: 30rpx;
|
||||
}
|
||||
button {
|
||||
/* 去掉默认最小宽度 */
|
||||
min-width: 0 !important;
|
||||
/* 确保宽度随内容自适应 */
|
||||
width: auto !important;
|
||||
/* 下面是其他重置,保证“隐形” */
|
||||
background: transparent !important;
|
||||
border: none !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
.font {
|
||||
font-size: 26.25rpx;
|
||||
font-family: SourceHanSansCN;
|
||||
line-height: 24.34rpx;
|
||||
color: #000000;
|
||||
}
|
||||
.text {
|
||||
line-height: 24.21rpx;
|
||||
}
|
||||
.group_2 {
|
||||
padding: 0 7.26rpx;
|
||||
}
|
||||
.image_3 {
|
||||
width: 22.5rpx;
|
||||
height: 22.5rpx;
|
||||
}
|
||||
.font_2 {
|
||||
font-size: 22.5rpx;
|
||||
font-family: SourceHanSansCN;
|
||||
line-height: 20.68rpx;
|
||||
color: #ff8d1a;
|
||||
}
|
||||
.text_2 {
|
||||
color: #808080;
|
||||
line-height: 1.4;
|
||||
.font { font-size: 26.25rpx; font-family: SourceHanSansCN; line-height: 24.34rpx; color: #000000; }
|
||||
.text { line-height: 24.21rpx; }
|
||||
.nickname-wrap{
|
||||
display:block; max-width: 250rpx; white-space: normal; word-break: break-all; line-height:1.4;
|
||||
display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
|
||||
}
|
||||
|
||||
/* 电话与邀请码行 */
|
||||
.group_2 { padding: 0 7.26rpx; }
|
||||
.image_3 { width: 22.5rpx; height: 22.5rpx; }
|
||||
.font_2 { font-size: 22.5rpx; font-family: SourceHanSansCN; line-height: 20.68rpx; color: #ff8d1a; }
|
||||
.text_2 { color: #808080; line-height: 1.4; }
|
||||
.section_2{
|
||||
width: 230rpx;
|
||||
display:inline-flex; align-items:center; max-width:100%;
|
||||
padding: 7.5rpx 13.13rpx 5.63rpx 14.03rpx; background-color: #fff6de; border-radius: 31.26rpx;
|
||||
}
|
||||
.image_4 { width: 24.38rpx; height: 24.38rpx; }
|
||||
.text_3 { margin-right: 10.6rpx; white-space:nowrap; }
|
||||
|
||||
.group { margin-top: 33.75rpx; width: 133.72rpx; }
|
||||
.image_2 { margin-left: 17.48rpx; width: 76.88rpx; height: 76.88rpx; }
|
||||
.text_4 { line-height: 20.72rpx; }
|
||||
|
||||
/* 查看绩效 / 排名(等分宫格) */
|
||||
.equal-division { display:flex; gap: 12rpx; }
|
||||
.section_3 { padding: 6.88rpx 0 13.59rpx; background-color: #ffffff; border-radius: 18.75rpx; }
|
||||
.equal-division-item_1 { margin-left: 8.06rpx; }
|
||||
.group_3 { padding: 11.76rpx 0 10.01rpx; width: 224.59rpx; }
|
||||
.image_5 { width: 63.99rpx; height: 63.99rpx; }
|
||||
.text_5 { line-height: 24.26rpx; }
|
||||
.equal-division-item_2 { position: static; transform:none; }
|
||||
.equal-division-item { padding: 11.76rpx 0 10.09rpx; width: 224.59rpx; }
|
||||
.text_6 { line-height: 24.28rpx; }
|
||||
.equal-division-item_3 { position: static; transform:none; }
|
||||
.group_5 { padding: 11.76rpx 0 9.99rpx; width: 224.59rpx; }
|
||||
|
||||
/* 列表卡片(你的原有区) */
|
||||
.list { padding-top: 19.38rpx; }
|
||||
.section_4 { padding: 31.88rpx 31.88rpx 30rpx 33.75rpx; background-color: #ffffff; border-radius: 9.47rpx; min-height:88rpx; }
|
||||
.image_6 { border-radius: 9.38rpx; width: 41.25rpx; height: 41.25rpx; }
|
||||
.image_7 { width: 30rpx; height: 30rpx; }
|
||||
.text_7 { line-height: 24.47rpx; }
|
||||
.text_8 { line-height: 23.81rpx; }
|
||||
|
||||
/* ===== 当前金额卡片(美化后) ===== */
|
||||
.wallet-card {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 28rpx 24rpx;
|
||||
box-shadow: 0 6rpx 20rpx rgba(0, 0, 0, 0.06);
|
||||
}
|
||||
|
||||
/* 金额行 */
|
||||
.wallet-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.wallet-head-left { display: flex; align-items: baseline; }
|
||||
.wallet-head-label { font-size: 26rpx; color: #666; }
|
||||
.wallet-head-amount { margin-left: 8rpx; font-size: 38rpx; color: #ff8d1a; font-weight: 700; }
|
||||
|
||||
/* 立即提现按钮 */
|
||||
.wallet-head-right {
|
||||
background: linear-gradient(135deg, #ffae3d, #ff8d1a);
|
||||
border-radius: 999rpx;
|
||||
padding: 12rpx 28rpx;
|
||||
box-shadow: 0 4rpx 12rpx rgba(255, 141, 26, 0.3);
|
||||
display: flex; /* 水平+垂直居中 */
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.wallet-withdraw-text { font-size: 26rpx; color: #fff; font-weight: 600; }
|
||||
|
||||
/* 三统计(轻量分隔线风格) */
|
||||
.wallet-stats {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 12rpx;
|
||||
border-top: 1rpx solid #f2f2f2;
|
||||
padding-top: 20rpx;
|
||||
}
|
||||
.wallet-stat {
|
||||
flex: 1 0 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.wallet-stat:not(:last-child) { border-right: 1rpx solid #f2f2f2; }
|
||||
.wallet-stat-label { font-size: 24rpx; color: #888; }
|
||||
.wallet-stat-value { margin-top: 6rpx; font-size: 30rpx; color: #333; font-weight: 600; }
|
||||
|
||||
/* ===== 三入口快捷区 ===== */
|
||||
.shortcut-row{
|
||||
margin-top: 18rpx; background:#fff; border-radius: 16rpx; padding: 18rpx 10rpx;
|
||||
display:flex; justify-content:space-between;
|
||||
}
|
||||
.shortcut-item{ flex:1 0 0; display:flex; flex-direction:column; align-items:center; }
|
||||
.shortcut-icon{ width: 72rpx; height: 72rpx; }
|
||||
.shortcut-text{ margin-top: 10rpx; font-size: 24rpx; color: #333; }
|
||||
|
||||
/* ===== 接单四宫格 ===== */
|
||||
.grid-row{
|
||||
margin-top: 18rpx; background:#fff; border-radius: 16rpx; padding: 18rpx 8rpx 6rpx;
|
||||
display:flex; flex-wrap:wrap; justify-content:space-between;
|
||||
}
|
||||
.grid-item{ width: 25%; display:flex; flex-direction:column; align-items:center; margin-bottom: 18rpx; }
|
||||
.grid-icon{ width: 64rpx; height: 64rpx; border-radius: 12rpx; }
|
||||
.grid-text{ margin-top: 8rpx; font-size: 24rpx; color:#333; }
|
||||
|
||||
/* 自适应宽的胶囊 */
|
||||
.invite-pill{
|
||||
display: inline-flex; /* 关键:让容器只包裹内容 */
|
||||
align-items: center;
|
||||
max-width: 100%; /* 不超过父容器 */
|
||||
padding: 7.5rpx 13.13rpx 5.63rpx 14.03rpx;
|
||||
background-color: #fff6de;
|
||||
border-radius: 31.26rpx;
|
||||
/* 可选,让它靠左不被两端对齐挤开 */
|
||||
align-self: flex-start;
|
||||
}
|
||||
.image_4 {
|
||||
width: 24.38rpx;
|
||||
height: 24.38rpx;
|
||||
}
|
||||
.text_3 {
|
||||
margin-right: 21.6rpx;
|
||||
}
|
||||
.group {
|
||||
margin-top: 33.75rpx;
|
||||
width: 133.72rpx;
|
||||
}
|
||||
.image_2 {
|
||||
margin-left: 17.48rpx;
|
||||
width: 76.88rpx;
|
||||
height: 76.88rpx;
|
||||
}
|
||||
.text_4 {
|
||||
line-height: 20.72rpx;
|
||||
}
|
||||
.equal-division {
|
||||
position: relative;
|
||||
}
|
||||
.section_3 {
|
||||
padding: 6.88rpx 0 13.59rpx;
|
||||
background-color: #ffffff;
|
||||
border-radius: 18.75rpx;
|
||||
}
|
||||
.equal-division-item_1 {
|
||||
margin-left: 8.06rpx;
|
||||
}
|
||||
.group_3 {
|
||||
padding: 11.76rpx 0 10.01rpx;
|
||||
width: 224.59rpx;
|
||||
}
|
||||
.image_5 {
|
||||
width: 63.99rpx;
|
||||
height: 63.99rpx;
|
||||
}
|
||||
.text_5 {
|
||||
line-height: 24.26rpx;
|
||||
}
|
||||
.equal-division-item_2 {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
.equal-division-item {
|
||||
padding: 11.76rpx 0 10.09rpx;
|
||||
width: 224.59rpx;
|
||||
}
|
||||
.text_6 {
|
||||
line-height: 24.28rpx;
|
||||
}
|
||||
.equal-division-item_3 {
|
||||
position: absolute;
|
||||
right: 10.03rpx;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
.group_5 {
|
||||
padding: 11.76rpx 0 9.99rpx;
|
||||
width: 224.59rpx;
|
||||
}
|
||||
.list {
|
||||
padding-top: 19.38rpx;
|
||||
}
|
||||
.section_4 {
|
||||
padding: 31.88rpx 31.88rpx 30rpx 33.75rpx;
|
||||
background-color: #ffffff;
|
||||
border-radius: 9.47rpx;
|
||||
}
|
||||
.image_6 {
|
||||
border-radius: 9.38rpx;
|
||||
width: 41.25rpx;
|
||||
height: 41.25rpx;
|
||||
}
|
||||
.image_7 {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
.text_7 {
|
||||
line-height: 24.47rpx;
|
||||
}
|
||||
.text_8 {
|
||||
line-height: 23.81rpx;
|
||||
}
|
||||
.nickname-wrap {
|
||||
display: block; /* 让它单独占一行 */
|
||||
max-width: 250rpx; /* 不超过容器宽度 */
|
||||
white-space: normal; /* 允许正常换行 */
|
||||
word-break: break-all; /* 长字符串也能断行 */
|
||||
line-height: 1.4;
|
||||
|
||||
/* 文本超长时省略,不把胶囊撑爆 */
|
||||
.invite-text{
|
||||
max-width: 520rpx; /* 按你页面宽度调,或用 60% 等比例 */
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
@ -14,7 +14,7 @@
|
||||
margin-top: 24.38rpx;
|
||||
}
|
||||
.page {
|
||||
padding: 39.38rpx 24.38rpx 510rpx;
|
||||
padding: 39.38rpx 24.38rpx 70rpx;
|
||||
background-image: linear-gradient(180deg, #ff8d1a -7.3%, #f5f5f5 39.3%);
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
|
||||
@ -51,7 +51,7 @@
|
||||
</view>
|
||||
<view class="flex-col mt-13">
|
||||
<view
|
||||
class="flex-row justify-center items-center relative list-item_1 mt-8"
|
||||
class="flex-row justify-start items-center relative list-item_1 mt-8"
|
||||
wx:for="{{notificationList}}"
|
||||
wx:key="id"
|
||||
bindtap="goToNotificationDetail"
|
||||
@ -60,7 +60,7 @@
|
||||
<view class="flex-col justify-start items-center text-wrapper pos">
|
||||
<text class="font_3 text_9">最新</text>
|
||||
</view>
|
||||
<text class="font_6 text_10">{{item.notificationTitle}}</text>
|
||||
<text class="font_6 text_10 ml-50">{{item.notificationTitle}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -169,7 +169,6 @@
|
||||
.text_10 {
|
||||
font-size: 26.25rpx;
|
||||
line-height: 24.49rpx;
|
||||
margin-left: -30%;
|
||||
}
|
||||
.section_4 {
|
||||
margin-top: 41.25rpx;
|
||||
@ -435,3 +434,4 @@
|
||||
.line-active {
|
||||
background-color: #ff8d1a !important;
|
||||
}
|
||||
|
||||
|
||||
@ -8,10 +8,7 @@ Page({
|
||||
data: {
|
||||
// 四张轮播图(已统一为同一 URL)
|
||||
banners: [
|
||||
'./images/banner.png',
|
||||
'./images/banner.png',
|
||||
'./images/banner.png',
|
||||
'./images/banner.png'
|
||||
'/static/logo.jpg'
|
||||
],
|
||||
// 后端返回的项目列表
|
||||
items: [],
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
<!-- 项目列表 -->
|
||||
<view class="mt-20 flex-col list">
|
||||
<view
|
||||
<view bindtap="gotoPromotion" data-id="{{item.id}}"
|
||||
class="flex-row justify-between items-center relative list-item mt-17"
|
||||
wx:for="{{items}}"
|
||||
wx:for-item="item"
|
||||
@ -51,8 +51,6 @@
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
bindtap="gotoPromotion"
|
||||
data-id="{{item.id}}"
|
||||
class="flex-col justify-start items-center text-wrapper_2">
|
||||
<text class="font_3 text_2">参与推广</text>
|
||||
</view>
|
||||
|
||||
@ -4,6 +4,7 @@ export const dev = 'http://160.202.242.36:9091';
|
||||
export const test = 'http://160.202.242.36:9092';
|
||||
export const localTest = 'http://localhost:9092';
|
||||
export const ssl = 'https://www.chenxinzhi.top'
|
||||
export const baseUrl = ssl;
|
||||
export const graduation = 'http://160.202.242.36:9099'
|
||||
export const baseUrl = graduation;
|
||||
|
||||
export const globalImgUrl = baseUrl + '/file/download/'
|
||||
BIN
static/kc2.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |